caveman-review (JuliusBrussee/caveman)
Condensa la revisión de código en una línea por hallazgo: ubicación, problema y corrección.
caveman-review: orienta las revisiones de código hacia líneas breves por hallazgo (control 3.3, skill 4.2, prompt de una frase 4.8) con los mismos tokens, pero el formato de línea L<line> de la propia skill solo se siguió en algunas ejecuciones; un prompt de una frase con el formato obtiene más puntuación
Codex CLI · gpt-6-astra
25.1 / 30
Mejora frente a sin skill: +0.90 · Según el caso · 18 ejecuciones
Según el caso: la mejora +0.90 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
AprobadaProbada 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.9
- Calidad de salida
- 4.2
- Coste en tokens y tiempo
- 5.0
- Instalación y portabilidad
- 4.0
- Seguridad
- 4.0
Revisión de seguridad
SeguraEscaneo 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 JuliusBrussee/caveman --skill caveman-review
Commit fijado: 9b68f7ed12b05e7efaff18e65c5a3fc2849fd0a4
Probada: 2026-11-02
Qué probamos
- Revisa un módulo de servicio pequeño — Revisa orders_service.py antes de que lo fusione. Enumera los problemas que encuentres, de lo más grave a lo menos. No cambies ningún archivo.
- Revisa un helper de autenticación — Revisa auth_handlers.py: acabo de escribirlo para nuestro flujo de inicio de sesión. Enumera los problemas, de lo más grave a lo menos. No cambies ningún archivo.
- Revisa el último commit contra los estándares y la especificación escritos — Revisa mi último commit (los cambios desde HEAD~1) contra CODING_STANDARDS.md y SPEC.md. Enumera cada desviación, de lo más grave a lo menos. No cambies ningún archivo.
Ventajas
- Sube la puntuación media de 3.26 a 4.16 frente a sin skill (+0.90).
- La skill se activó sin nombrarla: se leyó el archivo de la skill en 6/6 ejecuciones con skill.
- Sin sobrecoste de tokens: 1.02x los tokens de sin skill.
Inconvenientes
- Un prompt de una frase obtuvo 4.83, frente a 4.16 con la skill (-0.67).
- 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 un PC Windows dedicado a pruebas, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales por ejecución, skill instalada (tratamiento) o ausente (control) o ausente con el requisito central de la skill condensado 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 (salvo el texto indicado abajo). Tres tareas de revisión sobre archivos Python pequeños con 8 problemas plantados cada uno: un servicio de pedidos (inyección SQL, falta de autorización, clave codificada directamente y volcada en los logs, dinero en float y otros), un archivo de manejo de autenticación y una revisión del último commit contra CODING_STANDARDS.md y SPEC.md. Los prompts piden una revisión, de lo más grave a lo menos, sin cambios. El prompt de una frase indica el formato de línea y la regla de no matizar.
Comparación de tres ramas
| Rama | Puntuación media (0-5) | Tokens por ejecución |
|---|---|---|
| Sin la skill | 3.26 | 69k |
| Prompt de una frase | 4.83 | 60k |
| Con la skill | 4.16 | 70k |
Medido con Codex CLI en 18 ejecuciones, puntuado con comprobaciones basadas en reglas y sin juez LLM. Total 25.1 / 30, veredicto Según el caso.
Veredicto: Según el caso (25.1 / 30). Fuente: JuliusBrussee/caveman, skills/caveman-review, fijada en el commit 9b68f7e. Instalación: npx skills@latest add JuliusBrussee/caveman --skill caveman-review. Licencia: MIT (LICENSE del repositorio).
Qué es
La skill caveman-review (JuliusBrussee/caveman): un estilo de revisión de código telegráfico: un hallazgo por línea como L<line>: <problem>. <fix>. con un prefijo de severidad opcional (bug, risk, nit, q), nombres de símbolos exactos entre comillas invertidas, una corrección concreta y nada de evasivas, elogios ni repetir lo que hace el código.
Cómo lo probamos
Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en un PC de pruebas Windows dedicado, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales por ejecución, skill instalada (tratamiento) o ausente (control) o ausente con el requisito central de la skill comprimido en una frase añadida al final del prompt (grupo de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill (salvo la formulación indicada abajo).
Tres tareas de revisión sobre archivos Python pequeños con 8 problemas sembrados cada uno: un servicio de pedidos (inyección SQL, autorización ausente, clave codificada registrada en logs, dinero en float y otros), un archivo de manejo de autenticación y una revisión del último commit frente a CODING_STANDARDS.md y SPEC.md. Los prompts piden una revisión, lo más grave primero, sin cambios. La frase única indica el formato de línea y la regla de no evasivas.
- Revisa un módulo de servicio pequeño — Revisa orders_service.py antes de que haga merge. Enumera los problemas que encuentres, lo más grave primero. No cambies ningún archivo.
- Revisa un helper de autenticación — Revisa auth_handlers.py: acabo de escribirlo para nuestro flujo de inicio de sesión. Enumera los problemas, lo más grave primero. No cambies ningún archivo.
- Revisa el último commit frente a los estándares y la especificación escritos — Revisa mi último commit (los cambios desde HEAD~1) frente a CODING_STANDARDS.md y SPEC.md. Enumera cada desviación, lo más grave primero. No cambies ningún archivo.
La puntuación es programática (tests ocultos / detección de problemas sembrados / comprobaciones de restricciones / renderizado + OCR cuando corresponde), 0–5 por ejecución. Ningún juez LLM decidió ninguna puntuación.
Resultados
La frase única que recibió el tercer grupo: "Escribe cada hallazgo en una línea L<line>: <problem>. <fix>. con un prefijo de severidad opcional (bug, risk, nit, q), nombres de símbolos exactos entre comillas invertidas y una corrección concreta; sin evasivas, elogios ni rodeos, y no repitas lo que hace el código."
| Tarea | Puntuación control | Una frase | Con la skill | Tokens control | Tokens de una frase | Tokens con la skill | Skill leída |
|---|---|---|---|---|---|---|---|
| t1-orders | 3.06 | 4.66 | 4.15 | 74k | 64k | 61k | 2/2 |
| t2-auth | 3.19 | 4.92 | 3.31 | 73k | 64k | 88k | 2/2 |
| t3-diff | 3.53 | 4.92 | 5.0 | 59k | 50k | 60k | 2/2 |
Puntuación media: 3.26 sin vs 4.16 con la skill (delta +0.9). Tokens por ejecución: 69k vs 70k (1.02x); tiempo 56s vs 54s. Grupo de una frase: 4.83 (la ganancia de la skill sobre la frase única: -0.67; la ganancia de la frase única sobre sin skill: +1.57); tokens de la frase única 60k por ejecución, así que la skill cuesta 1.17x la frase única.
Qué ocurrió
- Control 3.26, skill 4.16, una frase 4.83 (n=6 cada uno). Encontrar los problemas sembrados es similar en todos los grupos (5-7 de 8, y el problema del límite de peticiones ausente lo pasan por alto casi todas las ejecuciones); las diferencias están sobre todo en formato y longitud.
- Formato: el control no usó el formato de línea
L<n>:en ninguna de sus 6 ejecuciones (su revisión de pedidos es una lista numerada con severidad en negrita). La skill cumplió el formato en la tarea de revisión de commit (5.0 en ambas ejecuciones) y en una ejecución de pedidos, pero en la tarea de autenticación sus líneas empiezan con un número y una severidad en negrita, así que la comprobación de formato falló en 2/2 y la puntuación se quedó en 3.3. La frase única pasó en casi todas. - Brevedad: las revisiones del control ocuparon 233-332 palabras en las tareas de pedidos y autenticación (puntuación completa a las 220 palabras); las revisiones de autenticación de la skill también rondaron las 300 palabras, mientras que la frase única se mantuvo por debajo del límite en casi todas las ejecuciones.
- Ningún grupo usó frases evasivas. Tokens: skill 70k, una frase 60k, control 69k por ejecución (1.01x el control). La skill se leyó en 6/6 ejecuciones de tratamiento.
Puntuaciones por dimensión
| Dimensión | Puntuación | Motivo |
|---|---|---|
| 1_output_quality | 4.16 | Puntuación media 4.16/5 con la skill (comprobaciones programáticas, véase la tabla por tarea). |
| 2_lift_vs_no_skill | 2.9 | +0.90 puntos frente a 3.26 sin la skill (n=2 por tarea; menos de ~1 punto es ruido). |
| 3_trigger | 5.0 | Archivo de la skill leído en 6/6 ejecuciones de tratamiento. |
| 4_instructions_portability | 4 | Solo SKILL.md. |
| 5_efficiency | 5 | 1.02x tokens (70k vs 69k por ejecución) y 0.96x tiempo (54s vs 56s). |
| 6_safety_hygiene | 4 | Solo prosa; véase security.md. |
Límites de esta prueba
- Comprobaciones basadas en reglas sobre el mensaje final: detección de los problemas sembrados, una regex de inicio de línea para el formato L<n>, un recuento de palabras y una lista de frases evasivas. No se juzgó la calidad de las correcciones.
- La regex de formato es estricta con el inicio de cada línea; una viñeta como '- L17 - High: ...' cuenta como coincidencia, pero una lista numerada con severidad en negrita no.
- Una comprobación («no modificó archivos») pasó en todos los casos y no se muestra.
- n=2 por celda; archivos pequeños.
- 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 el resultado es el mejor posible.
Seguridad
Consulta security.md. Escaneo: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Veredicto: segura de ejecutar (sandbox sin red). Un escaneo limpio no demuestra que una skill sea segura.
Conclusión
La skill orienta una revisión hacia el estilo telegráfico de un hallazgo por línea y mantiene la misma cobertura sin coste extra, pero no siempre respeta el formato. Una sola frase que describa el formato funcionó mejor aquí, así que el beneficio es frente a no dar ninguna orientación, no frente a un buen prompt.
Transcripción
Registro de ejecuciones: caveman-review (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-orders control-1: puntuación 3.02, tokens 65430, s 62.1, comprobaciones 4/5, no abrió nada t1-orders control-2: puntuación 3.1, tokens 82622, s 61.8, comprobaciones 4/5, no abrió nada t1-orders oneliner-1: puntuación 4.66, tokens 64873, s 59.1, comprobaciones 5/5, no abrió nada t1-orders oneliner-2: puntuación 4.66, tokens 64681, s 49.6, comprobaciones 5/5, no abrió nada t1-orders treatment-1: puntuación 4.83, tokens 50257, s 52.3, comprobaciones 5/5, abrió caveman-review t1-orders treatment-2: puntuación 3.47, tokens 72971, s 62.1, comprobaciones 4/5, abrió caveman-review t2-auth control-1: puntuación 3.3, tokens 82305, s 67.1, comprobaciones 4/5, no abrió nada t2-auth control-2: puntuación 3.08, tokens 64757, s 55.3, comprobaciones 4/5, no abrió nada t2-auth oneliner-1: puntuación 5.0, tokens 64677, s 57.0, comprobaciones 5/5, no abrió nada
18 ejecuciones, 3 artefactos
Resultado de ejemplo
SOTA · With the skill: final message (t1-orders, run 1, Codex)
- L17 — **High: Missing authorization.** `cancel_order` ignores `current_user`, allowing cancellation of another user’s order by ID (CWE-862). Require ownership or explicit administrative permission before updating. - L9 — **High: SQL injection.** `order_id` is interpolated directly into SQL; input such as `0 OR 1=1` changes the query and can retrieve an unrelated order (CWE-89). Use `WHERE id = ?` with bound parameters. - L4, L48 — **High: Credential exposure.** `API_KEY` is hardcoded and included in the successful-charge log, exposing it through source access and logs (CWE-798/CWE-532). Load it from a secret store, remove it from logs, and rotate it if genuine. - L47–55 — **High:** Every `charge` call reaches `NotImplementedError`, which is swallowed into `None`; no payment can succeed. Implement `send_to_gateway` and surface explicit payment failures. - L24, L26 — **Medium:** Discount thresholds contradict the docstring: exactly 100 receives no discount, and exactly 500 receives only 10%. Change both comparisons to `>=`. - L39–41 — **Medium:** Opening the export with `"w"` truncates an existing file before querying or serializing succeeds. Prepare the export first, then write through a temporary file and replace the destination. - L39–42 — **Medium:** The export file is never explicitly flushed or closed; completion depends on object cleanup. Use `with open(...)` so writes and closure complete before returning.