🪙 Los logs son oro
Antes de medir cualquier cosa, hay que saber dónde está enterrado el oro. Esta ruta mapea dónde viven las conversaciones de Claude Code, disecciona la anatomía de una sesión JSONL y separa la grasa del oro.
Mapa de la ruta
Contenido detallado
📂 Dónde viven las conversaciones y la anatomía de una sesión
El disco, el formato JSONL, la anatomía de un evento y el campo que separa los modelos.
Cada sesión es un archivo ~/.claude/projects/<projeto>/<sessão>.jsonl; hay miles en total.
Es la fuente bruta de todo. Saber la ruta es el primer paso para minar.
Un archivo por sesión; una carpeta por proyecto; sin base de datos.
No es un único JSON: cada línea es un objeto JSON independiente, agregado a medida que avanza la conversación.
Lees línea por línea, sin cargar el archivo entero, y el parsing se vuelve trivial.
Solo anexado; una línea = un evento; resistente a interrupciones.
Campos como type, message, timestamp, uuid, cwd, gitBranch.
Saber qué contiene cada campo es lo que permite filtrar, agrupar y medir.
type ∈ user/assistant/system/summary; timestamp ordena; cwd/gitBranch dan contexto.
El asistente habla en bloques: text, thinking, tool_use, tool_result. Claude Code registra CADA bloque en una LÍNEA separada.
Es el detalle que lo cambia todo en el conteo: «por línea» diluye la señal; por eso agrupamos por turnos.
Un turno físico = una línea = un bloque; varios bloques componen un turno lógico.
El campo que indica qué modelo escribió cada turno: claude-fable-5, claude-opus-4-8, claude-haiku-4-5...
Es lo que permite filtrar por modelo y separar el corpus de cada uno.
Solo los eventos del asistente tienen model; es la clave para comparar Fable con Opus.
Turno físico = una línea. Turno lógico = 1 prompt humano hasta el siguiente prompt humano (todo lo que hay en medio).
Medir por línea diluye la señal; el turno lógico es la unidad que revela el ritmo de trabajo.
Agrupa por prompt humano; cuenta la presencia de thinking y tool_use por turno lógico.
⛏️ Grasa vs. oro — y el mito del razonamiento minable
Qué descartar, qué guardar, por qué el pensamiento literal no está ahí y la ética del corpus.
tool_result contenido repetido, volcados de archivos completos, salida de comandos, blobs de adjuntos (base64), contabilidad del harness (usage, sidechain, isMeta).
Es la mayor parte del peso del archivo — y casi nada de la señal de comportamiento.
Relleno = salida repetida + bytes opacos; descarta sin perder el ritmo.
Tus prompts, el texto del asistente, la PRESENCIA de razonamiento, la secuencia de tool_use y las marcas de tiempo.
Es lo que revela cómo trabaja cada modelo — el material del playbook.
Oro = decisiones + orden de acciones + cadencia, no bytes de salida.
El texto del thinking viene VACÍO/cifrado en los logs (solo la signature). No extraes el pensamiento literal.
Es la diferencia honesta del curso: mides la presencia y el ritmo del razonamiento, no su contenido.
Presencia ≠ contenido; la signature demuestra que hubo razonamiento sin revelarlo.
La presencia de razonamiento + la cadencia de herramientas + el orden de las acciones revelan el «ritmo» de trabajo de un modelo.
Es exactamente ese ritmo el que se convierte en una regla de playbook que se puede inyectar.
Ritmo = pensar antes de actuar + densidad de herramientas + leer antes de editar.
El debloat reduce una sesión típica alrededor de un 74%: la grasa representa la mayor parte.
Ajusta las expectativas: la señal cabe en un archivo pequeño y legible.
−74% típico; el oro restante es lo que analizas.
Los logs contienen TU código y datos; trata el corpus como sensible y redacta la información antes de compartirlo.
Minar no es excusa para filtrar secretos; el corpus puede contener claves y rutas.
Trátalo como dato personal; redacta los secretos; lo valioso es el ritmo, no los datos.