feat: rotação de sessão por teto de contexto vivo — reseed compacto no lugar de sessões gigantes - #48
Merged
Merged
Conversation
…o lugar de retomar sessões gigantes Medido em projeto real: 94% de TODOS os tokens eram cache reads do prefixo de sessões por-agente-por-run que cresciam até 7-9M de contexto — cada turno relê o prefixo inteiro (custo quadrático no nº de turnos). Uma fase build sozinha chegou a 36M tokens. - defaults.session_rotation_context (default 180000, 0 = off): acima do teto, a PRÓXIMA fase do agente inicia sessão nova com preâmbulo de reseed compacto (<2KB: paths mudados pelo run com cap de 50, transcript arquivado, regras de autoridade do workspace) no user prompt — system byte-estável para caching. - Decisão só no início da fase (correções dentro da fase continuam a sessão); marker de engine-death na fase desarma a rotação (o preâmbulo de continuação já reseeda); sessão Pi é renomeada pi_session.<n>.rotated.jsonl (nunca apagada); evento log session_rotation + note no console. - Adapter claude passa a reportar context_tokens = contexto VIVO do último turno (input+cache_read+cache_write), não o acumulado da invocação; o agent map persiste context_tokens por agente. - fia.config.yaml, DOCS.md (§9 defaults + seção "Session rotation") e cookbook run_fda.md documentam o knob e o evento. - Testes em test/fia-session-rotation.test.js (harness de engines fake do fia-relay): rotação no cap, resume abaixo do cap, 0 desliga, arquivo Pi arquivado, system prompt idêntico entre rotações. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NPYaKxNaVRhPumKbawFNT3
This was referenced Aug 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexto
No estudo do info-move, 94% de todos os tokens (≈755M de 804M) eram cache reads do prefixo de sessões por-agente-por-run:
build → fix_* → fix_uicompartilham UMA sessão que cresceu até 7–9,4M de contexto, e cada turno relê o prefixo inteiro (custo quadrático no número de turnos — uma fase build sozinha chegou a 36M tokens/US$22). Retomar uma sessão de 180k custa ~180k de cache read POR TURNO; uma sessão nova paga um cache write pequeno uma vez — o break-even é um punhado de turnos, e fases de build rodam centenas.O que muda
defaults.session_rotation_context(default 180000,0= nunca): acima do teto de contexto VIVO, a próxima fase do agente inicia sessão nova com um preâmbulo de reseed compacto (<2KB) no user prompt: paths que o run já mudou (cap de 50), transcript arquivado como referência read-only e as regras de autoridade do workspace. O system prompt permanece byte-estável (regra de caching preservada).pi_session.jsonlé renomeadopi_session.<n>.rotated.jsonl(nunca apagado). Claude: o adapter passa a reportarcontext_tokens= contexto vivo do último turno (input+cache_read+cache_write), não o acumulado da invocação (que era inútil para qualquer decisão). Cursor: sem usage ⇒ nunca rotaciona (documentado).session_rotation, tipo log — visível nos filtros existentes do viewer);agent_map.jsonganhacontext_tokenspor agente.Superfícies
fia.config.yaml(knob comentado no defaults),DOCS.md(yaml de exemplo + seção nova "Session rotation" ao lado do relay), cookbookrun_fda.md(o evento é normal, não defeito).Testes
test/fia-session-rotation.test.js(harness de engines fake do fia-relay, nenhum CLI spawnnado): rotação dispara no cap com preâmbulo e sessão nova; abaixo do cap resume;0desliga; arquivo Pi arquivado com conteúdo intacto e citado no preâmbulo; system prompt idêntico entre rotações; normalizador tolerante do knob. Suite completa 1436 pass + lint limpo.🤖 Generated with Claude Code
https://claude.ai/code/session_01NPYaKxNaVRhPumKbawFNT3