Git changes
Git changes shows what is different in the git repository of the conversation's working folder: the branch, every changed file, and a diff for each. Use it to look over an agent's work before you ask it to commit. It is a viewer. The only thing it changes is the ⬇ Pull button.
Opening it #
Open the conversation's ⋯ menu and choose 🌿 Git changes. A window opens
over the conversation. It reads the relay host's folder, so you see the same
thing from any browser.
The entry is in the menu of every open conversation. It is hidden when no conversation is open and in the shared read-only view.
Which repository #
The window runs git in the conversation's working folder, the one you chose in the New chat dialog or set with 🗂️ Change CWD. Git finds the repository from there, as it does in a terminal: a folder inside a repository shows that repository.
If git finds no repository, the header says Not a git repository and the list
says The current workspace root is not a git repository. The ⬇ Pull
button is disabled. A folder that only holds several repositories side by side
is not a repository itself, so it gets this message too. Start a conversation
inside the repository you want to review.
Working folder below the repository's top
When the working folder is a subfolder of a repository, the list still shows
the changes of the whole repository, not only of that subfolder. Opening a file
from it does not work: every diff reads No textual changes detected for this file. Start the conversation in the repository's top folder to get working
diffs.
A repository with no commits yet shows its branch name, and its staged files
are listed. A diff of a staged file fails there with git's message
fatal: bad revision 'HEAD'. Diffs of untracked files work.
The header #
The header shows the branch and, next to it, how far it is from its upstream:
| Header | Meaning |
|---|---|
main |
The branch, level with its upstream or without one. |
main ↑2 |
Two commits ahead of the upstream: not pushed yet. |
main ↓3 |
Three commits behind the upstream. |
main ↑2 ↓3 |
Both. |
detached HEAD |
A commit is checked out, not a branch. |
Under the branch, a second line shows the upstream and the number of changed
files, such as origin/ (1 changed file for one). A
branch without an upstream shows no arrows and no upstream name, only the
count. The counts are the ones git last knew: OAR does not fetch, so ↓ only
changes after a fetch or pull.
Pull #
⬇ Pull runs a plain git pull in the folder, with no options. Its tooltip
says "Pull from upstream", but OAR names no remote or branch. Whether it
merges, rebases or only fast-forwards is whatever your git configuration says
(pull., pull.). It is always offered when the folder is a
repository, also when there is nothing to pull, and is disabled while the
window loads or a pull runs (the button reads Pulling…). A pull may take up
to 120 seconds.
When it ends, a line under the header says Pull: and the last line of git's
output (for example Pull: Already up to date.), or Pull complete. when git printed nothing. If git refuses, the line
is red and reads Pull failed: followed by git's own message. This is what you
see for a conflict, for local changes a pull would overwrite, or for a branch
without an upstream. OAR does not stash, reset or resolve anything. Ask the
agent to sort it out. The list is reloaded after each pull.
The list #
Every changed file is one row: staged, unstaged and untracked files together, sorted by path. A row shows:
- a letter badge for the state, and the file name with its folder under it;
- for a renamed file, the old path after a
←; - deleted files with the name struck through.
A new folder that git does not track yet is one row for the whole folder, not
one per file in it. Its name is empty and the folder's path is shown under it.
Opening it shows No textual changes detected for this file.
| Badge | Meaning |
|---|---|
| M | Modified |
| A | Added |
| D | Deleted |
| R | Renamed |
| C | Copied |
| T | Type changed |
| U | Untracked: a new file git does not track yet |
A file edited after it was staged appears once, with the state of the working copy. The list does not tell staged from unstaged changes. Hover a row for the state in words and the full path.
Conflicted files
A file with a merge conflict has no badge of its own. A file that both sides
changed (UU in git) shows U and the word Untracked, although it is
tracked. A file both sides added shows A, one deleted on both sides shows
D, and one deleted on one side shows D (struck through) or U,
depending on the side. Its diff still opens and compares it with the last
commit. Use git status in a terminal, or ask the agent, to see the conflict.
A repository with nothing to show says
Working tree clean — no changes.
Refreshing #
The list is not live. It is read when you open the window, when you press ↻ (refresh), and after a pull. While an agent works, press ↻ to see its latest edits. Closing and reopening the window does the same.
The diff viewer #
Click a row to open that file's diff in a second window on top of the list. The
diff compares the file with the last commit, so staged and unstaged edits show
together. The title is the file's path; under it the state and the counts, for
example Modified · +12 −3.
| Button | Shows |
|---|---|
| Changes | Added and removed lines with three unchanged lines around each. Longer unchanged stretches fold into ⋯ 40 unchanged lines. This is the default. |
| Full file | Every line of the file, with the changes marked. |
Both views come from one diff, so switching is instant. The choice stays for the next files you open, until you reload the page. Lines carry the old and new line numbers; added lines are green and removed lines red.
| File | What you see |
|---|---|
| New (untracked) | Every line as added. |
| Deleted | Every line as removed. |
| Renamed | The new path compared with the last commit: every line as added, even when the content did not change. |
| Binary | Binary file — no text diff available., with the state only and no counts. |
| No text change, such as a mode change | No textual changes detected for this file. |
| Very large | The same diff, in full. OAR sets no size limit, but reading the diff has 15 seconds and a 32 MB output limit. A file that exceeds them shows an error message in place of the diff. |
Long lines do not wrap. Scroll sideways to read them.
If git cannot read the status or a diff, the message is shown in red above the list, or in place of the diff.
Close the diff with ×, Esc, or a click outside it. The list is still open behind it. ×, Esc or a click outside closes the list in turn.
What it does not do #
There is no staging, committing, discarding or pushing here, and no way to edit a file. To commit, undo a change or push, ask the agent, in the conversation. A commit the agent makes on Claude carries the attribution line you chose; see Commit attribution. Added in 0.9.17 On DeepSeek it carries the line chosen under Commit attribution on the DeepSeek tab, or the folder's own setting.
By provider #
The window is the same for every provider that runs on the relay host: GitHub Copilot, OpenAI, Claude, Cursor, Grok and DeepSeek. It reads the folder and git, not the agent.
| Provider | Git changes |
|---|---|
| Claude Cloud | The chat works on a clone at Anthropic, which this window cannot see. The entry is in the menu and reads the working folder you chose in New Chat on the relay host (the one that filled in the repository and branch), not the sandbox's changes. The agent's results come back as branches it pushed: the cloud line above the composer has one ⇡ branch link per pushed branch. See Claude Cloud. |