Todas las skills

diagnosing-bugs (Matt Pocock)

Ejecuta un ciclo de diagnóstico de errores difíciles y regresiones de rendimiento antes de proponer arreglos.

mattpocock diagnosing-bugs: una versión de una frase de su regla «construye primero el bucle de retroalimentación» rindió igual que la skill completa, con 0.95x el coste de la skill

Según el casoSegura

Codex CLI · gpt-6-astra

22.9 / 30

Mejora frente a sin skill: +0.28 · Según el caso · 18 ejecuciones

Según el caso: la mejora +0.28 está por debajo de +1.0. Para ser recomendada hace falta un total de 22/30, una calidad de salida de 3.5 y una mejora de +1.0.

SOTA

Aprobada

Probada con Codex.

Cubre Codex, Claude Code

Codex CLI 0.166 (nivel SOTA): 18 ejecuciones puntuadas. Una pasada aquí también cubre Claude Code según nuestra regla de niveles; no dice nada sobre el segundo nivel.

Puntuaciones

Cada dimensión va de 0 a 5 y las seis suman el total sobre 30. 5 es mejor en todas las dimensiones. Coste 5 significa barato y rápido. Instalación 5 significa fácil.

Fiabilidad de activación
5.0
Mejora frente a sin skill
2.3
Calidad de salida
4.6
Coste en tokens y tiempo
2.0
Instalación y portabilidad
4.0
Seguridad
5.0

Revisión de seguridad

Segura

Escaneo estático: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Revisión manual: Segura de ejecutar en un sandbox sin red (sin hallazgos). Un escaneo limpio no demuestra que una skill sea segura.

Instalar

npx skills@latest add mattpocock/skills --skill diagnosing-bugs

Origen

Commit fijado: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d

Probada: 2026-11-02

Qué probamos

  • Desfase de uno en una función pequeña — moving_average en movavg.py devuelve números incorrectos: moving_average([2, 4, 6, 8, 10], 3) debería ser [2, 3, 4, 6, 8], pero los últimos valores salen mal. Encuentra la causa y corrígela. Pruebas: python3 -m unittest.
  • Bug de fechas entre archivos — Las cabeceras de nuestro informe semanal muestran fechas incorrectas alrededor de Año Nuevo; por ejemplo, header('2026-W01') debería ser 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Encuentra la causa y corrígela.
  • Fallo de prueba dependiente del orden — Las pruebas de tests/test_settings.py pasan por separado, pero test_b falla cuando se ejecuta todo el archivo, y las configuraciones parecen arrastrar etiquetas de llamadas anteriores. Diagnostica y corrige.

Ventajas

  • La skill se activó sin nombrarla: se leyó el archivo de la skill en 6/6 ejecuciones con skill.
  • Calidad absoluta alta con la skill: 4.58 sobre 5.

Inconvenientes

  • Sin mejora medible frente a sin skill (+0.28, dentro del ruido).
  • Un prompt de una frase puntuó 4.72, frente a 4.58 con la skill (-0.14).
  • Usa 1.71x los tokens de sin skill.
  • n=2 por tarea y rama; las diferencias de menos de aproximadamente 1 punto son ruido.

Reseña

Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en una máquina de pruebas Mac, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales en cada ejecución, skill instalada (grupo con skill), ausente (control) o ausente con el requisito central de la skill comprimido en una frase añadida al prompt (grupo del prompt de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill. La puntuación es programática (tests ocultos / recuerdo de problemas plantados / comprobaciones de restricciones / render+OCR cuando corresponde), 0–5 por ejecución. Ningún juez LLM decidió ninguna puntuación.

Comparación de tres ramas

RamaPuntuación media (0-5)Tokens por ejecución
Sin la skill4.3177k
Prompt de una frase4.72126k
Con la skill4.58133k

Medido con Codex CLI en 18 ejecuciones, puntuado con comprobaciones basadas en reglas y sin juez LLM. Total 22.9 / 30, veredicto Según el caso.

Veredicto: Situacional (22.9 / 30). Fuente: mattpocock/skills, skills/engineering/diagnosing-bugs, fijado en el commit 4ae2317. Instalación: npx skills@latest add mattpocock/skills --skill diagnosing-bugs. Licencia: MIT (LICENSE del repositorio).

Qué es

El skill diagnosing-bugs del repositorio de skills de Matt Pocock (engineering). Una disciplina para bugs difíciles: la fase 1 es «construir un bucle de retroalimentación de éxito/fallo ajustado» (test que falla, script curl, diff de CLI, navegador headless, traza reproducida), luego hipótesis ordenadas y probadas de una en una, instrumentación, un test de regresión y limpieza. Unas 1,000 palabras de Markdown, una plantilla auxiliar hitl-loop.template.sh y una regla para ocultar secretos antes de mostrar la salida. Se activa con «diagnose», «debug this» o «something is broken/failing».

Cómo lo probamos

Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en un Mac de pruebas, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales en cada ejecución, skill instalado (grupo con skill), ausente (grupo de control) o ausente con el requisito central del skill comprimido en una frase añadida al prompt (grupo de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan el skill.

  1. Error off-by-one en una función pequeña — moving_average en movavg.py devuelve números incorrectos: moving_average([2, 4, 6, 8, 10], 3) debería ser [2, 3, 4, 6, 8] pero los últimos valores salen mal. Encuentra la causa y corrígela. Tests: python3 -m unittest.
  2. Bug de fechas entre archivos — Los encabezados de nuestro informe semanal muestran fechas incorrectas alrededor de Año Nuevo; por ejemplo, header('2026-W01') debería ser 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Encuentra la causa y corrígela.
  3. Fallo de test dependiente del orden — Los tests de tests/test_settings.py pasan por sí solos, pero test_b falla cuando se ejecuta el archivo completo, y las configuraciones parecen arrastrar etiquetas de llamadas anteriores. Diagnostica y corrige.

La puntuación es programática (tests ocultos / detección de problemas sembrados / comprobaciones de restricciones / renderizado+OCR cuando corresponde), de 0 a 5 por ejecución. Ningún juez LLM decidió ninguna puntuación.

Resultados

La frase única que recibió el tercer grupo: "Primero construye un bucle de retroalimentación de éxito/fallo rápido y determinista que se ponga en rojo con este bug exacto (lo mejor es un test que falle), luego formula hipótesis ordenadas y pruébalas de una en una con evidencias antes de corregir, y vuelve a ejecutar el bucle para confirmar la corrección."

TareaPuntuación sin skillUna fraseCon skillTokens sin skillTokens una fraseTokens con skillSkill leído
t1-moving-average4.174.584.1760k102k87k2/2
t2-weekly-dates4.174.585.086k120k136k2/2
t3-shared-state4.585.04.5884k154k173k2/2

Puntuación media: 4.31 sin vs 4.58 con el skill (delta +0.28). Tokens por ejecución: 77k vs 133k (1.71x); tiempo 38s vs 51s. Grupo de una frase: 4.72 (la mejora del skill frente a la frase: -0.14; la mejora de la frase frente a no usar skill: +0.42); la frase usa 126k tokens por ejecución, así que el skill consume 1.05 veces sus tokens.

Qué ocurrió

  • El código final fue igual de correcto en los tres grupos: los tests ocultos pasaron en 18/18 ejecuciones y cada diff se mantuvo dentro del límite de diff pequeño. Estos tres bugs sembrados (off-by-one, lógica de fechas entre archivos, contaminación de tests dependiente del orden) son tan fáciles que Codex a secas los arregla.
  • Lo único que cambió es la comprobación de proceso «ejecutó los tests antes de editar el código», es decir, reproducir primero. Sin el skill lo hizo 1/6 ejecuciones; con la versión de una frase de la primera regla del skill, 4/6; con el skill instalado, 4/6. Así que la frase reprodujo todo el efecto.
  • El skill se leyó en 6/6 ejecuciones con skill aunque ningún prompt lo mencionaba (se activa con «debug this»). Hizo trabajar más al agente: 18 comandos por ejecución frente a 8 sin el skill y 13 con la frase.
  • Coste: 133k tokens por ejecución con el skill frente a 77k sin él (1.71x) y 126k con la frase (1.05x). El grupo de una frase costó por sí mismo 1.64x el control, porque decirle al agente que construya primero un bucle hace que ejecute más pasos.
  • Una ejecución con skill (tarea de estado compartido) corrigió el bug y pasó los tests ocultos, pero su respuesta no coincidió con nuestra comprobación de causa raíz (busca que se nombre la causa); fue la única ejecución de cualquier grupo que no la superó.

Puntuación por dimensiones

DimensiónPuntuaciónMotivo
1_output_quality4.58

Puntuación media de 4.58/5 con el skill (comprobaciones programáticas; véase la tabla por tarea).

2_lift_vs_no_skill2.2800000000000002

+0.28 puntos frente a 4.31 sin el skill (n=2 por tarea; menos de ~1 punto es ruido).

3_trigger5.0Skill leído en 6/6 ejecuciones con skill.
4_instructions_portability4

Markdown plano; lee GLOSSARY.md/ADR opcionales si existen; las opciones de bucle HTTP/navegador necesitan herramientas que un sandbox puede no tener.

5_efficiency21.71x tokens (133k vs 77k por ejecución) y 1.35x tiempo (51s vs 38s).
6_safety_hygiene5

Markdown más una plantilla de shell local (pide entrada, imprime; sin red, sin escrituras). El skill indica al agente que oculte secretos antes de mostrar la salida.

Límites de esta prueba

  • Tres bugs pequeños de Python en un solo archivo que se encuentran leyendo el código. El skill está pensado para bugs difíciles (intermitentes, regresiones de rendimiento, bugs que necesitan un arnés); nada de eso se probó.
  • Las otras herramientas del skill (bucles HTTP/navegador, reproducción de trazas, bisección, etiquetas de instrumentación) no pueden ejecutarse en un sandbox sin red y sin una aplicación que controlar.
  • La comprobación «ejecutó los tests antes de editar» compara el orden del primer comando de test y la primera escritura en el registro de eventos; no juzga la calidad de la reproducción.
  • n = 2 por grupo y tarea: las diferencias de menos de ~1 punto son ruido.
  • La puntuación basada en reglas mide lo que las comprobaciones pueden ver; no puede juzgar el gusto ni si un resultado es el mejor posible.

Seguridad

Véase security.md. Escaneo: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Veredicto: seguro de ejecutar (sandbox sin red). Un escaneo limpio no demuestra que un skill sea seguro.

Conclusión

La idea principal del skill es un buen hábito y Codex lo sigue cuando se lo dicen; pero una frase de él consiguió el mismo comportamiento de reproducir primero y la misma tasa de éxito con un coste parecido, y en bugs fáciles el agente arregla las cosas de todos modos. Mantenlo instalado si depuras bugs difíciles e intermitentes y quieres la disciplina completa; en bugs pequeños puedes obtener el beneficio poniendo su primera regla en el prompt.

Transcripción

Registro de ejecuciones: diagnosing-bugs (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.)
Columnas: tarea, grupo-ejecución, puntuación (0-5), tokens, segundos, comprobaciones superadas, archivos de la skill que abrió el agente.

t1-moving-average control-1: puntuación 4.17, tokens 60541, s 27.1, comprobaciones 3/4, no abrió nada
t1-moving-average control-2: puntuación 4.17, tokens 60464, s 29.1, comprobaciones 3/4, no abrió nada
t1-moving-average oneliner-1: puntuación 5.0, tokens 93708, s 49.0, comprobaciones 4/4, no abrió nada
t1-moving-average oneliner-2: puntuación 4.17, tokens 111338, s 39.8, comprobaciones 3/4, no abrió nada
t1-moving-average treatment-1: puntuación 4.17, tokens 87669, s 36.8, comprobaciones 3/4, abrió diagnosing-bugs
t1-moving-average treatment-2: puntuación 4.17, tokens 87501, s 36.0, comprobaciones 3/4, abrió diagnosing-bugs
t2-weekly-dates control-1: puntuación 4.17, tokens 95094, s 43.4, comprobaciones 3/4, no abrió nada
t2-weekly-dates control-2: puntuación 4.17, tokens 78531, s 38.2, comprobaciones 3/4, no abrió nada
t2-weekly-dates oneliner-1: puntuación 4.17, tokens 129649, s 49.4, comprobaciones 3/4, no abrió nada

18 ejecuciones, 3 artefactos

Resultado de ejemplo

SOTA · With the skill: movavg.py (t1-moving-average, run 1, Codex)

def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out

Ver Pro