Ir al contenido

DESARROLLO-LOG — V1 GBrain/Memoria Compartida

DESARROLLO-LOG — V1 GBrain/Memoria Compartida

Sección titulada «DESARROLLO-LOG — V1 GBrain/Memoria Compartida»

Sesión nocturna autónoma 10-jun-2026 (~22:00-23:10). Costo total: $0 (sin embeddings aún).

QuéEvidencia
GBrain 0.42.38 instaladobun install -g github:garrytan/gbrain (vía brew bun 1.3.14)
Brain inicializado (PGLite, sin server)gbrain init --pglite --no-embedding → doctor 70/100 (warnings solo por no-embeddings)
Brain real ingestadogbrain import brain/src/content/docs --no-embed55 páginas, 635 chunks, 4.6s, 0 errores
Búsqueda keyword sobre contenido realgbrain search "antigravity" → resultados con score correcto
MCP en Claude Codeyt/.mcp.json creado (server gbrain, stdio) — al abrir Claude Code en yt/ pedirá aprobar el server del proyecto
MCP en Antigravity~/.gemini/config/mcp_config.json escrito (backup: .bak-pre-gbrain)
Tools MCP expuestas20+: get/put/delete/list_pages, search, query, links, graph, timeline…
🎯 EL RELEVO REAL — VALIDADOVer abajo

El relevo cross-vendor (el money shot del video — FUNCIONÓ)

Sección titulada «El relevo cross-vendor (el money shot del video — FUNCIONÓ)»
1. "Claude Code" escribió la memoria:
gbrain call put_page '{"slug":"inbox/relevo-test-v1","content":"...decisión..."}'
2. Antigravity CLI (Gemini/Google) la leyó vía MCP:
agy --dangerously-skip-permissions --print "Usa la herramienta search de tu MCP gbrain
para buscar: relevo decisión video. Dime qué decisión está guardada y quién la escribió."
Respuesta de Antigravity:
"La decisión es que la demo central del video V1 será el relevo entre CLIs
(Claude Code → Antigravity) compartiendo memoria vía gbrain MCP,
y fue escrita por Claude Code."

Anthropic escribió → Google leyó. La página de prueba quedó en el brain: inbox/relevo-test-v1.

23:22-23:26 — NICOLÁS LO EJECUTÓ EN PERSONA (relevo inverso, end-to-end)

Sección titulada «23:22-23:26 — NICOLÁS LO EJECUTÓ EN PERSONA (relevo inverso, end-to-end)»
  1. agy interactivo desde ~/NICOLASNEIRA/tot (¡otro directorio — config global confirmada!) → Gemini guardó inbox/prueba-nicolas vía put_page, con aprobación manual del permiso.
  2. Claude Code en yt/ → leyó la página y citó: “Nicolás probó el relevo en vivo. Gemini escribió esto”, incluyendo procedencia (mcp:put_page, timestamp). Google escribió → Anthropic leyó. La demo del video, validada por el usuario, 2 semanas antes de grabar.

23:35 — Hallazgo #2 con síntoma visible: LECTURAS STALE entre agentes simultáneos

Sección titulada «23:35 — Hallazgo #2 con síntoma visible: LECTURAS STALE entre agentes simultáneos»

Con Claude Code y agy abiertos A LA VEZ (cada uno con su propio gbrain stdio sobre el mismo PGLite): Claude guardó decisiones/relevo-youtube-2026-06-11 (estructura impecable: type decision, wikilink de evidencia, firma) → agy NO la vio en list_pages — su proceso quedó mirando una foto congelada de la base, anterior a las escrituras de Claude. Verificado en terminal: la página existe y está perfecta. Fix inmediato: reiniciar agy (proceso nuevo = vista fresca). Este es EL argumento del video V2: agentes simultáneos requieren UN server compartido (serve —http), no copias stdio por cliente. El bug se convirtió en guion.

Bonus 23:31 — Capas 1-3 de “el cerebro sabe en qué estás” CONSTRUIDAS

Sección titulada «Bonus 23:31 — Capas 1-3 de “el cerebro sabe en qué estás” CONSTRUIDAS»
  • scripts/update-trabajo-activo.sh: junta proyecto/branch/commit/archivos → escribe a estado/trabajo-activo (gbrain) + canal/trabajo-activo-auto.md (filesystem, a prueba de cerrojos)
  • Hook SessionEnd en yt/.claude/settings.local.json → se actualiza solo al cerrar sesión
  • Probado: gbrain get estado/trabajo-activo responde con el estado real
  • Pendiente: instrucción de inicio en CLAUDE.md/GEMINI.md + hooks equivalentes en agy

23:50 — Hallazgo #3: LAS DOS MEMORIAS (“guarda en serio”)

Sección titulada «23:50 — Hallazgo #3: LAS DOS MEMORIAS (“guarda en serio”)»

Claude guardó la decisión en gbrain → Nicolás: “guarda enserio” → Claude escribió ADEMÁS en su memoria local persistente. Quedó visible que conviven dos capas: gbrain (compartida, cross-agent)

  • memoria propia de cada agente (privada). Sección de guion: “¿dónde vive la verdad?”. Regla escrita en yt/CLAUDE.md: decisiones de trabajo → gbrain firmadas; memoria local → solo contexto privado, sin duplicar. Capa 3 cerrada: CLAUDE.md ahora ordena consultar estado/trabajo-activo al iniciar → el ciclo hook-escribe/instrucción-lee quedó completo para Claude Code.

También: agy fresco SÍ encontró la decisión al primer get_page (vista fresca confirmada), pero flaileó después — causa: Bash(gbrain) sin PATH en su shell (fix: export agregado a ~/.zshrc)

  • confusión de cwd. Pendiente espejo: instrucción equivalente en GEMINI.md para agy.

23:50 — Hallazgo #4 (CONFIRMADO con evidencia): el error WASM es un DIAGNÓSTICO FALSO del cerrojo

Sección titulada «23:50 — Hallazgo #4 (CONFIRMADO con evidencia): el error WASM es un DIAGNÓSTICO FALSO del cerrojo»

agy reportó en /mcp: “PGLite failed to initialize its WASM runtime. Most common cause: the macOS 26.3 WASM bug (gbrain issue #223)”. El mismo error apareció en la terminal. Causa real verificada: ps+lsof → PID 67977 (gbrain serve de la sesión abierta de Claude Code) tenía abiertos los archivos del PGLite (WAL incluido). No es bug de macOS — es contención mono-proceso con mensaje de error engañoso. Candidato a comentario en issue #223. Para el guion: “el error te culpa al sistema operativo cuando el problema es que tu cerebro solo atiende a un agente a la vez”.

Regla operativa mientras se usa PGLite local: UN agente conectado a la vez. Fix definitivo (sesión siguiente): migrar ambos CLIs al server HTTP compartido del Docker (:8090, Postgres multi-cliente) + sincronizar las páginas nuevas de la noche → ESA es la demo V2. Dato útil del pantallazo: la config MCP de agy soporta serverURL (transporte HTTP) — la migración es viable en ambos clientes.

Hallazgo del camino: PGLite es mono-proceso → el relevo es SECUENCIAL

Sección titulada «Hallazgo del camino: PGLite es mono-proceso → el relevo es SECUENCIAL»

Con agy abierto, su proceso gbrain mantiene el cerrojo de ~/.gbrain/brain.pglite y el gbrain de Claude Code queda en “Reconnecting/Restarting” hasta cerrar agy. Lección de arquitectura (oro para el guion): stdio-por-cliente + PGLite = un agente a la vez (cuaderno que se pasa de mano); agentes SIMULTÁNEOS requieren UN server compartido = gbrain serve --http (el harness V2 dockerizado del puerto 8090). El problema y su solución quedaron demostrados la misma noche. También visto en vivo: full-text multi-palabra falló y el agente se recuperó solo buscando por slug — la limitación documentada + auto-recuperación, en cámara será un gran momento honesto.

⏸️ LISTO-PARA-CORRER — necesita algo de Nicolás

Sección titulada «⏸️ LISTO-PARA-CORRER — necesita algo de Nicolás»
QuéEl paso exacto
Embeddings (búsqueda híbrida query, vectores)export OPENAI_API_KEY=sk-… (o VOYAGE_API_KEY / ZEROENTROPY_API_KEY) → gbrain config set embedding_model openai:text-embedding-3-largegbrain embed --all. Medir costo al correr (~635 chunks = centavos)
OpenCode (3er CLI del relevo)brew install opencode (o npm) + login de provider + agregar gbrain a ~/.config/opencode/opencode.json
Skillpacks de gbrainNO instalados — su propio onboarding exige preguntar al dueño: gbrain skillpack list para ver opciones
  1. gbrain query (híbrida) NO funciona sin embeddings — el modo keyword (search) sí. Honesto para el video: el retrieval bueno cuesta una API key.
  2. Búsquedas multi-palabra en search exigen co-ocurrencia (tsvector AND) — términos simples funcionan mejor. Material para “la letra chica”.
  3. Comandos descubiertos que NO estaban en el research: gbrain dream (¡ciclo de mantenimiento nocturno! — perfecto para el guion), brainstorm, lsd, capture, publish (HTML compartible con password), autopilot (daemon auto-mantenido), jobs (cola de minions).
  4. gbrain serve --http trae OAuth 2.1 integrado + gbrain connect <url> --token para enchufar Claude Code a un cerebro remoto en un comando → simplifica V2 brutalmente.
  5. Desde v0.34.1 el server hace bind a 127.0.0.1 por defecto “para no publicar tu cerebro a la LAN por accidente” — gran detalle de seguridad para narrar.
  6. El postinstall de bun queda bloqueado por seguridad (migraciones) — se corre manual. Detalle honesto de instalación.
  7. Su onboarding le ordena a los agentes NO instalar skillpacks sin preguntar al dueño — “el usuario es dueño de esta decisión”. Ironía hermosa: hasta el cerebro respeta el harness.
  • Nicolás: API key de embeddings → activar híbrida + medir costo real
  • Probar el relevo INVERSO (Antigravity escribe → Claude Code lee) — trivial, mismo mecanismo
  • OpenCode como tercer participante
  • gbrain dream en vivo (candidato a momento de demo)
  • Limpiar inbox/relevo-test-v1 antes de grabar (o conservarla como huella histórica 😄)