Skip to content

Fleet Deck 0.7.0

Choose a tag to compare

@lacion lacion released this 14 Jul 11:06
claude plugin install fleetdeck@fleetdeck

Added

  • Move to tmux. A ⇥ move to tmux chip on cards the board didn't spawn (plain-CLI and other hook-tracked sessions) adopts the session into a board-owned tmux pane via claude --resume <session-id> — same session id, same card, full history, and afterwards it's a first-class fleet worker (terminal modal, revive, kill, mail-to-pane). An ended card moves immediately; a live card is armed and moves the moment you exit it in your terminal. The arm is durable intent consumed exactly once: it lives in SQLite (not in a timer), a disarm wins even in the settling moment right after you exit, a session that comes back alive cancels the move instead of leaving a standing order, and a daemon death mid-move (crash or upgrade takeover) is recovered by the next boot's sweep. It expires after ~30 minutes (FLEETDECK_ADOPT_ARM_MS), and a /clear keeps it, since the session is still live. The dialog carries the same asks-twice unsupervised gate as the Spawn form for keeping --dangerously-skip-permissions across the move. Refusals are honest: 409 when the session has any spawn lineage, alive or dead (the board owns its pane story — ⟲ revive is that button, and a card never offers both), 409 when nothing ever proved the CLI exited (a 3h-silence guess, an agents-CLI absence, or a pre-0.7.0 row with no provenance — a quietly-alive session must never be resumed into a second billed session; arm it instead), and 410 when the cwd or transcript is gone. New endpoint: POST /api/sessions/:session_id/adopt.
  • Plugin upgrades take effect automatically. A SessionStart hook from a newer plugin version now replaces a stale daemon on port 4711: verify (the /health pid must match the HOME pidfile and look fleetd-shaped) → SIGTERM (the existing graceful shutdown; state is SQLite and survives) → boot the newer build, announced in the board ticker (⬆️ fleetd vX replaced vY). Strictly newer only — never a downgrade, never on an unparseable/standalone 0.0.0 version — and every uncertain path fails open onto the running daemon. Manual restarts remain fine. (FLEETDECK_VERSION_OVERRIDE exists for the test suite only.)
  • The daemon version is now in the /state snapshot and shown in the board header, so you can see at a glance which build is serving you.

Changed

  • Session ends now carry provenance (sessions.end_reason): a real hook end records its reason, retention's 3h-silence guess records presumed, and the agents-CLI absence sweep — which is likewise a guess, from a registry that is documented-unreliable — now records presumed too. Move-to-tmux treats this as an allowlist: only a proven end may be resumed immediately.

Upgrade note: additive schema migration — three nullable columns (adopt_armed_until, adopt_armed_skip, end_reason) on the sessions table. Offline cards that predate 0.7.0 carry no end provenance, so they are never offered an immediate move-to-tmux (arm them instead, or revive them if the board spawned them). This is the last upgrade that needs a manual daemon restart to load; from here on the takeover does it for you.

Full changelog: v0.6.0...v0.7.0