Git worktree isolation and provenance for AI coding agents
Project description
ait
Git-native safety rails for AI coding agents
Run Claude Code, Codex, Aider, Gemini, and Cursor in isolated Git worktrees with traceable commits, reviewable attempts, and repo-local memory.
AI agents are fast. Git history, review discipline, and handoff context often are not.
ait wraps the agent CLIs you already use and turns each run into a
reviewable attempt. The agent edits an isolated worktree, ait records
what happened, and your main checkout stays untouched until you promote
the result.
pipx install ait-vcs
cd your-repo
ait init
direnv allow # only if prompted
claude ...
Prefer npm?
npm install -g ait-vcs
cd your-repo
ait init
claude ...
The package is named ait-vcs on PyPI and npm. The installed command is
ait.
Why Developers Use ait
| Problem with agent coding | What ait adds |
|---|---|
| A prompt edits many files at once | Each run happens in an isolated Git worktree |
| The diff has no useful provenance | Attempts link intent, command output, files, and commits |
| Agents leave partial or failed work behind | You can inspect, discard, rebase, or promote attempts |
| The next agent repeats old investigation | Repo-local memory summarizes prior attempts and commits |
| Tooling should stay local | Metadata lives in .ait/ inside your repository |
ait is not another agent. It is the Git layer around the agents you
already trust.
What It Feels Like
Initialize once:
ait init
direnv allow # only if prompted
Then keep using your agent:
claude ...
codex ...
aider ...
gemini ...
cursor ...
After a successful wrapped run, inspect the attempt:
ait status
ait attempt show <attempt-id>
Promote only when you are ready:
ait attempt promote <attempt-id> --to main
Until promotion, your root checkout stays unchanged.
Core Features
| Feature | Description |
|---|---|
| Worktree isolation | Agent edits happen away from your root checkout |
| Attempt provenance | Commands, status, output, changed files, and commits stay linked |
| Agent wrappers | Repo-local claude, codex, aider, gemini, and cursor wrappers |
| Auto commit capture | Successful changes become attempt-linked commits, without duplicating existing commits |
| Local memory | Prior attempts, commits, notes, and imported agent memory feed future runs |
| Review flow | Promote, discard, rebase, inspect, and query attempts using normal Git concepts |
Quick Examples
Set explicit intent and commit text:
AIT_INTENT="Update README" \
AIT_COMMIT_MESSAGE="update README with Claude" \
claude -p --permission-mode bypassPermissions \
"Shorten the README and improve the quickstart"
Wrap a command directly:
ait run --adapter claude-code --intent "Refactor query parser" -- claude
ait run --adapter codex --intent "Implement parser edge cases" -- codex
ait run --adapter aider --intent "Fix auth expiry" -- aider src/auth.py
ait run --adapter shell --intent "Regenerate fixtures" -- \
python scripts/regenerate_fixtures.py
Use repo-local memory:
ait memory
ait memory search "auth adapter"
ait memory recall "billing retry"
Repair local setup if wrappers drift:
ait repair
ait repair codex
How It Works
your prompt
|
v
agent CLI wrapped by ait
|
v
isolated attempt worktree
|
v
attempt metadata + commits + memory
|
v
review, promote, discard, or rebase
The wrapped process receives:
AIT_INTENT_ID
AIT_ATTEMPT_ID
AIT_WORKSPACE_REF
AIT_CONTEXT_FILE # when context is enabled
AIT_CONTEXT_FILE contains a compact repo-local handoff selected from
previous attempts, commits, curated notes, and imported agent memory
files such as CLAUDE.md and AGENTS.md.
Install
Recommended:
pipx install ait-vcs
ait --version
Virtual environment:
python3.14 -m venv .venv
.venv/bin/pip install ait-vcs
.venv/bin/ait --help
npm wrapper:
npm install -g ait-vcs
ait --version
Tagged GitHub release:
pipx install "git+https://github.com/m24927605/ait.git@v0.55.28"
Upgrade:
ait upgrade
ait --version
Preview an upgrade:
ait upgrade --dry-run
Useful Commands
ait status
ait status --all
ait doctor
ait doctor --fix
ait adapter list
ait adapter doctor claude-code
ait adapter setup claude-code
ait attempt list
ait attempt show <attempt-id>
ait intent show <intent-id>
ait context <intent-id>
ait memory
ait memory search "auth adapter"
ait memory lint
ait memory lint --fix
ait graph
ait graph --html
Shell auto-activation:
ait shell show --shell zsh
ait shell install --shell zsh
ait shell uninstall --shell zsh
Requirements
- Python 3.14+
- Git
- SQLite from the Python standard library
- Node.js 18+ only when installing through npm
Status
ait is currently 0.55.28 and alpha quality. It is intended for local
dogfooding and early users who are comfortable with Git workflows.
Metadata is local to one repository under .ait/. It is not
synchronized across machines.
Development
Set up the repository:
python3.14 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/pip install pytest
Verify:
.venv/bin/pytest -q
.venv/bin/ait --version
.venv/bin/ait --help
Before a release:
git status --short
.venv/bin/pytest -q
The release version in pyproject.toml, the Git tag, and this README
should match.
Documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ait_vcs-0.55.28.tar.gz.
File metadata
- Download URL: ait_vcs-0.55.28.tar.gz
- Upload date:
- Size: 194.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e94a98adce4146aae0a63468c6380870b19e7939a48512a0cd7ceb69a57e7e9
|
|
| MD5 |
e9bd75cd512a0fb5d6717aab591612bb
|
|
| BLAKE2b-256 |
2fb367e59ffce4b6cf3d805cb53d7fdf4322353ee7ba23bab1436eab7d243778
|
Provenance
The following attestation bundles were made for ait_vcs-0.55.28.tar.gz:
Publisher:
publish.yml on m24927605/ait
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ait_vcs-0.55.28.tar.gz -
Subject digest:
7e94a98adce4146aae0a63468c6380870b19e7939a48512a0cd7ceb69a57e7e9 - Sigstore transparency entry: 1417663099
- Sigstore integration time:
-
Permalink:
m24927605/ait@1945cf30eed4d08bdd077d25a56117f8473c1cd3 -
Branch / Tag:
refs/tags/v0.55.28 - Owner: https://github.com/m24927605
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1945cf30eed4d08bdd077d25a56117f8473c1cd3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ait_vcs-0.55.28-py3-none-any.whl.
File metadata
- Download URL: ait_vcs-0.55.28-py3-none-any.whl
- Upload date:
- Size: 164.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82e7fc3b7316d835b352eac75260324356f2757e8457b5493bcb7955bd2eb810
|
|
| MD5 |
2a307303bc0e39c14f984d900ecd39d8
|
|
| BLAKE2b-256 |
01028fa69d3ec0ba00b2096cf08a7930bdc067ed710f82d68310dcec2fd74907
|
Provenance
The following attestation bundles were made for ait_vcs-0.55.28-py3-none-any.whl:
Publisher:
publish.yml on m24927605/ait
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ait_vcs-0.55.28-py3-none-any.whl -
Subject digest:
82e7fc3b7316d835b352eac75260324356f2757e8457b5493bcb7955bd2eb810 - Sigstore transparency entry: 1417663109
- Sigstore integration time:
-
Permalink:
m24927605/ait@1945cf30eed4d08bdd077d25a56117f8473c1cd3 -
Branch / Tag:
refs/tags/v0.55.28 - Owner: https://github.com/m24927605
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1945cf30eed4d08bdd077d25a56117f8473c1cd3 -
Trigger Event:
release
-
Statement type: