Files
fn_registry/functions/infra/tmux_new_claude_window.md
T
egutierrez 927437a8d8 feat(infra): grupo claude-fleet — FleetView TUI + orquestacion de Claudes
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>
2026-06-17 00:04:41 +02:00

3.1 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path, notes
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path notes
tmux_new_claude_window function go infra 1.0.0 impure func TmuxNewClaudeWindow(socket, session, cwd string) (string, error) Crea una window detached nueva en una sesion tmux de un socket aislado (tmux -L <socket>) que corre `claude --dangerously-skip-permissions` en el cwd dado, y devuelve su window_id (ej @7). No cambia el foco. Capa de control tmux de la app TUI fleetview para arrancar un Claude nuevo dentro de la sesion fleet. Como el pane corre claude via exec, el #{pane_pid} del pane resultante es el PID del proceso claude.
claude-fleet
infra
tmux
claude
fleet
tui
false error_go_core
name desc
socket Nombre del socket tmux aislado (se invoca tmux -L <socket>). En fleetview es 'fleet'. Nunca opera sobre el servidor tmux por defecto del usuario.
name desc
session Nombre de la sesion tmux donde crear la window (ej 'fleet'). Debe existir.
name desc
cwd Working directory del nuevo pane/Claude (-c). Ruta absoluta del proyecto donde arrancar el Claude.
window_id de la window creada (string con la forma @N, ej '@7'), tal cual lo imprime `tmux new-window -P -F '#{window_id}'`. Error si socket/session/cwd vienen vacios o si tmux falla (sesion inexistente, socket no accesible). true
TestTmuxNewClaudeWindow
TestTmuxNewClaudeWindowEmptyArgs
functions/infra/tmux_new_claude_window_test.go functions/infra/tmux_new_claude_window.go Build tag //go:build !windows (capa tmux de fleetview, no portable a Windows). Comparte el helper runTmux con tmux_swap_window_into_console y tmux_map_claude_panes (mismo paquete infra). El comando que corre el pane es literalmente 'claude --dangerously-skip-permissions'; tmux lo arranca via su shell pero claude reemplaza al proceso, asi que pane_pid == claude PID.

Ejemplo

package main

import (
	"fmt"

	"fn-registry/functions/infra"
)

func main() {
	// Arranca un Claude nuevo en /home/enmanuel/fn_registry dentro de la
	// sesion 'fleet' del socket aislado 'fleet'. No roba el foco.
	windowID, err := infra.TmuxNewClaudeWindow("fleet", "fleet", "/home/enmanuel/fn_registry")
	if err != nil {
		panic(err)
	}
	fmt.Println("Claude nuevo en window", windowID) // ej: @7
}

Cuando usarla

Cuando la TUI fleetview necesita arrancar un Claude nuevo dentro de la sesion fleet sin sacar al usuario de la consola actual. El Claude nace parkeado en su propia window (detached); luego TmuxSwapWindowIntoConsole lo trae a la derecha de la TUI cuando el usuario lo selecciona.

Gotchas

  • Opera SIEMPRE sobre el socket aislado (tmux -L <socket>). Nunca toca el servidor tmux por defecto del usuario.
  • La sesion session debe existir antes de llamar; la funcion crea la window, no la sesion.
  • Devuelve el window_id (@N), no el window_index. El swap posterior usa este id.
  • -d garantiza que no cambia el foco: el Claude nuevo queda parkeado, no se muestra solo.
  • Build tag //go:build !windows: no compila ni corre en Windows.