AIDive

Pack de vídeo

Ocho repos de Claude Code medidos en un proyecto: coste de sesión, ablaciones, veredictos

13 min de lectura

TL;DR

  • Ocho repos populares de Claude Code se instalaron a nivel de proyecto sobre un mismo código real y se midieron: tokens al iniciar la sesión, tokens de salida en tres tareas de código y lo que cada uno escribe fuera del proyecto.
  • Solo uno de los ocho cambió un resultado: anti-slop, usado como linter, detectó el mismo cast inseguro en los 3 runs de T3 por +95 tokens de sesión y nada por turno.
  • Los conjuntos de reglas de salida escueta no aguantaron en trabajo con herramientas: el 52% de la base que anuncia Chisle pasó a ser el 94% de los tokens de salida de la base, y su brazo costó más que la base en dos de tres tareas una vez contada la entrada.
  • Los tres servidores MCP no se llamaron ni una vez en 63 runs. Instalado no es lo mismo que usado.
  • La pila es aditiva: los ocho juntos añadieron +6,804 tokens al inicio, 63 tokens menos que la suma de las partes.
  • Dos instalaciones salieron del proyecto. Un codemod se registró en las configuraciones globales de otros 8 agentes; una herramienta fija --dangerously-skip-permissions y copia el archivo de credenciales, así que nunca se ejecutó.

Qué dicen las mediciones

Los tokens al inicio de sesión son reproducibles, el coste en dólares no: cada condición devolvió el mismo total de tokens de entrada en ambos runs, mientras que el coste de esa misma condición variaba de $0.0183 a $0.0035 según el estado de la caché del prompt. Por eso la métrica en todo el análisis es el número de tokens. El proyecto base arranca en 17,378 tokens s4.

Los esquemas de herramientas MCP están diferidos en esta versión de Claude Code, y el coste ahora depende del número de nombres de herramienta que anuncia un servidor, no del tamaño de los esquemas. Las 39 herramientas de ouroboros cuestan +1,642 tokens, las 19 de reticle +895, las 2 de ui-skills +37: aproximadamente 42 a 47 tokens por nombre de herramienta. Por defecto todas las herramientas MCP están diferidas y se cargan bajo demanda, y el modo auto de ENABLE_TOOL_SEARCH las difiere cuando sus definiciones alcanzan el 10% de la ventana de contexto s4. img2threejs incluye un SKILL.md de 32,902 bytes y 352 archivos, y cuesta +107 tokens al inicio, porque solo se carga la descripción del frontmatter. La documentación de skills limita cada descripción listada a 1,536 caracteres y acorta las descripciones para ajustarse a un presupuesto de listado cuando hay muchos skills; tras la compactación, los skills invocados se vuelven a adjuntar a 5,000 tokens cada uno dentro de un presupuesto compartido de 25,000 tokens s5. Ese presupuesto de listado explica por qué 40 skills pueden costar 3,060 tokens por turno en una configuración que no invoca ninguno s10, y por qué se recortan las descripciones en lugar de descartar skills s11.

El hook UserPromptSubmit de Chisle añade 287 bytes de additionalContext en cada turno; en una tarea de 22 turnos, eso explica que su brazo costara +41,539 tokens de entrada en total en T3 frente a la base. caveman, medido como referencia, no inyecta nada salvo que el prompt empiece por /caveman. Cuando varios hooks del mismo evento devuelven cada uno additionalContext, Claude recibe todos concatenados, con un tope de 10,000 caracteres por hook s15. Con Chisle, caveman y ouroboros conectados a la vez hubo 3 registros en SessionStart, 3 en UserPromptSubmit y 2 en PostToolUse, para +4,269 tokens al inicio s15.

El README de Chisle afirma una factura de 20 tareas al 52% de la base, y el propio README limita esa cifra a prompts de un solo turno sin herramientas s3. En tres tareas contra un repo real, 3 runs cada una, las medias de salida sumadas de Chisle fueron 9,007 tokens frente a 9,615 de la base, es decir, 94%; las de caveman fueron 10,820, es decir, 113%, sobre una muestra cuya dispersión en T3 fue de 2,014 tokens, así que ninguna de las dos direcciones supera el ruido s3. El compresor de salida de Chisle nunca escribió un registro de ahorro en 63 runs.

anti-slop vendorizado en tools/oxlint/ con sus 18 reglas genéricas más oxc/no-accumulating-spread encontró 109 problemas en el proyecto intacto de 4,775 líneas, el 83% de ellos por dos reglas de estilo de la casa (require-readable-spacing 50, require-safety-comment-for-type-assertion 41) s8. En el código que escribió Claude detectó maxLength={field.maxLength as number} en los 3 runs de T3, con Claude copiando el cast inseguro del propio código s8. El plugin es ESM, así que el proyecto anfitrión necesita "type": "module" o oxlint falla con Cannot use import statement outside a module.

El codemod init de Reticle, ejecutado con RETICLE_STATE_DIR definido y la telemetría desactivada, informó de que registró el servidor MCP en otros 8 agentes (VS Code a nivel de usuario, GitHub Copilot CLI, Warp, Factory Droid, Kiro, Amazon Q Developer CLI, Cline CLI, Amp) y preaprobó sus herramientas en Gemini CLI; después el emparejamiento falló con ERR_OSSL_EVP_UNSUPPORTED s6. Caliper se descartó: claude_code.py:106 fija --dangerously-skip-permissions y seed_files() copia ~/.claude/.credentials.json con un respaldo al Keychain s2. El hook UserPromptSubmit de ouroboros responde a un prompt corriente como write prd for reading time con REQUIRED SKILL: /ouroboros:setup, un paso que una instalación a nivel de proyecto no puede cumplir s7.

Un artículo sobre 2,545 trayectorias con bibliotecas de 52, 102 y 202 skills reporta caídas agregadas de la tasa de acierto de .08, .14 y hasta 21%, con descripciones parecidas que se eclipsan entre sí y explican una parte creciente de la pérdida s20.

Mediciones

Protocolo: un proyecto TypeScript real, cada repo instalado solo a nivel de proyecto. Inicio de sesión: el prompt Reply with OK en modo JSON -p con flags idénticos, 2 runs por condición, cifra = input_tokens + cache_creation_input_tokens + cache_read_input_tokens del primer turno. Ablación: tres tareas de código (T1 corta, T2 media, T3 larga de UI) con comprobaciones de acierto y una puerta de verificación de tipos, 3 runs por celda, condiciones = base, cada repo siempre activo por separado, los ocho apilados. anti-slop: oxlint 1.78.0 con el conjunto de reglas vendorizado sobre el proyecto intacto y sobre el código escrito en los 9 runs de la base.

repo instalado a nivel de proyecto tokens añadidos al inicio coste por turno
base nada 17,378 ninguno
Chisle 4 skills, 4 comandos, 3 hooks +3,496 +287 bytes de additionalContext en cada turno
ouroboros servidor MCP, 39 nombres de herramienta +1,642 inyección condicional
reticle servidor MCP, 19 nombres de herramienta +895 / +903 ninguno observado
fwc-swiftui-skills 2 skills +304 ninguno
caliper 2 skills +172 ninguno
img2threejs 1 skill, 352 archivos, SKILL.md = 32,902 B +107 ninguno
anti-slop 1 skill + conjunto de reglas vendorizado +95 ninguno
ui-skills MCP remoto, 2 herramientas +37 ninguno
los ocho apilados todo lo anterior +6,804 solo el de Chisle
caveman (referencia) 4 skills, 2 hooks +744 0
tarea condición acierto nuevos errores de tipo salida tok media salida mín a máx entrada total media coste medio turnos llamadas 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 pila 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 pila 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 pila 3/3 0 5,331 4,787 a 5,843 241,576 $0.1591 19.7 0

63/63 runs aprobados y 0/63 introdujeron un error de tipo nuevo. Solo dos celdas superan su propia dispersión entre runs: Chisle en T1 (−234, −14.0%) y la pila en T1 (−206, −12.3%). En T2 y T3 todas las diferencias caen dentro de la dispersión; los runs de T3 de ouroboros fueron de 4,324 a 7,093 tokens de salida con un prompt idéntico, una variación del 64%.

repo veredicto evidencia
anti-slop cambió la salida, como comprobación detectó el mismo cast inseguro en 3/3 runs de T3, +95 tokens, 0 por turno
Chisle nada medible, costó más 94% de la salida de la base frente a un 52% anunciado; +3,496 al inicio, +287 bytes por turno
ui-skills no cambió nada 0 llamadas a herramientas en 9 runs, +37 tokens
reticle en conflicto init escribió en ~/.claude/settings.json y en las configuraciones de otros 8 agentes; el emparejamiento nunca se completó
ouroboros en conflicto exige /ouroboros:setup en prompts corrientes; 39 nombres de herramienta, 0 llamadas
caliper no ejecutado --dangerously-skip-permissions fijado, copia el archivo de credenciales
img2threejs fuera de la pila +107 tokens, nada con lo que colisionar
fwc-swiftui-skills fuera de la pila +304 tokens, Markdown estático

Qué hacer el lunes

  • Ejecuta /context all en una sesión nueva de tu proyecto principal y apunta la cifra inicial.
  • Ejecuta claude plugin details <name> en cada plugin instalado; la línea always-on es la única cifra que se factura en cada turno.
  • Lista tus hooks por evento. Todo hook que devuelva additionalContext en UserPromptSubmit para cada prompt es un impuesto por turno; quédate solo con los que se activan por una palabra clave o un matcher.
  • Cuenta los nombres de herramienta que anuncia cada servidor MCP, presupuesta unos 42 a 47 tokens por nombre y luego revisa en tus transcripts cuántos se llamaron alguna vez.
  • Antes de instalar algo con un script init o de setup, léelo en busca de escrituras fuera del repo: ~/.claude/settings.json, directorios de configuración de otros agentes, archivos de credenciales, --dangerously-skip-permissions.
  • Conecta las comprobaciones de calidad del código generado como un linter en el paso de verificación, no como un skill en el contexto: una regla de lint no cuesta nada por turno.
  • Antes de creer cualquier promesa de ahorro de tokens, ejecuta la misma tarea 3 veces con y sin la herramienta y compara la diferencia con tu propia dispersión mín a máx.
  • Archiva lo que quites en lugar de borrarlo, para que un flujo de trabajo que lo necesite pueda recuperarlo.

Para ir más lejos

  • El presupuesto de listado de skills y el tope de 1,536 caracteres por descripción explican por qué una configuración saturada se degrada sin que ningún skill deje de cargarse. Lee las secciones "Skill descriptions are cut short" y "Skill content lifecycle" s5.
  • El artículo de /skill-doctor muestra 40 skills que cuestan 3,060 tokens por turno y cuáles recortar primero; su punto ciego, los skills costosos dentro de un plugin en uso, queda para un seguimiento s10.
  • El artículo detrás de la regla práctica de "más de 30 skills": 2,545 trayectorias con bibliotecas de 52, 102 y 202 skills, con el efecto de eclipse aislado s20, y el resumen accesible que lo popularizó s12.
  • La concatenación de hooks y el tope de 10,000 caracteres de additionalContext, más la sintaxis de matcher que permite que un hook se active solo en Write|Edit s15.
  • El hilo del 63% eliminado, que incluye un bearer token escrito a mano encontrado en una configuración MCP eliminada, una digresión de seguridad que el vídeo dejó fuera s13.
  • El propio README de Chisle, líneas 229 y 262, limita su cifra del 52% a prompts de un solo turno sin herramientas y cede a caveman la celda de código corto. Lee la letra pequeña antes de citar el titular s3.
  • Los dos repos fuera de la pila no se puntuaron porque se invocan a mano y no cuestan nada al inicio: img2threejs para escenas de Three.js s21 y fwc-swiftui-skills para superficies Liquid Glass s22.

Sources

  • Plugins reference, docs de Claude Code. Por qué leerlo: plugin details, los ámbitos de instalación y la carga diferida de herramientas MCP que convierte el número de nombres de herramienta en el coste real.
  • Extend Claude with skills, docs de Claude Code. Por qué leerlo: el tope de descripciones, el presupuesto de listado y el presupuesto de readjunción tras la compactación en una sola página.
  • Hooks reference, docs de Claude Code. Por qué leerlo: qué pasa cuando dos hooks inyectan en el mismo evento y cómo los matchers mantienen un hook fuera de la mayoría de los turnos.
  • dmmulroy/anti-slop, GitHub. Por qué leerlo: el único repo de los ocho que cambió un resultado; vendoriza las reglas, sáltate el skill.
  • JayPokale/Chisle, GitHub. Por qué leerlo: un README que acota con honestidad su propia cifra del 52% si lees más allá del titular.
  • edonadei/caliper, GitHub. Por qué leerlo: un evaluador de skills que conviene conocer y una lección sobre leer claude_code.py antes de ejecutar nada.
  • reticlehq/reticle, GitHub. Por qué leerlo: el codemod init es el ejemplo más claro de un instalador que escribe muy lejos de tu proyecto.
  • Q00/ouroboros, GitHub. Por qué leerlo: un flujo basado en hooks que solo tiene sentido instalado globalmente, con un paso de setup que una instalación de proyecto no puede cumplir.
  • ibelick/ui-skills, GitHub. Por qué leerlo: la instalación más barata de todas con +37 tokens, y nunca llamada.
  • /skill-doctor: 40 skills, 3,060 tokens a turn, dev.to. Por qué leerlo: un desglose de coste por skill en una configuración real.
  • Too many Claude Code skills? How the listing budget decides, dev.to. Por qué leerlo: el mecanismo por el que se truncan las descripciones.
  • Why More Than 30 Skills Kill Your AI Agent, dev.to. Por qué leerlo: la versión legible del artículo sobre el eclipse de skills.
  • Skill shadowing paper, arXiv. Por qué leerlo: las caídas agregadas de acierto por tamaño de biblioteca, con intervalos de confianza.
  • I removed 63% of my Claude Code setup, Reddit r/ClaudeCode. Por qué leerlo: de ~235 componentes a ~87, archivados y no borrados.
  • My fresh Claude Code sessions were starting at ~35K tokens, Reddit r/ClaudeCode. Por qué leerlo: una auditoría de siete pasos con /context all que puedes copiar esta tarde.
  • img2threejs/img2threejs, GitHub. Por qué leerlo: la prueba de que un SKILL.md de 32,902 bytes cuesta 107 tokens hasta que lo invocas.
  • FloWritesCode/fwc-swiftui-skills, GitHub. Por qué leerlo: skills en Markdown estático, la forma de una instalación que no puede entrar en conflicto con nada.

FAQ

¿Un servidor MCP sigue costando miles de tokens de esquema al arrancar?

No en la versión medida. Los esquemas están diferidos y el coste depende del número de nombres de herramienta anunciados, unos 42 a 47 tokens cada uno. Un servidor con 39 herramientas costó +1,642 tokens; uno con 2 herramientas, +37.

¿Por qué Chisle costó más que la base si producía menos tokens de salida?

Su conjunto de reglas se carga al inicio (+3,496 tokens) y su hook inyecta 287 bytes en cada turno. En T2 y T3, esa sobrecarga de entrada superó un ahorro de salida que nunca salió del ruido entre runs.