Git workflow automation for AXM agents
Project description
axm-git — Deterministic Git workflows for AI agents
Features
- 🔍 Preflight — Structured working tree status with diff summary
- 🌿 Branch — Create or checkout branches with one call
- 📦 Commit — Batched atomic commits with auto-retry on pre-commit fixes and optional author identity injection
- 🏷️ Tag — One-shot semver tagging from Conventional Commits
- 🚀 Push — Push with dirty-check, auto-upstream detection, and force support
- 🌲 Worktree — Add, remove, or list git worktrees
- 🔀 PR — Create GitHub pull requests with optional auto-merge
- 🧭 Error Recovery — When called on a non-git directory, tools suggest nearby git repos
- 🪝 Hooks — Lifecycle hook actions (preflight, create-branch, branch-delete, commit-phase, merge-squash, worktree-add, worktree-remove, push, create-pr, await-merge, pull-main) with
enabledguard, auto-discovered via entry-points - 🪪 Identity — Resolve git author from
git-profiles.tomlwith schedule-based or explicit profile selection - 🔎 Phase Lookup —
get_phase_commit()retrieves commit hashes for protocol phases
Installation
uv add axm-git
Quick Start
# Check what changed
git_preflight(path="/path/to/repo")
# → {files: [{path: "foo.py", status: "M"}, ...], clean: false}
# Create or switch branch
git_branch(name="feat/new-feature", path="/path/to/repo")
# → {branch: "feat/new-feature"}
# Commit in batches
git_commit(path="/path/to/repo", commits=[
{"files": ["src/foo.py"], "message": "feat: add foo"},
{"files": ["tests/test_foo.py"], "message": "test: add foo tests"},
])
# → {results: [{sha: "abc1234", precommit_passed: true}, ...]}
# Tag a release
git_tag(path="/path/to/repo")
# → {tag: "v0.2.0", bump: "minor", pushed: true}
# Push to remote
git_push(path="/path/to/repo")
# → {branch: "main", remote: "origin", pushed: true}
MCP Tools
git_preflight
Report working tree changes so the agent can plan commits.
| Parameter | Default | Description |
|---|---|---|
path |
. |
Project root directory |
diff_lines |
200 |
Max diff lines to include (0 to disable) |
Returns: file list with status (M, A, D, ??), diff stat, clean flag.
git_branch
Create or checkout a git branch.
| Parameter | Default | Description |
|---|---|---|
name |
required | Branch name |
from_ref |
None |
Ref to branch from (tag, commit, branch) |
checkout_only |
False |
If True, checkout existing branch without creating |
path |
. |
Project root directory |
Returns: {branch: "<current branch>"} on success.
git_commit
Execute one or more atomic commits with pre-commit hook handling.
| Parameter | Default | Description |
|---|---|---|
path |
. |
Project root directory |
commits |
required | List of commit specs (see below) |
profile |
None |
Identity profile name — overrides schedule-based resolution from git-profiles.toml |
Each commit spec:
| Field | Required | Description |
|---|---|---|
files |
✅ | Files to stage |
message |
✅ | Commit summary (Conventional Commits) |
body |
Extended commit body |
When a pre-commit hook auto-fixes files (e.g. ruff --fix), the tool re-stages and retries once automatically.
Identity is resolved once per call (not per commit). When resolved, each commit includes --author="Name <email>". The result includes an author key ({name, email} or null).
git_tag
Compute the next semver version from Conventional Commits, create and push the tag.
| Parameter | Default | Description |
|---|---|---|
path |
. |
Project root directory |
version |
auto | Override the computed version (e.g. "v1.0.0") |
Pipeline: clean tree check → CI status check → semver bump → annotate tag → hatch-vcs verify → push.
git_push
Push the current branch to a remote after verifying a clean working tree.
| Parameter | Default | Description |
|---|---|---|
path |
. |
Project root directory |
remote |
origin |
Remote name |
set_upstream |
True |
Auto-set upstream for new branches |
force |
False |
Force-push |
Pipeline: repo check → dirty check → detect branch → detect upstream → push.
git_worktree
Add, remove, or list git worktrees.
| Parameter | Default | Description |
|---|---|---|
path |
. |
Project root directory |
action |
required | add, remove, or list |
worktree_path |
None |
Path for the new or existing worktree |
branch |
None |
Branch name for add |
git_pr
Create a GitHub pull request with optional auto-merge.
| Parameter | Default | Description |
|---|---|---|
path |
. |
Project root directory |
title |
required | Pull request title |
body |
None |
Pull request description |
base |
None |
Base branch (defaults to repo default) |
auto_merge |
False |
Enable auto-merge when checks pass |
Development
This package is part of the axm-forge workspace.
git clone https://github.com/axm-protocols/axm-forge.git
cd axm-forge
uv sync --all-groups
uv run --package axm-git --directory packages/axm-git pytest -x -q
License
Apache-2.0 — © 2026 axm-protocols
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 axm_git-0.3.0.tar.gz.
File metadata
- Download URL: axm_git-0.3.0.tar.gz
- Upload date:
- Size: 72.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23810359e138f6423418e3746f94fa2a068b5f445ac1645c51fdf624c19139f0
|
|
| MD5 |
6b020290d5ad4f55ee2a383ef3f28148
|
|
| BLAKE2b-256 |
10c7ddecb5689fd8b62c88511113fd0ceec045802b2f06782833e7a97c375ed5
|
Provenance
The following attestation bundles were made for axm_git-0.3.0.tar.gz:
Publisher:
publish.yml on axm-protocols/axm-forge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axm_git-0.3.0.tar.gz -
Subject digest:
23810359e138f6423418e3746f94fa2a068b5f445ac1645c51fdf624c19139f0 - Sigstore transparency entry: 1280063946
- Sigstore integration time:
-
Permalink:
axm-protocols/axm-forge@b8995097940cb2423b9cad88e3a4a22dbd3be6b3 -
Branch / Tag:
refs/tags/git/v0.3.0 - Owner: https://github.com/axm-protocols
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b8995097940cb2423b9cad88e3a4a22dbd3be6b3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file axm_git-0.3.0-py3-none-any.whl.
File metadata
- Download URL: axm_git-0.3.0-py3-none-any.whl
- Upload date:
- Size: 45.3 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 |
6ecd28df4343aa41a499d6675cd4f76a1f94cc4064ae11ea45ee5b898760df27
|
|
| MD5 |
cd7370e176ecb4ccc96ae1d5def3918d
|
|
| BLAKE2b-256 |
0ab636759269466df73a0028b6bbf6d8a48319ba513cb162a7af53d449177a6b
|
Provenance
The following attestation bundles were made for axm_git-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on axm-protocols/axm-forge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axm_git-0.3.0-py3-none-any.whl -
Subject digest:
6ecd28df4343aa41a499d6675cd4f76a1f94cc4064ae11ea45ee5b898760df27 - Sigstore transparency entry: 1280063952
- Sigstore integration time:
-
Permalink:
axm-protocols/axm-forge@b8995097940cb2423b9cad88e3a4a22dbd3be6b3 -
Branch / Tag:
refs/tags/git/v0.3.0 - Owner: https://github.com/axm-protocols
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b8995097940cb2423b9cad88e3a4a22dbd3be6b3 -
Trigger Event:
push
-
Statement type: