imp

AI for the parts of git you skip.

A CLI that writes commit messages, splits dirty trees into logical commits, rewrites past history, generates changelogs, opens pull requests, and resolves merge conflicts.

$ pip install imp-git
GitHub PyPI
PyPI Python MIT

See it work

Splitting a dirty tree

imp tidy
git
$ git status
 M src/auth.py
 M src/api.py
 M tests/test_auth.py
 M README.md
?? src/rate_limit.py
imp split
$ git log --oneline
a1b2c3d feat(auth): add rate limiting
e4f5g6h test(auth): cover edge cases
i7j8k9l docs: document auth flags

Cutting a release

git
$ # bump every manifest by hand
$ vim package.json Cargo.toml pyproject.toml
$ # write a changelog entry
$ vim CHANGELOG.md
$ git add -A
$ git commit -m "release v0.1.0"
$ git tag v0.1.0
$ git push && git push --tags
$ # if anything failed, clean up by hand
imp
$ imp release --minor
 Bump: 0.0.53  0.1.0
 Synced 3 manifests, wrote changelog
 Tagged v0.1.0, pushed
# rollback on any failure is automatic

Resolving a merge conflict

git
<<<<<<< HEAD
rate_limit = RateLimiter(per_ip=10, window=60)
=======
rate_limit = RateLimiter(per_user=20, window=300)
>>>>>>> feat/per-user-limits

# read both branches, decide, hand-merge, repeat per file
imp
$ imp resolve
 src/auth.py: combine per-IP and per-user limits
  Apply? [Yes / Edit / No]
 Done. 1 file resolved.

What it does

imp commit
Generate a Conventional Commit message from your staged diff. Review, edit, or accept.
imp split
Group a dirty working tree into multiple logical commits. One command, several clean commits.
imp tidy
Rewrite past commits: reword, squash, or drop. AI reads the history and proposes a plan.
imp pr
Open a pull request with an AI-generated title and body derived from the branch diff.
imp release
Squash, write a changelog entry, sync package manifests, tag a semver release, and push. Rolls back on failure.
imp resolve
Walk through merge conflicts file-by-file. AI suggests a resolution; you accept, edit, or override.
imp fleet
Scan a directory for git repos and ship every dirty one. Per-repo prompts for bump and release type, or pass flags to apply to all.

More examples

Commit

imp commit
$ imp commit -a
 feat: add rate limiting to API endpoints
  Use this message? [Yes / Edit / No]

Pull request

imp pr
$ imp pr
 Title: feat: rate limit auth endpoints
 Body:  ## Summary
         Adds per-IP rate limiting to /login and /register...
  Create PR? [Yes / Edit / No]

Release

imp release
$ imp release
 Bump: patch / minor / major
 Squashes commits, writes CHANGELOG.md, syncs package manifests, tags v0.0.1, pushes.

Package manifests

At release time imp scans for package files (package.json, Cargo.toml, pyproject.toml, composer.json, pubspec.yaml, *.gemspec, mix.exs, build.gradle, pom.xml, Chart.yaml, manifest.json) and asks the AI which ones belong to this project. Vendored copies, fixtures, and dynamic-versioned manifests are skipped. Picked manifests are rewritten and staged into the release commit; rollback restores them on failure. Pass --no-manifests to disable.

Pre-release versions are translated to each ecosystem's native format. v0.0.52-rc.1 becomes:

Ecosystem Version
npm, cargo, helm, pub, hex, gradle0.0.52-rc.1
python (PEP 440)0.0.52rc1
composer, maven0.0.52-RC1
rubygems0.0.52.rc1
browser-ext manifest.json (no pre-release support)0.0.52

imp release --rc commits the manifest bump alongside the tag so the published artifact's version matches. imp changelog --apply only labels existing commits with retroactive tags, so it leaves manifests alone.

How imp compares

imp aicommits OpenCommit commitizen
Commit message from diffyesyesyesprompts you
Conventional Commitsenforcedoptionaloptionalenforced
Split dirty tree into commitsyes
Rewrite past historyyes (tidy)
AI changelogyestemplate
AI PR title + bodyyes
AI merge conflict resolutionyes
Local models (Ollama)yespartialyesn/a
Claude CLIyesn/a
Runtime deps3many (Node)many (Node)many (Python)

aicommits and OpenCommit cover the commit-message step. imp covers the whole loop: dirty tree → clean commits → PR → release → changelog.

imp vs Claude Code

Claude Code can write commit messages too. They are different shapes for different jobs.

imp Claude Code
Interactionone-shot commandconversational session
Latencysub-second to a few secondsmulti-turn
Scriptable in hooks, aliases, CIyes
Conventional Commitsenforcedwhatever you ask for that day
Semver from commit historycomputedmanual
Manifest sync + atomic rollbackbuilt in
Multi-repo (imp fleet)yessingle session
Local / offline / privateyes (Ollama)
Costfree with Ollamasubscription / API

Use Claude Code for open-ended work where you need a thinking partner. Reach for imp for the same git ritual you do twenty times a day, where you want a verb, not a chat.

They compose: imp can use the Claude CLI as its provider, so the prompts run inside your existing Claude subscription.

Install

pip install imp-git
# or try without installing:
uvx --from imp-git imp doctor
pipx run --spec imp-git imp doctor

Configure your AI provider:

imp config
imp doctor

Works with the Claude CLI or local Ollama models. No API key required for Ollama.

Commands

Hover any token to see what it does. Type to filter.

subcommand required optional hover or focus a token →
No commands match.

Any AI command accepts -w / --whisper to steer the AI without overriding its rules:

imp commit -a -w "use IMP-42 as ticket"
imp review -w "focus on error handling"

Configuration

imp config writes ~/.config/imp/config.json (or $XDG_CONFIG_HOME/imp/config.json).

{
   "provider": "claude",
   "model:fast": "haiku",
   "model:smart": "sonnet"
}
provider
AI backend to use.
claude, ollama
model:fast
Short prompts: commit messages, dates.
Any model the provider knows
model:smart
Reasoning: split, tidy, resolve, review.
Any model the provider knows

Each key has a matching env var (IMP_AI_PROVIDER, IMP_AI_MODEL_FAST, IMP_AI_MODEL_SMART) that takes precedence over the file.

Requirements