Every dashboard action that changes something: steering a live session, starting one, and publishing or cleaning up what a finished one left.

## TLDR

- Steering (stop, answer a choice, send a message, arm the handoff, merge) appends a command to the session's own control file, which the session watches — the same append whoever asks, no direct line into the process. A Claude web session has none to steer: its answer is queued for the browser extension to type in, and only as a label of the question actually parked.
- Starting a session (project-bound, or a project-less topic), previews, and opening a checkout in an editor exist only where the daemon wired them; other hosts refuse.
- Publishing a finished session — push its branch, open a PR, merge — first commits what it left uncommitted, under a lock so a click racing teardown cannot lose work; Merge steers a live session to merge at its natural end, and merges a finished one's PR directly.
- Removing a kept checkout or deleting a session refuses while the session is live, saves the work as a commit, and stops any preview serving the tree first.
- Queueing a ticket writes the project's backlog directly, under the ticket's priority and linking back to it; a stuck ticket claim can be released by hand.

## Before writing SPEC.md files

Read https://raw.githubusercontent.com/brillout/sdd/refs/heads/main/sdd.md
