7fb00defdf
Lanzar `fleetclaude` estando ya dentro de una flota tmux viva abría una ventana kitty nueva (y creaba un perfil/socket nuevo fleetN+1) en vez de mostrar la flota en el pane actual. Causa: con $TMUX definido el launcher saltaba el `exec tmux attach` y caía a la rama `setsid kitty`. Cambio: cuando se invoca sin --new desde dentro de una flota fleetview viva (el socket actual, derivado de $TMUX, tiene una sesión homónima con window 'console'), se trae la TUI al contexto/pane actual (`fleetview show`, o `tmux select-window` de la window console como fallback sin binario) y se retorna 0 antes de las ramas kitty/wt.exe. Nuevo flag --new para forzar el comportamiento clásico (flota+ventana nueva) aun dentro de tmux; pasar --session con un nombre distinto al perfil actual equivale a --new implícito. Fuera de tmux el comportamiento es intacto (exec tmux attach reutiliza la terminal). Fix incidental: `local left_pane="" right_pane=""` (antes `local left_pane right_pane` reventaba con "unbound variable" bajo `set -u` al reutilizar una sesión existente, p. ej. con --reuse/--session sobre una flota viva). Verificación e2e con sockets aislados fctest* (sin tocar la flota del humano): golden (reuse, exit 0, kitty invariante), --new y --session-distinto (no reuse, ruta ventana-nueva), fuera de tmux (salta reuse, ruta attach). bash -n limpio. Docs: launch_fleetclaude.md (signature, params --new, ejemplo, cuando usarla, gotchas, growth log v1.7.0) + /fleet show en .claude/commands/fleet.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
77 lines
4.1 KiB
Markdown
77 lines
4.1 KiB
Markdown
---
|
|
description: Muestra la flota de Claudes vivos (sessionId + objetivo + estado) y, con argumento, salta con foco a esa conversación dentro de la sesión tmux fleet. `/fleet show` trae la TUI al contexto tmux actual.
|
|
argument-hint: "[show | texto|sessionId|PID para saltar — vacío = listar la flota]"
|
|
---
|
|
|
|
# /fleet — ver y navegar la flota de Claudes
|
|
|
|
Inspecciona la flota de procesos Claude Code vivos de este PC y, opcionalmente, salta con foco a cualquiera de ellos dentro de la interfaz tmux (perfil fleetview).
|
|
|
|
Se apoya en el modo CLI de la app `fleetview` (`fleetview list` / `fleetview focus`), que opera sobre el socket tmux del perfil **desde el que se invoca el comando** (`$FLEET_SOCKET`, default `fleet`). Es decir, lista y enfoca solo los Claudes del mismo perfil en el que corres.
|
|
|
|
## Binario
|
|
|
|
Ruta: `${FN_REGISTRY_ROOT:-$HOME/fn_registry}/apps/fleetview/fleetview`
|
|
|
|
Si el binario no existe, compílalo antes de usarlo:
|
|
|
|
```bash
|
|
cd "${FN_REGISTRY_ROOT:-$HOME/fn_registry}/apps/fleetview" && go build -o fleetview .
|
|
```
|
|
|
|
## Comportamiento según `$ARGUMENTS`
|
|
|
|
### Sin argumentos → listar la flota
|
|
|
|
1. Ejecuta:
|
|
```bash
|
|
"${FN_REGISTRY_ROOT:-$HOME/fn_registry}/apps/fleetview/fleetview" list --json
|
|
```
|
|
2. Presenta el resultado como una tabla legible para el usuario, una fila por Claude, con: estado (idle/busy/waiting/shell), objetivo (`goal`), `sessionId` corto (primeros 8 caracteres), PID y window tmux.
|
|
3. Marca con claridad:
|
|
- el Claude **activo** (`active: true`) — el que está embebido en el pane derecho de la window `console`.
|
|
- la sesión actual / orquestador si la puedes identificar (su `session_id` coincide con el de quien invoca).
|
|
4. Si la lista está vacía, indícalo y sugiere que el perfil fleet podría no estar activo (revisar `$FLEET_SOCKET` y que la sesión tmux exista).
|
|
|
|
### `show` → traer la TUI al contexto tmux actual
|
|
|
|
Si `$ARGUMENTS` es exactamente `show` (alias `open`/`attach`), el usuario quiere
|
|
volver a ver el panel FleetView en el contexto/pane actual sin abrir ninguna
|
|
ventana ni arrancar una flota nueva. Ejecuta:
|
|
|
|
```bash
|
|
"${FN_REGISTRY_ROOT:-$HOME/fn_registry}/apps/fleetview/fleetview" show
|
|
```
|
|
|
|
Comportamiento (decidido por la app, no abre terminal externa):
|
|
|
|
- **dentro de tmux con la flota viva** → `select-window` de la window `console`
|
|
del socket fleet (trae la TUI al frente; no abre nada).
|
|
- **fuera de tmux** → `attach` a la sesión fleet en la terminal actual (la reutiliza).
|
|
- **sin flota viva** → error claro, exit 1, no abre nada (sugiere arrancarla con
|
|
`fleetclaude`).
|
|
|
|
Es el equivalente del comportamiento de `fleetclaude` sin args invocado dentro de
|
|
una flota viva (reuse de contexto): úsalo cuando ya tengas una flota corriendo y
|
|
solo quieras recuperar la vista del panel. Para abrir una flota NUEVA aparte, usa
|
|
`fleetclaude --new` (no este comando).
|
|
|
|
### Con argumentos → saltar con foco
|
|
|
|
El usuario quiere que la interfaz tmux salte a una conversación concreta. `$ARGUMENTS` es el query: texto del objetivo, prefijo de `sessionId`, o PID (cualquier valor que no sea `show`).
|
|
|
|
1. Ejecuta:
|
|
```bash
|
|
"${FN_REGISTRY_ROOT:-$HOME/fn_registry}/apps/fleetview/fleetview" focus "$ARGUMENTS"
|
|
```
|
|
2. Interpreta el exit code:
|
|
- `0`: salto hecho. Confirma al usuario a qué Claude saltó (usa la línea `→ ...` de stdout).
|
|
- `2`: query ambiguo. El binario lista los candidatos por stderr; muéstralos y pide al usuario que afine (por `sessionId` o PID).
|
|
- `1`: sin match o sin window tmux. Ejecuta `fleetview list` y muestra las opciones disponibles para que elija.
|
|
|
|
## Notas
|
|
|
|
- El salto usa el modelo de la TUI: trae el Claude elegido al pane derecho de la window `console` (con el sidebar fleetview siempre visible a la izquierda) y enfoca esa window. No es destructivo — el Claude que estuviera antes se aparca en su propia window, sigue vivo.
|
|
- El comando opera solo sobre el perfil tmux desde el que se invoca (`$FLEET_SOCKET`). Si pides un Claude que vive en otro perfil/socket, no aparecerá en la lista ni se podrá enfocar desde aquí.
|
|
- Para reabrir sesiones cerradas (`claude --resume`) usa la TUI fleetview (tecla `u`); este comando solo lista y enfoca Claudes vivos.
|