Um handoff escrito pelo próprio agente se autocertifica: ele pode dizer que testou o que não testou e o arquivo pode nem ter sido gravado. Desde 17/10/2026 a prova saiu do texto: um script grava carimbo, commit e impressão digital dos arquivos, e o hook confere na transcrição se o handoff foi mesmo salvo.
2Bloco de estado: commit e sha256 gravados pelo script
3--conferir: igual (0), divergente (2), sem bloco (3)
4Perguntas-teste e a nota N/5 na retomada
Objetivo: gravar um handoff pelo script, conferir o frescor dele com --conferir e saber quando o hook cobra, grava sozinho ou avisa que não salvou.
01 · Do pedido à retomada conferida
Skills session-handoff e prime do kit agente-claude-codex 1.8.3, com o hook-longrun 1.9.6.
Handoff divergente é pista, não fato: confira antes de agir
Clique em cada bloco do diagrama para ver o que ele faz.
Regra de decisão: continua verdade depois da tarefa → memória persistente (CLAUDE.md, AGENTS.md). Estado desta tarefa → handoff. Registro do que aconteceu → histórico (git, progress, failures, decisions).
02 · Quatro regras de um handoff que serve
Da análise de 17/10/2026 do kit.
1. Ponteiro, não texto corrido
Mapa de retomada, fontes das perguntas-teste e evidências são caminhos e commits. Isso sobrevive à compactação, à sessão nova e à troca de modelo.
Histórico longo enterra o que o próximo agente precisa fazer.
2. Prova fora do texto
O bloco de estado é do script, não do agente. Cada [confirmed] aponta commit, teste: ou arquivo:.
Na execução longa, quem decide se acabou continua sendo o teste rodado pelo loop (aula 6).
Tarefa e critério de pronto; última decisão e por quê; o que não pode mudar; o que está pela metade; próxima ação e por quê. A fonte de cada uma é um arquivo do projeto, nunca o próprio handoff.
Depois de compactar ou de --resume, o hook pede as 5 respostas de memória antes de abrir o handoff, e o agente registra a nota com nota-retomada.py.
4. Limites conhecidos
A nota é dada pelo próprio agente: as respostas ficam escritas antes, o que dá para auditar, mas não é checagem independente.
No Codex não há hook: pedir e conferir o handoff fica com a regra escrita e com você. O handoff e o /prime funcionam igual nos dois.
03 · Instalar as skills e ensaiar o --conferir
As skills vêm do kit agente-claude-codex (1.8.3). O ensaio roda num repositório descartável em /tmp.
Terminal · instalar session-handoff e prime (Claude e Codex)
git clone https://github.com/inematds/agente-claude-codex ~/projetos/agente-claude-codex
cd ~/projetos/agente-claude-codex
cp -r skills/session-handoff/dist/claude/session-handoff skills/prime/dist/claude/prime ~/.claude/skills/
mkdir -p ~/.agents/skills
cp -r skills/session-handoff/dist/codex/session-handoff skills/prime/dist/codex/prime ~/.agents/skills/
mkdir -p ~/projetos/<seu-projeto>/handoffs/history # o hook só pede handoff onde esta pasta existe
Terminal · ensaio do --conferir
rm -rf /tmp/ensaio-handoff && mkdir -p /tmp/ensaio-handoff/handoffs/history && cd /tmp/ensaio-handoff
git init -q && git config user.name ensaio && git config user.email ensaio@local
echo "def f(): return 1" > app.py && git add -A && git commit -qm base
H=~/.claude/skills/session-handoff/scripts/handoff-grava.py
cat > /tmp/corpo-handoff.md <<'EOF'
# Handoff — ensaio-conferir
## Estado aceito
- [confirmed] `app.py` devolve 1 (commit: base; teste: python3 -c "import app; print(app.f())" → 1)
## Não fazer
- Não mudar a assinatura de f().
## Próxima ação
Trocar o retorno de f() para 2 e rodar o mesmo teste, que deve imprimir 2.
## Perguntas-teste
1. Qual é a tarefa e o critério de pronto? (fonte: app.py)
2. Qual foi a última decisão e por quê? (fonte: git log)
3. O que não pode mudar? (fonte: app.py)
4. O que está pela metade? (fonte: app.py)
5. Qual é a próxima ação e por quê? (fonte: app.py)
EOF
python3 $H --assunto ensaio-conferir < /tmp/corpo-handoff.md
F=$(ls handoffs/history/*.md | head -1)
python3 $H --conferir $F; echo "saída: $?"
echo "def f(): return 2" > app.py
python3 $H --conferir $F; echo "saída: $?"
Exemplo do repositório
snapshot: handoffs/history/2026-10-19T070502Z-ensaio-conferir.md
latest.md: 1 assunto(s) aberto(s): ensaio-conferir
commit 8900d4e ensaio <ensaio@local> (sem push)
retomar ESTE handoff numa sessão nova (Codex: /new no lugar de /clear):
/clear
/prime handoffs/history/2026-10-19T070502Z-ensaio-conferir.md
frescor: igual (1 arquivo(s) conferido(s); commit b89d8ad3ba51)
saída: 0
frescor: divergente — o handoff é pista, não fato; confira antes de agir
- app.py: mudou (citado no handoff)
saída: 2
O carimbo e os hashes mudam a cada execução. A linha snapshot: é a que o hook lê na transcrição para saber qual handoff ESTA sessão gravou.
Sem a seção "Não fazer": o /prime não terá a lista do que não pode mudar.
Sem "Perguntas-teste": o /prime não dá a nota N/5.
Corpo com menos de 200 caracteres: recusa (corpo do handoff vazio ou curto demais).
Mais de 200 arquivos pendentes: a lista do bloco é cortada e o --conferir acusa os que sobraram como mudança (limite registrado na análise de 17/10).
04 · Prática
As duas primeiras não gastam cota. A terceira usa uma sessão sua.
E10 · Skills instaladas
10 min
Instale session-handoff e prime para o Claude e para o Codex e crie handoffs/history/ no projeto da sua execução.
Pronto quando:python3 ~/.claude/skills/session-handoff/scripts/handoff-grava.py --help | grep -c conferir → 1 ou mais, e ls ~/.agents/skills lista prime e session-handoff.
E11 · Frescor igual e divergente
10 min
Rode o ensaio do --conferir inteiro.
Pronto quando:frescor: igual com saída: 0, e depois de mudar app.py, frescor: divergente com - app.py: mudou e saída: 2.
E12 · Um handoff real, retomado
20 min
No projeto da sua execução, peça /session-handoff no fim de um bloco de trabalho. Abra uma sessão nova e rode /prime com o caminho que o script imprimiu.
Pronto quando: o resumo do /prime mostra a linha de frescor (igual) e Perguntas-teste: N/5; anote o N no progress.md da execução.
05 · Teste da aula
Pergunta 1 de 4
Quem escreve o bloco de estado (commit e sha256) do handoff?competência
Correto
A prova saiu do texto justamente porque o agente se autocertifica. O script grava o bloco e é ele que o --conferir compara.
Não é essa
A prova saiu do texto justamente porque o agente se autocertifica. O script grava o bloco e é ele que o --conferir compara.Rever: Do pedido à retomada conferida
Pergunta 2 de 4
--conferir saiu com código 2. O que isso quer dizer?competência
Correto
0 = igual, 2 = divergente (com a lista do que mudou), 3 = snapshot antigo sem bloco. Divergente pede conferir antes de agir.
O hook pediu um handoff e, em 8 eventos, nada apareceu em handoffs/history/. O que acontece?
Correto
A conferência olha a transcrição: achou, "Handoff conferido"; não achou, cobra até 2 vezes e então avisa. Gravar sozinho só acontece na ociosidade, numa cópia da sessão.
Não é essa
A conferência olha a transcrição: achou, "Handoff conferido"; não achou, cobra até 2 vezes e então avisa. Gravar sozinho só acontece na ociosidade, numa cópia da sessão.Rever: Do pedido à retomada conferida
Pergunta 4 de 4
"Rodamos os testes de integração só com --fast nesta máquina" vale para sempre neste projeto. Onde vai?
Correto
Continua verdade depois da tarefa: memória persistente. O handoff guarda o estado desta tarefa; o histórico registra o que aconteceu.
Não é essa
Continua verdade depois da tarefa: memória persistente. O handoff guarda o estado desta tarefa; o histórico registra o que aconteceu.Rever: Do pedido à retomada conferida
Teste concluído
Você acertou {a} de {n}. Acertando todas, a aula é marcada como concluída.
Escolha uma alternativa. A explicação aparece depois da sua tentativa.
06 · Em três frases
O script grava a provaCarimbo real, arquivo novo, commit e sha256 dos arquivos; [confirmed] só com commit, teste ou arquivo.
O hook confereProcura a gravação na transcrição, cobra até 2 vezes e avisa quando não salvou; aos 45 min parado grava numa cópia.
A retomada se mede/prime roda o --conferir, checa as provas e dá a nota das perguntas-teste.