OSS · Plugin de Claude Code
compact-ops
Después de /compact, tu agente olvida lo que estaba haciendo.
compact-ops escribe un archivo de estado estructurado de 10 secciones antes de cada compactación y lo inyecta de vuelta justo después del compact y en claude --resume. Solo hooks oficiales, todos fail-open. Instálalo una vez y luego usa /compact como siempre.
Deja el summary intacto. El seguro se pone por fuera.
Descargar en GitHub Cómo funciona →
Gratis · MIT · solo hooks oficiales · nada sale de tu máquina salvo tu propia llamada al CLI claude
- 10 secciones fijas por archivo de estado
- 60% de aviso de uso, umbral configurable
- 72h de ventana de fallback en resume
- 30d de retención del estado en disco
- Sin descarrilar tras el compact el agente retoma con summary + estado, dos pistas en lugar de una
- Sin auto-compact sorpresa un aviso al 60% con recitación de 3 líneas: plan, fase, última decisión
- Sobrevive a un reinicio del PC claude --resume reinyecta el estado más reciente dentro de 72 horas
- No rompe nada al romperse todos los hooks son fail-open; la compactación estándar siempre pasa
Cuatro hooks, sin daemon
Cada uno de estos es un evento de hook oficial de Claude Code. Sin proceso en segundo plano, sin polling.
-
PreCompactRespalda el transcript (gzip) y un LLM escribe el archivo de estado de 10 secciones -
PostCompactReinicia el cooldown del aviso de uso -
SessionStartmatcher compact | resume: inyecta el archivo de estado y la nota de relectura de los originales -
UserPromptSubmitCalcula el uso de contexto desde el transcript; avisa una sola vez al superar el umbral
Los cuatro son fail-open. Si los cuatro fallan, la compactación corre exactamente como si compact-ops nunca se hubiera instalado.
Tres pasos
-
claude plugin install compact-opsClona el repo, añádelo como marketplace local, instala. Una sola vez. -
/compactCompacta como siempre. El PreCompact respalda el transcript y escribe el archivo de estado solo. -
recuperación inyectadaEl contexto nuevo recibe el estado, una nota para releer los originales y la lista de skills invocadas.
Para quién es
- Usuarios intensivos de Claude Code con sesiones que cruzan una o más compactaciones al día
- Operadores de agentes que corren sesiones largas o programadas y las retoman al día siguiente con claude --resume
- Equipos que traspasan sesiones el archivo de estado es Markdown puro que un humano lee como nota de traspaso
- Autores de hooks un ejemplo completo de plugin hecho solo con hooks oficiales, fail-open de punta a punta
Cuándo usarlo
- Cuando el auto-compact ya se tragó una decisión a mitad de tarea: el aviso al 60% te deja elegir el momento
- Antes de trabajos de varios días: el estado sobrevive a la compactación, al cierre de la sesión y a un reinicio del PC
- Cuando el agente vuelve a pedir una aprobación que ya tenía, o repite un enfoque que ya falló: esas son exactamente las secciones fijas del archivo de estado
- Si alguna vez le dijiste a un agente pos-compact "eso ya lo decidimos", este plugin existe para ese incidente
Instalación
git clone https://github.com/kenimo49/compact-ops.git
claude plugin marketplace add /path/to/compact-ops --scope user
claude plugin install compact-ops@compact-ops-local Requiere Claude Code v2.x, jq y el CLI claude como backend de LLM. Soporta Linux y macOS. Después de instalar, basta ejecutar /compact como siempre; los hooks se encargan del resto.
Qué hace
- PreCompact: respalda el transcript (gzip, el JSONL se reduce a cerca de 1/10) y un LLM escribe un archivo de estado con 10 secciones: plan activo, decisiones, bloqueos, archivos en edición e intentos fallidos
- Justo después de la compactación: inyecta en el contexto nuevo el archivo de estado, una nota para releer los originales y la lista de skills ya invocadas
- En claude --resume: la misma inyección de recuperación, con fallback al estado más reciente del proyecto dentro de 72 horas, sobreviviendo a un reinicio del PC
- Aviso de uso de contexto calculado por el propio plugin (por defecto 60%): recomienda /compact una sola vez, con recitación de 3 líneas del plan, la fase y la última decisión
- El estado persiste en ~/.claude/compact-ops/ con retención de 30 días, organizado por proyecto; el session_id pasa una validación de allowlist antes de usarse en una ruta
- La salida del LLM se valida en las 10 secciones antes de escribirse; una salida inválida conserva el estado anterior y falla en abierto
- Derivado de u-ichi/compact-plus (MIT), hecho autocontenido: sin scripts externos de statusline y con backends de LLM solo en Claude (Sonnet primario, Haiku de fallback)
Con y sin compact-ops
Mismo algoritmo de compactación, mismo summary integrado. La diferencia es todo lo que hay alrededor.
| Momento | Claude Code a secas | Con compact-ops |
|---|---|---|
| El uso pasa del 60% | Sin aviso. El auto-compact llega sin anunciarse | Una notificación + recitación de 3 líneas: plan, fase, última decisión |
| El compact en sí | El prompt integrado genera el summary; contenido no controlable | La misma compresión, más backup del transcript y un estado de 10 secciones |
| Justo después del compact | El agente sigue solo con el summary | Estado + nota de relectura de los originales inyectados en el contexto nuevo |
| Tras cerrar la sesión | El summary solo existe dentro de esa sesión | El estado queda 30 días en disco y se inyecta en claude --resume |
| Cuando un hook falla | — | Fail-open: la compactación estándar pasa intacta |
Fuente: el README del proyecto. El algoritmo de compresión queda intocado; todo son hooks oficiales acoplados desde fuera.
Cómo queda el archivo de estado
Uso
# compacta como siempre, los hooks se encargan del resto
/compact
# los argumentos se vuelven guía prioritaria para el generador de estado
/compact conserva todas las decisiones de diseño
# ajusta con el bloque env de ~/.claude/settings.json
COMPACT_OPS_WARN_THRESHOLD=70
COMPACT_OPS_PRIMARY_BACKEND=""
COMPACT_OPS_DEBUG=1 Probado en campo en su propio lanzamiento
El primer beneficiario fue la sesión que lo construyó. Tres momentos de uso real, sin montaje:
- Durante el trabajo de release de la v0.2.0, el propio aviso del 60% saltó al 67% dentro de la misma sesión que hacía el release: el autor escribió el aviso y fue salvado por él esa misma noche.
- Minutos después, una reorganización de directorios rompió tres de sus hooks a mitad de sesión. La compactación terminó intacta de todos modos, porque todo hook es fail-open: el modo de fallo se probó en producción por accidente.
- Esta página que estás leyendo se revisó en una sesión que cruzó dos compactaciones, retomando cada vez desde el archivo de estado que ella misma describe.
El log del día del lanzamiento, incluido el aviso del 67% y la falla triple de hooks, está escrito completo en el blog del proyecto (en japonés y portugués).
Costes a conocer: cada compact añade una llamada de LLM para generar el estado (por defecto Sonnet; se puede bajar a Haiku o desactivar vía env). Los archivos de estado y los backups guardan la conversación íntegra; se crean con umask 077 (directorios 700, archivos 600), se quedan en tu máquina y se borran automáticamente a los 30 días.
Por qué existe este plugin
El summary integrado se defiende bien con el código. Lo que pierde son hechos operativos: "el push ya está aprobado", "este enfoque ya se intentó y falló", "ese número salió de aquel archivo". Cuando eso desaparece, el agente vuelve a pedir aprobaciones, repite callejones sin salida, y pagas dos veces por el mismo trabajo. compact-ops da a esos hechos secciones fijas propias y los guarda fuera del summary. Hubo una línea de diseño innegociable: el archivo de estado nunca se trata como más confiable que los archivos del proyecto. Un resumen de LLM creído a ciegas por otro LLM es solo un teléfono descompuesto acelerado, así que la guía de recuperación siempre apunta de vuelta a los originales.
Junto a compact-plus y al Claude Code a secas
compact-ops es un derivado de u-ichi/compact-plus (MIT), pionero de la idea de escribir estado estructurado antes del compact. Las diferencias de abajo son las razones de que exista el derivado.
| compact-ops | compact-plus | Claude Code a secas | |
|---|---|---|---|
| Aviso de uso | Calculado por el propio plugin, sin setup extra | Depende de un script de statusline de otro repo | Ninguno; el auto-compact llega sin aviso |
| Dónde vive el estado | ~/.claude/compact-ops/, 30 días, por proyecto | $TMPDIR (se pierde al reiniciar) | El summary solo vive dentro de la sesión |
| Recuperación en --resume | ✓ con fallback de 72h en el mismo proyecto | — | — |
| Inyección tras el compact | Directa, vía el matcher compact de SessionStart | Archivo marker y luego el siguiente UserPromptSubmit (dos hooks) | — |
| Backend de LLM | Sonnet primario, Haiku de fallback: solo Claude | Sonnet primario, Codex de fallback (asume ChatGPT Pro) | — |
| Licencia | MIT | MIT | — |
La idea central, un hook PreCompact que llama a un segundo LLM para escribir estado estructurado, viene de compact-plus. La tabla recoge las diferencias documentadas en el README a julio de 2026; si sus premisas encajan con tu entorno, compact-plus es una buena elección.
FAQ
¿Cuánto cuesta cada compact?
Una llamada extra de LLM para generar el estado (por defecto Sonnet, con fallback en Haiku). Puedes apuntar COMPACT_OPS_PRIMARY_BACKEND a Haiku para abaratarlo, o dejarlo vacío para desactivar solo la generación de estado y conservar los demás hooks.
¿Cambia el summary integrado?
No cambia. El algoritmo de compresión y el summary quedan intocados; todo ocurre en hooks oficiales alrededor. Tras el compact, el agente simplemente tiene dos pistas, el summary y el archivo de estado, en lugar de una.
¿A dónde van los datos de mi conversación?
Los archivos de estado y los backups se quedan en ~/.claude/compact-ops/ en tu máquina, creados con umask 077 y borrados a los 30 días. La única llamada de red es la generación de estado a través de tu propio CLI claude, el mismo canal que tu sesión ya usa.
¿Funciona también con el auto-compact?
Sí. El PreCompact se dispara tanto en la compactación manual como en la automática, así que el backup y el estado siempre se escriben. Un límite conocido: el aviso de uso se calcula en UserPromptSubmit, así que si un solo turno quema contexto suficiente para disparar el auto-compact antes de tu siguiente mensaje, el aviso no llega antes.
¿Debe el agente confiar en el archivo de estado?
Como mapa, sí; como territorio, nunca. La guía inyectada dice explícitamente que el estado es menos confiable que los archivos del proyecto, los planes y las skills, y manda al agente releer los originales antes de actuar.
¿En qué se diferencia de compact-plus?
Tres cambios: el aviso de uso es autocontenido en lugar de depender de un script externo de statusline, el estado persiste 30 días en ~/.claude/ en lugar de $TMPDIR, y claude --resume también recibe inyección de recuperación con fallback de 72 horas. Los backends son solo Claude. La tabla de arriba tiene la lista completa.
¿Por qué no mejorar el propio prompt del summary?
Porque ese lugar está cerrado: el prompt de compactación integrado no está expuesto. Los hooks oficiales son la superficie soportada, y quedarse en ellos significa que el plugin sigue funcionando entre actualizaciones de Claude Code y puede permitirse ser fail-open.
¿Funciona fuera de Claude Code?
No. Está construido sobre los eventos de hook de Claude Code v2.x (PreCompact, SessionStart, UserPromptSubmit) y asume el CLI claude como backend. Otros CLIs de agente tienen superficies de hook distintas.
Sobre el autor
Creado por Ken Imoto: más de 300 artículos técnicos en Zenn, Qiita, Dev.to y este sitio, más de 40 libros en 4 idiomas, más de 400 mil páginas vistas en Zenn y Qiita, 4 artículos de investigación en Zenodo y creador del LLMO Framework.
Herramientas relacionadas para devs
- rhythm-lens Measures the rhythm of Japanese, English and Portuguese Markdown (sentence-length burstiness, paragraph structure) against measured human/AI distributions from two published papers. A writing feedback instrument, not an AI detector.
- claude-shift Multi-account Claude Code manager. Switch the active login, sync the two-file auth Claude Code actually reads (~/.claude/.credentials.json + ~/.claude.json), and watch 5-hour and weekly usage across all accounts. CLI + local API + Chrome extension.
- opencut-mcp Servidor MCP que maneja OpenCut classic desde cualquier cliente MCP. Playwright mantiene la sesión del editor; doce herramientas exponen la línea de tiempo, assets y pipeline de export. Corre contra un fork de OpenCut classic.
- mcp-scorecard Pre-flight checks for MCP servers: passive token footprint, use-case scoping, security, and name safety. LLM-facing quality scorecard.