Creé una herramienta proxy para ver cómo Claude Code envía `CLAUDE.md` al servidor y de qué forma manda el texto original de los skills.
(github.com/kangraemin)Mientras trabajaba con Claude Code, de repente me dio curiosidad saber cómo es que el servidor de Claude reconoce datos como el archivo CLAUDE.md, los skills o cosas como rules / memory.
Así que hice directamente un proxy MITM y creé una herramienta para poder ver el tráfico.
Funciona cambiando el baseURL al ejecutar Claude Code, para capturar y mostrar la comunicación HTTP que ocurre dentro de Claude Code.
Estas son algunas cosas que pude descubrir con esta herramienta.
Con solo decir hello ya se envían 12 KB
- Es la situación al abrir Claude Code y enviar
hellode inmediato. - Se mandan
content[0]la lista de skills ~2 KB,content[1]CLAUDE.md~10 KB, ycontent[2]el texto real de entrada,hello. - Es decir, si
CLAUDE.mdtiene 500 líneas, se envía completo en cada request, y esa es la razón por la que conviene mantenerCLAUDE.mdconciso.
Mientras más crece la conversación, más se agranda cada request como bola de nieve
- Se reenvía todo
messages[]en cada request. — turno 1: 15 KB, turno 10: 200 KB, turno 30: 1 MB+ - Incluso las respuestas que dio Claude también se incluyen dentro del request message.
- Pude ver que, si no se hace
/clearde forma periódica en la ventana de contexto, además del desperdicio de tokens, el contexto anterior se va pegando siempre al posterior y eso puede degradar el rendimiento.
Las herramientas MCP se cargan solo cuando hacen falta
- Al principio solo se cargan N herramientas integradas (varía según la versión de Claude), y cuando hace falta usar una MCP tool, el servidor llama a
ToolSearchpara encontrar la herramienta que se va a usar. - Después, en cada llamada, se agregan las herramientas encontradas arriba y se invocan de esa forma.
- O sea, como las MCP Tool se cargan dinámicamente, las herramientas de MCP que no se han usado en realidad no generan un gran consumo de tokens.
Los subagentes se ejecutan con un contexto completamente aislado
- Un subagente es como abrir una sesión nueva sin ningún historial de conversación del padre.
- En Inspector pueden comparar visualmente, lado a lado, las dos llamadas del padre y del subagente.
Adjuntar una sola imagen agrega varios cientos de KB
- Si adjuntan una captura de pantalla, se codifica en base64 y se inserta en línea dentro del body JSON.
- Se puede verificar en tiempo real cuánto hace crecer el request una imagen.
Pueden instalarlo con el siguiente comando.
brew install --cask kangraemin/tap/claude-inspector && sleep 2 && open -a "Claude Inspector"
GitHub: https://github.com/kangraemin/claude-inspector
Por ahora es solo para macOS y, como es una versión inicial, si me sugieren mejoras las voy a recibir con mucho interés.
Ojalá lo prueben y les ayude a aprender. ¡Gracias!
4 comentarios
En el artículo suspiciously precise floats, or,
how I got Claude's real limits, vi un análisis que decía que, a diferencia del costo de la API, en el plan de suscripción no hay costo por lectura de caché. También me parece que, mientras más larga sea la sesión, podría haber cierta diferencia entre el costo calculado y el costo real.
Oh... es un texto que no conocía para nada... ¡lo revisaré! ¡Gracias!
https://github.com/badlogic/lemmy/tree/main/apps/claude-trace
Con esto revisé el prompt y qué herramientas se usaron; también tendré que probar el que hiciste.
Gracias por compartirlo. :+1:
Adicionalmente, después de la solicitud se puede ver en la respuesta la cantidad de tokens usados en esa request.
Modelo: claude-sonnet-4-6
Tamaño de la solicitud: 68.9 KB
Además, también calculé el costo por request aplicando el precio de cada modelo, así que espero que lo usen mucho jaja.
Lectura de caché: 6.5K tok × $0.3/MTok = $0.0019
Escritura de caché: 12.4K tok × $3.75/MTok = $0.0465
Entrada sin caché: 3 tok × $3/MTok = $0.0000
Salida: 74 tok × $15/MTok = $0.0011
Total: $0.0495
Tasa de aciertos de caché: 34%