Covers everything since v2.10.34 — v2.10.36 and v2.10.37 were tagged in the changelog but never published, so their changes ship here too.
Features
Every live session is now traced (v2.10.38)
Previously, a Claude CLI the dashboard didn't launch was invisible — its hooks were silently dropped in "SSH-only mode". Two discovery paths now surface them:
- Hook fallback — a hook matching no dashboard terminal becomes an external card with full data (real sessionId + transcript). Gated on a controlling tty, so headless
claude -p, CI, and MCP runs never create phantom cards.
- Process scan (20s) — finds interactive
claude CLIs that fire no hooks at all (started before hooks were installed) as thin external-<pid> cards. Fully async, so the scan never blocks the event loop.
External sessions are marked with an amber ⌁ badge.
Room kill-all + real session kill (v2.10.36)
Killing or closing a session now actually terminates the agent. AI CLIs run as PTY → zsh → claude with claude in its own process group, so the old single-PID SIGTERM never reached it — the card flipped to ENDED while the process kept running. Kill now resolves the process group, escalates SIGTERM → SIGKILL, verifies death, and reports the truth instead of always claiming success. A skull icon in the room header kills every live session in a room.
Effort/model persistence (v2.10.37)
effortLevel and model now survive AASC restart and are re-applied across all resume, fork, and clone paths — not just the import path.
Prompt queue & file picker (v2.10.38)
- A bare
@ now lists the shallowest files and folders instead of an empty dropdown, with a retry while the file index is still warming up.
- Editing a queued prompt gets the same
@-file and /-command autocomplete as composing one.
- A cyan badge shows queued-prompt count on session cards.
Bug Fixes
- Restore no longer drops sessions. A missing
.catch(undefined) on the model field meant a non-Claude session's raw command (or a contaminated Claude model id) would 400 the entire workspace restore, silently losing the session and its room.
- No phantom cards on restart.
external-<pid> cards are never persisted — a dead or OS-reused PID would resurrect a ghost. Live ones are re-discovered within 20s.
- No duplicate cards. A discovered card upgrades in place on its first real hook regardless of event type; previously a non-
SessionStart first hook created a second card for the same process.
- No launch races. Discovery skips processes without a resolvable cwd and any cwd matching a CONNECTING placeholder, so it can't race a dashboard launch mid-flight.
- No phantom session history. Upgrading an empty external card no longer archives a bogus "previous session".
- Stale autocomplete responses can no longer overwrite the dropdown after the trigger has moved.
- Room header icons (collapse chevron + kill-all) share one line in the vertical rail instead of stacking.
Improvements
- 49 new tests across session matching and external discovery.
- Feature docs realigned across
docs/feature/.