Pitch: Downshift, roteador determinístico de modelo para subagents em Go
Quando um harness spawna um subagent, quase sempre ele acaba rodando no modelo da sessão pai. Uma tarefa trivial como "renomeia essa variável" usa o mesmo modelo caro de uma tarefa de arquitetura. Os harnesses deixam escolher o modelo por spawn, mas não classificam a tarefa por você.
O Downshift é um roteador em Go que faz essa classificação antes do spawn:
- Sinais determinísticos: regex, contagem de tokens e palavras-chave pontuados. Sem rede, e o mesmo input dá sempre a mesma saída.
- MiniLM local (opcional): embedding da tarefa para desempatar os casos de borda.
O resultado é um tier (small, mid ou frontier). O Downshift reescreve só o modelo do subagent, e a sessão pai não muda.
Ele está em beta e eu prefiro mostrar os números do jeito que estão.
O que está medido
- Acurácia de tier no seed de 200 tarefas: 69% (IC 95% de 62,5% a 75,5%). Esse seed foi usado para ajustar o classificador.
- Num blind set externo de 60 tarefas, escrito por um agente que nunca viu o repositório, a acurácia ficou entre 47% e 65% (IC 95% com cerca de ±12 pontos). O erro dominante é mandar tarefa pequena para um tier maior: custa dinheiro, mas não quebra nada.
- Meu holdout de 300 tarefas chegou a 100%, mas só porque ajustei os sinais olhando para ele. Não vale como prova de generalização.
- Num eval de tarefas Go executáveis, 9 de 10 tarefas complexas foram roteadas abaixo de frontier, e o tier small rende 20 pontos percentuais a menos que o frontier em tarefas triviais e simples. Rebaixar custa qualidade, e isso é mensurável.
Sobre economia
O downshift stats --days=30 estima 19,3% de economia normalizada em 480 decisões de roteamento. É uma estimativa por decisão, não são dólares reais. Dos eventos, só 8 têm tokens medidos pelo hook de SubagentStop, e o custo real economizado nesses 8 foi de US$ 0,42. A amostra é pequena demais para extrapolar. A validação contra a fatura do provider ainda não foi feita, e é um dos critérios para sair do beta.
Estado por harness
- Claude Code: a reescrita do modelo é respeitada. Validei com 2 spawns numa sessão (2026-10-06): o pai em Sonnet e o filho rodando em Haiku, comprovado pelo
message.modelno transcript do subagent. - Codex: validado em 2026-10-02.
- KiroCrew: modo policy (exit 0/2), sem canal de reescrita. O agente respauna no tier indicado, mas a economia de tokens ali não foi medida.
- Cursor: depende do plano (Pro/Ultra com cobrança por uso) e da release. Precisa de revalidação.
Onde preciso de ajuda
- Uma semana de uso real e o resultado de
downshift stats --days=7 --export(o export não tem prompts). - Tarefas que ele classificou no tier errado. Elas alimentam um blind set novo, com 200 tarefas ou mais, que nunca será usado para ajustar.
- Validação no Cursor e no Antigravity.
Repositório: https://github.com/tiagovilasboas/downshift
Feedback duro é bem-vindo, principalmente sobre os números.