What Argus supports
Git
The built-in git client: branches, diffs, hunk-level staging, commits, stashes, merges and pull requests, in both session and project scope.
Argus ships a full git client. It runs in two scopes:
- Session scope — opens against a single agent's worktree. Drives the agent-review workflow: review what the agent did, stage hunks, commit, push, merge.
- Project scope — opens against the project root. Full client surface: branch graph across all branches, remotes, tags, submodules, worktrees, reflog, bisect, hooks, interactive rebase, settings.
Both scopes share the same layout: a left sidebar listing refs and sub-views, the active view in the centre, and a unified toolbar above it. Press ⌘/ to open the keyboard shortcut cheatsheet at any time.
Sub-views
The sidebar switches between views with ⌘1…⌘6. Some views are project-only.
| Shortcut | View | Scope | What it does |
|---|---|---|---|
| ⌘1 | Working Copy | session, project | Stage, unstage, discard, commit. Side-by-side or unified diff per file. |
| ⌘2 | History | session, project | Commit graph with lanes, refs, gravatars. Drag-and-drop reorder/squash/revert. |
| ⌘3 | Stashes | session, project | List, apply, pop, drop. Save with message and options. |
| ⌘4 | Pull Requests | project | GitHub PRs for the repo, with status checks. |
| ⌘4 | Branch | session | Single-branch summary view (the agent's branch). |
| ⌘5 | Branches Review | project | Per-branch ahead/behind, last activity, quick checkout. |
| ⌘5 | Conflicts | session | Only shown during an in-progress merge/rebase/cherry-pick. |
| ⌘6 | Reflog | session, project | HEAD reflog with one-click restore. |
| (sidebar) | Tags | project | Create, delete, push, checkout. Sorted by date. |
| (sidebar) | Remotes | project | Add, rename, remove, set URL, prune. |
| (sidebar) | Submodules | project | Status, init, update, sync. |
| (sidebar) | Worktrees | project | List, add, remove, prune. |
| (sidebar) | Bisect | project | Start/good/bad/skip with current commit subject inline. |
| (sidebar) | Hooks | project | View and toggle hooks installed in .git/hooks. |
| (sidebar) | Interactive rebase | project | Pick / reword / squash / fixup / drop / edit / reorder commits via drag. |
| (sidebar) | Settings | project | Default branch, pull strategy, LFS, credential helper status. |
Working Copy
The working-copy view is the entry point for every commit.
- Staged / unstaged / untracked files are shown together with a tri-state per file. Space toggles staged ↔ unstaged on the focused file; Delete discards.
- Hunk staging with ⌘S (stage selection) and ⌥⌘S (unstage selection). ⌘D (or ⇧⌘⌫) discards the selection.
- ⌘] / ⌘[ jump to the next / previous hunk; ⌥⌘→ / ⌥⌘← to the next / previous file.
- ⇧⌘E / ⌥⇧⌘E stage / unstage everything.
- ⌘R refreshes the working copy. Argus also watches the repo and refreshes automatically.
- ⇧⌘I toggles a file's
.gitignoreentry. - ⇧⌘H opens the file's history in the History view.
- Diff search in the toolbar narrows the file list.
- LFS warning appears on files that aren't tracked by LFS but should be (configurable thresholds in project settings).
Commit composer
The composer sits below the file list.
- ⌘Enter commits. ⌥⌘Enter commits and pushes.
- ⇧⌘C focuses the subject line from anywhere in the working copy.
- ⇧⌘A amends the last commit. The composer pre-fills with the previous subject and body.
- Drag a commit from History onto the composer to revert it; drag a changed file from the working copy onto a commit in History to apply that change as a fixup.
History
A graph of the commits reachable from each ref, with lane compaction so long-lived branches stay visible.
- Drag-and-drop: reorder, squash, fixup, revert, cherry-pick. Drop a commit onto another to squash, drop onto the working copy to apply, drop onto the trash zone to revert.
- Multi-select (Cmd-click / Shift-click) for bulk squash.
- Right-click a commit for: checkout, create branch from commit, tag at commit, reset to commit, revert, cherry-pick, copy hash, copy summary.
- ⌘C copies the focused commit's hash; ⇧⌘C copies short hash + subject.
- Enter opens the commit detail (full diff, body, parents, refs).
- ⇧⌘H with a file selected jumps to that file's history.
- The toolbar offers depth presets (last 100 / 500 / all) and exclude filters (stashes hidden by default).
Stashes
Save with ⇧⌘S ("Save stash"); apply the latest with ⌥⇧⌘S. ⌘⇧⌥L opens the "Stash with options…" dialog (include untracked, keep index, message). Drop a working-copy file onto a stash row to add it to that stash.
Branches
- ⌘B opens "New branch…" anywhere in the git view.
- The sidebar lists local, pinned, archived, and remote branches. Pinned branches are also shown inline within the main tree so they appear in both places.
- Click a branch to open its history; double-click to checkout.
- Right-click for: checkout, rename, delete, push, set upstream, merge into current, rebase current onto, compare with current, open a PR on GitHub.
- Deleting a branch whose commits aren't on any other branch asks a second time before it throws them away.
- From your phone, Branches on a project opens the same list. Tap a
branch to see its history and each commit's diff, compare it with the
checked-out branch, and — with the
controlgrant — switch to it, branch from it, merge or squash it in, rebase onto it, push or publish it, pull, rename, pin, open a PR or delete it. A merge or rebase that stops on conflicts is left for you to resolve on the computer. - Project-scope ahead/behind counts are refreshed in the background whenever the working tree changes.
- Default branches (
main,master, project-configured) sort to the top.
Landing a session on its base branch
The merge button (in the runtime bar, the changes panel, and the home screen's "Ready to merge" card) always asks how the session's commits should land:
- Keep every commit — history lands exactly as the agent wrote it.
- Squash into one commit — the whole session becomes a single conventional commit.
Neither is a default, and nothing is remembered between merges: a squash rewrites history, so it is only ever done when asked for. From the command palette the two are separate entries. Either way the base branch fast-forwards onto the result, so history stays linear.
The base a session merges into is set when the session is created and
can be changed later — on desktop from the session's home screen, on the
phone from Land this work → Base branch → Change. It must be a local
branch: a remote-tracking ref like origin/main cannot be
fast-forwarded, and a session pointed at one is repaired automatically
to the local branch behind it.
Renaming the session branch
In session scope, the toolbar offers Rename branch. Argus renames the branch in the worktree and on the remote (if it has an upstream), and updates the agent's tracked branch name.
Remote operations
The toolbar exposes Fetch (⇧⌘F), Pull (⇧⌘P), and Push (⇧⌘U) using the configured defaults.
For project scope, ⌥⇧⌘P ("Pull with options…") and ⌥⇧⌘U ("Push with options…") open dialogs that let you pick:
- Pull — strategy (merge / rebase / fast-forward only), prune, tags.
- Push — remote, branch, force-with-lease, set upstream, tags, ref.
Errors come back as a typed banner above the active view. The banner suggests recovery actions for each kind: "no upstream" → publish branch, "non-fast-forward" → pull then push, "rejected" → force-with-lease (with a confirm step), and so on.
Publishing a session branch
If the session branch has no upstream, the toolbar's push button opens a
confirm dialog ("Publish branch?") that pushes to origin and sets it
as upstream in one step.
Conflicts
When a merge, rebase, or cherry-pick stops on conflicts, the Conflicts view appears automatically (and ⌘5 in session scope opens it). Each conflicting file shows ours / theirs / merged side-by-side; resolve in the editor, mark as resolved, and continue or abort the operation from the toolbar.
Compare
Right-click two refs and choose Compare to open the Compare view.
The URL drives the comparison (?left=…&right=…), so compare links
survive reloads and can be shared between Argus windows.
Quick Actions
⇧⌘A opens Quick Actions — a single fuzzy search over branches, tags, commits, sub-views, and operations. ⌘L ("Jump to ref…") opens the same dialog scoped to refs only.
Project settings (git)
Project-scope Settings view exposes git-related project config:
- Default branch — what's pinned to the top of the branches list and used as the merge target for sessions.
- Pull strategy — default for the toolbar pull button.
- LFS warning thresholds — file size / extension globs that surface the LFS warning in the working copy.
- Credential helper status — whether
git config credential.helperis set, with a one-click link to docs if not.
Per-developer git preferences (e.g. default pull strategy override) are
stored in ~/.argus/user-project-settings.json instead — see
app-settings.md.
Keyboard shortcuts at a glance
The full registry lives in
app/components/agent/GitView/shortcuts.ts. Press ⌘/ in any git
view for the live cheatsheet.
| Combo | Action |
|---|---|
| ⌘1…⌘6 | Switch sub-view |
| ⌘\ | Toggle git sidebar |
| ⌘L | Jump to ref… |
| ⇧⌘A | Quick Actions… / amend (working copy + composer) |
| ⌘B | New branch… |
| ⇧⌘T | New tag… (project scope) |
| ⌘R | Refresh working copy |
| ⌘S / ⌥⌘S | Stage / unstage selection |
| ⌘D / ⇧⌘⌫ | Discard selection |
| ⇧⌘E / ⌥⇧⌘E | Stage all / unstage all |
| ⌘] / ⌘[ | Next / previous hunk |
| ⌥⌘→ / ⌥⌘← | Next / previous file |
| ⇧⌘H | Show file history |
| ⇧⌘I | Toggle .gitignore |
| ⇧⌘F | Fetch |
| ⇧⌘P / ⌥⇧⌘P | Pull / pull with options… |
| ⇧⌘U / ⌥⇧⌘U | Push / push with options… |
| ⇧⌘S / ⌥⇧⌘S | Save / apply latest stash |
| ⌘⇧⌥L | Stash with options… |
| ⌘Enter | Commit |
| ⌥⌘Enter | Commit & push |
| ⇧⌘C | Focus commit subject / copy short hash + subject |
| ⌘C | Copy commit hash (history) |
| Enter | Open focused commit |
| Space | Toggle staged/unstaged on focused file |
| Delete | Discard focused file |
| ⌘/ | Show keyboard shortcuts |