Skip to main content

Review Hub

In-app Git interface for staging, committing, pushing, and reviewing diffs — all without leaving Canopy.

Updated
Reviewed

Overview

Review Hub is Canopy's built-in Git interface. It gives you a per-worktree modal for staging files, viewing diffs, writing commit messages, and pushing to your remote. The primary use case is reviewing and shipping work that an AI agent has produced, but it works for any changes in the worktree.

Opening Review Hub

There are three ways to open Review Hub on a worktree:

  1. Inline commit button — when a worktree has uncommitted changes, a commit icon appears in the bottom-right of the worktree card's details bar. Click it to open Review Hub directly.
  2. Context menu — right-click a worktree card and select Review & Commit. This is always available, even when there are no changes.
  3. Header menu — open the three-dot menu on a worktree card and select Review & Commit.
Tip
You can also stage, commit, and push using global keyboard chords without opening Review Hub. See the keyboard shortcuts section below.

The Review Hub Interface

Review Hub opens as a modal dialog over the current worktree. The header shows:

  • Branch name — a monospace pill showing the current branch (truncated with a tooltip for long names)
  • PR badge — when the branch is connected to a remote, a badge shows the linked pull request state or "No PR" if none exists. See PR State below.
  • Diff mode toggle — switch between Working tree and vs {mainBranch} to change what the file list shows
  • Refresh button — visible in working-tree mode, spins during background refreshes

To compare changes between two separate worktrees side by side, use the cross-worktree diff. See Comparing Worktrees for details.

Press Escape to close an open file diff, or press it again to close Review Hub itself.

Reviewing Changes

Working Tree Mode

The default view shows all uncommitted changes split into two sections: Staged at the top and Changes (unstaged) below. Each section displays a file count and a bulk action button (Stage all or Unstage all).

Click any file row to open its diff in the File Viewer. You can also press Enter or Space on a focused row. Staged files have a subtle green tint to distinguish them visually.

When the working tree is clean, Review Hub shows an empty state: "Working tree clean — No changes to commit."

Base Branch Mode

Toggle to vs {mainBranch} to see every file that differs from the main branch. This uses three-dot merge-base comparison, the same diff you would see on a GitHub pull request. Files are listed under a "Changed vs {mainBranch}" heading.

Base branch mode is read-only. There is no staging or commit panel in this view. Click any file to open a side-by-side diff against the main branch. The toggle is disabled when you are already on the main branch, since there would be nothing to compare.

Note
Base branch diffs use merge-base semantics (three-dot comparison). This means you see the same set of changes as a GitHub pull request, not every commit since the branches diverged.

File Status Badges

Each file row displays a colored status badge indicating the type of change:

BadgeMeaningColor
MModifiedAmber
AAddedGreen
DDeletedRed
RRenamedBlue
CCopiedBlue
!ConflictRed
?UntrackedGreen

File paths show the directory prefix in a muted color with the filename in normal weight. Hover over a truncated path to see the full location in a tooltip.

Staging Files

Each file row has a + or toggle button. Click + on an unstaged file to stage it, or on a staged file to unstage it. For bulk operations, use the Stage all and Unstage all buttons at the top of each section.

Staged rows appear in the upper section with a green tint background. The commit button label updates to show the current staged file count (e.g., "Commit (3)").

Committing

The commit panel appears at the bottom of Review Hub in working-tree mode whenever there are changes. It contains a monospace textarea for your commit message and one or two action buttons depending on your remote configuration.

A subject line counter displays N/72 next to the textarea. When the first line exceeds 72 characters, the counter and textarea border turn amber as a visual nudge to keep the subject concise. This follows the widely adopted Git convention for commit message formatting.

The commit buttons are disabled when: no files are staged, the commit message is empty, there are unresolved merge conflicts, or the worktree is in a detached HEAD state.

Commit Panel Keyboard Shortcuts

While the commit message textarea is focused:

macOSWindows / LinuxAction
Cmd+EnterCtrl+EnterCommit staged files
Cmd+Shift+EnterCtrl+Shift+EnterCommit and push

The commit-and-push shortcut only attempts a push when the worktree is connected to a remote. Otherwise it performs a regular commit.

Pushing to Remote

When the worktree has a remote configured, Review Hub shows two buttons: Commit & Push (the primary action) and Commit (N) as a secondary option. When there is no remote, only the Commit (N) button appears.

Tip
The first push to a new branch automatically sets the upstream tracking branch. No need to run git push --set-upstream manually.

If a commit succeeds but the push fails, Review Hub shows an amber warning: "Committed locally. Push failed: …". The commit is preserved, and you can retry the push later using the global chord shortcut or from the terminal.

PR State

When the worktree is connected to a remote, a PR badge appears in the Review Hub header. It reflects one of these states:

  • Open — the PR is open and active
  • Draft — the PR exists but is marked as a draft
  • Merged — the PR has been merged
  • Closed — the PR was closed without merging
  • No PR — the branch is pushed to a remote but no pull request has been created yet

Click the badge to open the pull request in the Portal. The badge is hidden entirely when no remote is configured.

Note
PR detection requires a GitHub personal access token configured in Settings > GitHub. See GitHub Integration for setup details.

Keyboard Shortcuts

Beyond the commit panel shortcuts above, Canopy provides global chord shortcuts for Git operations. These work on the active worktree regardless of whether Review Hub is open:

ChordAction
Cmd/Ctrl+K, Cmd/Ctrl+AStage all changes
Cmd/Ctrl+K, Cmd/Ctrl+CCommit staged changes
Cmd/Ctrl+K, Cmd/Ctrl+PPush to remote

Chord shortcuts are two-key combos pressed in sequence (within about one second). For the full shortcut reference, see Keyboard Shortcuts.

Error States and Edge Cases

Merge Conflicts

Conflicted files appear in a red warning banner at the top of the file list showing the conflict count. Committing is blocked until all conflicts are resolved.

Detached HEAD

When a worktree is in a detached HEAD state, the commit panel shows an amber warning and disables the textarea and commit buttons.

Load and Action Errors

If git status fails to load, a red banner with a Retry button replaces the file lists. Stage or unstage failures show an inline error banner that does not block other operations. These are typically transient and resolve on retry.

Auto-Refresh

Review Hub listens for file system changes in the worktree and refreshes automatically with an 800ms debounce. When an agent is writing files, the staged and unstaged lists update in the background without any action on your part. Scroll position is preserved across refreshes, so you will not lose your place.