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).
✅ FUNCIONA — probado esta noche
Sección titulada «✅ FUNCIONA — probado esta noche»| Qué | Evidencia |
|---|---|
| GBrain 0.42.38 instalado | bun 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 ingestado | gbrain import brain/src/content/docs --no-embed → 55 páginas, 635 chunks, 4.6s, 0 errores |
| Búsqueda keyword sobre contenido real | gbrain search "antigravity" → resultados con score correcto |
| MCP en Claude Code | yt/.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 expuestas | 20+: get/put/delete/list_pages, search, query, links, graph, timeline… |
| 🎯 EL RELEVO REAL — VALIDADO | Ver 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)»agyinteractivo desde~/NICOLASNEIRA/tot(¡otro directorio — config global confirmada!) → Gemini guardóinbox/prueba-nicolasvía put_page, con aprobación manual del permiso.- 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 aestado/trabajo-activo(gbrain) +canal/trabajo-activo-auto.md(filesystem, a prueba de cerrojos)- Hook
SessionEndenyt/.claude/settings.local.json→ se actualiza solo al cerrar sesión - Probado:
gbrain get estado/trabajo-activoresponde 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-large → gbrain 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 gbrain | NO instalados — su propio onboarding exige preguntar al dueño: gbrain skillpack list para ver opciones |
📋 HALLAZGOS para el guion
Sección titulada «📋 HALLAZGOS para el guion»gbrain query(híbrida) NO funciona sin embeddings — el modo keyword (search) sí. Honesto para el video: el retrieval bueno cuesta una API key.- Búsquedas multi-palabra en
searchexigen co-ocurrencia (tsvector AND) — términos simples funcionan mejor. Material para “la letra chica”. - 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). gbrain serve --httptrae OAuth 2.1 integrado +gbrain connect <url> --tokenpara enchufar Claude Code a un cerebro remoto en un comando → simplifica V2 brutalmente.- 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.
- El postinstall de bun queda bloqueado por seguridad (migraciones) — se corre manual. Detalle honesto de instalación.
- 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.
Siguiente sesión
Sección titulada «Siguiente sesión»- 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 dreamen vivo (candidato a momento de demo) - Limpiar
inbox/relevo-test-v1antes de grabar (o conservarla como huella histórica 😄)