Utilitário baton transfere sessão entre 5 agentes de IA de terminal sem perder contexto

O autor do utilitário baton, escrito em Go, ensinou os agentes de terminal Claude Code, Codex, Antigravity CLI, Pi e Hermes a retomar as sessões uns dos outros quando um deles esgota a cota de cinco horas. A ferramenta lê os logs gravados em disco em vez de pedir ao modelo que resuma o histórico. Assim, não gasta tokens de saída, que são caros, e preserva números de linha e hipóteses descartadas. O novo agente recebe o resumo a partir do último /compact, e o dump completo fica em uma pasta temporária. • Snapshot criptografado para outro PC: AES-256-GCM, e a chave não vai para o servidor • Skill SKILL.md no lugar de um servidor MCP: só uma linha de descrição no contexto • Código na biblioteca padrão do Go, licença MIT, build em três comandos

Processado por IA de Habr AI; editado por Hamidun News
Utilitário baton transfere sessão entre 5 agentes de IA de terminal sem perder contexto
Fonte: Habr AI. Colagem: Hamidun News.
Ouvir artigo
Ficha técnica e números-chave
ParâmetroDados
Fonte originalHabr AI ↗
Editor-chefe
Snapshot criptografado para outro PCAES-256-GCM, e a chave não vai para o servidor
Skill SKILL.md no lugar de um servidor MCPsó uma linha de descrição no contexto
Dado-chave #3Código na biblioteca padrão do Go, licença MIT, build em três comandos

As cotas de cinco horas dos planos de US$ 20 costumam acabar no meio da depuração, e não existe uma ponte oficial entre Claude Code, Codex, Antigravity CLI (agy), Pi e Hermes. O autor do baton escreveu em Go uma ferramenta de terminal que pega a sessão dos logs locais de um agente e a entrega a outro, na mesma máquina ou, pela rede, em outro computador. O código-fonte está no GitHub, sob licença MIT.

Por que o HANDOFF.md não resolve

O conselho padrão é pedir ao agente que, antes de sair, grave o estado da tarefa, os passos e o plano em um arquivo HANDOFF.md. O autor aponta três problemas.

O primeiro: com o limite esgotado, o agente deixa de responder, e não há mais quem registre o resumo. O segundo: mesmo que se perceba o momento com antecedência, o modelo reconta a própria história de memória. A janela de contexto comporta de 200 mil a 1 milhão de tokens, mas uma única resposta é limitada a algumas dezenas de milhares, então o resumo sai inevitavelmente comprimido.

Somem os argumentos exatos dos comandos, os números de linha, as hipóteses descartadas e as pequenas correções. O terceiro: os tokens de saída custam, nos provedores, cerca de cinco vezes mais que os de entrada e consomem o que resta da cota mais depressa.

No Claude Code com várias contas, existe a flag --resume, mas, ao trocar de conta, o cache de prompts do servidor é descartado, e reprocessar um histórico longo consome uma parte considerável da nova cota. Essa flag também não permite migrar para o agente de outro fornecedor.

Como o baton monta o resumo a partir dos logs

Todo agente já grava um log detalhado em disco. O Claude Code guarda JSONL em ~/.claude/projects, o Codex usa arquivos rollout em ~/.codex/sessions, o agy mantém transcript.jsonl e snapshots Protobuf em ~/.gemini/antigravity-cli, o Pi emprega um JSONL v3 em árvore, com os campos id e parentId, e o Hermes usa um banco SQLite, o state.db. O comando /compact não apaga nada: os logs são de escrita incremental (append-only), e o fluxo recebe uma entrada com o resumo da conversa anterior.

O baton percorre o log desde a primeira entrada (no Pi, pelo ramo ativo da árvore; no Hermes, pela cadeia de parent_session_id), monta a lista de arquivos alterados e comandos executados e, ao encontrar o marcador de compactação, descarta o buffer das mensagens antigas. O resumo operacional inclui o texto da última compactação e todas as mensagens posteriores, na íntegra. O histórico completo e as saídas longas de comandos vão para /tmp/baton-handoff/<id-da-sessão>/ (no Windows, para %TEMP%).

Pastas com mais de 24 horas são apagadas, e a árvore de trabalho continua limpa para o git status. No chat aparecem metadados, o estado do repositório, os arquivos afetados, os últimos comandos e os caminhos dos dumps. O agente busca o detalhe necessário em full_dialogue.

md ou com o comando baton turn.

O fluxo gira em torno do par save e load. A sessão recebe um nome pelo comando nativo do agente ou por baton save e, no outro agente, basta escrever «Continue a sessão auth-refactor» ou «Retome a última sessão». Se nenhum nome foi definido, o baton list mostra candidatos numerados, com pasta de trabalho, horário da última modificação e primeiro pedido.

O autor recusou o servidor MCP de propósito. Esse tipo de servidor sobe a cada sessão, fica na memória, e as descrições de suas funções entram no prompt de sistema e gastam tokens de entrada, mesmo quando semanas se passam sem transferência de sessão. A skill SKILL.md mantém no contexto apenas uma linha, e o utilitário é executado uma vez e encerra em seguida. Os cinco agentes sabem carregar skills sob demanda.

Transferência para outro notebook sem commits

O segundo cenário é sair do PC de casa e continuar no notebook sem enviar código cru para o branch compartilhado. O comando baton push empacota em um tar.gz o histórico da sessão, os arquivos modificados e os novos não rastreados (segundo o histórico de escrita do agente e o status do Git, Fossil ou SVN), os arquivos locais de regras (CLAUDE.md, AGENTS.md, GEMINI.md, .cursorrules, .agents/rules/) e uma cópia das instruções globais.

O arquivo é criptografado no cliente com AES-256-GCM, usando uma chave aleatória de 256 bits, e enviado ao paste.rs (até 10 MiB). Em caso de falha, o envio vai para o dpaste.org e, depois, para o termbin.com:9999. Há ainda a opção de uma pasta local de sincronização: Dropbox, Nextcloud, Syncthing. A chave, que é o trecho do token após o símbolo #, não chega ao servidor do pastebin, e sem ela o pacote parece ruído aleatório.

No segundo computador, basta colar o prompt gerado em qualquer agente: ele lê o INSTALL.md, compila o utilitário e restaura a sessão. Se um arquivo local for diferente do que será sobrescrito, uma cópia com a extensão .baton.bak é criada ao lado. As regras globais são extraídas em um diretório temporário e não alteram as configurações de sistema da segunda máquina.

Instalação, atualização e limitações

O build cabe em três comandos: git clone, go build -ldflags="-s -w" e baton install. Não há dependências externas, apenas a biblioteca padrão do Go. O baton install copia o SKILL.md para os diretórios de skills dos cinco agentes e adiciona o slash command /baton. O autor recomenda compilar a partir do código-fonte em vez de usar os releases prontos. A verificação de atualizações roda em segundo plano, no máximo uma vez por dia. O baton update recompila o utilitário via go install, com checagem no sum.golang.org, ou baixa o binário do GitHub Releases e confere o SHA-256.

Há limitações. Os pastebins públicos continuam sendo infraestrutura de terceiros, e o token de transferência é, na prática, um segredo, pois contém a chave de descriptografia. Os formatos de log são internos e podem mudar com a atualização de qualquer um dos agentes. A velocidade de «uma fração de segundo» é estimativa do autor, e não há medições independentes. Ele mesmo admite que uma ferramenta parecida pode ser montada em um dia e sugere considerar como principal valor o trabalho de decifrar os formatos de armazenamento das sessões.

História

Perguntas frequentes sobre a notícia

Por que o HANDOFF.md não resolve?

O conselho padrão é pedir ao agente que, antes de sair, grave o estado da tarefa, os passos e o plano em um arquivo HANDOFF.md. O autor aponta três problemas. O primeiro: com o limite esgotado, o agente deixa de responder, e não há mais quem registre o resumo. O segundo: mesmo que se perceba o momento com antecedência, o modelo reconta a própria história de memória. A janela de contexto comporta de 200 mil a 1 milhão de tokens, mas uma única resposta é limitada a algumas dezenas de milhares, então o resumo sai inevitavelmente comprimido. Somem os argumentos exatos dos coman

Como o baton monta o resumo a partir dos logs?

Todo agente já grava um log detalhado em disco. O Claude Code guarda JSONL em ~/.claude/projects, o Codex usa arquivos rollout em ~/.codex/sessions, o agy mantém transcript.jsonl e snapshots Protobuf em ~/.gemini/antigravity-cli, o Pi emprega um JSONL v3 em árvore, com os campos id e parentId, e o Hermes usa um banco SQLite, o state.db. O comando /compact não apaga nada: os logs são de escrita incremental (append-only), e o fluxo recebe uma entrada com o resumo da conversa anterior. O baton percorre o log desde a primeira entrada (no Pi, pelo ramo ativo da árvore; no Hermes

O que se sabe sobre Transferência para outro notebook sem commits?

O segundo cenário é sair do PC de casa e continuar no notebook sem enviar código cru para o branch compartilhado. O comando baton push empacota em um tar.gz o histórico da sessão, os arquivos modificados e os novos não rastreados (segundo o histórico de escrita do agente e o status do Git, Fossil ou SVN), os arquivos locais de regras (CLAUDE.md, AGENTS.md, GEMINI.md, .cursorrules, .agents/rules/) e uma cópia das instruções globais. O arquivo é criptografado no cliente com AES-256-GCM, usando uma chave aleatória de 256 bits, e enviado ao paste.rs (até 10 MiB). Em caso de fal

ZK
Zhemal Khamidun — CPO da Alpina Digital, gerente de produto do AlpinaGPT. Cria produtos de IA desde 2019. O Hamidun News é um projeto pessoal que virou um agregador em produção com mais de 6.000 leitores.
✦ Hands-On AI Engineering · Hamidun Academy

Build & Ship Production AI Agents Without Boilerplate Code

Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.

Start 72h Free Trial →Vibe-Coding Intensive
O que você acha?
Carregando comentários…