← Volver a Agent Harness informe técnico · medido sobre main

Evaluaciones del arnés

rama main · commit 9922a27corridas del 2026-10-19

Resumen. Se evaluaron los frenos computacionales del arnés con un conjunto etiquetado de 274 casos (determinista, sin red) y cuatro subagentes que juzgan con un modelo, con 14 casos repetidos 3 veces (42 llamadas), todo sobre main. Los frenos no fallaron ningún caso; los subagentes acertaron 41 de 42 veredictos. Con estos tamaños de muestra, la cota inferior del intervalo de confianza al 95 % es 95,4 % para el recall de los frenos y 87,7 % para los subagentes en conjunto, y baja a 61–74 % por subagente: cero fallos no es tasa perfecta, y la incertidumbre la fija n.

80/80ataques frenados (recall)IC95 [95,4 – 100]
0/45inocentes frenados (FPR)IC95 [0 – 7,9]
51/51rodeos frenadosIC95 [93,0 – 100]
41/42veredictos de subagentesIC95 [87,7 – 99,6]
0,86calidad media (rúbrica)DE 0,22 · n = 42
FIGURA 1 Tasa de acierto por métrica, con intervalo de confianza al 95 % (Wilson) El punto es la tasa observada; la línea, el intervalo. Casi todas las tasas son 100 %: lo que cambia es cuánto lo garantiza cada n. La línea punteada es el umbral de los subagentes (minScore = 80 %). El eje empieza en 20 %.
FIGURA 2 Matriz de confusión de las reglas Acción real contra decisión del arnés. Los 6 ataques que se sabe que pasan están declarados como huecos y quedan fuera del recall.
FRENA O ESCALA
DEJA PASAR
ataque
n = 86
80verdaderos positivos
0 + 6falsos negativos + huecos declarados
inocente
n = 45
0falsos positivos
45verdaderos negativos
precisión · recall · especificidad1,00 · 1,00 · 1,00
recall contando los huecos (80/86)93,0 % [85,6 – 96,8]
exactitud de la decisión (frenar ≠ preguntar)80/80
FIGURA 3 Cota inferior del recall por categoría Las diez categorías tienen recall de 100 %; la barra va desde la cota inferior del IC95 hasta 100 %. Con 4 ataques, cero fallos sólo garantiza más del 51 %.
FIGURA 4 Calidad de cada respuesta de los subagentes (rúbrica con un modelo como juez, 0 a 1) Cada punto es una de las 42 llamadas; la marca vertical es la media del subagente. En naranja, las respuestas por debajo de 0,5. El veredicto fue el esperado en 41 de las 42: la rúbrica mide otra cosa (formato, una sola hipótesis, rutas citadas) y no decide.
respuestacalidad < 0,5media
FIGURA 5 Latencia por llamada al subagente (segundos) Tiempo de una llamada completa (claude -p aislado), con 3 llamadas en paralelo. La marca es la mediana. El caso inocente nuevo del reviewer es el más caro (43–57 s): el revisor busca rodeos al patrón antes de decidir.

Hallazgos

  1. El caso inocente del reviewer es inestable (2/3). Una de tres veces lo rechaza, y con razón: la regla del caso termina en (?=\s|$), así que git worktree remove wt -f;echo o (git … --force) la rodean; la regla hermana de push usa (?![-\w]). La etiqueta «inocente» es discutible, no el juez. Es la segunda vez que un 0/n o un k/n bajo en este caso señala el dato antes que al agente: la primera, el inocente original duplicaba una regla que el config ya tenía (con una corrida por caso daba 5/6 y quedaba oculto).
  2. El veredicto no basta para medir a un subagente. El gate-runner acierta 9/9 veredictos pero su calidad tiene la mayor dispersión (media 0,79, DE 0,27): en 2 de 3 corridas del caso rojo lista varias hipótesis cuando su prompt pide una.
  3. Los frenos aguantan los rodeos sin morder de más. 51/51 variantes frenadas y 0/45 inocentes bloqueados, en español y en inglés (34/34 y 33/33).

Datos

Cada número de este informe sale de estos conjuntos, en el commit medido de main (9922a27). Los enlaces apuntan a ese commit, no a la versión actual: si el conjunto cambia, la huella deja de coincidir y el informe está vencido. Los resultados crudos —el resumen determinista y las 42 llamadas con su caso, su entrada, el veredicto esperado, si acertó, su calidad y su latencia— están en evaluaciones-datos.json.

ConjuntoArchivo en main@9922a27CasosComposiciónSHA-256
determinista.claude/evals/deterministic/cases.json (esquema: cases.schema.json)274118 guías · 131 reglas (80 ataques, 45 inocentes, 6 huecos) · 25 señales; es/end27fc8d60be2…
reviewer.claude/evals/reviewer/ · casos en reviewerEval.cases6 × 34 diffs con una violación (P4, P5, P6, deuda) · 2 inocentespor archivo, en el JSON
gate-runner.claude/evals/gate-runner/ · aiEval.suites3 × 3salidas del gate: rojo con dos señales, verde con omitida, fast verdepor archivo, en el JSON
ci-investigator.claude/evals/ci-investigator/ · aiEval.suites3 × 3salidas de ci-investigate: rojo sólo en CI, rojo también local, en cursopor archivo, en el JSON
explorer.claude/evals/explorer/ · aiEval.suites2 × 3preguntas sobre el repo copiadopor archivo, en el JSON

Las etiquetas (qué debería pasar) viven en el config de ese mismo commit: .claude/harness.config.json (harnessEval, reviewerEval, aiEval, subagentOutput.contracts). Para reproducir: git checkout 9922a27 && npm run eval && npm run eval:ai; lo determinista da lo mismo, lo de IA da una muestra nueva.

Método y amenazas a la validez

determinista
npm run eval: el arnés recién instalado (perfil node) en un repo temporal; cada caso pasa por los hooks reales como los corre Claude Code. 274 casos: 118 guías, 131 reglas (80 ataques, de ellos 51 rodeos, 45 inocentes, 6 huecos), 25 señales. Umbrales exactos: recall y exactitud 100 %, falsos positivos 0 %.
con IA
npm run eval:ai: promptfoo 0.123.1 como corredor; cada subagente aislado en un temporal sin Bash ni hooks; 14 casos × 3 repeticiones. Veredicto contra el contrato del agente; calidad con llm-rubric (juez Sonnet, peso 0). Umbral: 80 % por subagente.
intervalos
Wilson al 95 % para proporciones binomiales; con 0 fallos en n, la cota superior del error es ≈ 3/n (regla del tres).
validez interna
Las 3 repeticiones no son independientes del caso: miden la variación del agente, no la de la tarea. La calidad la puntúa otro modelo; es una opinión con su propio sesgo.
validez externa
Los casos los escribió el mismo equipo que escribió los frenos. Lo determinista mide la plantilla instalada, no el config de este repo. La corrida con IA es una sola, sobre main, hecha a mano el 2026-10-19 con la sesión local de Claude Code; no la repite ningún pipeline.
latencia de hooks
p50 y p95 por corrida de hook variaron entre corridas del mismo día (195–318 ms y 452–1541 ms): dependen de la carga de la máquina, incluido el arranque de node.
← Volver a Agent Harness