--- name: launch_fleetclaude kind: function lang: bash domain: infra version: "1.3.2" purity: impure signature: "launch_fleetclaude [--cwd ] [--bin ] [--session ] [--cols ]" description: "Entrypoint de FleetView: abre una ventana kitty con una sesion tmux (socket aislado -L fleet) de dos panes (TUI fleetview a la izquierda, claude --dangerously-skip-permissions a la derecha) para centralizar la flota de Claudes. Instala atajos alt+flechas/alt+enter/alt+n que controlan la TUI desde cualquier pane, y fija el ancho del sidebar con hooks." tags: [claude-fleet, infra, kitty, tmux, claude, fleetview, launcher] params: - name: --cwd desc: "Directorio de trabajo de ambos panes tmux. Opcional. Default: raiz del repo fn_registry, derivada dinamicamente via git rev-parse desde la ubicacion del script (sin hardcodear paths de usuario)." - name: --bin desc: "Ruta al binario de la TUI fleetview que corre en el pane izquierdo. Opcional. Default: /apps/fleetview/fleetview. Si no es ejecutable, el pane izquierdo muestra un mensaje de como compilarla y deja una shell viva." - name: --session desc: "Nombre de la sesion tmux a crear o reutilizar. Opcional. Default: fleet. La funcion es idempotente sobre este nombre." - name: --cols desc: "Ancho en columnas del pane izquierdo (la TUI). Opcional. Default: 40." output: "Crea/reutiliza una sesion tmux detached con dos panes y lanza una ventana kitty 'FleetView' adjunta a ella, desacoplada del shell padre (setsid). Imprime el estado por stdout. Sin valor de retorno; exit 0 en exito." uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] tested: false tests: [] test_file_path: "" file_path: "bash/functions/infra/launch_fleetclaude.sh" --- ## Ejemplo ```bash # Via fn run (resuelve por nombre o ID): fn run launch_fleetclaude # Directo, con cwd explicito: launch_fleetclaude --cwd ~/fn_registry # Sesion y ancho de pane personalizados: launch_fleetclaude --session fleet --cols 50 ``` Tras invocarlo aparece una ventana kitty titulada `FleetView` con dos panes lado a lado: a la izquierda la TUI `fleetview`, a la derecha una sesion de `claude --dangerously-skip-permissions`. Volver a invocarlo NO duplica la sesion: reusa la existente y solo abre otra kitty adjunta. ## Cuando usarla Usala cuando quieras un unico punto de entrada a la flota de Claudes en vez de N ventanas kitty sueltas: lanzas `fleetclaude` y tienes la TUI de control y un Claude listo para trabajar en la misma ventana. Tipico al empezar la jornada o al retomar el trabajo en el repo `fn_registry`. ## Gotchas - **Idempotencia tmux**: si la sesion `` (default `fleet`) ya existe, NO se recrea el layout; solo se abre una kitty nueva adjunta a la misma sesion. Para empezar de cero: `tmux kill-session -t fleet` antes de invocar. - **kitty detached (setsid)**: la ventana se lanza con `setsid ... &` para sobrevivir al cierre de la terminal que la invoco. No bloquea al shell padre. - **`exec` en los panes**: tanto la TUI como `claude` se lanzan con `exec`, asi que al terminar el proceso el pane se cierra en vez de dejar una shell zombie colgando. Excepcion: el fallback cuando `fleetview` no esta compilado deja una shell interactiva a proposito (para que veas el mensaje y puedas compilar). - **Requiere fleetview compilado**: el default `--bin` apunta a `/apps/fleetview/fleetview`. Si ese binario no existe, el pane izquierdo muestra `cd apps/fleetview && go build -o fleetview .` en lugar de fallar en silencio. Compila la TUI antes para el flujo completo. - **Socket tmux aislado (`-L fleet`)**: toda la sesion vive en un server tmux propio, separado del tmux por defecto del usuario. Asi los atajos `bind -n` NO afectan otras sesiones (ej. una sesion `mobile-1` del movil) y matar el server fleet no toca nada mas: `tmux -L fleet kill-server`. - **Atajos en el socket, NO en kitty.conf**: instala `bind -n` para `alt+flechas` (mover el cursor de la TUI), `alt+enter` (conmutar al Claude seleccionado) y `alt+n` (abrir Claude nuevo). Son bindings de tmux que redirigen la tecla al pane de la TUI (`send-keys -t console.0`), asi funcionan ESTES DONDE ESTES (incluido escribiendo en el pane de Claude). No modifican la configuracion de kitty ni los atajos globales del escritorio. - **Ancho del sidebar via hooks**: `client-resized` y `window-layout-changed` re-fijan el pane 0 (TUI) a `--cols` columnas, porque el `attach` de kitty y el conmutar de Claude redistribuyen el espacio. - **tmux siempre, kitty solo sin TTY**: `tmux` es obligatorio (aborta != 0 si falta). `kitty` solo se necesita en la ruta sin-TTY (atajo de escritorio, cron, script), donde abre una ventana nueva. Invocado desde una terminal interactiva (el caso normal del alias `fleetclaude`), reutiliza la terminal actual con `exec tmux attach` y NO necesita kitty — util en WSL u hosts sin kitty. ## Capability growth log - v1.3.2 (2026-06-17) — targeting de panes por **pane ID** (`%0`/`%1`) en vez de por indice (`console.0`). Antes fallaba con `can't find pane: 0` en hosts cuyo `~/.tmux.conf` define `base-index 1`/`pane-base-index 1` (el socket `-L fleet` hereda esa config). Los pane ID son inmunes al base-index. Bug latente que el fix de kitty (v1.3.1) destapo al dejar de abortar antes de montar la sesion. - v1.3.1 (2026-06-17) — el guard de `kitty` se movio a la rama sin-TTY. La ruta interactiva (`exec tmux attach`) ya no exige kitty, asi que `fleetclaude` funciona en hosts sin kitty (p.ej. WSL) reutilizando la terminal actual. - v1.3.0 (2026-06-17) — renombrada de `launch_kittyclaude` a `launch_fleetclaude` (comando `fleetclaude`). Atajos: `alt+0` (= alt+n, abrir Claude nuevo), `alt+k` (kill con confirmacion), `alt+r` (picker de reanudar sesiones cerradas) y `alt+flecha-izquierda` (volver atras desde el picker). Cierra la window al salir el Claude (`remain-on-exit off`). - v1.2.0 (2026-06-16) — ancho del sidebar por defecto 47 columnas; `ctrl+0` como atajo alterno para abrir Claude nuevo; `mouse on` (clic/rueda enrutados a la TUI) y `extended-keys on` (para que `ctrl+0` llegue distinguible por el protocolo de teclado de kitty). - v1.1.0 (2026-06-16) — socket tmux aislado `-L fleet`; instala atajos `alt+flechas` / `alt+enter` / `alt+n` que controlan la TUI desde cualquier pane; hooks que mantienen fijo el ancho del sidebar tras attach/conmutar.