Seguimiento de Costos
Usa este skill para analizar el historial de costos y uso de Claude Code a partir del registro de métricas
que escribe el hook stop:cost-tracker de ECC.
Dónde viven los datos
El tracker agrega un objeto JSON por cada parada de sesión en
~/.claude/metrics/costs.jsonl. Cada fila es una instantánea acumulativa para esa
sesión, por lo tanto, para obtener el gasto total debes tomar la última fila por session_id y
sumar entre sesiones; sumar cada fila contaría varias veces.
Esquema de fila:
| Campo | Significado |
|---|---|
timestamp | Marca de tiempo ISO de la instantánea |
session_id | Identificador de sesión de Claude Code |
transcript_path | Ruta al transcript de la sesión |
model | Modelo utilizado |
input_tokens / output_tokens | Conteo de tokens |
cache_write_tokens / cache_read_tokens | Conteo de tokens de caché de prompt |
estimated_cost_usd | Costo acumulado precalculado en USD para la sesión |
Prefiere estimated_cost_usd en lugar de calcular precios manualmente: los precios de modelo y
caché cambian, y el tracker es la fuente de verdad.
Cuándo usarlo
- El usuario pregunta "¿cuánto he gastado?", "¿cuánto costó esta sesión?" o "¿cuál es mi uso de tokens?"
- El usuario menciona presupuestos, límites de gasto, excesos o controles de costos.
- El usuario quiere un desglose de costos por modelo, sesión o fecha, o una exportación a CSV.
Cómo funciona
Primero verifica que el registro exista (usa node, no sqlite3 — el tracker escribe
JSONL, y node es multiplataforma):
node -e 'const fs=require("fs"),os=require("os"),p=require("path");const f=p.join(os.homedir(),".claude","metrics","costs.jsonl");console.log(fs.existsSync(f)?"registro de costos encontrado":"registro de costos no encontrado: "+f)'
Si el registro falta, no inventes datos de uso. Indica al usuario que el seguimiento
de costos se completa después de que la primera sesión finalice con el hook stop:cost-tracker
habilitado.
Ejemplo — resumen, por modelo, últimos 7 días
node -e '
const fs=require("fs"),os=require("os"),path=require("path");
const f=path.join(os.homedir(),".claude","metrics","costs.jsonl");
if(!fs.existsSync(f)){console.log("registro de costos no encontrado: "+f);process.exit(0);}
const rows=fs.readFileSync(f,"utf8").split(/\r?\n/).filter(Boolean).map(l=>{try{return JSON.parse(l)}catch{return null}}).filter(Boolean);
const bySession=new Map();
for(const r of rows){const k=r.session_id||r.transcript_path||r.timestamp;const p=bySession.get(k);if(!p||String(r.timestamp)>String(p.timestamp))bySession.set(k,r);}
const latest=[...bySession.values()];
const cost=r=>Number(r.estimated_cost_usd)||0, day=r=>String(r.timestamp||"").slice(0,10), sum=a=>a.reduce((s,r)=>s+cost(r),0), f4=n=>"$"+n.toFixed(4);
const today=new Date().toISOString().slice(0,10), yest=new Date(Date.now()-864e5).toISOString().slice(0,10);
console.log("hoy: "+f4(sum(latest.filter(r=>day(r)===today)))+" | ayer: "+f4(sum(latest.filter(r=>day(r)===yest)))+" | total: "+f4(sum(latest))+" ("+latest.length+" sesiones)");
const m=new Map();for(const r of latest){const k=r.model||"(desconocido)";m.set(k,(m.get(k)||0)+cost(r));}
console.log("por modelo:");[...m.entries()].sort((a,b)=>b[1]-a[1]).forEach(([k,v])=>console.log(" "+f4(v)+" "+k));
'
Para un desglose por sesión o exportación a CSV, itera sobre el mismo conjunto latest (o las filas
sin procesar para CSV) e imprime los campos que necesites.
Pautas de reporte
Al presentar datos de costos, incluye el gasto de hoy vs ayer, el total de todas las sesiones, un desglose por modelo y el número de sesiones. Formatea cantidades sub-dólar con cuatro decimales, cantidades mayores con dos.
Anti-patrones
- No sumes cada fila — son acumulativas por sesión; primero reduce a la última
fila por
session_id. - No estimes costos a partir de conteos brutos de tokens cuando
estimated_cost_usdesté presente. - No asumas que el registro existe sin verificarlo.
- No uses precios de modelo actuales codificados en las respuestas dirigidas al usuario.
- No recomiendes instalar hooks o plugins no revisados que ejecuten código arbitrario.
Relacionados
/cost-report- Informe en formato comando sobre el mismo registro de métricas.cost-aware-llm-pipeline- Patrones de enrutamiento de modelo y diseño de presupuestos.token-budget-advisor- Planificación de contexto y presupuesto de tokens.strategic-compact- Compactación de contexto para reducir gastos repetidos de tokens.