Execução Longa|INEMA.CLUB-PRO

Aula 7 · 17 min

Medir a sessão: medir-sessao.py, custo de retomada e recall

Sem medir, "a sessão ficou cara" e "o agente esqueceu" são impressão. O kit lê as transcrições JSONL do Claude Code e do Codex e devolve duração, compactações, tokens e cache por turno, o custo real de retomar e uma busca em tudo o que já foi dito. Nesta aula você mede um caso conhecido e depois a sua maior sessão.

Começar a aula
Osciloscópio de bancada mostrando uma onda verde limpa, com ponteiras sobre a mesa.

Nesta aula você vai

  1. 1Onde ficam as transcrições do Claude e do Codex
  2. 2medir-sessao.py: resumo, --json e --por-turno
  3. 3custo-retomada.py e nota-retomada.py
  4. 4recall: busca em 0,02 s no que já foi dito

Objetivo: medir duração, compactações, tokens e cache de uma sessão, ler o custo de retomar e achar uma decisão antiga com recall.

01Da transcrição à medida

Quatro ferramentas do kit, só biblioteca padrão do Python, nenhuma rede.

Clique em cada bloco do diagrama para ver o que ele faz.

O que foi decidido tem de estar num arquivo do projeto. A transcrição serve para medir e para lembrar onde procurar.

02Medir um caso conhecido e depois o seu

Os fixtures dos testes do kit dão números fixos: se a sua saída bater, a ferramenta está certa na sua máquina.

Terminal · medir os fixtures
K=~/projetos/execucao-longa
python3 $K/tools/medir-sessao.py $K/tests/fixtures/claude_mini.jsonl
python3 $K/tools/medir-sessao.py $K/tests/fixtures/codex_mini.jsonl
python3 $K/tools/medir-sessao.py $K/tests/fixtures/claude_mini.jsonl --json --por-turno
Terminal · a sua maior sessão do Claude Code e o custo de retomar
S=$(ls -S ~/.claude/projects/*/*.jsonl | head -1); echo "$S"
python3 ~/projetos/execucao-longa/tools/medir-sessao.py "$S"
python3 ~/projetos/execucao-longa/tools/custo-retomada.py 14
python3 ~/projetos/execucao-longa/tools/nota-retomada.py --relatorio
Terminal · recall nos fixtures (índice separado, em /tmp)
K=~/projetos/execucao-longa; R=/tmp/ensaio-recall
rm -rf $R && mkdir -p $R/codex/2026/10/01 $R/claude/-home-voce-projetos-demo $R/arq
cp $K/tests/fixtures/recall_codex.jsonl $R/codex/2026/10/01/rollout-a.jsonl
cp $K/tests/fixtures/recall_claude.jsonl $R/claude/-home-voce-projetos-demo/s1.jsonl
export RECALL_DB=$R/recall.db
python3 $K/tools/recall.py indexar --codex $R/codex --claude $R/claude --arquivo $R/arq
python3 $K/tools/recall.py indexar --codex $R/codex --claude $R/claude --arquivo $R/arq
python3 $K/tools/recall.py PostgreSQL
unset RECALL_DB
Terminal · recall de verdade (uma vez por máquina, Linux)
mkdir -p ~/.local/bin && ln -s ~/projetos/execucao-longa/tools/recall.py ~/.local/bin/recall
recall indexar                      # primeira vez: indexa ~/.claude/projects e ~/.codex/sessions
recall "cleanupPeriodDays" -n 5     # busca (as opções: --projeto X --fonte codex|claude --desde AAAA-MM-DD)
cp ~/projetos/execucao-longa/tools/systemd/recall-indexar.* ~/.config/systemd/user/
sed -i "s#/home/nmaldaner#$HOME#g" ~/.config/systemd/user/recall-indexar.service
systemctl --user daemon-reload && systemctl --user enable --now recall-indexar.timer   # reindexa de hora em hora
Exemplo do repositório
$ medir-sessao.py tests/fixtures/claude_mini.jsonl
…/tests/fixtures/claude_mini.jsonl (claude)
  duração: 7200 s | compactações: 1 | turnos: 2
  tokens de entrada: 2000 | saída: 55 | cache: 45.0%
  cache lido: 900 | escrito: 1085 | saída de ferramenta: 37 bytes
  modelos: claude-opus-5-5, claude-sonnet-5-5

$ medir-sessao.py tests/fixtures/codex_mini.jsonl
…/tests/fixtures/codex_mini.jsonl (codex)
  duração: 3600 s | compactações: 1 | turnos: 2
  tokens de entrada: 3000 | saída: 120 | cache: 60.0%
  cache lido: 1800 | escrito: 0 | saída de ferramenta: 8 bytes
  modelos: gpt-6-astra, gpt-6.1-sol

$ medir-sessao.py tests/fixtures/claude_mini.jsonl --json --por-turno
[{"i": 1, "timestamp": "2026-09-02T08:00:05.000Z", "input": 1000, "cached": 0, "ratio": 0.0, "compactacoes": 0},
 {"i": 2, "timestamp": "2026-09-02T09:00:10.000Z", "input": 1000, "cached": 900, "ratio": 0.9, "compactacoes": 1}]

$ recall indexar … (duas vezes) ; recall PostgreSQL
2 arquivos processados; 8 trechos novos.
0 arquivos processados; 0 trechos novos.
2026-09-10T10:00:03.000Z codex alfa user Quero migrar o banco para PostgreSQL até sexta …/rollout-a.jsonl:4

$ nota-retomada.py --relatorio      (sem medições ainda)
Notas de retomada (últimos 30 dias, 0 medições) — …/notas.jsonl
modo          n  acerto  tokens (mediana)
compactada    0       —                 —
retomada      0       —                 —
continuada    0       —                 —
prime         0       —                 —

Fixtures são transcrições pequenas e sintéticas dos testes do kit (nomes de modelo incluídos); os números servem para conferir a ferramenta, não como medida de uso. Caminhos encurtados com …

03Como ler e onde anotar

Uma linha por execução no progress.md, com os números da ferramenta.

1. Cache

Entre 93% e 99% é o normal medido nas sessões longas. Muito abaixo disso numa sessão longa, procure pausas maiores que o cache ou troca de modelo no meio.

Compactação não derruba o cache: não é motivo para cortar a sessão.

04Prática

Primeiro o caso conhecido, depois os seus dados.

E16 · A ferramenta bate na sua máquina

5 min

Meça os dois fixtures e rode o ensaio do recall.

Pronto quando: claude_mini → compactações: 1 | turnos: 2 e cache: 45.0%; codex_mini → cache: 60.0%; o recall imprime 2 arquivos processados; 8 trechos novos., depois 0 arquivos processados e uma linha com PostgreSQL.

E17 · A sua maior sessão no progress.md

15 min

Meça a maior transcrição do seu Claude Code (ou uma do Codex em ~/.codex/sessions) e escreva a linha no progress.md da sua execução, com a data.

Pronto quando: a linha do progress.md traz tokens de entrada, cache lido, saída e compactações iguais aos que medir-sessao.py imprimiu para o mesmo arquivo.

E18 · Recall nas suas sessões

15 min

Instale o comando recall, indexe e procure uma decisão que você lembra ter tomado com o agente na última semana.

Pronto quando: recall indexar → N arquivos processados com N maior que 0, e recall "[termo]" --desde [data] devolve a linha com o arquivo e o número da linha da conversa.

05Teste da aula

Pergunta 1 de 4

Como o medir-sessao.py calcula o cache?competência

06Em três frases

Meça o conhecido primeiroOs fixtures dão números fixos; se batem, a ferramenta está certa na sua máquina.
Custo e conhecimentocusto-retomada.py diz quanto custou voltar; nota-retomada.py, quanto voltou.
Lembrar sem confiarrecall acha onde algo foi dito; o que vale está no arquivo do projeto.

Para ir além

Aula anteriorPróxima aula