5c253a26e2
Dos funciones bash para la mecanica del modo orquestador (Claudes secundarios interactivos en kitty): - launch_claude_agent_kitty(title, directory, prompt_file): lanza un Claude Code secundario en su propia terminal kitty con un prompt autonomo inyectado y --dangerously-skip-permissions, detached (setsid nohup ... disown) para sobrevivir al cierre de la terminal padre. - list_claude_agents([--json] [--exclude-current]): lista la flota de Claudes vivos cruzando pgrep -x claude con ~/.claude/sessions/<PID>.json (con validacion anti-PID-reciclado por procStart), reportando PID, sessionId, cwd, status, etime y KITTY_PID. Reusa la logica de descubrimiento de reboot_all_claudes_bash_infra. Tag de grupo de capacidad: orchestration. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | params | output | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| launch_claude_agent_kitty | function | bash | infra | 1.0.0 | impure | launch_claude_agent_kitty(title: string, directory: string, prompt_file: string) -> string | Lanza un Claude Code secundario interactivo y persistente en su propia terminal kitty, con un prompt autonomo inyectado desde un archivo y --dangerously-skip-permissions. Mecanica del modo orquestador: un Claude principal descompone una tarea y lanza N secundarios, cada uno en su kitty, que el humano ve y puede retomar. La ventana sobrevive al cierre de la terminal padre (setsid nohup ... disown) y deja una shell interactiva viva cuando el claude termina (exec zsh). |
|
|
Imprime en stdout el title, directory, prompt_file y la ruta del log (/tmp/orq_<slug>_kitty.log) donde se ve el arranque. Exit 0 = lanzamiento disparado; exit 2 = argumentos invalidos; exit 1 = kitty no instalado. | false | error_go_core | false | bash/functions/infra/launch_claude_agent_kitty.sh |
Ejemplo
source bash/functions/infra/launch_claude_agent_kitty.sh
# El orquestador prepara un worktree aislado y un archivo de prompt...
git worktree add /tmp/orq_docs_wt -b orq/docs
cat > /tmp/orq_docs.md <<'PROMPT'
Eres un agente secundario. Tu tarea: revisar y mejorar la documentacion del
dominio infra del registry. Trabaja SOLO en este worktree. Reporta al terminar.
PROMPT
# ...y lanza un claude secundario en su propia kitty:
launch_claude_agent_kitty "fn_registry · docs" /tmp/orq_docs_wt /tmp/orq_docs.md
# -> abre una ventana kitty titulada "fn_registry · docs", arranca claude con
# el prompt inyectado, y deja /tmp/orq_fn_registry_docs_kitty.log con el arranque.
O directo via fn run:
./fn run launch_claude_agent_kitty "fn_registry · docs" /tmp/orq_docs_wt /tmp/orq_docs.md
Cuando usarla
Cuando el orquestador quiere lanzar un Claude secundario interactivo en su propia terminal kitty para una sub-tarea que el humano quiere ver y poder retomar. A diferencia del Agent tool (sub-agente no interactivo, headless, cuyo output vuelve al padre y no deja terminal abierta), aqui cada secundario corre en una ventana visible que persiste: el humano observa el progreso en vivo y, cuando el claude termina, la shell sigue ahi para continuar manualmente o relanzar.
Gotchas
- kitty debe estar instalado. Si
command -v kittyfalla -> exit 1 con mensaje claro. No hay fallback a otra terminal. - El
directorydebe ser AISLADO (worktree git o sub-repo propio). Dos claudes apuntando al mismo working tree comparten HEAD y dispersan/cruzan los commits (memoriamulti-agent-git-race-same-repo). El orquestador debe crear un worktree/clon por agente antes de llamar. --dangerously-skip-permissionscorre sin pedir confirmacion a ninguna accion (memorialanzar-agentes-skip-permissions). Es a proposito para agentes autonomos desatendidos, pero es un riesgo asumido: el secundario puede tocar el sistema sin gates. No lanzar sobre directorios sensibles.- El log de
/tmp/orq_<slug>_kitty.loges donde se ve el arranque (errores de kitty/claude al iniciar). El<slug>deriva deltitlesanitizado; titulos distintos que colapsen al mismo slug sobrescriben el mismo log. - El PID reportado no es el de kitty. Con
setsidel$!es el del proceso setsid, no el de la ventana; por eso la funcion reporta el log en vez de un PID. Para encontrar la ventana despues:pgrep -af kitty | grep <title>. - El prompt se inyecta con
"$(cat <prompt_file>)"evaluado DENTRO de la kitty. Si editas elprompt_filedespues de lanzar pero antes de que la kitty arranque, el claude vera la version editada (se lee en el momento del arranque, no del lanzamiento).