Changes
Stage, commit, push, and pull from the Changes panel, with AI-generated commit messages.
The Changes panel is the git workflow hub. Open it with Ctrl+Shift+B (toggles the right panel) or by clicking the Changes tab in the pane deck. The N files changed chip at the end of a settled agent chat turn also opens it.
Header
The pane bar above the list carries:
- The working tree's total
+adds −dels - Filter changes — show All changes, Staged only, Changed only, or Conflicts only
- Refresh — fetches remote refs, then re-reads the status (it also re-reads on its own every 10 seconds)
Below it, a branch row shows the current branch, how far it is behind (↓) and ahead (↑) of its upstream, and no remote when it has no upstream yet.
File List
Files are organized into sections:
Staged
Files that have been git add-ed. Hover the section header for Unstage all.
Changed
Unstaged modifications, new files, and deletions. Hover the section header for Stage all.
Conflicts
When merge conflicts exist, a Conflicts section groups the conflicted files. Resolve them by editing the files (in the built-in editor or your own), then stage them as usual — commits stay disabled until every conflict is resolved.
Each file shows:
- A colored status icon — added, modified, removed, renamed, untracked, or conflicted
- The file name, with its folder dimmed beside it (hover for the full path)
- Addition/deletion counts (e.g.,
+12 -3) - On hover or keyboard focus: Discard (click once to arm, again within 3 seconds to confirm) and Stage / Unstage
Click a file to open its diff in the right panel's Diff pane; Esc there brings you back with the same row focused.
Until the first status read lands, the list shows placeholder rows and the action button reads Checking changes…, so a busy repository never flashes Working tree clean. A folder that isn't a git repository says so and offers Initialize Git.
Keyboard
Tab into the list and work it without the mouse:
| Key | Action |
|---|---|
↑ / ↓ | Move between files |
Enter / Space | Open the file's diff |
S | Stage or unstage the file |
Delete / Backspace | Discard the file's changes (press twice to confirm) |
When staging or discarding moves a row out from under you, focus goes to the next file.
Committing and Syncing
The action bar at the bottom of the panel is one button that changes with the state of the branch:
| State | Button |
|---|---|
| Uncommitted changes | Commit — or Commit N when N files are staged |
| Ahead and behind | Sync (pull, then push) |
| Ahead only | Push N |
| Behind only | Pull N |
| Clean and up to date | Fetch |
While an action runs the button says so — Pushing…, Pulling…, Syncing… — and briefly confirms with Pushed, Pulled, or Synced. The first push of a branch sets its upstream.
The chevron beside it (More actions) always offers everything, whatever the button shows: Commit (AI message), Commit & Push, Amend last commit (reads Amend with all changes when nothing is staged), Push, Pull, Sync, Fetch, Stash changes, Pop stash, and Undo last commit (the changes are kept).
Commit commits what's staged. If nothing is staged, it stages every changed file first.
AI Commit Messages
With AI commit messages enabled (the default):
- Click Commit — the button reads Writing message… while the agent reads the staged diff
- A preview of the message appears above the button
- Commit to use it as-is, Edit to change it first, or ✕ to throw it away
With AI commit messages turned off — or when the agent is Claude and the Claude CLI isn't installed — Commit opens an empty Commit message box instead; Ctrl+Enter (Cmd+Enter on macOS) commits.
The message is written by the Utility agent unless you set an Agent override under Settings → Git → AI Tools; Claude, Codex, and OpenCode all work. The same choice drafts pull request titles and descriptions — see Creating a Request.
Merge State
Start a merge or rebase however you like — typically git merge in a terminal pane. When one is in progress, Codemux shows a warning banner at the top of the panel:
- "Merge in progress", plus a count of conflicts left to resolve
- Abort — cancels the merge and restores your branch
- Continue — appears once every conflict is resolved, and completes the merge
While a merge is in progress the action button is replaced by "Resolve or abort the merge above."
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl+Shift+B | Toggle the right panel |