---
name: claude_fleet
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
  type ClaudeFleet struct {
      PID         int    `json:"pid"`
      KittyPID    int    `json:"kitty_pid"`
      SessionID   string `json:"session_id"`
      Rename      string `json:"rename"`
      Target      string `json:"target"`
      Goal        string `json:"goal"`
      Phase       string `json:"phase"`
      DodContract string `json:"dod_contract"`
      DodStatus   string `json:"dod_status"`
      Role        string `json:"role"`
      Status      string `json:"status"`
      Cwd         string `json:"cwd"`
      TmuxWindow  string `json:"tmux_window"`
      Alive       bool   `json:"alive"`
      UpdatedAt   int64  `json:"updated_at"`
  }
description: "Registro de una sesion de Claude Code en la maquina local. Cruza el estado del proceso (/proc) con la metadata que Claude Code persiste en ~/.claude (sessions/<PID>.json + goals/<sessionId>.json). Pieza de datos de la app TUI fleetview, producida por list_claude_fleet_go_infra."
tags: [claude-fleet, infra, claude, session, process]
uses_types: []
file_path: "functions/infra/claude_fleet.go"
---

## Campos

| Campo | Tipo | Origen | Notas |
|---|---|---|---|
| `PID` | int | sessions/<PID>.json .pid | PID del proceso claude. |
| `KittyPID` | int | /proc/<pid>/environ (KITTY_PID) | 0 si no aplica (tmux remoto, environ ilegible). |
| `SessionID` | string | sessions .sessionId | UUID de la sesion. |
| `Rename` | string | derivado | Display name: goal truncado a 48 runas si existe, si no basename(cwd). |
| `Target` | string | derivado | sessionId[:8] + "@" + basename(cwd). |
| `Goal` | string | goals/<sessionId>.json .goal | "" si no hay sidecar. |
| `Phase` | string | goals .phase | "" si no hay sidecar. |
| `DodContract` | string | goals .dod_contract | Criterio de aceptacion FIJO escrito al lanzar el agente; "" si ausente o vacio. |
| `DodStatus` | string | goals .dod_status | Estado del DoD: `pending`\|`met`\|`failed`; "" si ausente o vacio. |
| `Role` | string | goals .role | Rol en la flota: `orchestrator`\|`executor`; "" si ausente (los consumidores asumen executor). El orquestador se pinea arriba en la TUI. |
| `Status` | string | sessions .status | idle\|busy\|waiting. |
| `Cwd` | string | sessions .cwd | Working directory. |
| `TmuxWindow` | string | (reservado) | "" por ahora; se rellena en fase posterior. |
| `Alive` | bool | derivado de /proc | Proceso vivo Y procStart coincide (anti-PID-reciclado). |
| `UpdatedAt` | int64 | sessions .updatedAt | Epoch en milisegundos. |

## Notas

Tipo producto inmutable de hecho (lo construye `list_claude_fleet_go_infra` y se consume read-only). Vive en `functions/infra/claude_fleet.go` con build tag `//go:build !windows` porque la funcion productora depende de `/proc` (Linux). Misma fuente de verdad que `reboot_all_claudes_bash_infra`. `Alive`, `Target` y `Rename` son derivados; los demas son copia directa de los JSON de Claude Code 2.1.x.
