Code Review
Every coding session runs on its own branch. The diff viewer lets you see exactly what Claude changed before you merge anything.
The Diff Viewer
Open any task and switch to the Code tab. The diff viewer shows files changed on the selected session's branch compared to the base branch. Changes appear in real time as Claude works.
When the diff pane is wide enough for the file tree and a readable diff column, the changed files sit in a sidebar on the left and the selected file's diff fills the rest of the pane. Narrow windows and phones keep the compact file selector. The layout follows the pane's own width, so it does not depend on the pane being maximized.
A summary bar above the diff carries the file count, total lines added and removed, a proportion bar, and chips for the change types in the diff.
Unified or Side by Side
The summary bar carries a Unified / Split toggle. Unified stacks deletions and additions in one column; split puts deletions on the left and additions on the right. The choice persists as you move between files.
Runs of unchanged context longer than 12 lines collapse to an Expand N unchanged lines band, with three lines of context kept on each side. Click the band to open that region.
Image files render as image cards rather than binary text. On web, j and k move between files without leaving the keyboard.
On a phone there is no Code tab. A Code button in the task header opens the same diff full screen, on iPhone and on Android phones, and Done closes it.
Reading the Diff
- Green lines (prefixed with
+) are additions. - Red lines (prefixed with
-) are deletions. - Each file in the list shows per-file stats:
+Xlines added,-Ylines removed.
A modified line shows up as a deletion followed by an addition.
File Navigation
The file list sits alongside the diff content. Click any filename to jump directly to that file's changes. Filter it by name, or by change type, to scope a large change set.
Files with more than 500 combined lines of additions and deletions show a Load diff prompt instead of rendering immediately. This prevents the view from locking up on massive changes. Click the button to load the full diff when you're ready.
Branch Stats
The header above the diff shows total commits on the branch, total lines added, and total lines removed. Use this for a quick sense of scope before diving into individual files.
When the Diff Viewer Is Offered
Code Diff is listed only when the session actually has changes. On a task where nothing has been touched yet, the option is absent from the view pickers, the phone's Code menu, and the web workspace toolbar, so you cannot open it to an empty screen. It appears as soon as the first change lands, which can be a moment after the task opens while the diff loads.
A pane you have already pinned to the diff keeps showing it, with its own empty state, rather than dropping out from under you while Claude works.
When a Diff Cannot Load
The panel names the reason it failed. A branch with nothing pushed yet says so; a missing GitHub token says to add it in Settings → Integrations; anything else shows the message the server returned, so you are not left guessing at a cause that does not apply.
Opening a Pull Request
A task offers Create PR in its header once the session has changes to publish. Until a session has changes or commits in at least one of its repositories, the button is not there, so you cannot open an empty pull request form. A session working across several repositories gets the button as soon as any one of them has work.
Once the task has a pull request, the header switches to PR #N (or View PR when the number is not known yet) and opens it on GitHub.
On a phone that button is not in the task header. It sits in the diff itself, next to Done, so you reach the pull request through the changes it would publish: tap Code, then Open PR (or PR #N / View PR). Open PR closes the diff and brings up the pull request form; View PR leaves the diff open and links out to GitHub.
You can also ask the agent for one. An agent knows the branch its session publishes to and may push it, so it opens the pull request in the same turn it makes the change rather than deferring to a later one.
Tasks run by a playbook do not show either: the playbook's own steps open and manage the pull request. See Playbooks.