Skip to content

git-ai

This is a tool reference

What a tool or project is, who makes it, and what it is for, whether someone else wrote it or I did. Everything I have learned about it lives elsewhere and links back here.

git-ai1 answers "which of these lines did an agent write". It does not guess: the agent itself reports what it wrote, through a hook the tool installs into each agent it finds, and the answer is stored as a git note against the commit.

Authors Aidan Cunniffe and Sasha Varlamov, trading as Git AI at usegitai.com
Licence Apache 2.0 for the CLI; the Teams product around it is commercial
Language Rust
Distribution A shell installer, curl -sSL https://usegitai.com/install.sh \| bash, into ~/.git-ai
Source github.com/git-ai-project/git-ai
Version read 1.5.13, installed 24 June 2026 and pinned there by disable_auto_updates

What it records

Attribution is explicit rather than inferred. An agent calls git-ai checkpoint <preset> before and after each edit, naming itself: the presets shipped in 1.5.13 cover Claude Code, Codex, Cursor, Gemini, GitHub Copilot, Amp, Windsurf, opencode, Pi, Firebender and Continue, plus a human preset for everything else. On commit the line ranges are written into a note under refs/notes/ai, and git ai blame renders them beside the ordinary blame.

Two consequences follow from the storage choice, and both matter more than the feature list. The notes travel with the repository, so attribution survives a clone and can be pushed to a remote like any other ref. And the notes are rewritten by the daemon whenever history moves, which is what keeps a rebase or a squash from discarding them.

Prompts are stored too, where prompt_storage is set to notes. That is a decision about what leaves the machine in a push, not only about disk, because it puts the text of every session into a ref that a remote can hold.

Where it puts itself

The installer is the part worth knowing before running it, because it writes into four places that have nothing to do with each other:

Layer What lands there
~/.git-ai The binary, config.json, a long-running daemon, and SQLite databases of metrics and session transcripts. Around 365 MB after a few months
Shell startup A PATH line appended to every rc file it recognises, each one dated and marked as the installer's
Coding agents Hooks written into Claude Code, GitHub Copilot and opencode, plus a VS Code extension installed into the editor
Every repository touched A .git/ai directory of checkpoint logs, and the refs/notes/ai ref once anything is committed

The last row is the one that grows without being asked. The tool needs no per-repository setup, which is its selling point, and the consequence is that it leaves state in every repository an agent ever ran in, including throwaway clones in package manager caches.

The daemon reinstalls the agent hooks daily. That is documented as a convenience, so a newly installed agent is picked up without anyone remembering, and it means removing a hook is not a way of switching the tool off: the removal lasts until the next check. Hooks come off when the binary does, and in that order.

Removing it

Four layers means four separate removals, and the project's own instructions cover two of them. Uninstall git-ai and the state it left in every repository is the full procedure, including the per-repository sweep and the notes that may already be on a remote.

The uninstaller itself has one trap worth knowing before running anything: git-ai uninstall-hooks has no help flag and uninstalls when asked for one.

How it was used here

Installed on 24 June 2026 alongside opencode, configured for local-only operation with telemetry and version checks off, and written up at the time2. Removed on 9 October; what the three and a half months in between taught is the exploration.

The opencode side of it was a plugin file at plugins/git-ai.ts, generated by git-ai install-hooks with the absolute path to the binary baked in, which is why it was gitignored rather than committed with the rest of that configuration.

The following pages link to this page: