PTENES
Kit de integração · astra-2cerebro

O segundo cérebro fora do terminal

Liga a sua pasta de Markdown a um bot de Telegram, a um site via API local, a bancos e planilhas, ao n8n e à voz. Node.js, zero dependências.

Uma pasta de anotações ligada por fios de luz a um celular, monitores e microfone
O que é

Uma ponte, feita uma vez, do jeito certo

O cérebro criado pelo astra-2cerebro funciona muito bem no terminal. Mas a pergunta chega pelo Telegram, o site precisa do catálogo que está na wiki, o banco gera registros toda noite. O cerebro-integra é a camada que traduz cada canal para leituras e escritas seguras nos arquivos do cérebro.

🔌 Cinco adaptadores

API HTTP local, bot de Telegram, importadores (JSON, CSV, pasta, exportar wiki), fluxo n8n e ponte de voz. Todos falam com um núcleo só, lib/cerebro.mjs.

🔒 Seguro por padrão

API só em 127.0.0.1, token opcional, escrita desligada até você ligar, chats do Telegram em lista fechada, bloqueio de path traversal, token nunca impresso.

📦 Zero dependências

Só node:http, fetch e fs. Sem npm install. Clona, copia o .env, roda. 73 testes com node --test.

Como funciona

Canal → adaptador → núcleo → arquivos .md

Nenhum adaptador toca em arquivo diretamente. O núcleo sabe onde cada coisa vive no cérebro (fontes/, decisoes/registro.md, rotinas/registro.md, wiki/) e só escreve anexando: nada é sobrescrito.

Telegram / site / cron / n8n / voz→ adaptador→ lib/cerebro.mjs→ contexto/ wiki/ fontes/ decisoes/ rotinas/

📖 Leitura

GET /buscar, /contexto, /prioridades, /pagina, /projetos, /conexoes. Busca sem acento, todos os termos obrigatórios, bônus para título.

✍️ Escrita (opt-in)

POST /decisao, /fonte, /rotina/execucao e os comandos /decisao, /fonte, /rotina do bot. Só com CEREBRO_ESCRITA=1.

🔁 Importação idempotente

Uma nota por item em fontes/AAAA-MM-DD-slug.md. Nome determinístico: rodar toda noite não duplica. Data vem do item ou do arquivo, nunca de "hoje".

Pré-requisitos

Três coisas, nenhuma difícil

O bot precisa de um token do BotFather; a voz precisa dos comandos de STT/TTS que você escolher. Nada é instalado por você além do Node.

Node.js 20+

Se você usa Claude Code ou Codex, já tem.

node --version   # v20 ou superior

Um cérebro

Pasta com AGENTS.md/CLAUDE.md, contexto/ e fontes/, criada pelo astra-2cerebro. Para experimentar, test/fixture/ é um cérebro mínimo.

ls ~/meu-cerebro   # AGENTS.md contexto/ fontes/ wiki/ ...

Token do bot (opcional)

No Telegram, @BotFather → /newbot. Guarde o token no .env. Descubra o ID do seu chat com getUpdates.

# .env
TELEGRAM_TOKEN=123456:ABC...
TELEGRAM_CHATS=123456789
Guia de uso · passo a passo

Do clone à primeira integração

Todos os comandos são reais e estão no repositório. A documentação completa (API rota a rota, Telegram, importadores, n8n, voz, segurança e três receitas) está em docs/.

1

Clonar e apontar para o cérebro

Sem npm install. O .env é lido da pasta atual, sem sobrescrever variáveis já definidas.

git clone https://github.com/inematds/cerebro-integra.git
cd cerebro-integra
cp .env.exemplo .env      # edite CEREBRO_DIR=/caminho/para/meu-cerebro
npm test                  # 73 testes, usa uma cópia de test/fixture/, não toca no seu cérebro
2

Subir a API local

Escuta só em 127.0.0.1:4650. Com CEREBRO_TOKEN, toda rota (menos /saude) exige Authorization: Bearer.

npm run api
# [api] cérebro: /home/usuario/meu-cerebro
# [api] escutando em http://127.0.0.1:4650
# [api] token: exigido · escrita: desligada · cors: desligado

curl 'http://127.0.0.1:4650/buscar?q=catalogo&limite=3' -H "Authorization: Bearer $CEREBRO_TOKEN"
curl http://127.0.0.1:4650/prioridades -H "Authorization: Bearer $CEREBRO_TOKEN"
3

Ligar a escrita (quando quiser)

Por padrão a API e o bot só leem. Escrita é sempre anexar: fonte existente não é sobrescrita, registros só ganham linhas.

CEREBRO_ESCRITA=1 npm run api

curl -X POST http://127.0.0.1:4650/decisao -H "Authorization: Bearer $CEREBRO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"titulo":"Usar a API no site","decisao":"O site consulta /buscar.","porque":"Uma fonte só."}'
# → anexa "## 2026-09-07: Usar a API no site" em decisoes/registro.md
4

Subir o bot de Telegram

Long polling: sem porta aberta, sem HTTPS. Só responde aos chats em TELEGRAM_CHATS; sem a lista, não sobe.

npm run bot
# [bot] @meu_cerebro_bot · cérebro: /home/usuario/meu-cerebro
# [bot] chats permitidos: 1 · escrita: desligada · responder: busca

# no chat:
/buscar catálogo prazo
/prioridades
/decisao Usar API | O site consulta a API | Uma fonte só
/rotina importar-catalogo ok 12 notas
# encaminhar qualquer mensagem ao bot grava uma nota em fontes/
5

Texto livre com IA (opcional)

Com RESPONDER_CMD, o bot e a voz rodam o comando na pasta do cérebro com a pergunta na entrada padrão. Sem ele, texto livre devolve a busca.

# .env
RESPONDER_CMD=claude -p     # roda em CEREBRO_DIR, lê o CLAUDE.md automaticamente
6

Importar um catálogo ou planilha

Mapa de campos em JSON. --simular lista o que seria criado. Rodar de novo pula o que já existe.

# mapas/catalogo.json
{ "titulo": "nome", "data": "criado_em", "id": "sku", "prefixo": "catalogo",
  "corpo": ["descricao"], "tags": "categorias", "extras": ["preco"] }

node importadores/importar-json.mjs catalogo.json --config mapas/catalogo.json --simular
node importadores/importar-json.mjs catalogo.json --config mapas/catalogo.json
# criados: 340 · pulados (já existiam): 0
node importadores/importar-csv.mjs produtos.csv --config mapas/catalogo.json
node importadores/importar-pasta.mjs ~/Documentos/notas --prefixo notas
7

Exportar a wiki para o site

Um JSON com páginas, frontmatter, links [[slug]], links quebrados e páginas órfãs. Serve busca externa, site estático ou painel.

node importadores/exportar-wiki.mjs --saida wiki.json
# exportado: 4 páginas, 8 links → wiki.json
8

n8n e voz

Importe n8n/fluxo-exemplo.json (webhook → /buscar → resposta; token via $env). A voz é uma ponte por variáveis de ambiente, com modo --texto para testar sem microfone.

TTS_CMD='espeak-ng -v pt-br --stdin' voz/voz.sh --texto "o que sabemos sobre o catálogo"
# [voz] pergunta: o que sabemos sobre o catálogo
# Encontrei 3 resultados. 1. Reunião de kickoff da fase 2. ...

GRAVAR_CMD='arecord -d 6 -f cd -q' STT_CMD='whisper-cli -nt -f' voz/voz.sh
9

Rotina noturna com evidência

Cron → importador → POST /rotina/execucao. A linha entra no topo de "Registro de execuções" em rotinas/registro.md: é o que o /auditar do kit procura. Receita completa em docs/receitas.md.

# crontab
0 23 * * * /home/usuario/cerebro-integra/rotinas/importar-catalogo.sh >> ~/logs/importar.log 2>&1

# no fim do script:
curl -X POST http://127.0.0.1:4650/rotina/execucao -H "Authorization: Bearer $CEREBRO_TOKEN" \
  -H 'Content-Type: application/json' -d '{"id":"importar-catalogo","resultado":"ok","saida":"12 notas novas"}'
Exemplos

O que a API e o bot devolvem

Saídas reais, geradas a partir do cérebro de exemplo em test/fixture/.

GET /buscar?q=catalogo&limite=2

{
  "consulta": "catalogo",
  "total": 2,
  "resultados": [
    { "caminho": "contexto/sobre-o-trabalho.md",
      "titulo": "Sobre o trabalho", "pontos": 4,
      "trecho": "...um catálogo de produtos artesanais..." },
    { "caminho": "fontes/2026-08-18-reuniao-kickoff-fase-2.md",
      "titulo": "Reunião de kickoff da fase 2", "pontos": 4,
      "trecho": "...cobre o catálogo de produtos..." }
  ]
}

Bot: /prioridades e /rotina

você: /prioridades
bot:  Prioridades:
      1. Entregar a fase 2 do [[projeto-alfa]] até o fim do trimestre.
      2. Organizar o catálogo de produtos da [[empresa-x]] em uma base consultável.
      3. Reduzir o tempo de resposta a clientes para menos de um dia útil.

você: /rotina importar-catalogo ok 12 notas novas
bot:  Execução registrada: importar-catalogo · ok · 2026-09-07 23:00

você: /decisao a | b
bot:  Escrita desligada. Suba o bot com CEREBRO_ESCRITA=1 para registrar.
RotaFazExige
GET /saudeversão, cérebro, flags, lista de rotasnada (aberta para monitoramento)
GET /contexto · /prioridadessobre-mim, trabalho, prioridades, mapa de rotastoken, se configurado
GET /buscar?q=&limite=&pasta=busca em todos os .md/.txttoken
GET /pagina?caminho=um arquivo, com frontmatter; bloqueia traversaltoken
GET /projetos · /conexoes · /rotinastabelas do kit como JSONtoken
POST /decisao · /fonte · /rotina/execucaoanexa em decisoes/, fontes/, rotinas/token + CEREBRO_ESCRITA=1
Roadmap

O que existe e o que vem depois

A versão 1.0.0 cobre os cinco canais. As próximas ideias são pequenas e só entram quando alguém precisar de verdade.

1.0.0
Entregue: API, Telegram, importadores, n8n, vozNúcleo com leitura segura e escrita anexada, 73 testes, documentação completa em português (README, INSTALAR, docs/ com API rota a rota, três receitas).
Depois
Webhook como alternativa ao polling no TelegramPara quem já tem HTTPS e quer latência menor. O handler já é separado do transporte; falta só o servidor.
Depois
Importador de e-mail (mbox/IMAP) e de calendário (ics)Mesmo padrão dos importadores atuais: uma nota por item em fontes/, idempotente, com mapa de campos.
Ideia
Servidor MCP em cima do núcleoExpor buscar/pagina/prioridades como ferramentas MCP para qualquer agente, reaproveitando lib/cerebro.mjs sem duplicar regras.