TL;DR
- Oito repos populares do Claude Code foram instalados no escopo do projeto sobre uma mesma base de código real e medidos: tokens ao iniciar a sessão, tokens de saída em três tarefas de código e o que cada um escreve fora do projeto.
- Só um dos oito mudou um resultado: o anti-slop, usado como linter, pegou o mesmo cast inseguro nas 3 execuções de T3 por +95 tokens de sessão e nada por turno.
- Os conjuntos de regras de saída enxuta não se sustentaram em trabalho com ferramentas: os 52% da base anunciados pelo Chisle viraram 94% dos tokens de saída da base, e o braço dele custou mais que a base em duas de três tarefas quando a entrada entra na conta.
- Os três servidores MCP nunca foram chamados nem uma vez em 63 execuções. Instalado não é o mesmo que usado.
- A pilha é aditiva: os oito juntos adicionaram +6,804 tokens no início, 63 tokens a menos que a soma das partes.
- Duas instalações saíram do projeto. Um codemod se registrou nas configs globais de outros 8 agentes; uma ferramenta fixa
--dangerously-skip-permissionse copia o arquivo de credenciais, então nunca foi executada.
O que as medições dizem
Os tokens de início de sessão são reproduzíveis, o custo em dólar não: cada condição retornou exatamente o mesmo total de tokens de entrada nas duas execuções, enquanto o custo da mesma condição oscilava de $0.0183 a $0.0035 conforme o estado do cache de prompt. Por isso a contagem de tokens é a métrica em todo o texto. O projeto base começa em 17,378 tokens s4.
Os esquemas de ferramentas MCP são adiados nesta versão do Claude Code, e o custo agora escala com o número de nomes de ferramenta que um servidor anuncia, não com o tamanho dos esquemas. As 39 ferramentas do ouroboros custam +1,642 tokens, as 19 do reticle +895, as 2 do ui-skills +37: cerca de 42 a 47 tokens por nome de ferramenta. Por padrão todas as ferramentas MCP são adiadas e carregadas sob demanda, e o modo auto de ENABLE_TOOL_SEARCH as adia quando suas definições chegam a 10% da janela de contexto s4.
O img2threejs traz um SKILL.md de 32,902 bytes e 352 arquivos, e custa +107 tokens no início, porque só a descrição do frontmatter é carregada. A documentação de skills limita cada descrição listada a 1,536 caracteres e encurta as descrições para caber em um orçamento de listagem quando há muitos skills; após a compactação, os skills invocados são reanexados a 5,000 tokens cada, dentro de um orçamento compartilhado de 25,000 tokens s5. Esse orçamento de listagem explica por que 40 skills podem custar 3,060 tokens por turno em uma configuração que não invoca nenhum s10, e por que as descrições são cortadas em vez de os skills serem descartados s11.
O hook UserPromptSubmit do Chisle adiciona 287 bytes de additionalContext a cada turno; em uma tarefa de 22 turnos, é isso que explica o braço dele ter custado +41,539 tokens de entrada no total em T3 contra a base. O caveman, medido como referência, não injeta nada a menos que o prompt comece com /caveman. Quando vários hooks do mesmo evento retornam cada um additionalContext, o Claude recebe todos concatenados, com limite de 10,000 caracteres por hook s15. Com Chisle, caveman e ouroboros ligados juntos, houve 3 registros em SessionStart, 3 em UserPromptSubmit e 2 em PostToolUse, para +4,269 tokens no início s15.
O README do Chisle afirma uma conta de 20 tarefas a 52% da base, e o próprio README restringe esse número a prompts de um único turno sem ferramentas s3. Em três tarefas contra um repo real, 3 execuções cada, as médias de saída somadas do Chisle foram 9,007 tokens contra 9,615 da base, ou seja, 94%; as do caveman foram 10,820, ou seja, 113%, numa amostra cuja dispersão em T3 foi de 2,014 tokens, então nenhuma das duas direções passa do ruído s3. O compressor de saída do Chisle nunca gravou um registro de economia em 63 execuções.
O anti-slop vendorizado em tools/oxlint/ com as 18 regras genéricas mais oxc/no-accumulating-spread achou 109 problemas no projeto intacto de 4,775 linhas, 83% deles vindos de duas regras de estilo da casa (require-readable-spacing 50, require-safety-comment-for-type-assertion 41) s8. No código que o Claude escreveu, pegou maxLength={field.maxLength as number} nas 3 execuções de T3, com o Claude copiando o cast inseguro da própria base de código s8. O plugin é ESM, então o projeto hospedeiro precisa de "type": "module" ou o oxlint falha com Cannot use import statement outside a module.
O codemod init do Reticle, executado com RETICLE_STATE_DIR definido e telemetria desligada, informou que registrou o servidor MCP em mais 8 agentes (VS Code no escopo de usuário, GitHub Copilot CLI, Warp, Factory Droid, Kiro, Amazon Q Developer CLI, Cline CLI, Amp) e pré-aprovou suas ferramentas no Gemini CLI; o pareamento então falhou com ERR_OSSL_EVP_UNSUPPORTED s6. O Caliper foi recusado: claude_code.py:106 fixa --dangerously-skip-permissions e seed_files() copia ~/.claude/.credentials.json com fallback para o Keychain s2. O hook UserPromptSubmit do ouroboros responde a um prompt comum como write prd for reading time com REQUIRED SKILL: /ouroboros:setup, uma etapa que uma instalação no escopo do projeto não consegue cumprir s7.
Um artigo sobre 2,545 trajetórias com bibliotecas de 52, 102 e 202 skills relata quedas agregadas na taxa de acerto de .08, .14 e até 21%, com descrições parecidas se ofuscando entre si e respondendo por uma parte crescente da perda s20.
Medições
Protocolo: um projeto TypeScript real, cada repo instalado apenas no escopo do projeto. Início de sessão: o prompt Reply with OK em modo JSON -p com flags idênticas, 2 execuções por condição, número = input_tokens + cache_creation_input_tokens + cache_read_input_tokens do primeiro turno. Ablação: três tarefas de código (T1 curta, T2 média, T3 longa de UI) com verificações de acerto e uma barreira de checagem de tipos, 3 execuções por célula, condições = base, cada repo sempre ativo sozinho, os oito empilhados. anti-slop: oxlint 1.78.0 com o conjunto de regras vendorizado sobre o projeto intacto e sobre o código escrito nas 9 execuções da base.
| repo | instalado no escopo do projeto | tokens adicionados no início | custo por turno |
|---|---|---|---|
| base | nada | 17,378 | nenhum |
| Chisle | 4 skills, 4 comandos, 3 hooks | +3,496 | +287 bytes de additionalContext a cada turno |
| ouroboros | servidor MCP, 39 nomes de ferramenta | +1,642 | injeção condicional |
| reticle | servidor MCP, 19 nomes de ferramenta | +895 / +903 | nenhum observado |
| fwc-swiftui-skills | 2 skills | +304 | nenhum |
| caliper | 2 skills | +172 | nenhum |
| img2threejs | 1 skill, 352 arquivos, SKILL.md = 32,902 B |
+107 | nenhum |
| anti-slop | 1 skill + conjunto de regras vendorizado | +95 | nenhum |
| ui-skills | MCP remoto, 2 ferramentas | +37 | nenhum |
| os oito empilhados | tudo acima | +6,804 | só o do Chisle |
| caveman (referência) | 4 skills, 2 hooks | +744 | 0 |
| tarefa | condição | acerto | novos erros de tipo | saída tok média | saída mín a máx | entrada total média | custo médio | turnos | chamadas MCP |
|---|---|---|---|---|---|---|---|---|---|
| T1 | base | 3/3 | 0 | 1,668 | 1,619 a 1,739 | 95,462 | $0.0519 | 7.0 | 0 |
| T1 | Chisle | 3/3 | 0 | 1,434 | 1,341 a 1,502 | 106,001 | $0.0576 | 7.7 | 0 |
| T1 | ui-skills | 3/3 | 0 | 1,756 | 1,644 a 1,885 | 96,279 | $0.0535 | 7.3 | 0 |
| T1 | reticle | 3/3 | 0 | 1,899 | 1,653 a 2,177 | 107,263 | $0.0594 | 8.0 | 0 |
| T1 | ouroboros | 3/3 | 0 | 1,729 | 1,655 a 1,787 | 97,166 | $0.0549 | 7.0 | 0 |
| T1 | pilha | 3/3 | 0 | 1,462 | 1,460 a 1,465 | 128,221 | $0.0646 | 7.7 | 0 |
| T2 | base | 3/3 | 0 | 2,128 | 2,105 a 2,164 | 74,286 | $0.0540 | 9.0 | 0 |
| T2 | Chisle | 3/3 | 0 | 2,184 | 2,150 a 2,230 | 87,462 | $0.0624 | 10.0 | 0 |
| T2 | ui-skills | 3/3 | 0 | 2,348 | 2,224 a 2,504 | 74,869 | $0.0604 | 10.0 | 0 |
| T2 | reticle | 3/3 | 0 | 2,614 | 2,312 a 2,824 | 78,664 | $0.0635 | 10.7 | 0 |
| T2 | ouroboros | 3/3 | 0 | 2,441 | 2,152 a 2,815 | 80,819 | $0.0622 | 10.0 | 0 |
| T2 | pilha | 3/3 | 0 | 2,136 | 2,015 a 2,216 | 89,378 | $0.0661 | 9.7 | 0 |
| T3 | base | 3/3 | 0 | 5,819 | 5,423 a 6,063 | 198,217 | $0.1551 | 22.0 | 0 |
| T3 | Chisle | 3/3 | 0 | 5,389 | 5,206 a 5,500 | 239,756 | $0.1565 | 20.3 | 0 |
| T3 | ui-skills | 3/3 | 0 | 5,279 | 4,860 a 5,567 | 214,691 | $0.1477 | 21.0 | 0 |
| T3 | reticle | 3/3 | 0 | 4,664 | 4,008 a 5,776 | 198,740 | $0.1293 | 19.0 | 0 |
| T3 | ouroboros | 3/3 | 0 | 5,456 | 4,324 a 7,093 | 232,763 | $0.1544 | 21.0 | 0 |
| T3 | pilha | 3/3 | 0 | 5,331 | 4,787 a 5,843 | 241,576 | $0.1591 | 19.7 | 0 |
63/63 execuções passaram e 0/63 introduziram um novo erro de tipo. Só duas células superam a própria dispersão entre execuções: Chisle em T1 (−234, −14.0%) e a pilha em T1 (−206, −12.3%). Em T2 e T3 todas as diferenças ficam dentro da dispersão; as execuções de T3 do ouroboros foram de 4,324 a 7,093 tokens de saída com um prompt idêntico, uma variação de 64%.
| repo | veredito | evidência |
|---|---|---|
| anti-slop | mudou a saída, como verificação | pegou o mesmo cast inseguro em 3/3 execuções de T3, +95 tokens, 0 por turno |
| Chisle | nada mensurável, custou mais | 94% da saída da base contra 52% anunciados; +3,496 no início, +287 bytes por turno |
| ui-skills | não mudou nada | 0 chamadas de ferramenta em 9 execuções, +37 tokens |
| reticle | em conflito | init escreveu em ~/.claude/settings.json e nas configs de outros 8 agentes; o pareamento nunca foi concluído |
| ouroboros | em conflito | exige /ouroboros:setup em prompts comuns; 39 nomes de ferramenta, 0 chamadas |
| caliper | não executado | --dangerously-skip-permissions fixo, copia o arquivo de credenciais |
| img2threejs | fora da pilha | +107 tokens, nada com que colidir |
| fwc-swiftui-skills | fora da pilha | +304 tokens, Markdown estático |
Faça isto na segunda
- Rode
/context allem uma sessão nova do seu projeto principal e anote o número inicial. - Rode
claude plugin details <name>em cada plugin instalado; a linha always-on é o único número cobrado a cada turno. - Liste seus hooks por evento. Todo hook que retorna
additionalContextemUserPromptSubmitpara todo prompt é uma taxa por turno; mantenha só os que disparam por palavra-chave ou matcher. - Conte os nomes de ferramenta que cada servidor MCP anuncia, reserve cerca de 42 a 47 tokens por nome e depois confira nos seus transcripts quantos foram chamados alguma vez.
- Antes de instalar qualquer coisa com um script
initou de setup, leia-o procurando escritas fora do repo:~/.claude/settings.json, diretórios de config de outros agentes, arquivos de credenciais,--dangerously-skip-permissions. - Ligue as verificações de qualidade do código gerado como um linter na etapa de verificação, não como um skill no contexto: uma regra de lint não custa nada por turno.
- Antes de confiar em qualquer promessa de economia de tokens, rode a mesma tarefa 3 vezes com e sem a ferramenta e compare a diferença com a sua própria dispersão mín a máx.
- Arquive o que remover em vez de apagar, para que um fluxo de trabalho que precise possa recuperar.
Para ir além
- O orçamento de listagem de skills e o limite de 1,536 caracteres por descrição explicam por que uma configuração lotada se degrada sem que nenhum skill deixe de carregar. Leia as seções "Skill descriptions are cut short" e "Skill content lifecycle" s5.
- O texto sobre o
/skill-doctormostra 40 skills custando 3,060 tokens por turno e quais cortar primeiro; seu ponto cego, skills caros dentro de um plugin em uso, fica para um acompanhamento s10. - O artigo por trás da regra prática de "mais de 30 skills": 2,545 trajetórias com bibliotecas de 52, 102 e 202 skills, com o efeito de ofuscamento isolado s20, e o resumo acessível que o popularizou s12.
- A concatenação de hooks e o limite de 10,000 caracteres de
additionalContext, mais a sintaxe de matcher que permite um hook disparar só emWrite|Edits15. - A thread dos 63% removidos, incluindo um bearer token fixo no código achado numa config MCP removida, uma digressão de segurança que o vídeo deixou de fora s13.
- O próprio README do Chisle, linhas 229 e 262, restringe o número de 52% a prompts de um único turno sem ferramentas e concede ao caveman a célula de código curto. Leia as letras miúdas antes de citar a manchete s3.
- Os dois repos fora da pilha não foram pontuados porque são invocados manualmente e não custam nada no início: img2threejs para cenas Three.js s21 e fwc-swiftui-skills para superfícies Liquid Glass s22.
Sources
- Plugins reference, docs do Claude Code. Por que ler:
plugin details, os escopos de instalação e o carregamento adiado de ferramentas MCP que faz do número de nomes de ferramenta o custo real. - Extend Claude with skills, docs do Claude Code. Por que ler: o limite de descrição, o orçamento de listagem e o orçamento de reanexação pós-compactação em uma página.
- Hooks reference, docs do Claude Code. Por que ler: o que acontece quando dois hooks injetam no mesmo evento e como os matchers mantêm um hook fora da maioria dos turnos.
- dmmulroy/anti-slop, GitHub. Por que ler: o único repo dos oito que mudou um resultado; vendorize as regras, pule o skill.
- JayPokale/Chisle, GitHub. Por que ler: um README que delimita com honestidade o próprio número de 52% se você ler além da manchete.
- edonadei/caliper, GitHub. Por que ler: um avaliador de skills que vale conhecer e uma lição sobre ler
claude_code.pyantes de executar qualquer coisa. - reticlehq/reticle, GitHub. Por que ler: o codemod
inité o exemplo mais claro de um instalador escrevendo bem longe do seu projeto. - Q00/ouroboros, GitHub. Por que ler: um fluxo guiado por hooks que só faz sentido instalado globalmente, com uma etapa de setup que uma instalação de projeto não cumpre.
- ibelick/ui-skills, GitHub. Por que ler: a instalação mais barata daqui, +37 tokens, e nunca chamada.
- /skill-doctor: 40 skills, 3,060 tokens a turn, dev.to. Por que ler: um detalhamento de custo por skill numa configuração real.
- Too many Claude Code skills? How the listing budget decides, dev.to. Por que ler: o mecanismo pelo qual as descrições são truncadas.
- Why More Than 30 Skills Kill Your AI Agent, dev.to. Por que ler: a versão legível do artigo sobre ofuscamento.
- Skill shadowing paper, arXiv. Por que ler: as quedas agregadas na taxa de acerto por tamanho de biblioteca, com intervalos de confiança.
- I removed 63% of my Claude Code setup, Reddit r/ClaudeCode. Por que ler: de ~235 componentes para ~87, arquivados e não apagados.
- My fresh Claude Code sessions were starting at ~35K tokens, Reddit r/ClaudeCode. Por que ler: uma auditoria de sete passos com
/context allque você pode copiar hoje à tarde. - img2threejs/img2threejs, GitHub. Por que ler: a prova de que um
SKILL.mdde 32,902 bytes custa 107 tokens até você invocá-lo. - FloWritesCode/fwc-swiftui-skills, GitHub. Por que ler: skills em Markdown estático, o formato de uma instalação que não pode conflitar com nada.
FAQ
Um servidor MCP ainda custa milhares de tokens de esquema na inicialização?
Não na versão medida. Os esquemas são adiados e o custo escala com o número de nomes de ferramenta anunciados, cerca de 42 a 47 tokens cada. Um servidor com 39 ferramentas custou +1,642 tokens; um com 2 ferramentas, +37.
Por que o Chisle custou mais que a base se produziu menos tokens de saída?
O conjunto de regras dele carrega no início da sessão (+3,496 tokens) e o hook injeta 287 bytes a cada turno. Em T2 e T3, essa sobrecarga de entrada superou uma economia de saída que nunca passou do ruído entre execuções.
AIDive