Docs / Base de Conhecimento / Memória de agentes e repositórios de modelo de mundo
Base de Conhecimento
Conteúdo
- Em resumo
- Referências online (verificadas)
- 0. Fontes fixadas
- 1. Graphiti — memória em grafo de conhecimento temporal
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 2. MiroFish — simulação de enxame como previsão
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 3. screenpipe — a captura como memória
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 4. Cua — agentes de uso de computador
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 5. Strix — grafo de agentes (apenas a arquitetura)
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 6. Comparação transversal
- 6.1 Relação com o IEML
- 6.2 Relação com a web semântica
- 6.3 Relação com a lógica proposicional
- 6.4 Relação com bancos de grafos
- 6.5 Relação com sistemas modernos de agentes
- 7. O que levar ao SM e ao CS
- Referências
- Ver também
- Termos do glossário introduzidos
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.
- getzep/graphiti — Build Real-Time Knowledge Graphs for AI Agents.
- Zep: A Temporal Knowledge Graph Architecture for Agent Memory (arXiv:2501.13956).
- 666ghj/MiroFish — A Simple and Universal Swarm Intelligence Engine, Predicting Anything.
- camel-ai/oasis — OASIS: Open Agent Social Interaction Simulations with One Million Agents.
- screenpipe/screenpipe — Open Computer History.
- trycua/cua — drivers, frotas e benchmarks de uso de computador.
- usestrix/strix — testes de segurança com IA, de código aberto.
- openai/openai-agents-python — o SDK de agentes sobre o qual o Strix é construído.
- Model Context Protocol — What is the Model Context Protocol (MCP)?
- fastino-ai/GLiNER2 — Unified Schema-Based Information Extraction.
- SQLite FTS5 Extension.
- Temporal database — tempo de validade vs. tempo de transação.
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,textoufact_triple) com umreference_time. - Output:
EntityNodes eEntityEdges (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
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:
- Recuperação de candidatos por nó extraído, por similaridade de cosseno em
name_embedding(_semantic_candidate_search). _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.- 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).
- Aproximado: shingles de 3-gramas, MinHash de 32 permutações (blake2b), bandas LSH de 4, aceita Jaccard ≥ 0,9.
- 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.jsonsobrescrito porsave_map; oEventEnvelopedo CS tem apenaswall_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,impliesescreve 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.0embackend/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
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; listassubnã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_surfacedo 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 comopipe.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
Método por tópico
| Ontologia / esquema. Um conjunto fechado e pequeno de kinds: SemanticKind = Conversation | Message | Document | Task | CalendarEvent | Page (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:
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.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:
_iddo 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_textdevolve 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.7mantidos, senãolabels[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 porcua-spacesd(README “Cua SDK and CLI”). - Biblioteca de agentes
libs/python/agent/cua_agent:ComputerAgentcom 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
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
/mcpdo SM (localhost); autotrader do CS - Encaixe
- Padrão forte. Um manifesto
boundedpara qualquer agente que possa alcançar intenções de ordem do CS.
Id de observação carregado pela ação
- SM / CS
EventEnvelope.causal_parentsdo 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 umMcpRegistrypor execução (strix/tools/mcp/registry.py).
Arquitetura
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
/mcpJSON-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.
- 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
- 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.jsonviasave_map; arestas persistidas de conceitos da organização; CS: tempo de validade do brief do SM emsm_situation_signal - Esforço
- M
- 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
Mapa de assinaturas tipadas de arestas como filtro conservador da tabela de regras
- Fonte
- Graphiti
edge_type_map; MiroFishsource_targets - Alvo SM / CS
_clause, coocorrência,impliesemsummary_concepts.py- Esforço
- S
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(fallbacklabels[0]) - Esforço
- S
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
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
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
Recuperação híbrida (BM25 + cosseno + BFS no grafo, RRF) sobre arestas persistidas
- Fonte
- Graphiti
search/ - Alvo SM / CS
- Depois:
get_conceptsdo 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.
- 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/. - 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. - OASIS: Open Agent Social Interaction Simulations with One Million Agents. CAMEL-AI. https://github.com/camel-ai/oasis
- 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. - 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/}. - 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). - OpenAI Agents SDK. https://github.com/openai/openai-agents-python
- Model Context Protocol. https://modelcontextprotocol.io/
- GLiNER2: Unified Schema-Based Information Extraction. Fastino AI. https://github.com/fastino-ai/GLiNER2
- SQLite FTS5 Extension. https://www.sqlite.org/fts5.html
- 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
- Governança de conceitos
- IEML
- Knowledge OS — LTRing · TEvEP · RUT · mapa argumentativo
- Gestão do conhecimento
- Aprendizado de máquina: LLMs
- Plataforma WWW — IEML
- Índice de Engenharia
- Índice de Ciência da computação
- Glossário
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
Nesta página
- Em resumo
- Referências online (verificadas)
- 0. Fontes fixadas
- 1. Graphiti — memória em grafo de conhecimento temporal
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 2. MiroFish — simulação de enxame como previsão
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 3. screenpipe — a captura como memória
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 4. Cua — agentes de uso de computador
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 5. Strix — grafo de agentes (apenas a arquitetura)
- Em resumo
- Arquitetura
- Método por tópico
- Correspondências com SM / CS
- Adotar / não adotar
- 6. Comparação transversal
- 6.1 Relação com o IEML
- 6.2 Relação com a web semântica
- 6.3 Relação com a lógica proposicional
- 6.4 Relação com bancos de grafos
- 6.5 Relação com sistemas modernos de agentes
- 7. O que levar ao SM e ao CS
- Referências
- Ver também
- Termos do glossário introduzidos