Skip to content

v0.18.0 — floating terminals, shell sessions, and better workspace launches

Choose a tag to compare

@lacion lacion released this 23 Jul 23:00

This release turns a round of real user feedback into a more direct day-to-day
board: terminals no longer cover the fleet, standalone shells and visible setup
commands make workspace bring-up useful beyond Claude itself, dead cards can be
dismissed one at a time, and stalled launches now show what was actually left on
the pane. Repository spawns also learn a durable default organization, including
Coder's textemma seed and GitLab subgroup inference.

Added

  • Floating live terminals. A terminal now opens in a draggable, resizable
    window above the board, can be minimized to a dock chip without dropping its
    WebSocket, remembers its position, and falls back to the full-screen viewer on
    small/touch displays. The terminal keeps keyboard focus visually explicit so
    board permission shortcuts cannot be mistaken for input sent to the pane.
  • In-board help. A ? overlay documents keyboard shortcuts, card and header
    actions, and orchestrator command grammar. Compose now includes compact,
    clickable examples for broadcast, assign, ticket, and name commands.
  • Standalone shell sessions. Spawn a shell without Claude, or open a new shell
    in any card's workspace. Shell cards remain terminal-first, can be killed
    directly, never receive fleet mail, and are excluded from orchestrator routing.
  • Visible setup commands before Claude starts. Repo and directory spawns can
    run an explicit setup command in the pane after materialization and before
    launching Claude. Per-repository defaults can be saved; a failing setup remains
    visible and prevents Claude from starting, while revive intentionally skips
    setup for an already-materialized workspace.
  • Default organizations for bare repository names. A bare repo can resolve
    through a persisted or environment-provided namespace. Coder workspaces seed
    textemma; multi-segment group paths infer GitLab when no host was supplied;
    explicit hosts still win or fail loudly. Namespace validation prevents URL and
    scp delimiters from changing the requested clone target.
  • Registration-stall diagnostics. When a spawned pane never registers, Fleet
    Deck captures a redacted, UTF-8-safe, byte-bounded tail of the pane and exposes
    it in the card and Drawer, making setup errors, trust prompts, and environment
    failures diagnosable without opening the terminal.
  • Per-card dismissal. Individual offline sessions can be removed without
    clearing every tombstone. Revivable cards require a second confirmation, and
    dismissal keeps their worktrees available in the Worktrees view.

Fixed

  • Copy shortcuts no longer open Compose. Modified key chords are excluded
    from board hotkeys, so Command/Ctrl+C and ordinary copy/paste work normally.
  • A vanished pane is reported as an ended agent, not a refused viewer. The
    terminal WebSocket sends a clean exit frame and triggers liveness reconciliation
    when the database still says live but tmux has already removed the pane.
  • Cold-start hooks authenticate the first registration. SessionStart now
    rereads the bearer token minted by a daemon it just started, so the first card
    and roster brief are no longer silently lost on a fresh home.
  • Shell/setup isolation stays inside Fleet Deck. remain-on-exit is scoped to
    the fleet tmux session rather than the shared server, shell sessions cannot
    become mail or auto-assignment black holes, and the liveness watchdog recognizes
    legitimate shell/setup phases instead of condemning them as dead Claude panes.
  • The release smoke test is genuinely isolated. It uses a unique temporary
    home, dedicated port and tmux socket, authenticated hooks, exactly two workers,
    process-group cleanup, verified graceful daemon shutdown, and never stops the
    live board on port 4711.

Full changelog