Docs / Base de Conhecimento / Memória de agentes e repositórios de modelo de mundo

Base de Conhecimento

Conteúdo

Memória de agentes e repositórios de modelo de mundo

Parte: Engenharia · Capítulo: Memória de agentes e repositórios de modelo de mundo · Edição: 2026-10-06
Palavras-chave: grafo de conhecimento temporal, aresta bi-temporal, episódio, resolução de entidades, MinHash/LSH, simulação de enxame, grafo de agentes, agente de uso de computador, MCP, qualidade de identidade, recuperação híbrida
Glossário: bi-temporal edge, episode (agent memory), entity resolution, identity quality, MinHash / LSH, reciprocal rank fusion, swarm simulation, graph of agents, computer-use agent — veja o Glossário

Em resumo

  • Cinco repositórios abertos, lidos em um commit fixado em 2026-10-06: Graphiti (memória em grafo de conhecimento temporal), MiroFish (simulação social multiagente para “prever”), screenpipe (captura local de tela e áudio como memória), Cua (agentes de uso de computador em VMs e containers), Strix (um grafo de agentes em um sandbox Docker; lido apenas no nível de arquitetura).
  • Somente o Graphiti tem um método real de grafo de conceitos: entidades e fatos tipados, episódios como proveniência, resolução de entidades determinística e depois por LLM, e arestas bi-temporais que são invalidadas, nunca apagadas.
  • Nenhum dos cinco faz etiquetagem de classes gramaticais, análise de dependências, RDF/OWL ou implicação. O NLP deles é extração por LLM mais embeddings mais BM25. Nesta mesa, Stanza + Universal Dependencies (o relógio certificado em Governança de conceitos) já é mais linguístico do que qualquer um deles.
  • Nenhum tem um mapa argumentativo ou uma estrutura proposicional. A “previsão” do MiroFish é um relatório narrativo escrito por um agente que usa ferramentas sobre um feed social simulado; nada é pontuado ou calibrado.
  • O que se transfere para o Situation Monitor (SM) e o CandleScope (CS): campos bi-temporais e ids de episódio em cada aresta, um mapa de identidade em três estados (único / ambíguo / não encontrado), assinaturas tipadas de arestas e ferramentas de agente delimitadas por permissão.

Referências online (verificadas)

Verificado em 2026-10-06. Cada URL abaixo devolveu HTTP 200; os títulos são os títulos das páginas.

Ficha da Base de Conhecimento — como cinco repositórios de agentes de 2026 representam um mundo (entidades, fatos, tempo, identidade) e executam agentes sobre ele, lidos à luz da tese IEML no índice de Engenharia e dos portões em Governança de conceitos.

Método: clone raso, git rev-parse HEAD e, em seguida, leituras pontuais dos arquivos citados abaixo. Os caminhos são relativos à raiz de cada repositório. Nada foi executado. Quando uma afirmação vem de um README, e não do código, o texto o diz.


0. Fontes fixadas

Graphiti

Commit (HEAD, 2026-10-06)
aa5bb2706929fce502d99d8c7c4ddbb77bff4995
Licença
Apache-2.0
Papel em uma linha
Grafo de conhecimento temporal (“grafo de contexto”) para memória de agentes

MiroFish

Commit (HEAD, 2026-10-06)
7657031ac01184afe2cb220f5ee3545573b5e843
Licença
AGPL-3.0
Papel em uma linha
Texto-semente → ontologia → grafo Zep → simulação de agentes OASIS → agente de relatório

screenpipe

Commit (HEAD, 2026-10-06)
a8a2c3748713b09a4462985b2e9861465f478d87
Licença
Screenpipe Commercial License (código disponível; uso pessoal / não comercial gratuito; versões anteriores MIT)
Papel em uma linha
Captura orientada a eventos de tela + áudio em SQLite local, exposta a agentes

Cua

Commit (HEAD, 2026-10-06)
12365b36d41417cae34eb0f90b49e8eaf023ac51
Licença
MIT por padrão; Cua Spaces e alguns crates FSL-1.1-MIT; extensão opcional de percepção AGPL-3.0 (OmniParser) — veja LICENSING.md
Papel em uma linha
Driver de uso de computador, sandboxes, loops de agente, benchmarks

Strix

Commit (HEAD, 2026-10-06)
f1386cad37964197a483ff43c25161f9d933f050
Licença
Apache-2.0
Papel em uma linha
Grafo de agentes LLM com um sandbox Docker e um registro MCP

A licença importa para o reúso. O SM é um serviço de rede: copiar código do MiroFish (AGPL-3.0) ou a extensão de percepção do Cua (AGPL-3.0) para dentro dele traz obrigações de oferta do código-fonte. O código do screenpipe não está sob uma licença de código aberto. Graphiti, Strix e as partes MIT do Cua podem ser adaptados com atribuição. Aproprie-se dos métodos, não do código, a menos que a licença seja Apache ou MIT.


1. Graphiti — memória em grafo de conhecimento temporal

Em resumo

  • Unidade de input: um episódio (message, json, text ou fact_triple) com um reference_time.
  • Output: EntityNodes e EntityEdges (fatos) em um grafo de propriedades (Neo4j, FalkorDB, Kuzu ou Amazon Neptune), cada fato ligado de volta aos episódios que o produziram.
  • Tempo: quatro carimbos de tempo por fato. Contradições invalidam a aresta antiga; nada é apagado.
  • Identidade: candidatos por busca de embeddings, depois nome exato, depois correspondência aproximada MinHash/LSH atrás de um portão de entropia e, por fim, um juiz LLM para o que restar.

Arquitetura

Pipeline de ingestão e recuperação do Graphitiadd_episode(name, body, source, reference_time, entity_types, edge_types, edge_type_map) → EpisodicNode → ramificações: extract_nodes → resolve_extracted_nodes; extract_edges; atributos + resumos sobre entidades; opcional: comunidades · sagas → GraphDriver → search(): BM25 + cosseno + BFS → reranqueamento → Servidor MCP.add_episode(name, body, source, reference_time, entity_types, edge_types,edge_type_map)EpisodicNodeconteúdo bruto, valid_at = reference_timeextract_nodes → resolve_extracted_nodesLLM, ou GLiNER2 localmente para NERcandidatos: busca cosseno em name_embedding1. nome normalizado exato · 2. MinHash/LSH Jaccard ≥ 0.9 (com portão de entropia) · 3. prompt LLMde desduplicação para não resolvidos / ambíguosextract_edgesLLM; tipos de aresta limitados pela assinatura (tipo origem, tipo destino)→ resolve_extracted_edge: duplicata? contradito? carimbos de tempo?→ resolve_edge_contradictions → old.invalid_at, old.expired_atatributos + resumos sobre entidadesLLM, modelo pequenoopcional: comunidades · sagaspropagação de rótulos · cadeias de episódiosGraphDriverNeo4j | FalkorDB | Kuzu | Neptune (Cypher + fulltext + vetor)search(): BM25 + cosseno + BFS → reranqueamentoRRF | MMR | distância de nós | menções de episódio | cross-encoderServidor MCPadd_memory, search_nodes, search_memory_facts, get_episodes, add_triplet, …
Pipeline de ingestão e recuperação do Graphitiadd_episode(name, body, source, reference_time, entity_types, edge_types, edge_type_map) → EpisodicNode → ramificações: extract_nodes → resolve_extracted_nodes; extract_edges; atributos + resumos sobre entidades; opcional: comunidades · sagas → GraphDriver → search(): BM25 + cosseno + BFS → reranqueamento → Servidor MCP.add_episode(name, body, source,reference_time, entity_types, edge_types,edge_type_map)EpisodicNodeconteúdo bruto, valid_at = reference_timeextract_nodes → resolve_extracted_nodesLLM, ou GLiNER2 localmente para NERcandidatos: busca cosseno emname_embedding1. nome normalizado exato · 2. MinHash/LSHJaccard ≥ 0.9 (com portão de entropia) · 3.prompt LLM de desduplicação para nãoresolvidos / ambíguosextract_edgesLLM; tipos de aresta limitados pela assinatura(tipo origem, tipo destino)→ resolve_extracted_edge: duplicata?contradito? carimbos de tempo?→ resolve_edge_contradictions →old.invalid_at, old.expired_atatributos + resumos sobre entidadesLLM, modelo pequenoopcional: comunidades · sagaspropagação de rótulos · cadeias de episódiosGraphDriverNeo4j | FalkorDB | Kuzu | Neptune (Cypher + fulltext +vetor)search(): BM25 + cosseno + BFS →reranqueamentoRRF | MMR | distância de nós | menções de episódio |cross-encoderServidor MCPadd_memory, search_nodes, search_memory_facts,get_episodes, add_triplet, …
Figura 1. Graphiti: um episódio é armazenado, entidades e arestas são extraídas e resolvidas, depois indexadas num driver de grafo, consultadas e expostas via MCP.

Método por tópico

Ontologia / esquema. Quatro classes de nós em graphiti_core/nodes.py: EpisodicNode, EntityNode, CommunityNode, SagaNode. Classes de aresta em graphiti_core/edges.py: EpisodicEdge (o episódio MENTIONS a entidade), EntityEdge (RELATES_TO, o fato), CommunityEdge, HasEpisodeEdge, NextEpisodeEdge. Uma ontologia customizada é um dicionário de modelos Pydantic passado a cada chamada (entity_types, edge_types), mais um edge_type_map: dict[(source_type, target_type), list[edge_type]] (assinatura em graphiti_core/graphiti.py, add_episode). A docstring do modelo é a descrição de tipo que o prompt de extração vê (_build_entity_types_context, utils/maintenance/node_operations.py). O servidor MCP traz uma ontologia padrão: Requirement, Preference, Procedure, Location, Event, Object, Topic, … (mcp_server/src/models/entity_types.py). Não há hierarquia de classes nem raciocínio sobre o esquema. O mapa de assinaturas de arestas funciona como rdfs:domain / rdfs:range usado como filtro no momento da extração, e não como uma regra de inferência, de modo que não acrescenta consequências.

Grafo de conceitos e resolução de identidade. resolve_extracted_nodes (utils/maintenance/node_operations.py) roda nesta ordem:

  1. Recuperação de candidatos por nó extraído, por similaridade de cosseno em name_embedding (_semantic_candidate_search).
  2. _resolve_with_similarity (utils/maintenance/dedup_helpers.py): minúsculas + colapso de espaços; uma correspondência exata → mescla; várias correspondências exatas → ambíguo, escala.
  3. Portão de entropia: nomes com menos de 6 caracteres e menos de 2 tokens, ou com entropia de Shannon de caracteres abaixo de 1,5, pulam a correspondência aproximada (nomes curtos ou repetitivos produzem shingles pouco confiáveis).
  4. Aproximado: shingles de 3-gramas, MinHash de 32 permutações (blake2b), bandas LSH de 4, aceita Jaccard ≥ 0,9.
  5. Tudo o que permanecer não resolvido vai a uma única chamada LLM de desduplicação (prompts/dedupe_nodes.py).

As mesclas são registradas como um uuid_map mais duplicate_pairs. As arestas são resolvidas do mesmo modo contra arestas com os mesmos extremos; o prompt de desduplicação (prompts/dedupe_edges.py) devolve tanto duplicate_facts quanto contradicted_facts, e afirma que um fato pode ser, ao mesmo tempo, duplicata e contradito (mesma relação, valor atualizado).

Temporal / bi-temporal. EntityEdge carrega created_at (quando o sistema ficou sabendo), expired_at (quando o sistema deixou de acreditar), valid_at e invalid_at (quando era verdadeiro no mundo), além de reference_time do episódio (edges.py). Tempos de mundo ausentes são preenchidos por uma chamada a um modelo pequeno que lê o fato e o tempo do episódio (_extract_edge_timestamps, utils/maintenance/edge_operations.py). resolve_edge_contradictions mantém ambas as arestas quando os intervalos não se sobrepõem; caso contrário, quando a aresta antiga começou antes, define old.invalid_at = new.valid_at e old.expired_at = now. Fatos antigos permanecem consultáveis (“o que era verdadeiro em março?”).

Raciocínio. Não há motor lógico. A contradição é um juízo de LLM sobre cadeias de fatos, e a aritmética de tempo é feita em Python. Cada fato é uma proposição atômica com um intervalo de validade. Isso é o material para uma lógica proposicional temporal, mas nenhum conectivo ou regra é aplicado a ele.

NLP. Não há tokenizador, etiquetador de classes gramaticais ou parser. A extração é um prompt LLM de output estruturado (prompts/extract_nodes.py, prompts/extract_edges.py, prompts/extract_nodes_and_edges.py). NER local opcional com GLiNER2 (205M–340M parâmetros, CPU), com as relações ainda no LLM (llm_client/gliner2_client.py). As contagens de tokens são estimadas em 4 caracteres por token (utils/content_chunking.py). Embedders: OpenAI, Azure OpenAI, Gemini, Voyage (embedder/). Reranqueadores: OpenAI, Gemini, BGE (cross_encoder/).

Banco de grafos. Camada de driver para Neo4j (dependência padrão), FalkorDB e FalkorDBLite (embutidos), Kuzu (embutido) e Neptune com OpenSearch (graphiti_core/driver/, pyproject.toml). As consultas são em Cypher; BFS sobre RELATES_TO|MENTIONS até uma profundidade (search/search_utils.py). Índices fulltext e de intervalo são criados por provedor (driver/neo4j_driver.py). Os métodos de busca são cosseno, BM25 e BFS; os reranqueadores são RRF, MMR, distância de nós, contagem de menções de episódio e cross-encoder (search/search_config.py). As comunidades vêm da propagação de rótulos (utils/maintenance/community_operations.py).

Orquestração de agentes. O Graphiti é um componente de memória, não um agente. mcp_server/src/graphiti_mcp_server.py expõe add_memory, search_nodes, search_memory_facts, get_episodes, get_entity_edge, delete_entity_edge, delete_episode, add_triplet, build_communities, summarize_saga, clear_graph e get_status. group_id particiona o grafo por inquilino ou usuário.

Correspondências com SM / CS

Episódio = proveniência

SM / CS hoje
Artigo (newsdb.articles), arquivo da organização, brief
Encaixe
Forte. As arestas do SM hoje não carregam ids de fonte (veja Governança de conceitos §6; as arestas da organização perdem os ids de arquivo).

episodes: list[str] em cada aresta

SM / CS hoje
Aresta do GraphDeck = id, from, to, relation, label
Encaixe
Fornece os ids de artigos e os ids de arquivos da organização de que o raio de impacto do corpus de consultas precisa.

Aresta bi-temporal

SM / CS hoje
Cache de conceitos indexado pelo hash do brief; map.json sobrescrito por save_map; o EventEnvelope do CS tem apenas wall_time + logical_time
Encaixe
Forte para arestas de mapa e de conceitos. O CS tem tempo de transação, mas não tempo de validade no brief do SM que ingere.

Exato → aproximado com portão de entropia → LLM

SM / CS hoje
summary_grounding.name_in_text: casefold + dobramento de acentos, _EQUIV_GROUPS, alias de token distintivo
Encaixe
Médio. O SM já tem os passos exato e de alias. Acrescentar o estado de ambiguidade e o portão de entropia.

edge_type_map

SM / CS hoje
_clause, coocorrência, implies escreve qualquer par de palavras-chave
Encaixe
Forte como filtro conservador sobre a tabela de regras.

Busca híbrida + RRF

SM / CS hoje
Grafo de conceitos em cache Redis, sem API de busca sobre ele
Encaixe
Depois. Útil quando as arestas persistirem.

Adotar / não adotar

  • Adotar: os quatro carimbos de tempo, invalidar-e-não-apagar, ids de episódio nas arestas, o portão de entropia, um estado explícito “ambíguo → escalar”, a assinatura tipada de arestas.
  • Adotar com um portão: a invalidação por contradição é uma atualização não monotônica. Ela muda a resposta a consultas de “fatos atuais”; no vocabulário de Governança de conceitos, portanto, tem um raio de impacto e passa por plano → certificado → aplicação, como uma inserção.
  • Não adotar (ainda): rodar o pipeline completo de LLM por artigo. Cada episódio faz várias chamadas LLM (extrair, desduplicar, carimbos de tempo, atributos, resumos). O custo no volume de artigos do SM não foi medido.

2. MiroFish — simulação de enxame como previsão

Em resumo

  • Pipeline, segundo o “Workflow” do README: construção do grafo → preparação do ambiente → simulação → geração do relatório → interação profunda.
  • O grafo de conhecimento é o Zep Cloud (zep-cloud==3.25.0 em backend/requirements.txt); o Zep é o produto hospedado construído sobre o Graphiti. O MiroFish não traz um motor de grafos próprio.
  • O motor de simulação é o OASIS (camel-oasis==0.2.5, camel-ai==0.2.78), uma plataforma no estilo Twitter e outra no estilo Reddit, executadas em paralelo.
  • A “previsão” é um relatório Markdown escrito por um agente no estilo ReACT, com quatro ferramentas de recuperação. Não há probabilidade, pontuação ou calibração em backend/app/services/report_agent.py.

Arquitetura

Pipeline de simulação do MiroFishdocumentos-semente (PDF/MD/TXT) + "requisito de previsão" (linguagem natural) → OntologyGenerator (LLM) → GraphBuilder → OasisProfileGenerator + SimulationConfigGenerator (LLM) → OASIS env.step(actions) → ReportAgent: plan_outline → loop ReACT por seção com ferramentas → report.md + conversa com qualquer agente simulado.documentos-semente (PDF/MD/TXT) + "requisito de previsão" (linguagem natural)OntologyGenerator (LLM)exatamente 10 tipos de entidade (8 específicos + fallbacks Person + Organization)+ 6–10 tipos de aresta com source_targetsGraphBuilderrecorte de 500 caracteres / sobreposição 50 → Zep graph.set_ontology → episódios em loteOasisProfileGenerator + SimulationConfigGenerator (LLM)por agente: activity_level, active_hours, sentiment_bias, stance ∈ {supportive, opposing, neutral,observer}, influence_weightpor mundo: minutes_per_round, echo_chamber_strength, …OASIS env.step(actions)Twitter: CREATE_POST, LIKE_POST, REPOST, FOLLOW, QUOTE_POST, DO_NOTHINGReddit: CREATE_POST, CREATE_COMMENT, LIKE/DISLIKE post+comment, SEARCH_POSTS, SEARCH_USER,TREND, REFRESH, …↺ ZepGraphMemoryUpdater: cada ação de agente → episódio de texto → de volta ao grafo ZepReportAgent: plan_outline → loop ReACT por seção com ferramentasinsight_forge (subconsultas LLM + busca no grafo) · panorama_search (incl. fatos expirados) · quick_search· interview_agentsreport.md + conversa com qualquer agente simulado
Pipeline de simulação do MiroFishdocumentos-semente (PDF/MD/TXT) + "requisito de previsão" (linguagem natural) → OntologyGenerator (LLM) → GraphBuilder → OasisProfileGenerator + SimulationConfigGenerator (LLM) → OASIS env.step(actions) → ReportAgent: plan_outline → loop ReACT por seção com ferramentas → report.md + conversa com qualquer agente simulado.documentos-semente (PDF/MD/TXT) +"requisito de previsão" (linguagem natural)OntologyGenerator (LLM)exatamente 10 tipos de entidade (8 específicos +fallbacks Person + Organization)+ 6–10 tipos de aresta com source_targetsGraphBuilderrecorte de 500 caracteres / sobreposição 50 → Zepgraph.set_ontology → episódios em loteOasisProfileGenerator +SimulationConfigGenerator (LLM)por agente: activity_level, active_hours,sentiment_bias, stance ∈ {supportive, opposing,neutral, observer}, influence_weightpor mundo: minutes_per_round,echo_chamber_strength, …OASIS env.step(actions)Twitter: CREATE_POST, LIKE_POST, REPOST, FOLLOW,QUOTE_POST, DO_NOTHINGReddit: CREATE_POST, CREATE_COMMENT,LIKE/DISLIKE post+comment, SEARCH_POSTS,SEARCH_USER, TREND, REFRESH, …↺ ZepGraphMemoryUpdater: cada ação de agente →episódio de texto → de volta ao grafo ZepReportAgent: plan_outline → loop ReACT porseção com ferramentasinsight_forge (subconsultas LLM + busca no grafo) ·panorama_search (incl. fatos expirados) ·quick_search · interview_agentsreport.md + conversa com qualquer agentesimulado
Figura 2. MiroFish: documentos-semente viram uma ontologia e um grafo Zep, agentes são perfilados e simulados no OASIS, e um agente de relatório redige a execução.

Método por tópico

Ontologia / esquema. A ontologia é gerada a cada execução por um LLM (backend/app/services/ontology_generator.py). O prompt de sistema (em chinês) restringe as entidades a atores que possam falar em redes sociais: pessoas, empresas, instituições, mídia, plataformas, grupos. Proíbe conceitos abstratos, tópicos e posicionamentos como entidades. O validador impõe um teto rígido (MAX_ONTOLOGY_TYPES = 10, backend/app/utils/ontology.py), força os dois tipos de fallback Person e Organization nas últimas vagas, normaliza nomes para PascalCase (entidades) e UPPER_SNAKE_CASE (relações) e reserva nomes de atributos como name_embedding. O resultado também é emitido como código Python de classes Pydantic (generate_python_code) para o SDK do Zep.

Grafo de conceitos e identidade. Delegado ao Zep. O MiroFish relê nós e arestas por zep_entity_reader.py e zep_tools.py; EdgeInfo expõe is_expired / is_invalid, de modo que os campos bi-temporais do Graphiti afloram nas ferramentas de relatório (a busca “panorama” pode incluir fatos expirados).

Temporal. O tempo simulado é em rodadas (minutes_per_round, padrão 60) e active_hours por agente. As ações dos agentes são reescritas como novos episódios (zep_graph_memory_updater.py, AgentActivity.to_episode_text), de modo que o grafo evolui com a simulação.

Raciocínio / argumentação. Os agentes não argumentam em um sentido estruturado. Cada agente age sobre um feed sob um rótulo de posicionamento e um peso de influência; o “debate” são posts, citações, reposts e follows. A previsão é a síntese, pelo agente de relatório, dos fatos recuperados do grafo e de entrevistas (uma ação manual INTERVIEW enviada a agentes selecionados, backend/scripts/run_twitter_simulation.py). Não há afirmações, garantias ou arestas de apoio/ataque, nem forma proposicional, nem regra de agregação (voto, mercado ou pontuação) que transforme o comportamento em uma probabilidade.

NLP. Recorte por caracteres (500 / 50) em backend/app/utils/file_parser.py; todo o resto são chamadas LLM por um cliente compatível com OpenAI. Não há embeddings próprios (o Zep cuida disso), nem tokenizador, nem etiquetagem de classes gramaticais.

Banco de grafos. Zep Cloud (hospedado). Não há Cypher no repositório.

Orquestração de agentes. API Flask + tarefas em segundo plano; o OASIS roda como scripts subprocesso com IPC (simulation_ipc.py, simulation_runner.py); o agente de relatório analisa chamadas de ferramentas a partir do texto e remove resultados fabricados (_strip_fake_tool_results).

Correspondências com SM / CS

Ontologia gerada por LLM, com teto e tipos de fallback

SM / CS
Categorias fixas em shared/ontology.json; listas sub não usadas
Encaixe
O teto + o fallback explícito é uma boa disciplina. Uma ontologia gerada a cada execução é o oposto de uma tabela de regras certificada.

Enum de posicionamento por ator

SM / CS
Mapa argumentativo supports / opposes; papéis MAP
Encaixe
Fraco. O posicionamento é um parâmetro de persona, não uma aresta.

Simulação → relatório

SM / CS
Cenários HomoSapiens TEvEP / RUT; sinais CS
Encaixe
Ensaio exploratório de cenários apenas para o HomoSapiens. Não para o trading do CS: uma narrativa não calibrada não é um sinal.

Ferramentas do agente de relatório sobre um grafo temporal

SM / CS
agent_surface do SM (get_world_brief, …)
Encaixe
A divisão de ferramentas (profunda / panorama inclusive histórico / rápida / entrevista) é um padrão utilizável.

Adotar / não adotar

  • Adotar: ontologia com teto e tipos de fallback obrigatórios; “entidades devem ser atores” como regra explícita de admissão; busca panorama que pode incluir fatos expirados.
  • Não adotar: tratar a saída da multidão simulada como uma previsão, ou alimentá-la no CS. Nada no repositório mede acurácia. AGPL-3.0, portanto sem cópia de código para o SM.

3. screenpipe — a captura como memória

Em resumo

  • Captura orientada a eventos (troca de aplicativo, clique, pausa de digitação, rolagem, área de transferência) de uma captura de tela em par com a árvore de acessibilidade; OCR apenas como fallback. Áudio via Whisper local ou Deepgram, com diarização de falantes. (README “Core features”, “Technical architecture”.)
  • O armazenamento é SQLite local com FTS5 e mídia em disco; REST em localhost:3030; um servidor MCP (packages/screenpipe-mcp); “pipes” são agentes agendados definidos como pipe.md.
  • O método interessante está em crates/screenpipe-semantic: projeções semânticas determinísticas sobre árvores de acessibilidade, com um grau explícito de qualidade de identidade.

Arquitetura

Pipeline de captura e memória do screenpiperamificações: eventos do SO → captura → fallback OCR; áudio → Whisper / Deepgram → diarização → embeddings de falante → SQLite (frames, ocr, audio, memories) + FTS5 (unicode61) → ramificações: screenpipe-semantic → REST :3030 · servidor MCP · pipes · arquivos de memória de equipe.eventos do SO → captura → fallback OCRscreenshot + árvore a11y, mesmo carimbo de tempoáudio → Whisper / Deepgram → diarização → embeddings de falantecorrespondência com margemSQLite (frames, ocr, audio, memories) + FTS5 (unicode61)→ workers em segundo plano: backfill FTS, redação de PIIscreenpipe-semanticparsers por aplicativo → SemanticItem{kind, item_key, identity_quality, actor, occurred_at,source_nodes}PersonResolver: e-mail / E.164 / id nativo → person_key (unique | ambiguous | not_found)REST :3030 · servidor MCP · pipes · arquivos de memória de equipepipe.md + permissões YAML · YAML front matter + Markdown
Pipeline de captura e memória do screenpiperamificações: eventos do SO → captura → fallback OCR; áudio → Whisper / Deepgram → diarização → embeddings de falante → SQLite (frames, ocr, audio, memories) + FTS5 (unicode61) → ramificações: screenpipe-semantic → REST :3030 · servidor MCP · pipes · arquivos de memória de equipe.eventos do SO → captura → fallback OCRscreenshot + árvore a11y, mesmo carimbo detempoáudio → Whisper / Deepgram → diarização→ embeddings de falantecorrespondência com margemSQLite (frames, ocr, audio, memories) + FTS5(unicode61)→ workers em segundo plano: backfill FTS, redação dePIIscreenpipe-semanticparsers por aplicativo → SemanticItem{kind,item_key, identity_quality, actor, occurred_at,source_nodes}PersonResolver: e-mail / E.164 / id nativo →person_key (unique | ambiguous | not_found)REST :3030 · servidor MCP · pipes · arquivos dememória de equipepipe.md + permissões YAML · YAML front matter +Markdown
Figura 3. screenpipe: a captura de tela e de áudio alimenta um armazenamento SQLite local com busca de texto completo, uma camada semântica e superfícies REST / MCP.

Método por tópico

Ontologia / esquema. Um conjunto fechado e pequeno de kinds: SemanticKind = ConversationMessageDocumentTaskCalendarEventPage (crates/screenpipe-semantic/src/model.rs). Um SemanticItem tem local_id, parent_local_id, kind, item_key, identity_quality, title, body, actor, occurred_at, timestamp_precision, status, metadata e source_nodes (os nós de acessibilidade de que veio). Os vínculos de pai são validados antes da persistência. A tabela memories (crates/screenpipe-db/src/migrations/20260310000000_create_memories.sql) guarda content, source, source_context, tags, importance.

Mapa de identidade. Dois métodos que valem a pena copiar:

  1. IdentityQuality = Stable | Derived | Ephemeral (model.rs). Stable: um id nativo do aplicativo que sobrevive a mudanças de tela. Derived: computado a partir de campos visíveis; “os consumidores devem tratar o agrupamento de entidades entre execuções como aproximado”. Ephemeral: válido apenas dentro de uma execução de parse, como um índice posicional.
  2. PersonResolver (crates/screenpipe-semantic/src/messaging.rs): correspondência exata em e-mail normalizado, telefone E.164 ou um id nativo (source, value). O resultado é Unique { person_key } | Ambiguous { candidate_count } | NotFound. Nomes de exibição deliberadamente não fazem parte da API, “para que não se tornem, por acidente, chaves de junção entre fontes”.

A identidade de falante usa a mesma ideia para embeddings: um limiar de distância do melhor par (0,55) mais uma margem em relação ao segundo colocado (0,08); uma correspondência dentro da margem devolve Ambiguous em vez de mutar um perfil (crates/screenpipe-db/src/db/speakers.rs).

Temporal. Toda captura é carimbada no tempo; os horários das mensagens são normalizados com uma precisão explícita e um status de parse (normalize_message_time, TimeParseStatus). Não há cisão entre tempo de validade e tempo de transação.

Raciocínio. Nenhum no núcleo. Os pipes executam um agente externo de programação sobre a API.

NLP. SQLite FTS5 com o tokenizador unicode61; expansão no lado da consulta que parte camelCase e fronteiras de dígitos que o OCR colou (crates/screenpipe-db/src/text_normalizer.rs); Jaccard no nível da palavra para desduplicar transcrições entre dispositivos (text_similarity.rs); tiktoken-rs para orçamentos de tokens (crates/screenpipe-semantic/Cargo.toml). Sem etiquetagem de classes gramaticais.

Banco de grafos. Nenhum. Relacional + FTS.

Orquestração de agentes e segurança. Permissões de pipe no front matter YAML (allow-apps, deny-apps, deny-windows, limites de tipo de conteúdo, intervalos de tempo, allow-raw-sql, allow-frames), impostas em três lugares: gating de skills, interceptação do agente e middleware do servidor com tokens por pipe (README “Pipe data permissions”; o README chama isso de “not prompt-based”). A redação de PII roda como um worker de reconciliação em segundo plano, para que a captura permaneça rápida (crates/screenpipe-redact/src/lib.rs).

Correspondências com SM / CS

IdentityQuality

SM / CS
Ids de nós de conceito são cadeias de palavras-chave; ids do mapa argumentativo são slugs usl:
Encaixe
Forte. Classifique cada id: _id do artigo / id do arquivo da organização = estável; palavra-chave dobrada = derivada; índice de cláusula = efêmera.

Resolvedor em três estados PersonResolver, sem junções por nome de exibição

SM / CS
name_in_text devolve um booleano; aliases por token distintivo
Encaixe
Forte. Devolver único / ambíguo / não encontrado, e nunca juntar duas histórias só por um nome de exibição.

Limiar + margem do segundo colocado

SM / CS
Rótulos zero-shot: > 0.7 mantidos, senão labels[0] é escrito
Encaixe
Forte. A regra da margem é o oposto de “escreva o rótulo do topo de qualquer jeito”.

Permissões de pipe, impostas fora do prompt

SM / CS
agent_surface.py /mcp (JSON-RPC em localhost)
Encaixe
Médio. Um manifesto por consumidor de ferramenta.

Redação / backfill em segundo plano

SM / CS
Indexação gramatical do SM na sua própria fila
Encaixe
Já é o padrão do SM.

Adotar / não adotar

  • Adotar: graus de qualidade de identidade, o resolvedor em três estados, a regra da margem, manifestos de permissão impostos no código.
  • Não adotar: copiar código (licença comercial com código disponível). A captura de tela em si não tem uso no SM.

4. Cua — agentes de uso de computador

Em resumo

  • Cua Driver: ferramentas para inspecionar e operar aplicativos nativos de desktop e navegadores, alcançadas por um CLI, MCP (cua-driver mcp) ou SDKs tipados sobre um runtime nativo (UniFFI sobre um ABI C) (libs/cua-driver/README.md).
  • Sandboxes: cua sb create ubuntu (um container gVisor), VMs locais (Lume no macOS) e hosts remotos por cua-spacesd (README “Cua SDK and CLI”).
  • Biblioteca de agentes libs/python/agent/cua_agent: ComputerAgent com loops por modelo (Anthropic, OpenAI, Gemini, UI-TARS, OpenCUA, Qwen-VL, OmniParser, …) e um loop grounded composto.
  • CUA-S1: modelos pequenos de “Sistema 1” que pontuam decisões delimitadas (formulários) em vez de gerar tokens; Cua Bench: tarefas com avaliadores que reportam uma recompensa.

Arquitetura

Pilha de uso de computador do Cuaagente (Claude Code / Cursor / loop próprio) → cua-driver (MCP ou CLI) → sandbox → cua_agent.ComputerAgent.agente (Claude Code / Cursor / loop próprio)MCP ou CLIcua-drivermodo de permissão fixado no lançamento: standard | bounded (manifesto revisado) | unrestricted (flagexplícita)observar: árvore de acessibilidade · estado do navegador · screenshot (capture_id)worker opcional cua-perception: screenshot → regiões de texto/ícone (extensão AGPL)agir: clicar/digitar com o mesmo capture_id de uso único da observaçãosandboxcontainer gVisor | VM (Lume, QEMU) | host remoto (cua-spacesd :3211)cua_agent.ComputerAgentloops/composed_grounded.py: modelo de ancoragem (onde está "o botão vermelho de enviar"?) + modelode raciocínio (e agora?)callbacks/: budget_manager · image_retention · pii_anonymization · trajectory_saver · operator_validator ·otel
Pilha de uso de computador do Cuaagente (Claude Code / Cursor / loop próprio) → cua-driver (MCP ou CLI) → sandbox → cua_agent.ComputerAgent.agente (Claude Code / Cursor / loop próprio)MCP ou CLIcua-drivermodo de permissão fixado no lançamento: standard |bounded (manifesto revisado) | unrestricted (flagexplícita)observar: árvore de acessibilidade · estado donavegador · screenshot (capture_id)worker opcional cua-perception: screenshot →regiões de texto/ícone (extensão AGPL)agir: clicar/digitar com o mesmo capture_id de usoúnico da observaçãosandboxcontainer gVisor | VM (Lume, QEMU) | host remoto(cua-spacesd :3211)cua_agent.ComputerAgentloops/composed_grounded.py: modelo deancoragem (onde está "o botão vermelho de enviar"?)+ modelo de raciocínio (e agora?)callbacks/: budget_manager · image_retention ·pii_anonymization · trajectory_saver ·operator_validator · otel
Figura 4. Cua: um agente comanda o cua-driver via MCP ou CLI dentro de um sandbox; o loop do ComputerAgent aparece à parte.

Método por tópico

Ontologia / esquema. O modelo de mundo é a UI: árvore de acessibilidade, DOM e regiões de screenshot. O RFC de percepção (rfcs/3931-cua-perception-and-jev-use.md) mantém captura, percepção, decisão, ação, verificação como etapas tipadas e separadas, com posse explícita, e uma ação em pixels deve carregar o capture_id de uso único da observação de que veio (libs/cua-driver/README.md, “Optional visual perception”).

Identidade. A identidade do elemento é por captura: o capture_id vincula uma ação a uma observação. É a mesma disciplina do grau Ephemeral do screenpipe.

Temporal. As trajetórias são salvas por passo (callbacks/trajectory_saver.py) para replay e para dados de treinamento (o Cua Bench exporta trajetórias).

Raciocínio. O planejamento vive no modelo externo. O loop composto separa a ancoragem (localizar) do raciocínio (decidir) (loops/composed_grounded.py). O CUA-S1 formula decisões pequenas como pontuação sobre candidatos estruturados; o código da aplicação ordena as ações (README “CUA-S1”).

NLP. tiktoken para orçamentos (libs/python/agent/pyproject.toml); descrições de elementos em linguagem natural para o esquema da ferramenta ancorada. Sem análise linguística.

Banco de grafos. Nenhum.

Orquestração e sandboxing. Os modos de permissão são uma propriedade do processo, escolhida antes do início (um daemon em execução precisa ser reiniciado para mudá-los). bounded admite apenas as ferramentas e os recursos de um manifesto revisado. Anexar-se a um perfil de navegador já autenticado é uma concessão explícita (--grant existing-profile). Callbacks impõem orçamento e anonimização de PII em torno do loop.

Correspondências com SM / CS

Modos de permissão + manifesto revisado

SM / CS
Superfície de agente /mcp do SM (localhost); autotrader do CS
Encaixe
Padrão forte. Um manifesto bounded para qualquer agente que possa alcançar intenções de ordem do CS.

Id de observação carregado pela ação

SM / CS
EventEnvelope.causal_parents do CS; estado de aprovação
Encaixe
Forte. Uma intenção de ordem deve citar o sinal / evento de snapshot de que veio (o CS já tem causal_parents).

Capturar → perceber → decidir → agir → verificar

SM / CS
Famílias CS signal → order-intent → approval → execution-report → reconciliation
Encaixe
Já é a forma do CS (packages/engine/events.py).

Bench com recompensa do avaliador

SM / CS
Testes de ancoragem de resumo do SM; backtests do CS
Encaixe
Um agente de QA para o CS pode ser uma tarefa de bench: um fixture, um avaliador, uma recompensa.

Adotar / não adotar

  • Adotar: modos de permissão no lançamento, ações vinculadas à observação, separar ancoragem de decisão, salvamento de trajetórias.
  • Não adotar: instalar a extensão AGPL de percepção em qualquer coisa que o SM sirva.

5. Strix — grafo de agentes (apenas a arquitetura)

Esta seção cobre o README e o código de orquestração: o loop do agente, o grafo de agentes, o registro de ferramentas, o runtime do sandbox e a configuração de LLM. Os templates de prompt, as skills e os arquivos de conhecimento de segurança do Strix não foram abertos.

Em resumo

  • Construído sobre o OpenAI Agents SDK (openai-agents[litellm]) com LiteLLM para provedores (pyproject.toml).
  • Um AgentCoordinator é dono de uma árvore de agentes: status, vínculos de pai, caixas de correio, orçamentos e snapshots de retomada (strix/core/agents.py).
  • Os agentes criam, enviam mensagens, aguardam e interrompem outros agentes por meio de ferramentas (strix/tools/agents_graph/tools.py).
  • As ferramentas rodam em um sandbox Docker cujo backend é escolhido por STRIX_RUNTIME_BACKEND (strix/runtime/backends.py); as conexões MCP são mantidas em um McpRegistry por execução (strix/tools/mcp/registry.py).

Arquitetura

Varredura multiagente do Strixrunner (por varredura) → AgentCoordinator — único dono do estado do grafo → ramificações: agente raiz → loop de execução → relatório.runner (por varredura)→ McpRegistry · sessão sandbox (Docker) · orçamentoAgentCoordinator — único dono do estado do grafostatus: running | waiting | completed | stopped | crashed | failed | budget_pausedparent_of · names · metadata · mailboxes (AgentRuntime.mailbox + evento de wake) · wait_kind: user |agents | stalledagente raizferramentas: create_agent · send_message_to_agent · wait_for_agents · view_agent_graph ·agent_finish · stop_agent+ notes · todo · thinking · shell · browser · proxy · reporting · load_skill · mcp …→ agentes filhos (spawn_child_agent; respawn_subagents na retomada)loop de execuçãorun_agent_loop → ciclos → recuperação em erros transitórios de modelo → compactação quando ocontexto transbordarelatórioachados desduplicados (identidade determinística primeiro, depois um juiz LLM) → SARIF / PDF
Varredura multiagente do Strixrunner (por varredura) → AgentCoordinator — único dono do estado do grafo → ramificações: agente raiz → loop de execução → relatório.runner (por varredura)→ McpRegistry · sessão sandbox (Docker) · orçamentoAgentCoordinator — único dono do estado dografostatus: running | waiting | completed | stopped |crashed | failed | budget_pausedparent_of · names · metadata · mailboxes(AgentRuntime.mailbox + evento de wake) · wait_kind:user | agents | stalledagente raizferramentas: create_agent ·send_message_to_agent · wait_for_agents ·view_agent_graph · agent_finish · stop_agent+ notes · todo · thinking · shell · browser · proxy ·reporting · load_skill · mcp …→ agentes filhos (spawn_child_agent;respawn_subagents na retomada)loop de execuçãorun_agent_loop → ciclos → recuperação em errostransitórios de modelo → compactação quando ocontexto transbordarelatórioachados desduplicados (identidade determinísticaprimeiro, depois um juiz LLM) → SARIF / PDF
Figura 5. Strix: um runner inicia um coordenador que detém o grafo de agentes; um agente raiz cria filhos; o loop de execução termina num relatório desduplicado.

Método por tópico

  • Ontologia / esquema. Nenhuma para o conhecimento. O esquema é o próprio grafo de agentes (status, vínculos de pai, kinds de espera) e os esquemas tipados de argumentos das ferramentas, com coerção de argumentos e outputs delimitados (strix/agents/factory.py).
  • Identidade / desduplicação. A desduplicação do relatório verifica primeiro uma identidade determinística (para achados de dependência: pacote, versão, caminho do manifesto, CVE) e consulta um juiz LLM somente quando isso não decide (strix/report/dedupe.py, apenas nomes de funções).
  • Temporal. Snapshots de retomada e uma época de retomada para pausas de orçamento (core/agents.py).
  • Raciocínio. Delegado ao modelo; as ferramentas “thinking”, “todo” e “notes” externalizam o estado.
  • Memória. Histórico de sessão com compactação independente de provedor: turnos mais antigos tornam-se um resumo de checkpoint, os turnos recentes permanecem verbatim, e os pares chamada-de-ferramenta / resultado-de-ferramenta são preservados (strix/llm/compaction.py).
  • Sandboxing. Backend Docker com um manifesto, portas expostas e bind mounts (runtime/backends.py, runtime/docker_client.py).

Correspondências com SM / CS

Coordenador com status explícitos e caixas de correio

SM / CS
Agente de QA do autotrader do CS; workers RQ do SM
Encaixe
Padrão para um agente de QA supervisionado com subverificações (praça, risco, diário).

Identidade determinística antes do juiz LLM

SM / CS
Graphiti, screenpipe (a mesma ideia)
Encaixe
Terceira instância independente da mesma regra.

Compactação que preserva pares de ferramentas

SM / CS
Sessões de chat do mapa do SM (apply_edit)
Encaixe
Útil se o chat do mapa crescer.

Adotar / não adotar

  • Adotar: máquina de status + caixa de correio para QA multiagente; desduplicação determinística primeiro; compactação que mantém os pares de ferramentas válidos.
  • Não adotar: nada específico do domínio. O propósito do Strix (testes ofensivos de segurança) não tem uso no SM nem no CS.

6. Comparação transversal

Ontologia / esquema

Graphiti
Tipos Pydantic de entidade + aresta; mapa (src,tgt) → arestas; sem hierarquia
MiroFish
Gerada por LLM, 10 tipos, fallback Person/Organization
screenpipe
Conjunto fechado SemanticKind
Cua
Árvore de UI + etapas tipadas
Strix
Estado do grafo de agentes + esquemas de ferramentas
SM hoje
Categorias em shared/ontology.json; papéis Grammar v.1; kinds de mapa

Grafo de conceitos

Graphiti
Entidades + arestas de fato + comunidades
MiroFish
Via Zep
screenpipe
Itens semânticos com pais
Cua
—
Strix
—
SM hoje
build_summary_concepts, org_concepts, map.json

Resolução de identidade

Graphiti
Embed → exato → MinHash/LSH com portão de entropia → LLM
MiroFish
Via Zep
screenpipe
Stable / Derived / Ephemeral; resolvedor em três estados
Cua
capture_id
Strix
Id determinístico → juiz LLM
SM hoje
fold, _EQUIV_GROUPS, name_in_text, dedupe_articles

Tempo

Graphiti
Arestas bi-temporais, invalidar
MiroFish
Rodadas; ações → episódios
screenpipe
Carimbos de tempo + precisão
Cua
Trajetórias
Strix
Épocas de retomada
SM hoje
TTL de cache; changelog; grammar_hash

Raciocínio / argumento

Graphiti
Contradição LLM + regra de intervalo
MiroFish
Nenhum (relatório narrativo)
screenpipe
Nenhum
Cua
Modelo externo
Strix
Modelo externo
SM hoje
role_of, _clause, implies, Pearson; mapa argumentativo

NLP

Graphiti
Extração LLM; NER GLiNER2; embeddings; BM25
MiroFish
LLM; recortes de caracteres
screenpipe
FTS5 unicode61; OCR/ASR
Cua
Descrições de elementos em linguagem natural
Strix
—
SM hoje
Stanza tokenize/POS/lemma/depparse (UD); mDeBERTa zero-shot; resumos BART

Banco de grafos

Graphiti
Neo4j / FalkorDB / Kuzu / Neptune, Cypher
MiroFish
Zep Cloud
screenpipe
SQLite
Cua
—
Strix
—
SM hoje
Mongo + Redis; laboratório Neo4j apenas (agents/graph, localhost)

Agente / MCP

Graphiti
Servidor MCP para memória
MiroFish
Agente de relatório ReACT
screenpipe
Servidor MCP; pipes com permissões
Cua
Driver MCP; modos de permissão
Strix
Grafo de agentes; registro MCP; Docker
SM hoje
/mcp JSON-RPC, localhost (agent_surface.py)

6.1 Relação com o IEML

O IEML dá a cada expressão um endereço (USL) cujo sentido vem da sua posição nos paradigmas (IEML). Nenhum dos cinco repositórios tem um endereço para o sentido. As identidades deles são UUIDs (Graphiti), chaves de aplicativo (screenpipe) ou ids de sessão (Cua, Strix). A resolução do Graphiti decide é a mesma entidade? por similaridade de cadeia e de embedding; o IEML decide é o mesmo sentido? por construção. No SM, os slugs usl: do mapa argumentativo são uma convenção de nomeação, não USL parseado (a nota do repositório do SM docs/homosapiens-ieml-network/ARCHITECTURE.md o afirma). A peça transferível é a classificação do screenpipe: um slug usl: é um id Derived até que um parser o certifique.

A frase de nove papéis do IEML (Grammar v.1) está mais próxima da assinatura tipada de arestas do Graphiti do que de qualquer outra coisa aqui: ambas dizem quais kinds podem preencher qual vaga. O Graphiti impõe a vaga na extração. O IEML a define na gramática.

6.2 Relação com a web semântica

Nenhum dos cinco usa RDF, OWL, SHACL ou SPARQL. O Graphiti é um grafo de propriedades etiquetado, consultado com Cypher. O seu mapa tipado de arestas é uma restrição de domínio/alcance usada como filtro, portanto é conservador por construção: só pode remover fatos candidatos, nunca derivar novos. Essa é a metade segura da lição da política silenciosa em Governança de conceitos §2. A metade insegura, um axioma que acrescenta consequências, não tem contraparte nestes repositórios, porque nenhum deles infere.

Um padrão contrastante impõe portões SHACL a ativos RDF/OWL/JSON-LD e pode manter RDF/SPARQL como camada de ponte sobre um kernel de átomos tipados. Uma cisão prática para o SM: um grafo de propriedades com arestas bi-temporais para o grafo operacional de conceitos, e RDF/SHACL somente onde um certificado é exigido.

6.3 Relação com a lógica proposicional

Uma aresta de fato do Graphiti é uma proposição atômica p = relation(subject, object) com um intervalo de validade [valid_at, invalid_at). O tratamento de contradições implementa uma regra: se p_new contradiz p_old e valid_at(p_old) < valid_at(p_new), então invalid_at(p_old) := valid_at(p_new). A própria contradição é decidida por um LLM, e não por uma tabela-verdade. Não há conectivos, nem ¬, ∧, → sobre fatos, nem prova. O mapa argumentativo do SM tem relações tipadas (supports, opposes, implies, evidence_for) que se leem como conectivos, mas são afirmadas pelo chat, e o implies produzido por summary_concepts é uma junção lexical, não uma implicação material. Transformar qualquer um dos dois em lógica proposicional exige uma tabela de regras declarada e um verificador, que é o programa de Governança de conceitos.

6.4 Relação com bancos de grafos

O Graphiti é o único repositório que abstrai vários bancos de grafos. O seu conjunto de drivers (Neo4j por padrão; FalkorDB, FalkorDBLite e Kuzu como opções embutidas) é a lista curta medida se o SM tirar as arestas de conceitos do Redis. O laboratório Neo4j já existente no SM (agents/graph/README.md) é apenas localhost e é semeado a partir de map.json com enunciados MERGE. A regra do índice de Engenharia — padrões neutros em relação ao fornecedor, medir antes de adotar stores especializados (índice de Engenharia §1) — se aplica: nenhum store foi comparado nesta passagem.

6.5 Relação com sistemas modernos de agentes

Três repositórios expõem MCP (memória Graphiti, histórico screenpipe, driver Cua); o Strix consome MCP. Entre eles, a segurança é imposta fora do prompt: tokens por pipe do screenpipe, modos de permissão no lançamento e ids de captura de uso único do Cua, sandbox Docker e orçamentos do Strix. Isso se alinha a um hábito de plano de controle com evidência e replay, e à regra já existente do SM de que a superfície de agente encapsula apenas GETs públicos.


7. O que levar ao SM e ao CS

Esforço: S ≤ 1 dia, M alguns dias, L uma semana ou mais. Cada item é uma ideia do código citado, não algo já implementado.

1
Ideia
Ids de episódio em cada aresta derivada (id de artigo, id de arquivo da organização, id de ocorrência)
Fonte
Graphiti EntityEdge.episodes
Alvo SM / CS
build_summary_concepts, build_org_file_concepts, slim_concept_graph; viabiliza o raio de impacto do corpus de consultas
Esforço
M
2
Ideia
Campos bi-temporais (created_at, expired_at, valid_at, invalid_at) com invalidar-e-não-apagar
Fonte
Graphiti resolve_edge_contradictions
Alvo SM / CS
Arestas de map.json via save_map; arestas persistidas de conceitos da organização; CS: tempo de validade do brief do SM em sm_situation_signal
Esforço
M
3
Ideia
Mapa de identidade em três estados (único / ambíguo / não encontrado) com graus de qualidade de identidade e um portão de entropia
Fonte
screenpipe PersonResolver, IdentityQuality; Graphiti _has_high_entropy
Alvo SM / CS
summary_grounding.name_in_text / _EQUIV_GROUPS; ids de nós de conceito
Esforço
M
4

Mapa de assinaturas tipadas de arestas como filtro conservador da tabela de regras

Fonte
Graphiti edge_type_map; MiroFish source_targets
Alvo SM / CS
_clause, coocorrência, implies em summary_concepts.py
Esforço
S
5

Limiar + margem do segundo colocado → “ambíguo” em vez de escrever o rótulo do topo

Fonte
screenpipe classify_speaker_candidates
Alvo SM / CS
Carimbo de categoria em nlp.py (fallback labels[0])
Esforço
S
6

Manifesto de permissão no lançamento para ferramentas de agente

Fonte
Modos de permissão do Cua; permissões de pipe do screenpipe
Alvo SM / CS
SM agent_surface.py /mcp; qualquer agente do CS perto de intenções de ordem
Esforço
S–M
7

Coordenador + caixa de correio + máquina de status para um agente de QA

Fonte
Strix AgentCoordinator
Alvo SM / CS
QA do autotrader do CS
Esforço
M
8

Ontologia com teto e tipos de fallback obrigatórios

Fonte
MiroFish _validate_and_process
Alvo SM / CS
shared/ontology.json (categoria de fallback em vez da promoção do rótulo do topo)
Esforço
S
9

Recuperação híbrida (BM25 + cosseno + BFS no grafo, RRF) sobre arestas persistidas

Fonte
Graphiti search/
Alvo SM / CS
Depois: get_concepts do agente, uma vez que as arestas carreguem ids de certificado
Esforço
L

Não levar: previsão por multidão simulada para o CS (não há calibração no MiroFish); extração completa de grafo por LLM, por artigo, antes de se medir o custo; qualquer código AGPL ou de código disponível sob licença comercial para o SM.


Referências

Repositórios lidos nos commits da §0 em 2026-10-06. URLs verificadas no mesmo dia.

  1. Graphiti. Zep Software. Apache-2.0. https://github.com/getzep/graphiti — graphiti_core/nodes.py, edges.py, graphiti.py, utils/maintenance/{node_operations,edge_operations,dedup_helpers,community_operations}.py, prompts/{extract_nodes,extract_edges,dedupe_nodes,dedupe_edges}.py, search/search_config.py, search/search_utils.py, llm_client/gliner2_client.py, driver/, mcp_server/src/.
  2. MiroFish. AGPL-3.0. https://github.com/666ghj/MiroFish — README.md, backend/requirements.txt, backend/app/services/{ontology_generator,graph_builder,simulation_config_generator,zep_graph_memory_updater,zep_tools,report_agent}.py, backend/app/utils/ontology.py, backend/scripts/run_twitter_simulation.py.
  3. OASIS: Open Agent Social Interaction Simulations with One Million Agents. CAMEL-AI. https://github.com/camel-ai/oasis
  4. screenpipe. Screenpipe Commercial License. https://github.com/screenpipe/screenpipe — README.md, LICENSE.md, crates/screenpipe-semantic/src/{lib,model,messaging}.rs, crates/screenpipe-db/src/{text_normalizer,text_similarity}.rs, crates/screenpipe-db/src/db/speakers.rs, crates/screenpipe-db/src/migrations/20260310000000_create_memories.sql, crates/screenpipe-redact/src/lib.rs, crates/screenpipe-team-memory/src/lib.rs.
  5. Cua. MIT / FSL-1.1-MIT / extensão AGPL conforme LICENSING.md. https://github.com/trycua/cua — README.md, LICENSING.md, libs/cua-driver/README.md, rfcs/3931-cua-perception-and-jev-use.md, libs/python/agent/cua_agent/{agent.py,loops/composed_grounded.py,callbacks/}.
  6. Strix. Apache-2.0. https://github.com/usestrix/strix — README.md (visão geral e “Graph of Agents”), pyproject.toml, strix/core/{agents,execution}.py, strix/agents/factory.py, strix/tools/agents_graph/tools.py, strix/tools/mcp/registry.py, strix/runtime/backends.py, strix/llm/compaction.py, strix/report/dedupe.py (nomes de funções).
  7. OpenAI Agents SDK. https://github.com/openai/openai-agents-python
  8. Model Context Protocol. https://modelcontextprotocol.io/
  9. GLiNER2: Unified Schema-Based Information Extraction. Fastino AI. https://github.com/fastino-ai/GLiNER2
  10. SQLite FTS5 Extension. https://www.sqlite.org/fts5.html
  11. Temporal database (tempo de validade, tempo de transação, bitemporal). Wikipedia. https://en.wikipedia.org/wiki/Temporal_database

As fontes de IEML e da web semântica permanecem em IEML, Governança de conceitos e no índice de Engenharia.


Ver também

Termos do glossário introduzidos

bi-temporal edge, computer-use agent, entity resolution, episode (agent memory), graph of agents, identity quality, MinHash / LSH, reciprocal rank fusion, swarm simulation

Voltar ao topo ↑

Todas as entradas Glossário Fundamentos