Review panel
The session window's Changes and Files tabs, their scopes, base selection, refresh, and limits.
The Review panel sits on the right of a session window. It has two tabs:
- Changes shows the session's diff.
- Files shows the project tree and the file viewer.
Both read the session root: the session's worktree when it is bound to one, otherwise the project folder. They never use the agent's current directory. A session in User scope has no root, so the panel and its toggle are absent.
Open and arrange the panel
- Toggle it from the session header, just before the context sidebar toggle. Opening the Review panel closes the context sidebar, and opening the context sidebar closes the Review panel.
- A plain click on a file path in an assistant message opens the Files tab at that file.
- Review changes in the pull request chip's menu opens Changes on the Branch scope.
- A turn's Changed files row opens Changes at the clicked file. If the current scope doesn't list that file, the Files tab opens instead.
The panel starts at 45% of the window and can be resized from 360 px up to 75%. CompozyOS remembers, per session, whether it is open, the selected tab, the width, and the Changes preferences (scope, base, diff mode, and the changed-files tree). With no saved choice, the panel opens on Files.
Changes
Scopes
| Scope | Compares |
|---|---|
| Branch | The merge base with the base branch up to the working tree, including uncommitted and untracked files. |
| Uncommitted | HEAD up to the working tree, including untracked files. |
When the root has no resolvable base, only Uncommitted is offered.
Base
The base defaults to the worktree's base branch, then the remote's default branch, then main, then
master. The base selector lists local and remote branches, filtered as you type, with the default
marked default. Any ref Git can resolve, such as main~1 or a tag, works too. A base that no
longer exists shows Base not found with Choose base. A saved base that no longer exists is
dropped: Changes falls back to the default base and says "Base <ref> no longer exists. Showing
changes against the default base."
Reading the diff
- The header shows the scope, total
+and−counts,head → base, the linked pull request, Refresh, the split or unified toggle, Collapse all, and Show files for the changed-files tree. The tree has its own filter and shows each file's status and counts. - Each file shows its status letter, its path (
old → newfor a rename), its counts, collapse, Open in viewer, and Copy path. Context between hunks expands on demand. A file too large to expand loses the expand control and its header says File too large to expand; a sensitive file's context says Sensitive file · context stays hidden. - Lockfiles and generated files (such as
bun.lock,go.sum,*.gen.*, androuteTree.gen.ts) start collapsed with a Generated label. - Sensitive files show Sensitive file · contents hidden with Show contents.
- Binary files show Binary file changed. A patch over the size limit shows Diff too large to display with Open in viewer. A file whose patch has no text, such as a mode-only change, shows No content changes.
- Use [ and ] to step between files, and Alt+S to switch between split and unified (not while typing in a field).
- When the session window is narrower than 900 px, diffs are unified and the changed-files tree stays behind its toggle.
Large diffs
- More than 200 changed files, or more than 20,000 changed lines, switches to one file at a time. The banner reads This diff is large, showing one file at a time, with the position and Previous file and Next file.
- More than 3,000 changed files: the list stops at 3,000 and shows Showing 3,000 of N files. The totals still count every file.
- Large or binary untracked files aren't fully counted. The totals then become lower bounds with a
trailing
+, such as+5+, and their tooltip says so.
Refresh and stale data
Changes follows the session's live stream. When the agent's tool calls settle or a turn ends, the summary refreshes once after a short pause, and only files whose contents moved reload. Focusing the session's window, including switching to it from another window inside CompozyOS, or pressing Refresh also refreshes it.
Every patch is checked against the summary it came from. If the branch moved or a file changed while a patch was loading, CompozyOS reloads the summary and the affected files once. If it is still out of date, the panel shows Couldn't refresh · Retry and keeps the last good diff on screen.
Other states
| State | What you see |
|---|---|
| No changes in the scope | No changes against main, or No uncommitted changes |
| The root is not a Git repository | This folder isn't a git repository · "Changes need git. Files still works." |
| The summary could not be read | Couldn't read changes with Retry |
| A single file's patch failed | Couldn't load this diff with Retry on that file |
Files
The Files tab is the same explorer as the Files app, rooted at the session root:
- The tree lists folders first in natural order and loads each folder when you expand it. Changed files carry their Git status, and a folder with changes inside shows a dot, even before you expand it. Filter files… narrows the loaded rows, Show ignored includes Git-ignored files, and Refresh reloads the tree.
- Open in Files window opens (or focuses) the project's Files window on the same root and file.
- The Files ↔ Search switch at the top of the tree opens the Search pane, and Go to file opens the file finder.
- If the session's worktree was removed, the tab shows This worktree is no longer on disk.
A folder with more than 5,000 entries shows the first 5,000, with a note under the tree. Right-click a row, or press Shift+F10 on it, for Copy path and, in the desktop app, Open in targets for that file or folder.