The dashboard’s session cards were opaque — a terminal and not much else. Today I gave them chips and live activity. A card now shows what kind of session it is (sessionType), a readable title derived from the command (sessionTitle), and a repo label, and it surfaces live activity emitted from the running process via a new watchActivity/emitActivity pipe, so you can see a session doing something without scrolling its terminal. The backlog chip links straight to the item’s page, and the review-phase chip highlights when a backlog run reaches review, so the card tells you where in the pipeline the work is at a glance. I also added a per-card auto-run toggle, so you can decide whether a given session chains automatically or waits for you.

The repo selector got a proper pass too. It’s keyboard-searchable now — type to filter, arrow keys to move, enter to pick — built out of RepoFilterInput, RepoMenuList, and a useRepoKeyboardNav hook that replaced the old custom-path input. It also syncs to the active card: focus a session and the selector follows to that session’s repo (useSyncRepoToActiveCard + deriveActiveCwd), so the toolbar context tracks what you’re looking at. And next to the existing “open in VS Code” action, there’s now “open in GitHub”, which resolves the selected repo’s preferred remote and opens it in the browser.

On the correctness side, I added a new verify check: assist verify comment-policy. It flags comments added on changed lines — staged and unstaged — unless they carry a justification marker, which enforces the “only comment unintuitive complexity” rule I keep reminding myself of, and it’s wired into the verify run set filtered to TypeScript files. The daemon also got a run of reliability fixes from yesterday’s restart work: backlog sessions now restore through their wrapper rather than a bare resume, session activity persists across a restore, the session lock is released on dismiss and review-comments launches in acceptEdits mode. I also moved the backlog lock and activity files under ~/.assist so they live in one place.

The rest was performance and polish. The backlog list and web index were loading full items just to render summaries, so I split out lightweight summary loaders (loadBacklogSummaries, loadItemSummaries) and lightened both the whole-list and index paths. The maintainability-index formula now prints on every maintainability run rather than just the one report, the free-prompt button got renamed to plain “prompt”, and I extracted isRunLink into its own file to tidy up types.ts.