Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.9 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, error_type, file_path, tested, tests, test_file_path, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | error_type | file_path | tested | tests | test_file_path | params | output | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| kill_fleet_agent | function | bash | infra | 1.1.0 | impure | kill_fleet_agent <sessionId|PID> [--socket <s>] [--dry-run] | Cierre limpio y dirigido de UN ejecutor de la flota tmux. Dado un sessionId (exacto o prefijo) o un PID, manda SIGTERM al proceso claude del ejecutor (cierre limpio, recuperable con claude --resume) y cierra su window tmux en el socket del perfil FleetView. Lo usa el orquestador para liberar el slot idle de cada ejecutor en cuanto verifica que su DoD-contrato esta met. Tres guards de seguridad: NUNCA mata a un agente con role=orchestrator (leido de su goal.json); NUNCA a la sesion que invoca la funcion (resuelve su propio PID de claude por los ancestros de /proc); y NUNCA cierra la window que aloja la TUI fleetview o la window 'console' con kill-window (eso se llevaria el panel de control por delante) — en ese caso cierra SOLO el pane del target con kill-pane y preserva la TUI. Por defecto EJECUTA; --dry-run imprime el plan (incluida la accion kill-pane vs kill-window) sin tocar nada. Es el cierre dirigido a UN agente, frente a reboot_all_claudes que opera sobre toda la flota. |
|
error_go_core | bash/functions/infra/kill_fleet_agent.sh | true |
|
bash/functions/infra/kill_fleet_agent_test.sh |
|
Imprime una linea de plan con PID, sessionId, role, socket y window resueltos, seguida de la accion ejecutada (SIGTERM + kill-window) o, con --dry-run, de DRY-RUN. Exit 0 ok/dry-run; 2 uso incorrecto o target no resuelto a PID; 3 guard (target es un orchestrator o la sesion actual). |
kill_fleet_agent
Cierra de forma dirigida UN ejecutor de la flota tmux: SIGTERM al proceso claude (cierre limpio, recuperable con claude --resume <sessionId>) más kill-window de su window en el socket del perfil FleetView. Es la pieza que el orquestador usa para liberar el slot idle de cada ejecutor en cuanto verifica que su DoD-contrato está met — sin esto, los ejecutores terminados se acumulan en reposo en la flota.
Ejemplo
# Cerrar un ejecutor por sessionId (el orquestador lo llama tras verificar `met`):
./fn run kill_fleet_agent 32945650-a4e1-472b-90c9-5b38ef60a463 --socket "$FLEET_SOCKET"
# Por prefijo de sessionId, en el socket por defecto ($FLEET_SOCKET o "fleet"):
./fn run kill_fleet_agent 32945650
# Ver el plan sin matar nada (PID, sessionId, role, window, accion):
./fn run kill_fleet_agent 48213 --dry-run
Cuando usarla
Úsala desde el modo orquestador justo después de que el verificador independiente devuelva met sobre un ejecutor: ciérralo para que no quede ocupando un slot idle en la flota. Resuelve el target por sessionId (exacto o prefijo) o por PID, comprueba los guards y manda SIGTERM + cierra la window. Es el cierre dirigido a un agente; para reiniciar/parar toda la flota usa reboot_all_claudes (con --exclude-current). Nunca uses pkill/killall claude (te matas a ti mismo, el orquestador).
Gotchas
- Impura y destructiva: manda SIGTERM y cierra una window tmux. Por defecto EJECUTA (es el caso de uso del bot: cerrar un ejecutor ya verificado
met); usa--dry-runpara inspeccionar antes. - Guard anti-orquestador: si el goal.json del target tiene
role=orchestrator, rehúsa con exit 3. Evita decapitar la flota por error. Elrolese lee de~/.claude/goals/<sessionId>.json(lo escribemark_claude_role). - Guard anti-self: resuelve el PID de
claudede la sesión actual subiendo por los ancestros de/proc; si el target coincide, rehúsa con exit 3 ("No me suicido"). Es el equivalente dirigido de la regla "nuncapkill claude". - Guard 3 — anti-TUI/console (no decapitar el panel): antes de cerrar nada, comprueba si la window del target aloja la TUI fleetview (algún pane corre el binario
fleetview) o se llamaconsole. El layout FleetView mete la TUI y un Claude en la misma windowconsole, y los focus-swaps (join-pane) pueden meter al ejecutor target en esa window; unkill-windowahí se llevaría la TUI por delante (causa del fallo descrito enfleetviewv0.4.3). En ese caso la función NO usakill-window: manda el SIGTERM al claude y cierra solo su pane conkill-pane, preservando el pane de la TUI. El plan (y el--dry-run) lo refleja comoaccion: kill-pane … (aloja la TUI/console)vsaccion: kill-window …. El predicado es la función interna_fleet_window_hosts_tui(testeada). Se mantiene inline (no función propia del registry) por estar acoplada a este flujo y para no dejar una capacidad huérfana (KISS). - Resolución de la window y el pane: usa
tmux -L <socket> list-panes -ay casapane_pid == PID, capturandowindow_id,pane_idywindow_name. Funciona porquespawn_fleet_agentarranca el ejecutor conexec claude, así elpane_pidES el PID de claude. Si no hay socket/tmux, la window queda "(no resuelta)" y solo se manda el SIGTERM (best-effort, no falla). - SIGTERM, no SIGKILL: cierre limpio para que Claude Code persista su sesión; el trabajo se puede retomar con
claude --resume <sessionId>. - Requiere
jqpara leer los JSON de sessions/goals. - Overrides de entorno solo para tests:
FN_FLEET_SESSIONS_DIR,FN_FLEET_GOALS_DIRyFN_FLEET_SELF_PIDredirigen los directorios y fuerzan el PID propio; no usarlos en operación normal.
Capability growth log
- v1.1.0 (2026-06-24) — Guard 3 anti-TUI/console (elimina un gotcha conocido). Antes, si un focus-swap metía al ejecutor target en la window
console(la que aloja la TUI fleetview),kill-windowcerraba la TUI por error. Ahora, cuando la window del target aloja la TUI (panefleetview) o se llamaconsole, se cierra solo el pane del target conkill-paney la TUI sobrevive; el resto de windows siguen cerrándose conkill-window. Predicado interno_fleet_window_hosts_tuicon tests. Es la causa raíz que complementa el auto-respawn de la TUI (supervise_fleetview_tui). - v1.0.0 — versión inicial.