927437a8d8
Sistema FleetView para centralizar la flota de procesos Claude Code vivos en una sola ventana kitty + tmux (socket aislado -L fleet) con un panel TUI: - list_claude_fleet (+ tipo claude_fleet): escanea ~/.claude/sessions + goals + runtime, valida procesos vivos (anti-PID-reciclado), join por sessionId. - list_resumable_claudes (+ tipo resumable_claude): sesiones cerradas reanudables. - wrappers tmux: tmux_new_claude_window (con --resume), tmux_swap_window_into_console (preserva ancho del sidebar), tmux_map_claude_panes. - launch_kittyclaude: comando entrypoint; instala atajos alt+flechas/enter/n/0/k/r, mouse on, remain-on-exit off; fija el ancho del sidebar con hooks. - docs/capabilities/claude-fleet.md + entrada en el INDEX. Incluye ademas funciones datascience en progreso (excel/duckdb/postgres) y ajustes varios de docs e infra de otra sesion, agrupados aqui para no perderlos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69 lines
3.9 KiB
Markdown
69 lines
3.9 KiB
Markdown
# Capability group: claude-fleet
|
|
|
|
Operar la **flota de procesos Claude Code** vivos en la máquina como una sola
|
|
unidad: descubrirlos, listarlos en un panel TUI y centralizarlos en una ventana
|
|
kitty con tmux donde se conmuta cuál está embebido a la derecha. Reemplaza el
|
|
caos de N ventanas kitty dispersas por un único punto de entrada.
|
|
|
|
Pieza visible: la app `fleetview` (TUI). Entrypoint: el comando `kittyclaude`.
|
|
|
|
## Funciones
|
|
|
|
| ID | Firma | Qué hace |
|
|
|---|---|---|
|
|
| `list_claude_fleet_go_infra` | `ListClaudeFleet() ([]ClaudeFleet, error)` | Escanea `~/.claude/sessions/*.json` + `goals/`, valida procesos vivos (anti-PID-reciclado), join por `sessionId` → lista tipada con status/objetivo/cwd/target. |
|
|
| `launch_kittyclaude_bash_infra` | `launch_kittyclaude [--cwd <d>] [--bin <p>] [--session <n>] [--cols <n>]` | Entrypoint: abre kitty con sesión tmux (socket aislado `-L fleet`) de dos panes (TUI izq + Claude der). Instala atajos `alt+*` e hijos del sidebar. |
|
|
| `tmux_new_claude_window_go_infra` | `TmuxNewClaudeWindow(socket, session, cwd string) (string, error)` | Crea una window tmux nueva con `claude --dangerously-skip-permissions`. Devuelve el `window_id`. |
|
|
| `tmux_swap_window_into_console_go_infra` | `TmuxSwapWindowIntoConsole(socket, session, windowID string) error` | Trae el Claude de `windowID` al pane derecho de `console` (junto a la TUI), parkea el anterior, re-fija el ancho del sidebar. |
|
|
| `tmux_map_claude_panes_go_infra` | `TmuxMapClaudePanes(socket string) (map[int]string, error)` | Mapa `claudePID → window_id` de los Claude que viven en la sesión (vía `list-panes` + descendencia `/proc`). Permite a la TUI saber cuáles son conmutables. |
|
|
|
|
App relacionada: `fleetview_go_infra` (`apps/fleetview/`) — la TUI Bubble Tea que consume `list_claude_fleet` y orquesta los wrappers tmux.
|
|
|
|
## Ejemplo canónico (end-to-end)
|
|
|
|
```bash
|
|
# 1. Compilar la TUI una vez.
|
|
cd ~/fn_registry/apps/fleetview && go build -o fleetview .
|
|
|
|
# 2. Abrir la flota (una ventana kitty: panel izq + Claude der).
|
|
fn run launch_kittyclaude
|
|
|
|
# 3. Dentro de la ventana, desde CUALQUIER pane (incluido escribiendo en Claude):
|
|
# alt+↑/↓ mueve el cursor de la lista
|
|
# alt+enter conmuta el pane derecho al Claude seleccionado
|
|
# alt+n abre un Claude nuevo (window en fleet) y conmuta a él
|
|
|
|
# Inspección headless de la flota sin abrir nada:
|
|
fn run list_claude_fleet | jq '.[] | {rename, status, goal}'
|
|
```
|
|
|
|
Bajo el capó de `alt+enter`/`alt+n`: tmux redirige la tecla al pane de la TUI
|
|
(`bind -n M-Enter send-keys -t console.0 Enter`); la TUI resuelve el Claude
|
|
seleccionado con `TmuxMapClaudePanes` y lo trae con `TmuxSwapWindowIntoConsole`
|
|
(o crea uno con `TmuxNewClaudeWindow`).
|
|
|
|
## Fronteras (qué NO cubre)
|
|
|
|
- **No gestiona Claudes remotos** (ej. los de una sesión tmux del móvil): se
|
|
listan como contexto pero no se embeben localmente (no son panes de fleet).
|
|
- **Adopción de Claudes sueltos pendiente**: un Claude vivo en otra ventana kitty
|
|
(fuera de fleet) se lista, pero `alt+enter` sobre él aún no lo trae —
|
|
requerirá relaunch `claude --resume <sessionId>` dentro de fleet (patrón de
|
|
`reboot_all_claudes_bash_infra`).
|
|
- **No reinicia ni mata Claudes** (todavía): `resume`/`kill` desde el panel son
|
|
fase posterior. Para reiniciar toda la flota existe `reboot_all_claudes_bash_infra`.
|
|
- **Linux + kitty + tmux** únicamente (build tag `!windows`, usa `/proc`).
|
|
|
|
## Prerequisitos
|
|
|
|
- `kitty` y `tmux` en el PATH. La sesión vive en un server tmux aislado (`-L fleet`).
|
|
- La TUI `fleetview` compilada (`apps/fleetview/fleetview`).
|
|
- Claude Code ≥ 2.1.x (escribe `~/.claude/sessions/<PID>.json` con `status`).
|
|
|
|
## Notas
|
|
|
|
- Toda la sesión usa el socket `-L fleet`: los atajos `bind -n` no afectan al
|
|
tmux por defecto del usuario; `tmux -L fleet kill-server` lo limpia entero.
|
|
- `reboot_all_claudes_bash_infra` comparte la misma fuente de verdad
|
|
(`~/.claude/sessions/<PID>.json`) y es el complemento para reiniciar la flota.
|