PTENES
Kit de integración · astra-2cerebro

El segundo cerebro fuera de la terminal

Conecta tu carpeta de Markdown a un bot de Telegram, a un sitio mediante API local, a bases de datos y hojas de cálculo, a n8n y a la voz. Node.js, cero dependencias.

Una carpeta de notas conectada con hilos de luz a un celular, monitores y micrófono
Qué es

Un puente, hecho una vez y de la manera correcta

El cerebro creado por astra-2cerebro funciona muy bien en la terminal. Pero la pregunta llega por Telegram, el sitio necesita el catálogo que está en la wiki y la base de datos genera registros todas las noches. cerebro-integra es la capa que traduce cada canal en lecturas y escrituras seguras en los archivos del cerebro.

🔌 Cinco adaptadores

API HTTP local, bot de Telegram, importadores (JSON, CSV, carpeta, exportar wiki), flujo de n8n y puente de voz. Todos se comunican con un solo núcleo, lib/cerebro.mjs.

🔒 Seguro por defecto

API solo en 127.0.0.1, token opcional, escritura desactivada hasta que la actives, chats de Telegram en una lista cerrada, bloqueo de path traversal, token nunca impreso.

📦 Cero dependencias

Solo node:http, fetch e fs. Sin npm install. Clona, copia el .env, funciona. 73 pruebas con node --test.

Cómo funciona

Canal → adaptador → núcleo → archivos .md

Ningún adaptador accede directamente a los archivos. El núcleo sabe dónde vive cada cosa en el cerebro (fontes/, decisoes/registro.md, rotinas/registro.md, wiki/) y solo escribe añadiendo: nada se sobrescribe.

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

📖 Lectura

GET /buscar, /contexto, /prioridades, /pagina, /projetos, /conexoes. Búsqueda sin acentos, todos los términos obligatorios, bonificación para el título.

✍️ Escritura (opt-in)

POST /decisao, /fonte, /rotina/execucao y los comandos /decisao, /fonte, /rotina del bot. Solo con CEREBRO_ESCRITA=1.

🔁 Importación idempotente

Una nota por elemento en fontes/AAAA-MM-DD-slug.md. Nombre determinista: ejecutarlo cada noche no duplica. La fecha proviene del elemento o del archivo, nunca de "hoy".

Requisitos previos

Tres cosas, ninguna difícil

El bot necesita un token de BotFather; la voz necesita los comandos de STT/TTS que elijas. No necesitas instalar nada aparte de Node.

Node.js 20+

Si usas Claude Code o Codex, ya lo tienes.

node --version   # v20 o superior

Un cerebro

Carpeta con AGENTS.md/CLAUDE.md, contexto/ e fontes/, creada por el astra-2cerebro. Para probar, test/fixture/ es un cerebro mínimo.

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

Token del bot (opcional)

En Telegram, @BotFather → /newbot. Guarda el token en el .env. Descubre el ID de tu chat con getUpdates.

# .env
TELEGRAM_TOKEN=123456:ABC...
TELEGRAM_CHATS=123456789
Guía de uso · paso a paso

Del clon a la primera integración

Todos los comandos son reales y están en el repositorio. La documentación completa (API ruta por ruta, Telegram, importadores, n8n, voz, seguridad y tres recetas) está en docs/.

1

Clonar y apuntar al cerebro

Sin npm install. O .env se lee de la carpeta actual, sin sobrescribir las variables ya 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 pruebas, usa una copia de test/fixture/, no toca tu cerebro
2

Iniciar la API local

Escucha solo en 127.0.0.1:4650. Con CEREBRO_TOKEN, todas las rutas (menos /saude) exige Authorization: Bearer.

npm run api
# [api] cerebro: /home/usuario/meu-cerebro
# [api] escuchando en http://127.0.0.1:4650
# [api] token: obligatorio · escritura: desactivada · cors: desactivado

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

Conectar la escritura (cuando quieras)

Por defecto, la API y el bot solo leen. La escritura siempre es por anexado: las fuentes existentes no se sobrescriben, los registros solo reciben nuevas líneas.

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ó."}'
# → añade "## 2026-09-07: Usar la API no site" en decisoes/registro.md
4

Iniciar el bot de Telegram

Long polling: sin puerto abierto, sin HTTPS. Solo responde a los chats en TELEGRAM_CHATS; sin la lista, no se inicia.

npm run bot
# [bot] @meu_cerebro_bot · cerebro: /home/usuario/meu-cerebro
# [bot] chats permitidos: 1 · escritura: desactivada · responder: búsqueda

# en el chat:
/buscar catálogo prazo
/prioridades
/decisao Usar API | O site consulta a API | Uma fonte só
/rotina importar-catalogo ok 12 notas
# reenviar cualquier mensaje al bot guarda una nota en fontes/
5

Texto libre con IA (opcional)

Con RESPONDER_CMD, el bot y la voz ejecutan el comando en la carpeta del cerebro con la pregunta en la entrada estándar. Sin él, el texto libre devuelve la búsqueda.

# .env
RESPONDER_CMD=claude -p     # se ejecuta en CEREBRO_DIR, lee el CLAUDE.md automáticamente
6

Importar un catálogo o una hoja de cálculo

Mapa de campos en JSON. --simular enumera lo que se crearía. Si lo ejecutas de nuevo, omite lo que ya 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
# creados: 340 · omitidos (ya existían): 0
node importadores/importar-csv.mjs produtos.csv --config mapas/catalogo.json
node importadores/importar-pasta.mjs ~/Documentos/notas --prefixo notas
7

Exportar la wiki al sitio

Un JSON con páginas, frontmatter, enlaces [[slug]], enlaces rotos y páginas huérfanas. Sirve para búsqueda externa, sitio estático o panel.

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

n8n y voz

Importa n8n/fluxo-exemplo.json (webhook → /buscar → respuesta; token vía $env). La voz es un puente mediante variables de entorno, con modo --texto para probar sin micrófono.

TTS_CMD='espeak-ng -v pt-br --stdin' voz/voz.sh --texto "o que sabemos sobre o catálogo"
# [voz] pregunta: qué sabemos sobre el catálogo
# Encontré 3 resultados. 1. Reunión de kickoff de la fase 2. ...

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

Rutina nocturna con evidencia

Cron → importador → POST /rotina/execucao. La línea se agrega al principio de "Registro de ejecuciones" en rotinas/registro.md: es lo que el /auditar del kit busca. Receta completa en docs/receitas.md.

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

# al final del 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"}'
Ejemplos

Qué devuelven la API y el bot

Resultados reales, generados a partir del cerebro de ejemplo en 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 y /rutina

tú: /prioridades
bot:  Prioridades:
      1. Entregar la fase 2 de [[projeto-alfa]] para el final del trimestre.
      2. Organizar el catálogo de productos de [[empresa-x]] en una base consultable.
      3. Reducir el tiempo de respuesta a clientes a menos de un día hábil.

tú: /rotina importar-catalogo ok 12 notas novas
bot:  Ejecución registrada: importar-catalogo · ok · 2026-09-07 23:00

tú: /decisao a | b
bot:  Escritura desactivada. Inicia el bot con CEREBRO_ESCRITA=1 para registrar.
RutaHazRequiere
GET /saudeversión, cerebro, flags, lista de rutasnada (abierta para monitoreo)
GET /contexto · /prioridadessobre-mim, trabajo, prioridades, mapa de rutastoken, si está configurado
GET /buscar?q=&limite=&pasta=busca en todos los .md/.txttoken
GET /pagina?caminho=un archivo, con frontmatter; bloquea traversaltoken
GET /projetos · /conexoes · /rotinastablas del kit como JSONtoken
POST /decisao · /fonte · /rotina/execucaoadjunta en decisoes/, fontes/, rotinas/token + CEREBRO_ESCRITA=1
Hoja de ruta

Qué existe y qué viene después

La versión 1.0.0 cubre los cinco canales. Las próximas ideas son pequeñas y solo se incorporan cuando alguien realmente las necesite.

1.0.0
Entregado: API, Telegram, importadores, n8n, vozNúcleo con lectura segura y escritura por anexado, 73 pruebas, documentación completa en portugués (README, INSTALAR, docs/ con API ruta por ruta, tres recetas).
Después
Webhook como alternativa al polling en TelegramPara quienes ya tienen HTTPS y quieren menor latencia. El handler ya está separado del transporte; solo falta el servidor.
Después
Importador de correo electrónico (mbox/IMAP) y de calendario (ics)El mismo patrón de los importadores actuales: una nota por elemento en fuentes/, idempotente, con mapa de campos.
Idea
Servidor MCP sobre el núcleoExponer buscar/pagina/prioridades como herramientas MCP para cualquier agente, reutilizando lib/cerebro.mjs sin duplicar reglas.