0.0.81
What's changed
The right-hand panel stops being a place you read and becomes a place you work. It lists everything a session changed — staged, unstaged and untracked alike — lets you fix a file without leaving it, and carries a shell running in that session's own directory.
Edit a changed file where you review it
Click a changed file and it opens in an editor below the list, with the diff recomputed as you type. The list stays on screen, so moving between files is one click and there is nothing to navigate back from — the editor has a Close.
- Three views, remembered per panel: inline (the default), side by side, and plain with no diff at all. The panel's choice is its own; the MCP diff tab keeps yours.
- Save is inactive when there is nothing to save, and
Ctrl/Cmd+Sworks in all three views. - A file link in the terminal opens the diff rather than the plain viewer, whenever the file is one the session changed.
The editor refuses rather than guesses, because it sits next to a session writing the same files:
- A save that would land on a file which changed underneath you is refused, not merged — you are told, and the editor can re-read.
- Line endings, a byte-order mark and the file's encoding are preserved exactly. A file that genuinely mixes CRLF and LF is refused instead of being silently normalised, which would have manufactured a whole-file diff on a file nobody touched. A file that is not valid UTF-8 is refused instead of being written back with replacement characters.
- Oversized and binary files are refused, never truncated.
- Nothing under
.git/is editable, a row that is a symlink is refused, and so is a file with more than one name on disk — a hard link inside the repository can point at a file outside it, and saving through it would change that file too.
If the session takes the panel over while you are typing, your edits are kept and restored with a notice, not discarded.
A shell under the file list
The panel carries a terminal below the Changes list, both visible at once with a handle between them (#300). It runs in the session's own resolved working directory — worktree included, the same one the file list reads — so a test or a git command runs against exactly the tree you are looking at. With no file list above it, the shell now fills the panel instead of sitting under an empty block (#305).
It is a shell attached to the panel, not a session: it never appears in the sidebar, never counts towards the running-session count, and closing it leaves nothing behind (#305).
Untracked files are changes too
A file the session just created is listed with the others, with a real diff and real counts, instead of appearing as a name with nothing behind it (#298). Very large untracked trees fall back to a folder-level summary rather than listing tens of thousands of rows.
The panel says what it found, instead of disappearing
Opening Changes always tells you something. There is a file list when there are changes, No changes when the work tree is clean, and a plain note when the directory is not a git repository at all — where the panel used to put git's own error, or its entire 150-line usage page, in git's language (#298, #305, #310).
A repository that git refuses is not the same thing as no repository, and the panel no longer confuses the two. Dubious ownership, an unreadable .git, an unsupported repository format, a broken worktree link: these show git's own message, bounded, instead of claiming there is no repository here. Exit code 128 is git's generic fatal code, so the difference is established from the filesystem rather than from git's exit status. On a remote session there is no filesystem to check against, so a remote failure reports what git said.
Start a repository under a session that had none and the next refresh picks it up; delete one under an open tab and the tab says so rather than closing itself.
Fixed
- A plain terminal whose entry had gone reopened as a Claude session resumed against an id with no transcript. A terminal stays a terminal, and reopening an exited one no longer mints a second sidebar row (#305).
- The editor keeps a file's untracked line counts after a save, so the diff does not appear to vanish (#302).
- Side-by-side is no longer the panel's default: at the panel's width it rendered two 225-pixel columns and clipped code mid-token (#302).
- The sidebar was sized to the window rather than to the area above the status bar, so it overflowed its container by exactly the status bar's height. The app could end up scrolled by those 22 pixels, clipping the top row of toolbar icons — with no scrollbar to bring it back, since the container hides its overflow. It stayed clipped until the window was reloaded (#306).
- Closing the window released the terminal, Changes and subagent watchers but not the file watchers behind the Memory and Work Files panels, so every file a panel had open kept its descriptor for the life of the process (#308).
Other
- The test suite no longer takes every core: stage one runs at most four workers, overridable with
SWITCHBOARD_TEST_CONCURRENCY(#299).
Full changelog: v0.0.80...v0.0.81