Auto-optimizacion autonoma de skills usando el patron de Karpathy. Toma cualquier skill, define evals binarias, y corre un loop autonomo: genera N outputs, evalua, muta el prompt, guarda si mejoro, descarta si empeoro. Usar cuando el usuario diga: "optimiza este skill", "mejora el skill", "autoresearch", "auto research", "self-improve", "haz que se mejore solo", "optimiza el prompt", "corre evals", "evalua el skill", "benchmark skill", "mejora la calidad de", "sube la reliability de", "haz autoresearch de". NO USAR para: crear skills nuevos (usar skill-creator), correr skills normalmente.
Basado en el repo de Andrej Karpathy (
karpathy/autoresearch). El principio: un loop autonomo que mejora un skill indefinidamente.
"Un skill ordinario optimizado durante un tiempo extraordinario produce resultados extraordinarios." El interes compuesto aplicado a prompts. Cada iteracion es un micro-experimento. Lo que importa no es la mejora individual (0.5%) sino la acumulacion (50 iteraciones = transformacion).
Antes de correr autonomamente, alinear con el usuario:
Cual skill quieres optimizar?
Leer el SKILL.md completo del skill target. Entender que hace, que outputs produce, que herramientas usa.
Las evals son la UNICA forma de medir si el skill mejoro. Sin buenas evals, autoresearch es ruido.
Reglas de evals:
| Parametro | Default | Descripcion |
|---|---|---|
N | 5 | Outputs generados por ciclo |
max_score | N * num_criterios | Score maximo posible |
interval | 3 min | Tiempo entre ciclos |
target_score | 90% del max | Score para considerar "excelente" |
max_iterations | 30 | Limite de iteraciones (seguridad de costo) |
budget | $5 USD | Limite de gasto estimado |
git checkout -b autoresearch/<skill-name>
<skill>/SKILL.md.backup (seguridad)<skill>/autoresearch-results.tsv con header:iteration score max_score pct status changes_summary
Una vez el usuario confirma, NO PARAR.
"El humano puede estar dormido. NUNCA pausar para preguntar. NUNCA pedir confirmacion. Trabajar indefinidamente hasta ser interrumpido manualmente." -- Karpathy
LOOP (hasta max_iterations o target_score):
1. ANALIZAR — Leer resultados previos. Que fallo? Que patron emerge?
2. HIPOTESIS — Formular UNA hipotesis clara:
"Si cambio X en el prompt, deberia mejorar Y porque Z"
3. MUTAR — Editar el SKILL.md del skill target
- UN cambio por iteracion (aislamiento de variables)
- Cambios en: instrucciones, ejemplos, restricciones, formato, orden
- NUNCA tocar el frontmatter (name, description, allowed-tools)
- NUNCA agregar criterios de eval al prompt (eso es gaming)
4. COMMIT — git add + git commit ANTES de correr
Mensaje: "autoresearch(<skill>): iter N — <hipotesis corta>"
5. GENERAR — Correr el skill N veces con inputs variados
- Usar inputs representativos del uso real del skill
- Variar los inputs entre iteraciones (no siempre el mismo)
- Capturar cada output
6. EVALUAR — Para cada output, aplicar cada criterio (si/no)
- Score = total de "si" / max_score
- Si el skill produce outputs VISUALES: usar Claude vision para evaluar
- Si el skill produce TEXTO: evaluar con criterios directos
- Si el skill produce DATOS/QUERIES: evaluar precision y completitud
7. DECIDIR:
- Si score > best_score -> STATUS: keep
-> El commit se queda. Actualizar best_score.
- Si score <= best_score -> STATUS: discard
-> git reset --hard HEAD~1 (revertir al commit anterior)
- Si el skill crasheo -> STATUS: crash
-> Intentar fix trivial. Si no, revertir y continuar.
8. REGISTRAR — Append a autoresearch-results.tsv:
iteration score max_score pct status changes_summary
9. REPETIR — Ir al paso 1. No parar. No preguntar.
"Mejora pequena (0.001) con 20 lineas de codigo feo = NO vale la pena. Mejora pequena (0.001) por ELIMINAR complejidad = SIEMPRE vale la pena."
Traducido a skills:
Cuando se alcanza target_score o max_iterations:
## Autoresearch Report: <skill-name>
**Baseline:** X/Y (Z%)
**Final:** X/Y (Z%)
**Mejora:** +N% en M iteraciones
**Costo estimado:** ~$X USD
**Iteraciones:** N total (K kept, D discarded, C crashed)
### Cambios que mejoraron:
1. Iter 3: <cambio> -> +5%
2. Iter 7: <cambio> -> +3%
...
### Cambios que NO mejoraron:
1. Iter 2: <cambio> -> -2% (descartado)
...
### Prompt final vs original:
<diff resumido>
git checkout main && git merge autoresearch/<skill>autoresearch-results.tsv queda como historial permanenteCriterio 1: El output contiene la informacion clave solicitada? (si/no)
Criterio 2: El tono es apropiado para el contexto? (si/no)
Criterio 3: La estructura es clara y facil de leer? (si/no)
Criterio 4: No hay informacion inventada o incorrecta? (si/no)
Criterio 1: Todo el texto es legible y sin errores? (si/no)
Criterio 2: Los colores y contraste son adecuados? (si/no)
Criterio 3: El layout es claro y organizado? (si/no)
Criterio 4: Comunica la idea sin ambiguedad? (si/no)
Criterio 1: El query/llamada retorna datos sin error? (si/no)
Criterio 2: Los resultados son correctos? (si/no)
Criterio 3: El formato de salida es legible? (si/no)
Criterio 4: Maneja edge cases correctamente? (si/no)
Criterio 1: El codigo compila/funciona sin errores? (si/no)
Criterio 2: Sigue los patrones del proyecto (Feature-First, etc)? (si/no)
Criterio 3: No introduce vulnerabilidades de seguridad? (si/no)
Criterio 4: Es mantenible y legible? (si/no)
Si el skill target NO tiene evals definidas, usar skill-creator para:
Autoresearch NO reemplaza a skill-creator. Skill-creator CREA skills. Autoresearch los OPTIMIZA despues de creados.
| Limite | Valor | Razon |
|---|---|---|
| Max iteraciones | 30 | Prevenir loops infinitos costosos |
| Budget estimado | $5 USD | Control de costos |
| Max prompt growth | 2x original | Prevenir prompt bloat |
| Backup obligatorio | Siempre | Poder restaurar el original |
| Branch dedicado | Siempre | No contaminar main |
| Solo body del SKILL.md | Siempre | Frontmatter es sacrosanto |
Usuario dice: "Optimiza el skill de landing"
landing/SKILL.md completoautoresearch/landing