git running in the session’s worktree: the commit timeline, the per-file summary, the hunks. There is no PR, no login, no network.
That is what makes the review work before a PR exists — which is exactly when you need it.
How to open it
Git icon
In the header, when the active session is in a repository.
Chip bar
Uncommitted changes or Review worktree diff.
Workspace menu
Review diff — only for a session with a worktree.
There is no diff tab. There used to be, and when an old layout loads, diff tabs simply disappear. Today the diff is a side view — one per workspace.
What you see
In the left column, Commits: the session’s timeline, short sha and subject, newest to oldest. Below it, the per-file summary in three sections:
The last two are the important part: what the agent left uncommitted shows up too. An agent that stopped halfway hides nothing from you.
The base
The committed diff isbase_sha..HEAD, and the base_sha was pinned when the worktree was born (Worktrees). The header shows base <sha> ‥ HEAD.
That is why the review stays readable after two hours: whatever landed on main meanwhile does not show up here.
Hunks on demand
The per-file summary comes from--numstat. The real diff is only fetched when the file opens — one click on the file row.
Some are born collapsed:
The two arrows in the section header expand or collapse every file in that section at once.
A failure loading a file’s hunks does not retry on its own. You get failed to load the diff with a retry next to it. Automatic retry against a broken repo would be an infinite loop of git processes.
Unified and side by side
Unified and Side by side in the header. Syntax highlighting runs on the client and skips hunks over 2,000 lines — in those, the text shows up without color.
Binary shows as bin in place of the count, and binary file — no text diff in the body.
Stage, unstage, discard
Hover over the file row:
Unstaging a renamed file unstages the whole pair (the old path along with it); otherwise the next commit would lose the file from history.
What does not exist
Comment on a line
Hover over a diff line and click the green+ in the gutter. Write what needs to change.
The comment stays anchored to the line, in green. With at least one saved, the footer gains Send N comments to the agent — which is another page.
Open the file
The arrow icon opens the file as text — in the GUI editor configured in Settings, or, on macOS with no editor, viaopen -t.
Never
open <file> nor xdg-open: that would execute a script the agent left in the worktree with one click. On Windows and on Linux with no editor configured, the button errors out asking you to configure one — on purpose.Explore another branch
The selector next to the base enters explore mode: pick a branch and the panel shows its diff against the base, read-only. Committed only — staged and worktree belong to your directory, not to the branch you are looking at. There isfetch and checkout in the same selector.
Leaving explore mode returns to the session’s review.
Conflict in the worktree
If there is a merge, rebase or cherry-pick in progress, the panel gains a banner at the top with the conflicted files and, per file: keep<branch>, take <branch>, open in editor, mark resolved (git add). Plus a Resolve with agent, which drops the conflict into the lap of whoever created it.
Refresh
The core’s watcher only sees the git dir — index, HEAD, refs. Editing a file in the worktree generates no event. So, with the panel open, a light poll also runs every 5 seconds.The panel closes itself when focus moves to another session. It shows the staged and worktree of that session’s repo: left open with another one focused, it would lure you into staging — or discarding — in the wrong repo.
Session without a worktree
The panel opens for any session whose directory is a git repository. There the base isHEAD: Committed comes up empty and you see only staged and worktree. Local merge and opening a PR need a worktree and will fail.
See also
Commit and push
The commit bar, the message suggestion, and what push refuses.
PR comments to the agent
What the agent receives when you hit send.