Claude Modsunofficial directory

Interface·terminal · desktop·MIT

source-control

Git status above the prompt and a VS Code-style panel to commit, sync and resolve.

source-control panels in Claude Desktop: a history graph with incoming and outgoing commits, and a merge conflict
Screenshots from the cc-source-control repository, MIT license

source-control brings VS Code’s Source Control view into Claude Code. A band above the prompt shows the branch, how many commits wait to be pulled or pushed and how many files changed. A panel beside the chat lets you stage, commit, sync, read the history graph and work through merge conflicts. It is built for one repository worked on from several machines: you see there is something to pull before the copies drift apart. It runs in the terminal and in the desktop app.

source-control band above the chat box: branch main, 2 commits to pull, 1 to push and a Sync button

What it does

  • The band shows the branch, ↓ for commits on the remote that are not here yet, ↑ for local commits not pushed, the number of changed files and how long ago the remote was last checked. The age turns yellow after 12 hours, or reads offline when the last fetch failed.
  • One main button does what is due now, as VS Code’s does: Sync when you are behind or ahead (pull, then push), Publish for a branch without upstream, Commit… when there are only local changes, and Resolve… or Finish… during a conflict or an unfinished merge or rebase. The last three open the panel instead of acting. ◨ opens and closes the panel.
  • The panel docks on the right, or sits above the prompt in a narrow terminal. It has Fetch, Pull and Push, a message field where Enter commits, and the changes with + and − per file or for all of them. The history shows the last 12 commits, incoming ones in purple, outgoing ones in blue, with merges on lanes of their own; the terminal draws it with glyphs, like git log --graph. Folding sections list branches with their counts (local only, deleted on remote), worktrees with their changed files, Claude’s included, and stashes.
  • Commit with nothing staged commits every change, as VS Code’s smart commit does. That includes untracked files.
  • Conflicts get a section of their own. Fix a file and stage it with +, press Ask Claude to resolve, or abort. If a pull stops because it would overwrite local changes, the panel offers Pull with autostash.

Install

Needs Claude Code 2.1.287 or later and git.

claude plugin marketplace add manuel-will/cc-source-control
claude plugin install source-control@cc-source-control --scope user

--scope user turns the mod on in every project; when the desktop app asks where to install, the author says to pick user. The note that four userConfig options are not set yet is harmless: the defaults apply. Version 0.7.1 is current.

Open a session in a Git repository and the band is there. /git opens the panel with the cursor in the message field, /git status prints a summary, /git sync, pull, push, fetch and publish run that action, and /git commit <message> commits. In the terminal, ctrl+x tab moves focus into the band, Tab steps between its buttons, Esc returns to the prompt and ctrl+x x closes the panel. If /git is missing in some project, the repository’s scripts/diagnose.sh names the reason, such as "disableAllHooks": true in that project’s settings.

/config holds four options: the background fetch interval (10 minutes, 0 turns it off), the local status poll (30 seconds), when the last fetch counts as stale (12 hours) and the language (auto, en or de).

How it works

Everything goes through git, run in the session’s folder with a timeout and with terminal prompts turned off. The mod has no network code of its own and asks the model nothing, so it costs zero tokens until you press Ask Claude to resolve.

What it reads. git status --porcelain=v2 every 30 seconds, plus a check every 2 seconds of the modification times of the files git touches on each commit, checkout, stage and fetch, so a commit made in another terminal shows within seconds. The mod also rereads 400 ms after each Bash, PowerShell, Edit, Write or NotebookEdit call by Claude and at the end of each turn; the tool.call hook only schedules that refresh and does not look at the command. While the panel is open it also reads the log, branches, stashes, the remote’s address and the status of up to eight worktrees. Every read carries --no-optional-locks, so it never takes the index lock from a git you or Claude are running. User names and tokens are stripped from remote URLs before they are shown.

What touches the network. git fetch --prune on your remote, when the session opens and every 10 minutes after. It runs quietly: no credential window, and SSH in batch mode unless you set your own SSH command. If it fails, the band says offline and the mod waits up to five minutes before the next try. Several sessions on one repository do not fetch twice, because the mod reads the age of FETCH_HEAD. Pull, push, sync and publish reach the remote only when you press them.

What it writes. Only when you press a button or run /git with a verb. There is no confirmation step: the press is the confirmation.

ActionGit command
Stage, unstagegit add -A -- <path>, git restore --staged -- <path>
Commitgit commit -m <message>, after git add -A when nothing is staged
Pullgit pull --no-rebase unless you set pull.rebase; --autostash when you ask for it
Push, publishgit push, git push -u <remote> HEAD
Syncpull, then push
Finishgit commit --no-edit after a merge, --continue after a rebase, cherry-pick or revert
Abort--abort on the merge, rebase, cherry-pick or revert in progress

There is no force push, no hard reset and nothing that discards changes, except Abort: it puts the repository back where it was before the merge or rebase, which drops any resolution you had made so far, and it runs on one click.

Ask Claude to resolve submits a prompt in your name. It lists the conflicted files and asks Claude to resolve them, keeping both sides where that fits, remove the conflict markers, stage the files, finish with git commit --no-edit or --continue, and ask you when a decision is unclear. That is an ordinary turn: it costs tokens, and Claude’s edits and git commands go through your usual permission settings.

Claude Code runs a mod’s git with repository hooks turned off, so Husky or lefthook do not run on a commit or push from the panel. The panel says so when the repository has hooks; if you need them, let Claude commit. Outside the author’s playground repositories, the mod writes no files of its own.

Limitations

  • English and German only. Any other language setting gets English.
  • Nothing can draw in the desktop app’s left project sidebar; the band and the panel take its place.
  • The background fetch never asks for a password. If sign-in fails, run git fetch once in a terminal so your credentials are stored.
  • The history lists five incoming commits and counts the rest, and the graph draws at most six lanes.

Similar Claude Mods

The whole directory →