---
title: "Changes panel"
url: "https://docs.phux.sh/desktop-changes"
source: "https://github.com/no-phux/phux/blob/55f11eff5e728ade431f9e53a4335b447f242f1d/docs/desktop-changes.md"
projectVersion: "0.112.0"
protocolVersion: "1.0.0"
stability: "stable"
---

# Changes panel

The Changes panel in the desktop app reviews the Git changes in the focused pane's checkout, beside your panes. Use it to read what an agent changed, stage or commit it, and send the agent line comments, without leaving the app.

Press <kbd>Cmd</kbd>+<kbd>Alt</kbd>+<kbd>G</kbd> to open it.

It shows changed files as a tree and every diff in one scroll, with changed
words highlighted, syntax colors, folded context, and a side-by-side layout.
You can stage whole files or selected lines, resolve conflicts, mark files
viewed, and commit. It follows focus and runs your own `git` on folders on
this machine. See the [desktop overview](/clients#desktop) for the rest
of the app.

## Open it

**Toggle Changes** opens and closes the panel. Reach it with
<kbd>Cmd</kbd>+<kbd>Alt</kbd>+<kbd>G</kbd> (<kbd>Super</kbd> instead of
<kbd>Cmd</kbd> on Linux), the branch button in the titlebar, the sidebar view
menu, or the command palette. Drag its left edge to resize it. When the
window has room, the panes keep at least 320 points beside the sidebar. In a
narrow window the panel stays compact and crowded bottom tabs move to the
titlebar.

## What it shows

The panel reads the folder the focused terminal last reported and follows
focus and the shell's `cd`. Its header names the branch, the repository, and
how many commits are waiting to push or pull.

The file column groups files three ways:

| Group | Holds |
|---|---|
| Conflicts | Unmerged files. |
| Staged | Changes in the index, ready to commit. |
| Changes | Edits to tracked files, then new untracked files. |

Files sit under their folders, and a chain of single-folder parents shows as
one row, such as `clients/desktop/native`. Click a folder to fold it. The list
button in the header switches to a flat list. Each file shows its added and
removed line counts. A group lists at most 500 files and counts the rest.

The diff column shows one comparison at a time. **Changes** compares the
working tree with the index, and new files appear whole. **Staged** compares
the index with `HEAD`. Clicking a file switches to its comparison and scrolls
to it. Within a diff:

- Words that changed inside a line are emphasized over the line's tint.
- Syntax is colored for common languages, such as Rust, TypeScript, Python,
  Go, Swift and Markdown.
- Unchanged runs fold to three lines of context, with controls to expand them.
- The layout button cycles **Automatic**, **Side by Side** and **Unified**.
  Automatic splits once the diff is about 820 points wide.
- The arrows jump to the previous or next change.

## Review

Each file header has a **Viewed** toggle. A viewed file folds, and the toolbar
counts how many of the comparison's files are viewed. The mark clears when the
file changes again, so a file the agent edits after you looked shows up again.

Hover a line, or select lines from the gutter, and click the add button to
write a note for the agent. **Enter** saves the note and **Shift+Enter** adds a
line. Notes stay with their lines. **Send Notes** pastes them, numbered and
labelled with file and line, into the terminal the panel follows. Nothing is
submitted: press **Enter** in that terminal to send the review.

## Stage and commit

- **Files:** a file header's **Stage** or **Unstage** button, or the button
  that shows when you hover a file row, moves the whole file. **Stage All** and
  **Unstage All** act on a whole group.
- **Lines:** select lines in the diff and click **Stage Lines** to stage only
  those added or removed lines. In the Staged comparison, **Unstage Lines**
  takes them back out of the index.
- **Conflicts:** a conflicted file shows its conflict regions with a choice of
  ours, theirs or both for each. Once every region has a choice, **Mark
  Resolved** writes the result and stages it.
- **Commit:** the message field commits the index. **Enter** commits and
  **Shift+Enter** adds a line. Commit is enabled only with something staged, no
  conflicts, and a message.

The panel runs your own `git`, so hooks, config, signing, credential helpers,
and ignore rules apply as they do in the terminal. A refused commit shows
git's own message and keeps your text.

## Limits

- Remote windows and terminals on another machine say why nothing is shown:
  their folders are not on this machine.
- Reads never take the index lock, so the panel checking every few seconds
  doesn't get in the way of an agent's `git`. When the agent changes the shown
  comparison, the diff reloads and returns to the file you last opened.
- Very large comparisons are fetched with less surrounding context. New files
  over 1 MiB, binary files, and more than 200 new files are not previewed.
- Diffs that aren't UTF-8 must be reviewed and staged in the terminal. The
  panel never stages text it changed for display.
- Line staging moves content only, not executable-bit changes. Stage renames
  and copies as whole files, or in the terminal.
- Notes and viewed marks last until the window closes or follows another checkout.
- The panel does not discard changes, push, pull, or switch branches.