OSS · Plugin de Claude Code
compact-ops
Depois do /compact, seu agente esquece o que estava fazendo.
O compact-ops grava um arquivo de estado estruturado com 10 seções antes de cada compactação e o injeta de volta logo após o compact e no claude --resume. Só hooks oficiais, todos fail-open. Instale uma vez e depois use /compact normalmente.
Ele deixa o summary intacto. O seguro é feito por fora.
Baixar no GitHub O log real do lançamento →
Grátis · MIT · só hooks oficiais · nada sai da sua máquina além da sua própria chamada ao CLI claude
- 10 seções fixas por arquivo de estado
- 60% de aviso de uso, limiar configurável
- 72h de janela de fallback no resume
- 30d de retenção do estado em disco
- Sem descarrilar após o compact o agente retoma com summary + estado, duas pistas em vez de uma
- Sem auto-compact surpresa um aviso aos 60% com recitação de 3 linhas: plano, fase, última decisão
- Sobrevive a um reboot do PC o claude --resume reinjeta o estado mais recente em até 72 horas
- Não quebra nada ao quebrar todos os hooks são fail-open; a compactação padrão sempre passa
Quatro hooks, sem daemon
Cada um destes é um evento de hook oficial do Claude Code. Sem processo em segundo plano, sem polling.
-
PreCompactFaz backup do transcript (gzip) e um LLM escreve o arquivo de estado de 10 seções -
PostCompactReseta o cooldown do aviso de uso -
SessionStartmatcher compact | resume: injeta o arquivo de estado e a nota de releitura dos originais -
UserPromptSubmitCalcula o uso de contexto a partir do transcript; avisa uma vez ao passar do limiar
Os quatro são fail-open. Se todos falharem, a compactação roda exatamente como se o compact-ops nunca tivesse sido instalado.
Três passos
-
claude plugin install compact-opsClone o repo, adicione como marketplace local, instale. Uma vez só. -
/compactCompacte como sempre. O PreCompact faz backup do transcript e grava o arquivo de estado sozinho. -
recuperação injetadaO contexto novo recebe o estado, uma nota para reler os originais e a lista de skills invocadas.
Para quem é
- Usuários intensivos de Claude Code com sessões que cruzam uma ou mais compactações por dia
- Operadores de agentes que rodam sessões longas ou agendadas e as retomam no dia seguinte com claude --resume
- Times que passam sessões adiante o arquivo de estado é Markdown puro que um humano lê como nota de handoff
- Autores de hooks um exemplo completo de plugin feito só com hooks oficiais, fail-open do início ao fim
Quando usar
- Quando o auto-compact já engoliu uma decisão no meio da tarefa: o aviso aos 60% deixa você escolher o momento
- Antes de trabalhos de vários dias: o estado sobrevive à compactação, ao fechamento da sessão e a um reboot do PC
- Quando o agente pede de novo uma aprovação que já tinha, ou repete uma abordagem que já falhou: são exatamente as seções fixas do arquivo de estado
- Se você já disse a um agente pós-compact "isso a gente já decidiu", este plugin existe para esse incidente
Instalação
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 Requer Claude Code v2.x, jq e o CLI claude como backend de LLM. Suporta Linux e macOS. Depois de instalar, basta rodar /compact normalmente; os hooks cuidam do resto.
O que ele faz
- PreCompact: faz backup do transcript (gzip, o JSONL encolhe para cerca de 1/10) e um LLM grava um arquivo de estado com 10 seções: plano ativo, decisões, bloqueios, arquivos em edição e tentativas que falharam
- Logo após a compactação: injeta no contexto novo o arquivo de estado, uma nota para reler os originais e a lista de skills já invocadas
- No claude --resume: a mesma injeção de recuperação, com fallback para o estado mais recente do projeto em até 72 horas, sobrevivendo a um reboot do PC
- Aviso de uso de contexto calculado pelo próprio plugin (padrão 60%): recomenda /compact uma única vez, com recitação de 3 linhas do plano, da fase e da última decisão
- O estado persiste em ~/.claude/compact-ops/ com retenção de 30 dias, organizado por projeto; o session_id passa por validação de allowlist antes de virar caminho de arquivo
- A saída do LLM é validada nas 10 seções antes de ser gravada; saída inválida mantém o estado anterior e falha aberto
- Derivado de u-ichi/compact-plus (MIT), tornado autocontido: sem scripts externos de statusline e com backends de LLM só em Claude (Sonnet primário, Haiku de fallback)
Com e sem compact-ops
Mesmo algoritmo de compactação, mesmo summary embutido. A diferença é tudo o que está em volta.
| Momento | Claude Code puro | Com compact-ops |
|---|---|---|
| Uso passa de 60% | Sem aviso. O auto-compact chega sem anunciar | Uma notificação + recitação de 3 linhas: plano, fase, última decisão |
| O compact em si | O prompt embutido gera o summary; conteúdo não controlável | A mesma compressão, mais backup do transcript e um estado de 10 seções |
| Logo após o compact | O agente continua só com o summary | Estado + nota de releitura dos originais injetados no contexto novo |
| Depois de fechar a sessão | O summary só existe dentro daquela sessão | O estado fica 30 dias em disco e é injetado no claude --resume |
| Quando um hook falha | — | Fail-open: a compactação padrão passa intacta |
Fonte: o README do projeto. O algoritmo de compressão fica intocado; tudo é hook oficial acoplado por fora.
Como fica o arquivo de estado
Uso
# compacte normalmente, os hooks cuidam do resto
/compact
# argumentos viram orientação prioritária para o gerador de estado
/compact guarde todas as decisões de design
# ajuste pelo bloco env do ~/.claude/settings.json
COMPACT_OPS_WARN_THRESHOLD=70
COMPACT_OPS_PRIMARY_BACKEND=""
COMPACT_OPS_DEBUG=1 Testado em campo no próprio lançamento
O primeiro beneficiário foi a sessão que o construiu. Três momentos de uso real, sem encenação:
- Durante o trabalho de release da v0.2.0, o próprio aviso de 60% disparou aos 67% dentro da sessão que fazia o release: o autor escreveu o aviso e foi salvo por ele na mesma noite.
- Minutos depois, uma reorganização de diretórios quebrou três dos seus hooks no meio da sessão. A compactação completou intacta mesmo assim, porque todo hook é fail-open: o modo de falha foi testado em produção por acidente.
- Esta página que você está lendo foi revisada em uma sessão que cruzou duas compactações, retomando a cada vez do arquivo de estado que ela descreve.
O log do dia do lançamento, incluindo o aviso de 67% e a falha tripla de hooks, está escrito por inteiro no blog do projeto.
Custos a conhecer: cada compact adiciona uma chamada de LLM para gerar o estado (padrão Sonnet; dá para trocar por Haiku ou desativar via env). Arquivos de estado e backups guardam a conversa na íntegra; são criados com umask 077 (diretórios 700, arquivos 600), ficam na sua máquina e são apagados automaticamente após 30 dias.
Por que este plugin existe
O summary embutido lida bem com código. O que ele derruba são fatos operacionais: "o push já foi aprovado", "essa abordagem já foi tentada e falhou", "esse número veio daquele arquivo". Quando isso some, o agente pede aprovações de novo, repete becos sem saída, e você paga duas vezes pelo mesmo trabalho. O compact-ops dá a esses fatos seções fixas próprias e os guarda fora do summary. Uma linha de design foi inegociável: o arquivo de estado nunca é tratado como mais confiável que os arquivos do projeto. Um resumo de LLM aceito às cegas por outro LLM é só um telefone sem fio acelerado, então a orientação de recuperação sempre aponta de volta para os originais.
Ao lado do compact-plus e do Claude Code puro
O compact-ops é um derivado de u-ichi/compact-plus (MIT), que foi pioneiro na ideia de gravar estado estruturado antes do compact. As diferenças abaixo são as razões de o derivado existir.
| compact-ops | compact-plus | Claude Code puro | |
|---|---|---|---|
| Aviso de uso | Calculado pelo próprio plugin, sem setup extra | Depende de um script de statusline de outro repo | Nenhum; o auto-compact chega sem aviso |
| Onde fica o estado | ~/.claude/compact-ops/, 30 dias, por projeto | $TMPDIR (some no reboot) | O summary só vive dentro da sessão |
| Recuperação no --resume | ✓ com fallback de 72h no mesmo projeto | — | — |
| Injeção após o compact | Direta, via matcher compact do SessionStart | Arquivo marker e depois o próximo UserPromptSubmit (dois hooks) | — |
| Backend de LLM | Sonnet primário, Haiku de fallback: só Claude | Sonnet primário, Codex de fallback (assume ChatGPT Pro) | — |
| Licença | MIT | MIT | — |
A ideia central, um hook PreCompact chamando um segundo LLM para gravar estado estruturado, vem do compact-plus. A tabela lista as diferenças documentadas no README em julho de 2026; se as premissas batem com o seu ambiente, o compact-plus é uma boa escolha.
FAQ
Quanto custa cada compact?
Uma chamada extra de LLM para gerar o estado (padrão Sonnet, com fallback em Haiku). Você pode apontar COMPACT_OPS_PRIMARY_BACKEND para o Haiku para baratear, ou deixar vazio para desativar só a geração de estado e manter os outros hooks.
O summary embutido muda?
Não muda. O algoritmo de compressão e o summary ficam intocados; tudo acontece em hooks oficiais em volta deles. Depois do compact, o agente simplesmente tem duas pistas, o summary e o arquivo de estado, em vez de uma.
Para onde vão os dados da minha conversa?
Arquivos de estado e backups ficam em ~/.claude/compact-ops/ na sua máquina, criados com umask 077 e apagados após 30 dias. A única chamada de rede é a geração de estado pelo seu próprio CLI claude, o mesmo canal que a sessão já usa.
Funciona com o auto-compact também?
Sim. O PreCompact dispara tanto na compactação manual quanto na automática, então o backup e o estado sempre são gravados. Um limite conhecido: o aviso de uso é calculado no UserPromptSubmit, então se um único turno queimar contexto suficiente para disparar o auto-compact antes da sua próxima mensagem, o aviso não chega antes.
O agente deve confiar no arquivo de estado?
Como mapa, sim; como território, nunca. A orientação injetada diz explicitamente que o estado é menos confiável que os arquivos do projeto, planos e skills, e manda o agente reler os originais antes de agir.
Qual a diferença para o compact-plus?
Três mudanças: o aviso de uso é autocontido em vez de depender de um script externo de statusline, o estado persiste 30 dias em ~/.claude/ em vez de $TMPDIR, e o claude --resume também recebe injeção de recuperação com fallback de 72 horas. Os backends são só Claude. A tabela acima tem a lista completa.
Por que não melhorar o próprio prompt do summary?
Porque esse lugar é fechado: o prompt de compactação embutido não é exposto. Os hooks oficiais são a superfície suportada, e ficar neles significa que o plugin continua funcionando entre atualizações do Claude Code e pode se dar ao luxo de ser fail-open.
Funciona fora do Claude Code?
Não. Ele é construído sobre os eventos de hook do Claude Code v2.x (PreCompact, SessionStart, UserPromptSubmit) e assume o CLI claude como backend. Outros CLIs de agente têm superfícies de hook diferentes.
Sobre o autor
Criado por Ken Imoto: mais de 300 artigos técnicos em Zenn, Qiita, Dev.to e neste site, mais de 40 livros em 4 idiomas, mais de 400 mil pageviews em Zenn e Qiita, 4 artigos de pesquisa no Zenodo e criador do LLMO Framework.
Ferramentas 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 controla o OpenCut classic a partir de qualquer cliente MCP. Playwright mantém a sessão do editor; doze ferramentas expõem timeline, assets e pipeline de export. Roda contra um fork do OpenCut classic.
- mcp-scorecard Pre-flight checks for MCP servers: passive token footprint, use-case scoping, security, and name safety. LLM-facing quality scorecard.