Pular para o conteúdo principal

Grafo, relações e fatos no tempo

As notas do cérebro formam um grafo. O Cabeção monta esse grafo no banco local a cada varredura, a partir do texto das notas: não há nada para manter à mão além dos próprios links.

De onde vêm as ligações​

LigaçãoComo você escreveExemplo
Wikilink[[Nota]] no corpo, como no Obsidian (também [[Nota|apelido]], [[Nota#Seção]] e [[pasta/Nota]])O [[Projeto Atlas]] usa [[SQS]].
Relação tipadaUma propriedade do frontmatter com uma lista de wikilinksuses: ["[[SQS]]"]
Substituiçãosupersedes e superseded_bysupersedes: ["[[usar-rabbitmq-para-filas]]"]
Fatosubject e object de uma nota type: factsubject: "[[Projeto Atlas]]"
Menção sem linkNada: o Cabeção acha o título (ou um aliases) de outra nota citado no texto"a reunião sobre o Projeto Atlas"

As menções sem link aparecem no graph, mas não sobem resultados na busca. Nomes curtos demais (menos de 3 letras), genéricos demais ("Projeto", "Ideias") ou de mais de uma nota não viram menção.

Relações tipadas​

Seis relações vêm prontas:

RelaçãoSentido
usesusa
part_offaz parte de
depends_ondepende de
decided_byfoi decidido por
works_ontrabalha em
related_totem relação com

Cada uma é uma propriedade do frontmatter com uma lista de wikilinks, o que o Obsidian mostra como propriedade de lista:

uses: ["[[SQS]]"]
decided_by: ["[[Ana Prado]]", "[[Bruno Tavares]]"]
part_of: ["[[Projeto Atlas]]"]

Para ter outras, acrescente os nomes em relations no .cabecao.json, como "relations": ["mentored_by"]. Um agente acrescenta uma relação com a tool relate.

Fatos​

Um fato é uma nota pequena com três partes: sujeito, predicado e objeto. O predicado é um identificador em minúsculas, como uses_queue ou led_by. O objeto pode ser outra nota ou um valor simples.

type: fact
subject: "[[Projeto Atlas]]"
predicate: led_by
object: "[[Bruno Tavares]]"
valid_from: 2026-09-01
supersedes: ["[[fato-ana-lidera-atlas]]"]

Fatos guardam o que muda com o tempo (quem lidera, o que se usa, onde algo roda) sem apagar o que valia antes.

Validade no tempo​

Toda nota pode dizer quando vale:

CampoSignificado
valid_fromPassa a valer nesta data (inclusive)
valid_untilDeixa de valer nesta data (exclusive): o que vale "até 03/05" e o que vale "a partir de 03/05" não se sobrepõem
expires_atVence nesta data, como um handoff que só importa por um mês
supersedes / superseded_byOutra nota passou a substituir esta

Numa data qualquer, cada nota fica em um de três estados:

  • vigente (current);
  • vencida (expired): passou de valid_until ou de expires_at, ou foi substituída;
  • ainda não vigente (not_yet_valid): valid_from é depois da data.

Você não precisa preencher valid_until na nota antiga quando escreve a nova: basta o link supersedes. O Cabeção deriva a data da substituição a partir do valid_from (ou do created) da nota nova.

Notas vencidas nunca somem da busca: elas descem na lista e aparecem marcadas. Para perguntar sobre o passado, passe a data (--as-of na CLI, as_of no MCP):

$ cabecao facts --subject "Projeto Atlas" --predicate led_by --as-of 2026-03-01
2 fato(s), validade em 2026-03-01:

1. Projeto Atlas · led_by · Ana Prado vigente
de 2026-01-12 até 2026-09-01 memory/facts/fato-ana-lidera-atlas.md
substituído por: memory/facts/fato-bruno-lidera-atlas.md

2. Projeto Atlas · led_by · Bruno Tavares AINDA NÃO VIGENTE
de 2026-09-01 até em aberto memory/facts/fato-bruno-lidera-atlas.md
substitui: memory/facts/fato-ana-lidera-atlas.md

Mais exemplos, com a busca e o grafo, em Buscar.

Regras não são vencidas por agentes​

Uma regra sua (type: rule em memory/rules/) só é substituída por outra regra sua. Se uma nota de agente disser supersedes: ["[[sua-regra]]"], a regra continua vigente e continua no recall.