Code Improver
Mejora cualquier objetivo de código ejecutando /code-improver:improve — un flujo de trabajo dinámico que
hace un bucle entre el revisor nombrado y un subagente corrector hasta que una revisión reporte cero hallazgos
críticos/mayores, y luego elimina su propio rastro. El bucle, su registro y sus protecciones viven en el
flujo de trabajo; este skill recoge las tres entradas que requiere la entrada genérica y transmite el resultado.
Iniciar el bucle
El usuario proporcionó: $ARGUMENTS (si está vacío, toma los detalles de la conversación).
1. Recopilar las tres entradas requeridas — sin adivinar
- Objetivo: la ruta absoluta al directorio bajo mejora. Resuelve rutas relativas contra el directorio de trabajo; verifica que el directorio exista.
- Revisor: el skill o agente instalado que realiza cada revisión. El usuario debe
nombrarlo — no hay valor predeterminado ni revisor incluido. Determina el tipo:
- un agente con espacio de nombres (p. ej.
plugin-dev:skill-reviewer) →"kind": "agent" - un skill instalado (p. ej.
pr-review-toolkit:review-pr) →"kind": "skill"Si el nombre pudiera ser de cualquiera de los dos, consulta el listado de skills de la sesión; si aún es ambiguo, pregúntale al usuario. Si no se nombró ningún revisor, pregunta — no elijas uno.
- un agente con espacio de nombres (p. ej.
- Alcance: globs relativos al repositorio que el bucle puede tocar. La entrada genérica lo requiere
explícitamente; si el usuario no dio uno, propón el directorio objetivo
(
<ruta-relativa-al-repo>/**) y confirma antes de lanzar.
2. Resolver el script del bucle
El bucle es el flujo de trabajo dinámico workflows/improve.js en este plugin. Lánzalo mediante
ruta: scriptPath toma una ruta absoluta resuelta, y la herramienta Workflow con name resuelve
flujos de trabajo integrados y de proyecto, por lo que uno instalado desde el mercado puede no responder a
code-improver:improve. Prueba en orden, el primero que funcione gana — los directorios de inicio van antes
que . para que una copia instalada le gane a una copia local de este mercado:
Bash: ls -d -- "${CLAUDE_PLUGIN_ROOT}/workflows/improve.js"Bash: ls -d -- "${CODEX_PLUGIN_ROOT}/workflows/improve.js"(si esa variable está definida)Bash: find ~/.claude ~/.codex . -maxdepth 7 -path '*/code-improver/workflows/improve.js' -print -quit 2>/dev/null
Usa la ruta exactamente como se imprimió. Su directorio plugin — la ruta con
/workflows/improve.js eliminado — es pluginRoot. Si las tres opciones vuelven vacías, intenta
{name: "code-improver:improve"} una vez; si tampoco está disponible, detente y di que el bucle
no pudo ser localizado. No armes una ruta a mano ni improvises el bucle.
3. Invocar el flujo de trabajo
Ejecútalo con la herramienta Workflow, {scriptPath: "<la ruta del paso 2>", args: {...}}:
{
"target": "<ruta absoluta del objetivo>",
"reviewer": { "kind": "agent|skill", "name": "<nombre-con-espacio>", "notes": "<lo que el revisor debe saber sobre el objetivo>" },
"scope": ["<glob-relativo-al-repo>/**"],
"pluginRoot": "<el directorio plugin del paso 2>",
"maxRounds": 5
}
maxRoundssolo si el usuario pidió un límite diferente.pluginRootpermite que la ejecución encuentre su recolector de métricas; omite la clave solo si el paso 2 recurrió al nombre del flujo de trabajo — el flujo de trabajo se busca a sí mismo.finalize({"version_bump": bool, "narration_strip": bool, "docs_pass": bool}) solo para anular los valores predeterminados: incremento de versión cuando el objetivo está dentro de un plugin, eliminación de narración y pase de documentación siempre.decisionsolo en continuación (abajo).
El flujo de trabajo se ejecuta en segundo plano y no necesita supervisión: revisa, corrige, vuelve a revisar, verifica el alcance después de cada ronda de corrección y solo puede completarse con una revisión limpia. Nunca hace commit; todos los cambios permanecen en el árbol de trabajo.
Si la herramienta Workflow no está disponible o es denegada, detente y dilo. No improvises el bucle en línea con ediciones directas — el registro, la protección de alcance y las garantías de escalada viven en el flujo de trabajo, y una imitación en línea no tiene ninguno de ellos.
Si el resultado es halted: "reviewer-unavailable", transmítelo y detente. El revisor nombrado
no está instalado en esta sesión; dile al usuario qué plugin lo proporciona y vuelve a ejecutar después de instalarlo.
No revises el objetivo tú mismo.
No termines tu turno mientras el bucle esté en ejecución. La herramienta Workflow devuelve un id de tarea inmediatamente; el resultado llega después. En una sesión interactiva, la notificación de finalización vuelve a invocarte — espera. En una ejecución no interactiva (scripteada, CI, evaluación) no hay un turno posterior: detener abandona el bucle a medio camino, así que después de lanzarlo, consulta la tarea (TaskOutput con el id de tarea devuelto, o duerme y vuelve a comprobar) hasta que se complete, luego transmite el resultado. Una sesión que responde "el bucle está en ejecución, informaré después" ha perdido la ejecución.
Transmitir el resultado
El flujo de trabajo devuelve un resultado estructurado. Infórmalo honestamente — las distinciones importan:
converged: true— la última acción fue una revisión con cero hallazgos críticos/mayores. Informa las rondas utilizadas, los hallazgos menores restantes (open_minor_count) y las rutas de los artefactos (ledger_path,metrics).capped: true— el presupuesto de correcciones se agotó y la revisión FINAL aún encontró problemas bloqueantes. Di claramente: límite alcanzado, NO convergió, y listaopen_blocking. No presentes esto como un éxito.escalation— el bucle detectó que no estaba convergiendo (hallazgos recurrentes, conteos no decrecientes o una corrección que traslada un problema). Transmite el mensaje de escalada y los ids de los hallazgos al usuario: esto necesita una decisión de diseño, no más rondas.halted— se activó una guardia (violación de alcance, archivos nuevos no registrados, un revisor muerto o no disponible, o un pase de finalización cuyas propias ediciones fallaron la verificación que le sigue). Transmite las rutas enviolations/new_untracked_files, los sitios enfinalize_regressionsy las notas.notessiempre acompañan al resultado — sácalas a la luz; incluyen advertencias sonoras como "se inicializó un repositorio git".
Continuar después de una escalada
El bucle se detiene en una escalada por diseño. Cuando el usuario decida, inicia una nueva ejecución con
el mismo target y reviewer más:
{ "decision": "<el fallo del usuario, textual>" }
La nueva ejecución recarga el registro en disco, por lo que cada hallazgo, rechazo y veredicto se mantiene — las rondas se reinician, la re-derivación no.
Para detener un bucle en ejecución, detén la tarea del flujo de trabajo (TaskStop); el registro en disco está actualizado hasta la última ronda y una re-ejecución continúa desde allí.
Cuándo NO usar
- Un skill de Claude Code: usa la entrada
skill-improver— conecta el revisor correcto - Una rama / solicitud de extracción: usa la entrada
pr-improver— deriva el alcance del diff - Revisión única: envía al revisor directamente; el valor del bucle es la iteración
- Correcciones rápidas únicas: edita el archivo directamente