Git Courer — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Git Courer (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- mcp-name: io.github.blak0p/git-courer --> <!-- markdownlint-disable MD041 --> <img width="1259" height="619" alt="Gemini_Generated_Image_g9lcw7g9lc" src="https://github.com/user-attachments/assets/2e9c0e64-b0de-4b83-9159-3a5906f9f3f4" />
<p align="center"> <a href="https://github.com/blak0p/git-courer/releases/latest"> <img src="https://img.shields.io/github/v/release/blak0p/git-courer?color=%2300BFFF&label=latest" alt="Release"> </a> <a href="https://github.com/blak0p/git-courer/actions"> <img src="https://img.shields.io/github/actions/workflow/status/blak0p/git-courer/test.yml?branch=main" alt="Build"> </a> <a href="https://github.com/blak0p/git-courer/blob/main/LICENSE"> <img src="https://img.shields.io/github/license/blak0p/git-courer" alt="MIT License"> </a> </p>
Issues & Bugs: @blak0p/git-courer/issues · Discussions: @blak0p/git-courer/discussions
| Doc | Description |
|---|---|
| [Web](https://blak0p.github.io/git-courer/) | Visit the official website |
| [Roadmap](ROADMAP.md) | What's coming next and the strategic vision |
| [Architecture](docs/architecture.md) | Codebase structure, patterns, and how to add features |
| [Troubleshooting](docs/troubleshooting.md) | Fix: Ollama not running, MCP not detected, permission errors |
| [MCP Clients](docs/mcp-clients.md) | All 14 supported clients, config formats, manual setup |
| [Config Options](docs/config.md) | All ~/.config/git-courer/config.yaml and .git/git-courer/config.json settings |
| [Commands](docs/commands.md) | Complete reference for all 22 MCP tools |
| [Models Guide](docs/models.md) | Tested models, token usage, and which one to pick |
| [Contributing](CONTRIBUTING.md) | Setup, running tests, and how to collaborate |
go install github.com/blak0p/git-courer@latestcurl -fsSL https://raw.githubusercontent.com/blak0p/git-courer/main/scripts/install.sh | shThat's it. It installs the binary and auto-configures every AI tool it detects on your machine.
Requirements: Git · llm local
Homebrew (macOS / Linux):
brew install blak0p/tap/git-courerWindows
# Windows (PowerShell)
irm https://github.com/blak0p/git-courer/releases/latest/download/git-courer_windows_amd64.tar.gz | tar -xz -o git-courer.exe
.\git-courer.exe setupManual install:
# macOS / Linux
curl -fsSL https://github.com/blak0p/git-courer/releases/latest/download/git-courer_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m).tar.gz | tar -xz -C /usr/local/bin git-courer
chmod +x /usr/local/bin/git-courer
git-courer setupThe only MCP git server that understands your code before it commits.
Most tools wrap git diff | llm "write a commit". git-courer does something different: it parses your AST, builds a dependency graph, classifies the change type in Go without touching the LLM, an[...]
One staged area = one commit. Always.
git-courer uses go-enry and go-tree-sitter to parse your AST and apply deterministic rules — new public function, modified signature, deleted symbol, breaking change. The LLM writes the message,[...]
Before committing, git-courer builds a graph of what your staged files affect across the codebase. Real scope, not just which files were touched.
Go and the local LLM handle everything they can. Your cloud LLM receives structured commit context — WHY + WHAT — instead of raw code.
A git-courer commit is a compressed, structured summary any LLM can consume directly. Better input, fewer tokens, fewer hallucinations.
Every write operation creates a backup before executing. One command undoes anything.
Why install one tool for commits, another for releases, another for PR checks? git-courer covers the full cycle:
Read: status, diff, history, blame, pr-review Write: commit, amend, revert, stage, reset, stash Branch: branch, merge, rebase, cherry-pick, tag Utility: sync, backup, undo, remotes, config
All returning structured JSON. No pager hangs, no text parsing, no extra tools.
Preview the change → review proposed commits → apply. git-courer splits your staged files into atomic commits by dependency graph automatically.
Call pr-review — a pre-PR gate that runs in one shot:
test_command from .git/git-courer/config.json (e.g. go test ./...)[NEW_FUNC], [MOD_SIG ⚠BREAKING])If it's not green, you don't merge. Set test_command via git-config SET_TEST_COMMAND or edit .git/git-courer/config.json directly.
Run git-courer release. The CLI reads commits from .git/git-courer/branches/ (captured during each git-commit APPLY on this branch) and also from refs/courer/* — per-branch commit blobs that survive squash merges and deleted branches
Every destructive operation has an automatic backup. One command restores the previous state.
You: "commit my changes"
↓
AI delegates to git-courer (via MCP)
↓
Go reads AST + dependency graph → classifies type deterministically
↓
Local LLM writes the human-readable message from the annotated diff
↓
Security scan (5 layers) → auto-backup → commit
↓
"✓ feat(auth): add OAuth2 token refresh"For the full list of tools: docs/commands.md For workflow details: docs/workflows.md
| Tool | Auto-configured |
|---|---|
| Claude Code | ✓ |
| Cursor | ✓ |
| Windsurf | ✓ |
| OpenCode | ✓ |
| Cline | ✓ |
| Roo Code | ✓ |
| VS Code | ✓ |
| Claude Desktop | ✓ macOS/Win only |
| Continue | ✓ |
| Zed | ✓ |
| Codex | ✓ |
| Gemini CLI | ✓ |
| pi | ✓ |
| Antigravity | ✓ |
Run git-courer mcp setup to configure all detected tools at once, or git-courer mcp setup <client> for a specific one.
Run git-courer with no arguments to launch the interactive installer:
Interactive TUI
The TUI walks you through 4 steps:
~/.config/git-courer/config.yamlYou can also update the binary or uninstall directly from the menu. Navigation: j/k or arrow keys, esc to go back.
git-courer runs as an interactive TUI when launched without arguments. It also provides MCP server and management commands:
| Command | Description |
|---|---|
git-courer | Launch interactive TUI (requires terminal) |
git-courer mcp | Run MCP server |
git-courer mcp setup | Configure all detected AI tools |
git-courer mcp setup <client> | Configure a specific tool (e.g. cursor) |
git-courer release | Automated semver releases and changelogs (CLI only) |
git-courer remove | Remove git-courer from the current project |
git-courer uninstall | Uninstall the binary globally |
git-courer update | Update to the latest version |
git-courer version | Show current version |
For the 22 MCP tools and their arguments, see [docs/commands.md](docs/commands.md).
git-courer uses two config levels:
Global (~/.config/git-courer/config.yaml) — personal settings: LLM backend, model.
Per-project (.git/git-courer/config.json) — committable, shared with team. Stores description, areas, test_command, excluded. Better results = edit this file per project.
All options: [docs/config.md](docs/config.md)
When you call git-commit PREVIEW, the server may return immediately (FAST) or start a background job (SLOW). In the SLOW case:
{status:"processing", job_id}git-commit STATUS with that job_id to poll{status:"done"}, the plan is readygit-commit APPLY with the same job_idThe agent continues working — it does NOT block waiting for the job.
Every successful commit via git-commit APPLY is captured to .git/git-courer/branches/<branch>/commits.json and a refs/courer/<branch> blob is created. When you later run git-courer release, it reads commits from both the local store and the refs — so squash-merged PRs still produce accurate changelogs
Why this matters: Git history is frequently rewritten — PR squashes, rebases, force-pushes — destroying the real commit narrative. The CommitStore preserves every commit message as it was[...]
Having issues? Check [docs/troubleshooting.md](docs/troubleshooting.md) for:
MCP config file locations: [docs/mcp-clients.md](docs/mcp-clients.md)
Who decides the commit type? Go, via AST analysis. The LLM only writes the human-readable message.
Do I need Ollama? You need some LLM backend. Ollama is the recommended default, but git-courer works with any OpenAI-compatible server: LM Studio, vLLM, LocalAI, or a custom endpoint. Without a configured backen[...]
Is my code sent anywhere? No. Everything runs on your machine — git-courer, Ollama, your data.
Who decides the version number in a release? Go, not Ollama. Version is calculated from commit types (feat: → minor, feat!: → major). Ollama only writes the human changelog.
My tool isn't listed. Open an issue: @blak0p/git-courer/issues. If it supports MCP, adding it is usually a few lines.
How do I mark a breaking change? Use ! after the commit type (feat!:) or include BREAKING CHANGE: in the body. git-courer picks this up automatically for version bumping and changelog generation.
<!-- Using git-courer? Share your setup → Discussions and I'll add you here. -->
| Who | Stack | Model |
|---|---|---|
| @blak0p | OpenCode · Linux · RX 9070 XT | gemma4:e4b |
Running it? Drop your setup in Discussions — I'll add you to this table.
Want to collaborate? Here's everything you need:
Read [docs/architecture.md](docs/architecture.md) for:
Found a bug? Open an issue: [@blak0p/git-courer/issues](https://github.com/blak0p/git-courer/issues)
Include:
git-courer version)good first issue labelsfeat:, fix:, chore:)If your AI tool supports MCP but isn't listed, adding it is usually 5 lines of code in internal/installer/mcp_config.go. See docs/mcp-clients.md for the format.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.