π― Quando PreCompact dispara
Claude Code detecta que sessao passou do threshold (~170k tokens). Antes de fazer o resumo automatico, dispara PreCompact.
π Gatilho de compactacao
Sessao crescendo turno a turno...
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Claude Code monitora token count β
β Threshold: ~170k tokens β
β (configuravel, default conservador) β
βββββββββββββββ¬ββββββββββββββββββββββββ
β
βΌ
PreCompact HOOK β sua janela
β
βΌ
Resumo automatico (model compacta historico)
β
βΌ
Sessao continua com prompt enxutoπ‘ Nao esperar 170k
O hook dispara so quando Claude Code decide compactar. Em sessoes curtas nunca roda. E OK β serve so quando precisa.
π O que injetar: context.md
Para garantir que projeto e decisoes sobrevivam ao resumo, injete seu context.md.
π Por que context.md funciona
Dinamica do squeeze:
- β’Claude Code adiciona additionalContext ao prompt.
- β’Depois faz o resumo. O resumo INCLUI additionalContext.
- β’Portanto, seu texto fica no prompt compactado tambem.
- β’Resultado: contexto critico preservado literal, mesmo apos squeeze.
π§ͺ Configuracao do hook
Mesmo padrao do SessionStart, outro evento. Reaproveite o script.
π settings.json com PreCompact
{
"hooks": {
"SessionStart": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "~/.memory/hooks/inject.sh SessionStart"
}]
}],
"PreCompact": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "~/.memory/hooks/inject.sh PreCompact"
}]
}]
}
}
# inject.sh unifica os dois casos:
#!/usr/bin/env bash
EVENT=${1:-SessionStart}
CTX=$(cat ~/.memory/context.md 2>/dev/null || echo "")
python3 -c "
import json
print(json.dumps({
'hookSpecificOutput': {
'hookEventName': '$EVENT',
'additionalContext': '''$CTX'''
}
}))
"π‘ DRY
Um script, dois eventos. Se mudar o formato de context.md, nao precisa atualizar em dois lugares.
π§ͺ Lab: forΓ§ando compactacao
Testar em condicao controlada e melhor que esperar acontecer num momento critico.
Prepare sessao sintetica
Abra Claude Code. FaΓ§a varias queries pesadas que geram muito output: 'liste todos os arquivos do projeto com tamanho', 'mostra diff completo de ultimos 20 commits', etc.
Monitore contagem
Muitos clientes de Claude mostram token count. Quando chegar perto de 170k, prepare sua pergunta de teste.
FaΓ§a a pergunta antes
'Qual o projeto ativo?' β resposta deve vir do context.md.
Gatilho forcado ou espera
Continue mandando queries pesadas ate compactar. Pergunte de novo 'qual o projeto?'. Se sobrevivente, o hook funcionou.
π‘ Signal claro
Use palavra especifica em context.md ('projeto alpha-42'). Pos-squeeze, Claude deve mencionar exatamente essa palavra para provar survival.
π Validacao: antes/depois
Dois pontos no tempo, mesma pergunta, comparacao direta.
π Protocolo A/B
ANTES da compactacao: Pergunta: "Qual decisao tomamos semana passada?" Resposta esperada: detalhe especifico do context.md Validacao: gravar resposta. ForΓ§ar compactacao (queries pesadas ate ~170k) DEPOIS da compactacao: Mesma pergunta. Resposta esperada: mesmo detalhe especifico. Validacao: comparar. MATCH = PreCompact funcionou. MISMATCH = debug necessario (log do hook, additionalContext size).
π‘ Automatizar
Script bash que abre Claude Code em modo headless, envia mensagens padrao, captura respostas pre e pos. Da pra rodar CI do seu sistema de memoria.
β οΈ Armadilhas comuns
Tres erros que pioram o sistema em vez de melhorar.
β Fazer
- βInjetar context.md (400 tokens, signal alto)
- βUsar script dedicado, reutilizavel
- βLogar tamanho do additionalContext
- βTestar em sessoes forcadas antes de depender
β NAO fazer
- βInjetar CLAUDE.md inteiro (ja esta no prompt)
- βInjetar log da sessao (>2k tokens polui resumo)
- βInjetar tudo, incluindo long-term (explode prompt)
- βAssumir que funciona sem testar
π Resumo do Modulo
Proximo:
4.4 β context.md: escrevendo contexto critico