imp

@katforge/imp is KATFORGE's git and fleet workflow tool. All git goes through it: AI-split commits, changelog generation, releases, and fleet-wide shipping across every repo in the KATFORGE root.

Use a conversational agent for open-ended work. Use @katforge/imp for the repeated git ritual where input, output, validation, and rollback behavior should stay the same across repositories.

See it work

Turn one mixed working tree into focused, reviewable commits without manually sorting every file first. The recording is generated from @katforge/imp's deterministic VHS tape; click it for the full-size terminal.

imp split — turn a dirty tree into reviewable commits

Explore the common workflows →

Install

shell
pip install imp-git
imp config
imp doctor

Try it without installing with uvx --from imp-git imp doctor or pipx run --spec imp-git imp doctor. Python 3.10+ and Git are required. The GitHub CLI is required for GitHub-backed operations such as pull requests.

Daily flow

shell
imp commit                # AI-split staged changes into logical commits
imp push                  # push with upstream handling
imp release               # squash + changelog + tag + push (interactive)
imp ship                  # commit + release in one shot, no prompts
imp fleet                 # run ship on every dirty repo under the current directory

imp release --rc publishes a GitHub pre-release (deploy CI targets qa); --stable publishes a full release (prod). imp ship --version 2.0.0 re-baselines a major line a level bump can't reach.

Versioning

The git tag is the canonical version. Manifests (package.json, composer.json, pyproject.toml, cli/pyproject.toml) carry downstream copies, and every release — stable or rc — rewrites them to match the tag before tagging, so the two can never drift. Repos with a dynamic pyproject version (hatch-vcs) are left alone; they already derive from the tag.

shell
imp version               # show each manifest's version against the tag (exit 1 on drift)
imp version --sync        # rewrite drifted manifests to match the tag

--sync leaves the changes uncommitted; land them with imp commit or the next release. The plain form exits non-zero on drift, so it can gate CI. Fleet-wide drift is visible in hearth versions.