claude-session-continuity-mcp
Continuidad de sesión sin configuración para Claude Code. Captura automática de contexto mediante Claude Hooks, proporciona 24 herramientas para memoria, tareas, soluciones y grafo de conocimiento. Búsqueda semántica multilingüe (más de 94 idiomas).
Documentación
passbaton
Continuidad de sesión para agentes de codificación con IA. Tu agente retoma donde lo dejó — nunca vuelvas a explicar tu proyecto. Memoria persistente para Claude Code, OpenAI Codex CLI y Google Gemini CLI, compartiendo una base de datos local: inyección automática de contexto, traspaso en compactación, búsqueda semántica y recuperación de error→solución. Cero configuración, cero costo de API, 100% local.
⚡ Una instalación → el contexto se carga automáticamente en cada sesión · 🧩 sobrevive a la compactación (0 re-explicaciones) · 🔒 100% local, $0 de API

Renombrado (v2.0.0): este proyecto anteriormente se llamaba
claude-session-continuity-mcp. El nombre antiguo sugería que era solo para Claude — nunca lo fue. Claude Code, Codex CLI y Gemini CLI son todos de primera clase y comparten una única memoria local. Las instalaciones existentes siguen funcionando: los comandos antiguos declaude-hook-*siguen disponibles como alias. Consulta Migración desde v1.
El Problema
Cada nueva sesión — ya sea en Claude Code, Codex CLI o Gemini CLI:
"This is a Next.js 15 project with App Router..."
"We decided to use Server Actions because..."
"Last time we were working on the auth system..."
"The build command is pnpm build..."
5 minutos de configuración de contexto. Cada. Maldita. Vez.
La Solución
Totalmente automática. Los hooks del ciclo de vida manejan todo sin llamadas manuales — en Claude Code, OpenAI Codex CLI y Google Gemini CLI, compartiendo una única memoria local para que el contexto se transfiera entre los tres:
# Session start → Auto-loads relevant context + recent session history
# When asking → Auto-injects relevant memories/solutions
# During conversation → Tracks active files + auto-injects error solutions
# On compact → Structured handover context for continuity
# On exit → Extracts commits, decisions, error-fix pairs from transcript
← Auto-output on session start:
# my-app - Session Resumed
📍 **State**: Implementing signup form
## Recent Sessions
### 2026-02-28
**Work**: Completed OAuth integration with Google provider
**Commits**: feat: add OAuth callback handler; fix: redirect URI config
**Decisions**: Use Server Actions instead of API routes
### 2026-02-27
**Work**: Set up authentication foundation
**Next**: Implement signup form validation
## Directives
- 🔴 Always use Zod for form validation
- 📎 Prefer Server Components by default
## Key Memories
- 🎯 Decided on App Router, using Server Actions
- ⚠️ OAuth redirect_uri mismatch → check env file
Cero trabajo manual. El contexto te sigue.
¿Por qué esto y no otras herramientas de memoria?
La mayoría de las herramientas de memoria para Claude dependen de llamadas explícitas a herramientas ("recuerda esto"), una API en la nube o un trabajador de IA en segundo plano. Esta es deliberadamente diferente:
| passbaton | MCP típico de nube/IA-memoria | |
|---|---|---|
| Configuración | npm i -g → hooks auto-instalados | Servidor manual + clave de API |
| Disparador | 5 hooks automáticos (sin comandos) | Tú llamas a una herramienta remember |
| Almacenamiento | SQLite 100% local | Nube / servicio externo |
| Costo de API | $0 — embeddings locales | Por token / suscripción |
| Latencia | < 5ms (en el dispositivo) | Ida y vuelta de red |
| Privacidad | Nunca sale de tu máquina | Enviado a un proveedor |
| Búsqueda | FTS5 + semántica local, multilingüe KO/EN/JA | Varía |
Si quieres memoria sin configuración, sin conexión, sin costo que simplemente sucede mientras trabajas — esto es para ti.
Inyección automática vs. búsqueda explícita
También existe una gran clase de herramientas de búsqueda local (p. ej. ctx) que indexan el historial de tu agente para que puedas consultarlo (search "failed migration"). Eso es complementario, no el mismo trabajo:
| passbaton | Herramientas de búsqueda local (ctx, etc.) | |
|---|---|---|
| Cómo lo usas | Automático — el contexto aparece al inicio de la sesión, sin comandos | Tú (o el agente) ejecutas una consulta de búsqueda |
| Compactación | El hook PreCompact reinyecta un traspaso → 0 contexto re-explicado después de una compactación | No es su función (es un índice de búsqueda) |
| Mejor en | Nunca perder el hilo entre sesiones y compactaciones, sin intervención | Encontrar una decisión/comando pasado específico bajo demanda |
| Cobertura | Claude Code + Codex CLI + Gemini CLI (donde la inyección automática es posible) | A menudo 30+ agentes indexados para búsqueda |
Usa la búsqueda cuando quieras consultar algo. Usa esto cuando quieras que tu contexto te siga sin preguntar.
Soporte para Codex CLI (v1.16.0+)
Más allá de Claude Code, esto también soporta OpenAI Codex CLI. Si ~/.codex existe,
el instalador registra los mismos hooks en ~/.codex/hooks.json (SessionStart,
UserPromptSubmit, PreCompact, Stop), y los hooks detectan automáticamente el host y emiten
el formato de salida correcto (el hookSpecificOutput.additionalContext de Codex).
El mismo sessions.db local se comparte, por lo que el contexto se transfiere entre ambos agentes:
lo que hiciste en Codex está disponible en Claude Code y viceversa.
Alcance: el guardado de sesión + la inyección de contexto funcionan en ambos. El seguimiento
de cambios de archivos de Codex (PostToolUse) aún no está conectado — el guardado de sesión ya cubre la mayor parte
mediante el análisis del transcript. El transcript_path de Codex se trata como una
interfaz inestable (puede ser null al inicio), por lo que la detección del host usa un marcador
--codex inyectado por el instalador en lugar de depender de la ruta.
Soporte para Gemini CLI (v1.17.0+)
También soporta Google Gemini CLI. Si ~/.gemini existe, el instalador registra
los hooks en ~/.gemini/settings.json (SessionStart, BeforeAgent, PreCompress,
SessionEnd — los nombres de eventos de Gemini), preservando tus otras configuraciones. El mismo
sessions.db local compartido, por lo que el contexto se transfiere entre los tres agentes.
El formato de transcript de Gemini se verificó contra archivos ~/.gemini/tmp/.../chats/*.jsonl reales —
usa dos formas (una línea {type, content} plana y una línea de diff
{"$set":{"messages":[…]}} más antigua); el analizador maneja ambas. Al igual que Codex,
transcript_path puede ser null al inicio, por lo que la detección del host usa un marcador --gemini.
Nota honesta de alcance: el guardado de sesión (SessionEnd) y la salida de contexto están verificados y funcionando.
La inyección de contexto SessionStart de Gemini está documentada como solo consultiva en el upstream
(gemini-cli#15413) — si tu
compilación de Gemini no renderiza el contexto inyectado al inicio, eso es un límite del upstream,
no de esta herramienta. La continuidad de sesión sigue funcionando mediante el historial guardado.
Migración desde v1
Si instalaste esto como claude-session-continuity-mcp (v1.x), nada se rompe — los comandos claude-hook-* de v1 siguen disponibles como alias en v2.
Para moverte al nuevo nombre:
npm install -g passbaton # installs the new package
npm uninstall -g claude-session-continuity-mcp # optional: drop the old one
El instalador reescribe tus entradas de hooks a passbaton-hook-* y elimina las líneas antiguas de claude-hook-* — coincide con ambos nombres, por lo que no terminarás con duplicados. Tu sessions.db existente no se toca: todas las sesiones pasadas, memorias y soluciones se transfieren.
Nada más cambia — mismos hooks, misma base de datos, mismo comportamiento.
Inicio Rápido
Requiere Node.js 22+. La dependencia nativa
better-sqlite3solo incluye binarios precompilados para Node 22, 24 y 26 (las líneas actualmente soportadas — Node 18 y 20 están ambos al final de su vida útil). En Node más antiguo, recurre a compilar desde el código fuente, lo que falla sin herramientas de compilación. Node 22 y superiores se instalan limpiamente sin necesidad de compilador.
Recomendado: Instalación Global
npm install -g passbaton
¡Eso es todo! El script postinstall automáticamente:
- Registra el servidor MCP en
~/.claude.json - Instala los Hooks de Claude en
~/.claude/settings.json
¿Por qué Global (-g)?
Esta herramienta está diseñada para rastrear todos tus proyectos de Claude Code en una única base de datos unificada. La instalación global es fuertemente recomendada porque:
| Razón | Detalle |
|---|---|
| Fuente única de verdad | Un binario sirve a cada proyecto — sin desviación de versiones entre proyectos |
| Los hooks tienen alcance de usuario | ~/.claude/settings.json vive en tu directorio de inicio, no por proyecto |
| Contexto entre proyectos | Las sesiones de app-a y app-b comparten la misma DB e índice de búsqueda |
| Una actualización = todo actualizado | npm install -g <latest> actualiza todos los proyectos a la vez; sin reinstalación por proyecto |
| Los hooks se resuelven por nombre de binario | El instalador escribe el nombre de binario simple (passbaton-hook-*) cuando se resuelve en PATH — el caso normal para npm i -g. Medido 135 ms por disparo vs 1,367 ms para npm exec -- … (10×), y PostToolUse se dispara en cada edición. Si el nombre no se resuelve (instalación local), recurre a npm exec -- … |
Agrega la base de datos al .gitignore de tu proyecto. Desde 2.4.0, passbaton crea
<project>/.claude/sessions.db en la primera sesión en cualquier proyecto que reconoce como raíz de
espacio de trabajo, por lo que un proyecto que no tenía base de datos antes obtendrá una:
.claude/sessions.db
.claude/sessions.db-shm
.claude/sessions.db-wal
.claude/*.log
No ignores todo .claude/ — settings.json ahí está destinado a ser confirmado.
Importante: Incluso con instalación global, aún puedes deshabilitar el hook para proyectos específicos (ver abajo). Global ≠ forzado en cada proyecto.
Deshabilitar Hooks para Proyectos Específicos
La instalación global no significa "siempre activo en todas partes". Tienes tres capas de control:
| Capa | Archivo | Alcance |
|---|---|---|
| 1. Global ACTIVADO (predeterminado) | ~/.claude/settings.json | Todos los proyectos |
| 2. DESACTIVADO en todo el proyecto | <project>/.claude/settings.json | Todo el equipo (confirmado) |
| 3. DESACTIVADO solo personal | <project>/.claude/settings.local.json | Solo tú (ignorado por git) |
Para deshabilitar hooks en un proyecto específico, crea el archivo de anulación con arreglos de hooks vacíos:
// <project>/.claude/settings.json (or settings.local.json for personal-only)
{
"hooks": {
"SessionStart": [],
"UserPromptSubmit": [],
"PostToolUse": [],
"PreCompact": [],
"Stop": []
}
}
Los arreglos vacíos anulan la configuración global → las sesiones de ese proyecto ya no se rastrean.
Actualizar a una Nueva Versión
npm install -g passbaton@latest
Ese es el único paso — todos los proyectos toman el nuevo binario en el próximo reinicio de Claude Code. No es necesario reinstalar en cada proyecto.
Alternativa: Instalación Local (No Recomendada)
Si realmente quieres instalación por proyecto (p. ej., versión bloqueada para un proyecto):
cd <project> && npm install passbaton
Inconveniente: debes instalar por separado en cada proyecto, npm exec puede no encontrar la copia local de manera confiable desde el contexto del hook (dependiente del cwd), y pagas el costo de inicio de npm exec (~1.4 s) en cada disparo de hook en lugar de ~135 ms. Quédate con -g a menos que tengas una razón específica.
Qué Se Instala
Servidor MCP (en ~/.claude.json):
{
"mcpServers": {
"project-manager": {
"command": "npx",
"args": ["passbaton"]
}
}
}
Hooks de Claude (en ~/.claude/settings.json):
{
"hooks": {
"SessionStart": [{ "hooks": [{ "type": "command", "command": "passbaton-hook-session-start" }] }],
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "passbaton-hook-user-prompt" }] }],
"PostToolUse": [{ "matcher": "Edit", "hooks": [{ "type": "command", "command": "passbaton-hook-post-tool" }] }, { "matcher": "Write", "hooks": [{ "type": "command", "command": "passbaton-hook-post-tool" }] }],
"PreCompact": [{ "hooks": [{ "type": "command", "command": "passbaton-hook-pre-compact" }] }],
"Stop": [{ "hooks": [{ "type": "command", "command": "passbaton-hook-session-end" }] }]
}
}
Nota (v2.2.1+): Cobertura completa del ciclo de vida con 5 hooks. El instalador verifica si passbaton-hook-* se resuelve en PATH y escribe el nombre simple si es así (≈10× más rápido por disparo); de lo contrario, escribe npm exec -- …, que también encuentra un node_modules/.bin local.
Hooks Instalados (v1.5.0+)
| Hook | Comando | Función |
|---|---|---|
SessionStart | passbaton-hook-session-start | Carga automáticamente el contexto del proyecto al inicio de la sesión |
UserPromptSubmit | passbaton-hook-user-prompt | Inyecta automáticamente memorias relevantes + búsqueda de referencias pasadas |
PostToolUse | passbaton-hook-post-tool | Rastrea archivos activos (Edit, Write) + inyecta automáticamente soluciones de errores (Bash) |
PreCompact | passbaton-hook-pre-compact | Contexto de traspaso estructurado antes de la compresión |
Stop | passbaton-hook-session-end | Extrae commits, decisiones, pares error-corrección del transcript |
Gestión Manual de Hooks
# Check hook status
npx passbaton-hooks status
# Reinstall hooks
npx passbaton-hooks install
# Remove hooks
npx passbaton-hooks uninstall
3. Reinicia Claude Code
Después de la instalación, reinicia Claude Code para activar los hooks.
Características
| Característica | Descripción |
|---|---|
| 🤖 Cero Trabajo Manual | Los Hooks de Claude automatizan toda la captura/carga de contexto |
| 🎯 Solo Memoria de Calidad | (v1.10.0) Solo decisiones, aprendizajes, errores — sin ruido de cambios de archivos |
| 🧠 Búsqueda Semántica | Embedding multilingual-e5-small (94+ idiomas, 384d) |
| 🌍 Multilingüe | Coreano/Inglés/Japonés + búsqueda entre idiomas (EN→KR, KR→EN) |
| 🔗 Integración con Git | Mensajes de commit extraídos automáticamente de los transcripts |
| 🕸️ Grafo de Conocimiento | Relaciones de memoria (resuelve, causa, extiende...) |
| 📊 Clasificación de Memoria | 5 tipos: observación, decisión, aprendizaje, error, patrón |
| ✅ Verificación Integrada | Ejecución de build/test/lint con un clic |
| 📋 Gestión de Tareas | Gestión de tareas basada en prioridades |
| 🔧 Auto Error→Solución | (v1.12.0) Los errores de Bash se detectan automáticamente → inyecta soluciones pasadas; al final de la sesión registra automáticamente pares error-corrección |
| 💰 Eficiencia de Tokens | (v1.11.0) Se eliminó loadContext de UserPromptSubmit (ahorra 24-60K tokens/sesión) |
| 📑 Divulgación Progresiva | (v1.11.0) memory_search devuelve primero el índice, memory_get para el contenido completo |
| ⏳ Decaimiento Temporal | (v1.11.0) Puntuación de memoria con vidas medias específicas por tipo para relevancia |
| 📝 Traspaso Estructurado | (v1.10.0) PreCompact guarda resumen de trabajo, archivos activos, acciones pendientes |
| 🚪 Fin de Sesión Inteligente | (v1.10.0) Extrae commits, decisiones, pares error-corrección del transcript |
| 🗑️ Limpieza Automática de Ruido | (v1.10.0) Elimina automáticamente memorias de observación obsoletas (3d+) |
| 🔍 Detección de Referencias Pasadas | (v1.8.0) "¿Cómo hiciste X la última vez?" busca automáticamente en la DB |
| 📝 Extracción de Directivas del Usuario | (v1.8.0) Extrae automáticamente reglas "siempre/nunca" de los prompts |
Alternadores de características — todo es opcional
(v2.1.0+) Seis comportamientos se pueden activar/desactivar individualmente; el resto se muestran por
transparencia pero están siempre activos (la mera existencia de un hook está controlada por tu
settings.json, no por la configuración) o aún no conectados. La configuración vive en un
archivo JSON plano y editable a mano (~/.claude/passbaton.config.json), separado de tus datos,
por lo que sobrevive a un reinicio de la base de datos. Sin archivo = valores predeterminados actuales (nada cambia para los usuarios existentes).
passbaton config # grouped table; ●/○ = toggleable, · = always on
passbaton config set solutionCapture off # flip a toggleable feature
passbaton config set strictSolutionGate on # opt into the strict error→fix filter
passbaton config preset minimal # minimal | default | everything
passbaton config reset # back to defaults
passbaton config path # print the active config file path
Intentar set una función siempre activa / aún no conectada se rechaza con un mensaje claro.
Cada función activable también tiene una anulación de entorno para uso puntual/CI:
PASSBATON_<FEATURE>=0 (p. ej., PASSBATON_SOLUTIONCAPTURE=0) tiene prioridad sobre el archivo de configuración.
Regla de activación predeterminada: una función se lanza activa solo si es silenciosa, segura y universalmente útil. Cualquier cosa que hable sin que se le pida, adivine o escriba filas especulativas se lanza inactiva.
Leyenda: ●/○ = activable (activo/inactivo) · · = siempre activo, no es un interruptor de configuración · ⋯ = aún no conectado.
Núcleo (activo por defecto)
| Función | Clave | Interruptor | Qué hace |
|---|---|---|---|
| Inyección de inicio de sesión | sessionStart | · siempre activo | Restaurar el contexto anterior al inicio |
| Traspaso de compactación+ | compactionHandover | ● activable | Antes de una compactación, transfiere tu estado de trabajo más archivos activos y el último estado de compilación — la única brecha que la memoria automática de la plataforma estructuralmente no puede cubrir |
| Persistencia de sesión | sessionEnd | · siempre activo | Guardar el estado de la sesión al salir |
| Superficie de memoria automática | autoInject | · siempre activo | Mostrar automáticamente recuerdos pasados relevantes al inicio |
| Seguimiento de tareas | taskTracking | · siempre activo | Leer/escribir la lista de tareas mediante MCP + hooks |
| Pre-calentamiento de ruta activa | hotPathPrewarm | ● activable | Al inicio, mostrar los archivos que más editas en este proyecto, clasificados por recuento de acceso real |
| Registro de verificación | verificationLedger | ● activable | Advertir al inicio si una sesión reciente dejó la compilación en rojo o problemas abiertos |
sessionStart/sessionEndestán "siempre activos" porque un hook se ejecuta o no — eso está controlado por el registro del hook en~/.claude/settings.json, no por la configuración. Para desactivarlos, elimina el hook allí.
Entre agentes (activo por defecto)
| Función | Clave | Interruptor | Qué hace |
|---|---|---|---|
| Compartir entre agentes | crossAgentSync | · inherente | Una base de datos local compartida entre Claude Code / Codex / Gemini (no es un interruptor — es cómo funciona el almacenamiento) |
| Captura de uso de herramientas | postToolCapture | · siempre activo | Observar el uso de herramientas para construir rutas activas (bajo ruido) |
| Captura de soluciones | solutionCapture | ● activable | Registrar automáticamente pares error→solución en un archivo de soluciones. Configúralo en inactivo para omitirlo por completo (el guardado de sesión no se ve afectado) |
Experimental (inactivo por defecto)
| Función | Clave | Interruptor | Qué hace |
|---|---|---|---|
| Puerta de soluciones estricta | strictSolutionGate | ○ opt-in | Filtro de captura error→solución más estricto — menos entradas de ruido, pero puede descartar algunas reales |
| Coincidencia de disparadores | triggerMatching | ⋯ aún no conectado | (planificado) Coincidir palabras clave de prompts para auto-inyectar soluciones |
| Minería de patrones | patternMining | ⋯ aún no conectado | (planificado) Extraer patrones de trabajo y sugerir flujos de trabajo |
| Auto-almacenamiento de memoria | memoryAutoStore | ⋯ aún no conectado | (planificado) Escribir automáticamente memorias de observación desde prompts |
| Línea de estado | statusLineInject | ⋯ aún no conectado | (planificado) Añadir una línea de estado passbaton a la salida de inicio de sesión |
| Traza de hooks | hookTrace | ○ opt-in | Diagnósticos: una línea por disparo de SessionStart / PostToolUse en <workspace>/.claude/hook-trace.log, con pid y el ws_root resuelto. Inactivo por defecto porque PostToolUse se dispara en cada edición. Limitado a 5 MB (se conserva una generación). Registra rutas de archivo absolutas en texto plano — añade .claude/hook-trace.log a .gitignore si tu repositorio rastrea .claude/ |
Las únicas banderas realmente modificables por el usuario hoy son compactionHandover, hotPathPrewarm,
verificationLedger, solutionCapture (activas) y strictSolutionGate, hookTrace (opt-in).
Activar
hookTraceen Windows: edita~/.claude/passbaton.config.json(o ejecutapassbaton config set hookTrace on). La anulación de entornoPASSBATON_HOOKTRACE=1también funciona, pero los hooks se lanzan desdesettings.jsona través decmd.exe, donde un prefijoVAR=1 commandes un error de sintaxis — así que el archivo de configuración es la vía práctica.
Hooks de Claude - Sistema de Contexto Automático
Cómo Funciona
Hook SessionStart (npx passbaton-hook-session-start):
- Detecta automáticamente el proyecto: monorepo (
apps/project-name/) o proyecto único (package.jsonnombre de carpeta raíz) - Carga el contexto desde
.claude/sessions.db - Inyecta: Estado actual, 3 sesiones recientes con commits/decisiones, directivas, tareas pendientes, memorias clave filtradas
- Limpia automáticamente memorias de ruido obsoletas (3d+ auto-rastreadas, 14d+ auto-compactadas)
Hook UserPromptSubmit (npx passbaton-hook-user-prompt):
- Se ejecuta en cada envío de prompt
- (v1.11.0) Ya no llama a loadContext() — ahorra 24-60K tokens/sesión
- Inyecta contexto relevante (filtrado: solo decisiones, aprendizajes, errores)
Hook PostToolUse (npx passbaton-hook-post-tool):
- Rastrea rutas de archivos activos y actualiza
active_context.recent_files - (v1.12.0) Detecta automáticamente errores de Bash → busca en la base de datos de soluciones → inyecta soluciones pasadas en el contexto
- Ya no crea memorias de observación (v1.10.0 — elimina el ruido de
[File Change])
Hook PreCompact (npx passbaton-hook-pre-compact):
- Construye contexto de traspaso estructurado: resumen de trabajo, archivo activo, acción pendiente, hechos clave, errores recientes
- Ya no almacena memorias auto-compactadas (v1.10.0)
Hook Stop (npx passbaton-hook-session-end):
- Extrae mensajes de commit de la transcripción JSONL (patrones
git commit -m) - Extrae pares error-solución (error → resolución dentro de 3 mensajes)
- (v1.12.0) Registra automáticamente pares error→solución en la tabla de soluciones para reutilización futura
- Extrae decisiones (patrones "porque", "en lugar de", "elegí")
- (v1.11.0) Análisis de transcripción de una sola pasada (4 lecturas JSONL → 1)
- Almacena metadatos estructurados en la columna
sessions.issuescomo JSON
Ejemplo de Salida (Inicio de Sesión)
# my-app - Session Resumed
📍 **State**: Implementing signup form
🚧 **Blocker**: OAuth callback URL issue
## Recent Sessions
### 2026-02-28
**Work**: Completed OAuth integration
**Commits**: feat: add OAuth handler; fix: redirect config
**Decisions**: Use Server Actions over API routes
**Next**: Implement form validation
## Directives
- 🔴 Always use Zod for validation
## Pending Tasks
- 🔄 [P8] Implement form validation
- ⏳ [P5] Add error handling
## Key Memories
- 🎯 Decided on App Router, using Server Actions
- ⚠️ OAuth redirect_uri mismatch → check env file
Gestión de Hooks
# Check status
npx passbaton-hooks status
# Reinstall
npx passbaton-hooks install
# Remove
npx passbaton-hooks uninstall
# Temporarily disable
export MCP_HOOKS_DISABLED=true
Detección de Referencias Pasadas (v1.8.0)
Cuando preguntas sobre trabajo pasado, el hook UserPromptSubmit busca automáticamente en la base de datos:
You: "저번에 인앱결제 어떻게 했어?"
→ Hook detects "저번에" + extracts keyword "인앱결제"
→ Searches sessions, memories (FTS5), and solutions
→ Injects matching results into context automatically
Patrones admitidos (coreano e inglés):
| Patrón | Ejemplo |
|---|---|
| 저번에/전에/이전에 ... 어떻게 | "저번에 CORS 에러 어떻게 해결했지?" |
| ~했던/만들었던/해결했던 | "수정했던 로그인 로직" |
| 지난 세션/작업에서 | "지난 세션에서 결제 구현" |
| last time/before/previously | "How did we handle auth last time?" |
| did we/did I ... before | "Did we fix the database migration before?" |
| remember when/recall when | "Remember when we set up CI?" |
Ejemplo de salida:
## Related Past Work (auto-detected from your question)
### Sessions
- [2/14] 카카오 로그인 앱키 수정, 인앱결제 IAP 플로우 수정
### Memories
- 🎯 [decision] 테스트: 인앱결제 상품 등록 완료
### Solutions
- **IAP_BILLING_ERROR**: StoreKit 2 migration으로 해결
¿Por qué npm exec? (v1.4.3+)
Las versiones anteriores usaban rutas absolutas o npx:
// v1.3.x - absolute paths (broke on multi-project)
"command": "node \"/path/to/project-a/node_modules/.../session-start.js\""
// v1.4.0-1.4.2 - npx (required global install or hit npm registry)
"command": "npx passbaton-hook-session-start"
Ahora usamos npm exec --:
"command": "passbaton-hook-session-start"
npm exec -- encuentra el node_modules/.bin local primero, luego recurre al global. Funciona con instalación local y global sin tocar el registro de npm.
Herramientas (API v5) - 25 Herramientas Enfocadas
1. Ciclo de Vida de Sesión (4) ⭐
// Start of session - auto-loads context
session_start({ project: "my-app", compact: true })
// End of session - auto-saves context
session_end({
project: "my-app",
summary: "Completed auth flow",
modifiedFiles: ["src/auth.ts", "src/login/page.tsx"]
})
// View session history
session_history({ project: "my-app", limit: 5 })
// Semantic search past sessions
search_sessions({ query: "auth work", project: "my-app" })
2. Gestión de Proyectos (4)
// Get project status with task stats
project_status({ project: "my-app" })
// Initialize new project
project_init({ project: "my-app" })
// Analyze project tech stack
project_analyze({ project: "my-app" })
// List all projects
list_projects()
3. Gestión de Tareas (4)
// Add a task
task_add({ project: "my-app", title: "Implement signup", priority: 8 })
// Update task status
task_update({ taskId: 1, status: "done" })
// List tasks
task_list({ project: "my-app", status: "pending" })
// Suggest tasks from TODO comments
task_suggest({ project: "my-app" })
4. Archivo de Soluciones (3)
// Record an error solution
solution_record({
errorSignature: "TypeError: Cannot read property 'id'",
solution: "Use optional chaining: user?.id"
})
// Find similar solutions (keyword or semantic)
solution_find({ query: "TypeError property", semantic: true })
// AI-powered solution suggestion
solution_suggest({ errorMessage: "Cannot read property 'email'" })
5. Verificación (3)
// Run build
verify_build({ project: "my-app" })
// Run tests
verify_test({ project: "my-app" })
// Run all (build + test + lint)
verify_all({ project: "my-app" })
6. Sistema de Memoria (5)
// Store a classified memory
memory_store({
content: "State management with Riverpod makes testing easier",
type: "learning", // observation, decision, learning, error, pattern
project: "my-app",
tags: ["flutter", "state-management"],
importance: 8,
relatedTo: 23 // Connect to existing memory
})
// Search memories — returns index (id, type, tags, score) for token efficiency
memory_search({
query: "state management test",
type: "learning",
semantic: true, // Use embedding similarity
limit: 10
})
// Get full memory content by ID (v1.11.0)
memory_get({ memoryId: 23 })
// Find related memories (graph + semantic)
memory_related({
memoryId: 23,
includeGraph: true,
includeSemantic: true
})
// Get memory statistics
memory_stats({ project: "my-app" })
7. Grafo de Conocimiento (2)
// Connect two memories with a typed relation
graph_connect({
sourceId: 23,
targetId: 25,
relation: "solves", // related_to, causes, solves, depends_on, contradicts, extends, example_of
strength: 0.9
})
// Explore knowledge graph
graph_explore({
memoryId: 23,
depth: 2,
relation: "all", // or specific relation type
direction: "both" // outgoing, incoming, both
})
Tipos de Memoria
| Tipo | Descripción | Caso de Uso |
|---|---|---|
observation | Patrones, estructuras encontradas en el código | "Todas las pantallas están separadas en la carpeta features/" |
decision | Arquitectura, elecciones de bibliotecas | "Decidimos usar SharedPreferences para el caché" |
learning | Nuevo conocimiento, mejores prácticas | "Riverpod es mejor para pruebas" |
error | Errores ocurridos y soluciones | "Provider.read() no reconstruye → usa watch()" |
pattern | Patrones de código recurrentes, convenciones | "Evitar el abuso de la palabra clave late" |
Tipos de Relación
| Relación | Descripción | Ejemplo |
|---|---|---|
related_to | Relación general | A y B están relacionados |
causes | A causa B | Decisión de caché → cambio en la estructura de carpetas |
solves | A resuelve B | Aprendizaje de Riverpod → corrección de bug de Provider |
depends_on | A depende de B | Estructura de carpetas → Decisión de caché |
contradicts | A entra en conflicto con B | Dos decisiones de diseño entran en conflicto |
extends | A extiende B | Patrón late → Extendido al aprendizaje de Riverpod |
example_of | A es ejemplo de B | Código específico es ejemplo de patrón |
Almacenamiento de Datos
Base de datos SQLite en ~/.claude/sessions.db:
| Tabla | Propósito |
|---|---|
memories | Memorias clasificadas (observación, decisión, aprendizaje, error, patrón) |
memories_fts | Índice de búsqueda de texto completo (FTS5) |
memory_relations | Relaciones del grafo de conocimiento |
embeddings_v4 | Vectores de búsqueda semántica (multilingual-e5-small, 384d) |
project_context | Información fija del proyecto (stack tecnológico, decisiones) |
active_context | Estado de trabajo actual |
tasks | Lista de tareas pendientes |
solutions | Archivo de soluciones de errores |
sessions | Historial de sesiones |
Variables de Entorno
| Variable | Predeterminado | Descripción |
|---|---|---|
WORKSPACE_ROOT | - | Ruta raíz del espacio de trabajo (obligatoria) |
MCP_HOOKS_DISABLED | false | Desactivar Hooks de Claude |
LOG_LEVEL | info | Nivel de registro (debug/info/warn/error) |
LOG_FILE | - | Ruta opcional de registro en archivo |
Desarrollo
# Clone
git clone https://github.com/leesgit/passbaton.git
cd passbaton
# Install
npm install
# Build
npm run build
# Test
npm test
# Test with coverage
npm run test:coverage
Rendimiento
| Métrica | Valor |
|---|---|
| Carga de contexto (en caché) | <5ms |
| Búsqueda de memoria (FTS) | ~10ms |
| Búsqueda semántica | ~50ms |
| Verificación de compilación | Depende del proyecto |
Hoja de Ruta
- API v2 (15 herramientas enfocadas)
- API v4 (24 herramientas - memoria + grafo)
- Hooks de Claude v5 (captura automática)
- Grafo de conocimiento con relaciones tipadas
- Clasificación de memoria (6 tipos)
- Búsqueda semántica (embeddings)
- Detección de patrones multilingüe (KO/EN/JA)
- Integración de commits de Git
- 111 pruebas (6 suites de pruebas)
- GitHub Actions CI/CD
- Búsqueda semántica multilingüe (v1.6.0 - multilingual-e5-small)
- Búsqueda entre idiomas EN↔KR (v1.6.0)
- Búsqueda semántica de soluciones (v1.6.0)
- Corrección de ruta del archivo de configuración de hooks (v1.6.1 - settings.json, no settings.local.json)
- Migración automática de hooks heredados (v1.6.1)
- Corrección del formato del matcher de PostToolUse a string (v1.6.3)
- Corrección de la documentación README para el nuevo formato de hooks (v1.6.4)
- Omisión de sesión vacía y mejoras en el guardado de techStack (v1.7.1)
- Detección automática de referencias pasadas en el hook UserPromptSubmit (v1.8.0)
- Extracción de directivas de usuario (reglas "siempre/nunca") (v1.8.0)
- Revisión de calidad de memoria — sin más ruido de
[File Change](v1.10.0) - Contexto de traspaso estructurado en PreCompact (v1.10.0)
- Fin de sesión inteligente: extracción de commit/decisión/error-solución de la transcripción (v1.10.0)
- Limpieza automática de ruido (observaciones 3d+, auto-compactación 14d+) (v1.10.0)
- Visualización de 3 sesiones recientes con metadatos estructurados (v1.10.0)
- Eficiencia de tokens — eliminar loadContext de UserPromptSubmit, ahorra 24-60K tokens/sesión (v1.11.0)
- Análisis de transcripción de una sola pasada, 4 lecturas JSONL → 1 (v1.11.0)
- Decaimiento temporal para puntuación de memoria con semividas específicas por tipo (v1.11.0)
- Divulgación progresiva — memory_search devuelve índice, memory_get para contenido completo (v1.11.0)
- Consolidación de memoria mediante similitud de Jaccard (v1.11.0)
- Pipeline automático error→solución — PostToolUse detecta errores de Bash, inyecta soluciones pasadas (v1.12.0)
- SessionEnd registra automáticamente pares error-solución en la tabla de soluciones (v1.12.0)
- Búsqueda de soluciones entre proyectos con priorización del proyecto actual (v1.12.0)
- Búsqueda vectorial nativa sqlite-vec (v2 - cuando los datos > 1000 registros)
- Panel web
- Opción de sincronización en la nube
Contribuciones
¡Se aceptan PRs! Por favor:
- Haz un fork del repositorio
- Crea una rama de características
- Añade pruebas para las nuevas funcionalidades
- Asegúrate de que
npm testpase - Envía un pull request
Licencia
MIT © Byeongchang Lee
Agradecimientos
- Model Context Protocol por Anthropic
- Xenova Transformers para embeddings
Si esto te ahorra tener que volver a explicar tu proyecto, considera darle una ⭐ — realmente ayuda a que otros lo encuentren.