Doble entrada confusa (incidente 2026-05-19 piloto 0121b: cwd mutation por Path B inline causo commit a branch incorrecta). Cambios: - .claude/commands/autopilot.md: v2 simplificado. SOLO pre-flight DoD check + delegate fn-orquestador. Sin Path A/B/C inline. Self-Q&A migrado al orquestador. Cero cwd mutation. - .claude/commands/autonomous-task.md: DEPRECADO. Sustitucion 1:1. Sigue funcionando como debug primitive sin DoD check. - dev/issues/0123: revision — eliminar /flow run y /fix-flow (absorbidos por /autopilot v2). Mantener fn-meta-orquestador + fn-priorizador + fn doctor issues/flows. Anadir tarea: dar a fn-orquestador soporte task_type=flow. Preferencia humano: 1 sola entrada autopilot, "modo que entra y sigue". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.0 KiB
name, description
| name | description |
|---|---|
| autopilot | Modo full-auto. Pre-flight DoD check, detecta issue vs flow, SIEMPRE delega a fn-orquestador (worktree aislado + PR Gitea). Sin Path inline. Sustituye a /autonomous-task. |
/autopilot — Comando autonomo unificado
Comando UNICO para ejecutar issue o flow autonomo end-to-end. Sustituye a /autonomous-task (deprecado). Hace dos cosas:
- Pre-flight DoD readiness check — sin DoD claro, no arranca.
- Delega SIEMPRE a
fn-orquestadorvia Agent tool — worktree aislado en/tmp/fn_orq_<NNNN>_<ts>/, branchauto/<NNNN>-<slug>, PR draft Gitea al converger.
NO ejecuta nada inline. NO muta cwd del shell del humano. NO duplica worktrees. Toda la complejidad de bucle + paths protegidos + sanity check vive en fn-orquestador.
Por que solo delegar
Historico: versiones anteriores de /autopilot tenian Path A (delegate a orquestador), Path B (registry-only inline), Path C (flow inline). Los Path B/C reimplementaban lo que ya hace fn-orquestador (worktree, branch, PR) y arrastraban un bug: cd en Bash de Claude Code PERSISTE entre llamadas → si autopilot hace cd "$WT", todos los Bash subsiguientes operan en branch incorrecta. Solucion: NO hacer Path inline, delegar siempre.
fn-orquestador ahora soporta dos task_type:
issue— flujo CONSTRUIR→EJECUTAR→RECOPILAR→ANALIZAR→MEJORAR (default).flow— parseadev/flows/<NNNN>-*.md## Flow y ejecuta steps (Path C absorbido).
Sintaxis
/autopilot <NNNN> # issue NNNN (default si no hay prefijo)
/autopilot issue:<NNNN> # issue explicito
/autopilot i:<NNNN> # alias
/autopilot flow:<NNNN> # flow NNNN
/autopilot f:<NNNN> # alias
/autopilot check <target> # solo audita DoD readiness, no delega
/autopilot <target> --max-iterations N --max-minutes M --dry-run
Detector:
^\d{4}[a-z]?$→ issue (sin prefijo = issue por defecto).^(issue|i):\d{4}[a-z]?$→ issue.^(flow|f):\d{4}$→ flow.- Otra cosa → ABORT con error de sintaxis.
Pre-flight DoD readiness check (OBLIGATORIO)
Sin DoD claro, autopilot no delega. Verificacion es STOP-gate.
Issue (dev/issues/<NNNN>-*.md)
- Archivo existe en
dev/issues/(no encompleted/). - Frontmatter con
status,priority. - Al menos UNA de:
## DoDo## Definition of Donecon >=1 bullet/checkbox concreto.## Acceptancecon checkboxes[ ].## Tests+## Tareasambas no vacias.
- Tipo declarado/inferible soportado por
fn-orquestador:feature_app_simple,bugfix_with_repro,refactor_safe,add_e2e_check,feature_registry_only. - NO contiene criterios no-verificables ("queda bonito", "intuitivo", "UX mejor"). Grep simple; si match → ABORT con warning.
Flow (dev/flows/<NNNN>-*.md)
- Archivo existe en
dev/flows/. - Frontmatter valido.
## Acceptancecon >=1 checkbox.## Flowno vacio.- Pre-requisitos declarados.
- Tabla de funciones recomendadas sin
FALTA: crear <id>(si los hay → ABORT salvo--allow-construct-missing).
Si falla:
=== /autopilot check 0125 ===
status: NOT READY
target: issue 0125 (skill-tree-dashboard-panel)
gaps:
- Sin seccion DoD/Acceptance
- "UX intuitiva" linea 47 — no verificable
fix:
- Anadir ## DoD con 3-5 bullets programaticamente verificables
- Reemplazar criterios subjetivos por mediciones concretas
Si OK:
=== /autopilot check 0107c ===
status: READY
target: issue 0107c (refactor data_table)
dod_items: 5 checkboxes
task_type: refactor_safe
estimated_iter: 3-5
Dispatch a fn-orquestador
Tras pre-flight OK, ejecuta:
Agent(
subagent_type="fn-orquestador",
prompt="""
Issue/Flow: <path al .md>
Modo: REAL (o --dry-run)
task_type: <issue|flow>
Pre-condiciones verificadas: 7/7 verde
Master: <sha> sync con origin
Working tree principal: limpio (baseline)
Max iter: N
Max min: M
Auto-apply proposals: safe
Token Gitea: pass gitea/dataforge-git-token
DB task_runs: apps/deploy_server/operations.db (schema task_id)
Reglas duras: autonomous_loop.md (11 reglas)
""",
run_in_background=true
)
Cuando termine, reporta al humano con output canonico del orquestador:
=== /autopilot 0121b ===
target: issue 0121b (fn doctor e2e-coverage)
delegated_to: fn-orquestador
status: converged
iterations: 1 / 8
duration: 4 min / 30
task_run_id: task_d285372493cce2e6
branch: auto/0121b-orquestador
worktree: /tmp/fn_orq_0121b_1779147778
PR draft: https://gitea-.../dataforge/fn_registry/pulls/3
Siguiente: revisar PR, mergear, mover issue a completed/
Reglas duras (autopilot-level)
- Cero cwd mutation. Autopilot NUNCA hace
cd. Usagit -C <repo>siempre si necesita inspeccionar. - Cero ejecucion inline de bucle. Todo va via
fn-orquestador. Si autopilot necesita ejecutar algo (pre-flight scripts), es read-only. - Cero AskUserQuestion. Self-pick "Recommended". Si no hay, ABORT con
status=needs_human. - DoD es contrato. Si DoD no se cumple al final,
task_run.statusquedapartialy autopilot reporta NOT_DONE — humano decide. - Worktree gestion delegada al orquestador. Autopilot NO crea worktrees propios. NO toca branches.
- Trazabilidad: cada decision pre-delegate (especialmente abort de DoD check) se persiste en
task_runs.events_json[]conagent: autopilot.
Flags
| Flag | Default | Que hace |
|---|---|---|
--max-iterations N |
10 | Pasado al orquestador |
--max-minutes M |
60 | Pasado al orquestador |
--dry-run |
off | Pasado al orquestador |
--allow-construct-missing |
off | Flow con FALTA: crear <id> → spawn fn-constructor antes |
--auto-apply-proposals |
safe |
Pasado al orquestador |
Errores canonicos
| Codigo | Significado | Accion |
|---|---|---|
NOT_READY |
DoD insuficiente | Humano edita .md y relanza |
needs_human |
Decision ambigua | Humano resuelve y relanza |
delegated_failed |
fn-orquestador devolvio fail/stall/timeout | Humano lee task_runs.events_json |
| (resto) | Heredados del orquestador (stalled/timeout/aborted_protected_path/...) | Idem |
Anti-patrones
| Anti-patron | Por que es malo |
|---|---|
| Hacer Path B/C inline | Mismo bug de cwd mutation que paso 2026-05-19 |
| Saltar pre-flight DoD | Trabajar sin contrato = bucle infinito |
| Mergear sin tests verde | fn-orquestador ya impide esto, NO bypaseas |
AskUserQuestion desde autopilot |
Rompe contrato autonomo |
| Crear worktree propio en autopilot | Duplica + colision con orquestador (paso 2026-05-19) |
Ejemplos
# Issue con DoD claro
/autopilot 0107c
# Flow con piezas faltantes — autoriza creacion antes
/autopilot flow:0008 --allow-construct-missing
# Solo audit
/autopilot check 0125
/autopilot check flow:0008
# Dry run
/autopilot 0107c --dry-run
Relacion con otras reglas
- autonomous_loop — politica del bucle (sandbox, paths protegidos, watchdog). fn-orquestador la aplica.
- apps_tbd — politica TBD por tipo de cambio.
- apps_subrepo —
git initdentro de apps nuevas antes de limpiar worktree. - feature_flags — codigo incompleto detras de flag OFF.
- registry_calls — invocaciones canonicas.
- e2e_validation —
e2e_checksconsumidos por fn-analizador. - delegation — spawn fn-constructor antes que escribir inline.
Migracion desde /autonomous-task
/autonomous-task queda DEPRECADO. Sustitucion 1:1:
| Antes | Ahora |
|---|---|
/autonomous-task 0070 |
/autopilot 0070 |
/autonomous-task 0070 --max-iterations 15 |
/autopilot 0070 --max-iterations 15 |
/autonomous-task 0070 --dry-run |
/autopilot 0070 --dry-run |
/autopilot anade pre-flight DoD check + detect flow. Behaviour orquestador-side idem.
Historico
- v1 (2026-05-15): introducido con Path A/B/C inline + self-Q&A.
- v2 (2026-05-19): simplificado tras incidente cwd mutation en piloto 0121b. Solo delega a fn-orquestador. Self-Q&A movido al orquestador. Sustituye a
/autonomous-task.