Objetivo: ao final, o consultor constrói o hook preservador de estado, que devolve ao contexto o fio do trabalho depois de uma compactação — e sabe por que ele funciona.
PreCompact grava o estado num arquivo em disco, e SessionStart com matcher compact lê o arquivo e reimprime no contexto depois da compactação.SessionStart é um dos três eventos cujo stdout puro vira contexto (aula 3.2.4). Em PostCompact, o mesmo script imprimiria no vazio.{
"hooks": {
"PreCompact": [
{
"hooks": [
{ "type": "command", "command": "./.claude/scripts/salvar-estado.sh" }
]
}
],
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{ "type": "command", "command": "./.claude/scripts/restaurar-estado.sh", "timeout": 30 }
]
}
]
}
}
Sem o matcher: "compact", o hook de restauração rodaria em toda abertura de sessão, reinjetando um estado que talvez não tenha nada a ver com o trabalho do dia.
#!/usr/bin/env bash
# Roda em SessionStart (matcher: compact). O stdout aqui VAI para o contexto.
if [ -f .claude/estado-sessao.md ]; then
echo "## Retomando depois da compactação"
cat .claude/estado-sessao.md
fi
exit 0
Não tem mistério: ele imprime. O mecanismo inteiro depende do comportamento de stdout de SessionStart, e é por isso que a aula 3.2.4 vem antes desta.
| Reinjete | Não reinjete |
|---|---|
| RICEFW em trabalho, com status | Conteúdo dos arquivos abertos |
| Decisões tomadas na sessão ("a alçada de 50 mil foi confirmada com o cliente") | Histórico da conversa |
| Caminho dos arquivos relevantes | Log completo dos comandos rodados |
| Próximo passo pretendido | Resultado integral de teste |
| Restrição que não pode ser esquecida | Qualquer coisa que o Claude possa reler do disco quando precisar |
O princípio: reinjete o que só existia na sua cabeça e na conversa. O que está em arquivo, o Claude relê quando precisar — e aí o custo de contexto é pago só se for necessário. Reinjetar conteúdo é encher de novo o que acabou de ser esvaziado.
resume e forkSessionStart dispara em quatro situações: início normal, compact, resume (retomar) e fork (ramificar). Como o hook reexecuta de verdade em cada uma, informação que envelhece é recalculada — carimbo de data, SHA do commit, branch atual. Um estado salvo em arquivo estático ficaria velho; um script que recalcula, não.
Para cobrir retomada e ramificação além da compactação, use múltiplos matchers ou omita o matcher e trate a origem dentro do script.
Regra Wayon Sessão de projeto de cliente que passe de duas horas usa o par
PreCompact+SessionStart. O motivo não é conveniência: é rastreabilidade. Quando a compactação descarta a lista de pendências construída durante a sessão, o consultor reconstrói de memória — e é aí que pendência de cliente se perde silenciosamente, sem ninguém notar que se perdeu.
📖 Hooks e compactação · Contexto é o recurso escasso — módulo 2.2
SessionStart com matcher compact em vez de PostCompact, se os dois disparam depois da compactação?PostCompact só existe em versão mais recente e nem todo mundo temPostCompact existe e está documentado; a razão da escolha é de capacidade, não de disponibilidade.
SessionStart é um dos três eventos cujo stdout puro vira contexto, e PostCompact não consegue injetar contextoCorreto. É esse comportamento de stdout que faz o padrão inteiro funcionar.
PostCompact dispara antes de o contexto estar pronto para receber textoNão é questão de momento: PostCompact simplesmente não tem o caminho de injeção de contexto, em nenhum instante.
Enche de novo o contexto que a compactação acabou de esvaziar; arquivo o Claude relê do disco quando precisar.
Correto. Reinjete ponteiro e o que só existia na conversa, não conteúdo recuperável.
É exatamente o que a compactação resumiu de propósito — reinjetar desfaz o ganho e provavelmente estoura o contexto de novo.
SessionStart sem o matcher compact. Qual é a consequência?Correto. O matcher é o que restringe o disparo ao caso de compactação.
SessionStartO matcher é opcional: sem ele, o hook roda em todas as origens do evento, não em nenhuma.
Não há esse comportamento de execução única; sem matcher, dispara em toda origem do evento.