@petechu/pi-ai-commit
Generate Conventional Commit messages from staged changes for pi
Package details
Install @petechu/pi-ai-commit from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@petechu/pi-ai-commit- Package
@petechu/pi-ai-commit- Version
0.1.2- Published
- Jul 15, 2026
- Downloads
- 36/mo · 7/wk
- Author
- petechu
- License
- MIT
- Types
- extension
- Size
- 43.2 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
AI Commit
Generates a git commit message following the Conventional Commit style, asks you to confirm, edit, or regenerate it, then runs git commit -m "<message>". Trigger with /commit.
Install
pi install npm:@petechu/pi-ai-commit
/reload
Usage
Stage the changes you want to commit:
git add path/to/filesRun
/commitin Pi.Review the generated Conventional Commit subject.
Choose Commit to run
git commit -m, Edit to revise the generated message first, Regenerate to ask the model for a new message, or Cancel.
Skipped files
To avoid spending tokens on huge or noisy diffs, /commit skips known lockfiles and binary/oversized diffs. Skipped staged files are still listed in the prompt by path/status so the model can account for them without seeing the full diff.
Default skipped lock/noisy patterns include *-lock.json, package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lockb, Cargo.lock, Gemfile.lock, poetry.lock, and *.lock.
Design & workflow
The extension has three layers: staged-change collection, message generation, and review/commit.
Staged-change collection
When /commit is invoked, the extension waits for Pi to become idle, verifies that an interactive UI and model are available, and resolves the repository root with git rev-parse --show-toplevel. It only works from staged changes; it does not stage files or inspect unstaged work for you.
The extension reads aiCommit settings, then gathers staged metadata with git diff --cached --name-status -z and git diff --cached --numstat -z. For each staged file that is not binary and does not match a skip pattern, it reads the cached text diff with git diff --cached -- <path>.
Diff preparation keeps the prompt focused and bounded:
- Noisy files — files matching skip patterns are excluded from full diff context.
- Binary or empty diffs — binary files and files with no text diff are summarized only.
- Oversized diffs — files beyond
perFileDiffLimitare skipped; the combined included diff text is capped bytotalDiffLimitand may truncate the last included diff. - Skipped files — skipped staged files are still included by status/path/statistics and skip reason so the model can account for their presence.
If every staged file is skipped, /commit warns you but still generates a message from staged file summaries.
Message generation
The extension builds a single prompt containing a summary of all staged files, fenced diffs for included files, and a skipped-file section for anything summarized without a full diff. The default system prompt asks for one Conventional Commit subject line and forbids extra explanation or formatting.
Generation uses the first configured model that exists in Pi's model registry
and has working authentication. A valid thinking suffix is removed for registry
lookup and applied only to this commit-message request; /commit does not
change Pi's active model or thinking level. Unsuffixed model IDs remain
backward-compatible and run without a reasoning override. If no configured
generationModels preference is usable, the extension uses the currently
selected Pi model without a reasoning override. Model output is cleaned before
review: markdown fences, labels, bullets, quotes, trailing periods, and common
prompt-anchored wording are removed. If the model does not return a
Conventional Commit subject, the extension falls back to a chore: subject
based on the first cleaned line.
Review and commit
The generated message is shown in an interactive confirmation flow:
- Commit runs
git commit -m <message>from the repository root. - Edit opens the generated message in Pi's editor, then returns to the same review prompt with your edited text.
- Regenerate calls the model again with the same staged-change prompt.
- Cancel stops without running git.
The extension never commits without confirmation. If git commit fails, the git error is shown and no retry is attempted automatically.
Configuration
The extension reads aiCommit settings from Pi's global agent settings and project .pi/settings.json (project overrides global):
{
"aiCommit": {
"generationModels": [
{ "provider": "openai-codex", "id": "gpt-5.6-luna:low" },
{ "provider": "github-copilot", "id": "gpt-5.4-mini:off" }
],
"systemPrompt": "Custom Conventional Commit prompt...",
"skipPatterns": ["*-lock.json", "pnpm-lock.yaml", "generated/*"],
"perFileDiffLimit": 12000,
"totalDiffLimit": 40000
}
}
Append a thinking level to the model id after its final colon. Valid suffixes
are off, minimal, low, medium, high, and xhigh. For example,
gpt-5.6-luna:low looks up the base model gpt-5.6-luna and generates with low
reasoning. The off suffix explicitly selects the base model without passing a
reasoning level.
Unsuffixed model IDs continue to work as before and do not pass a reasoning
override. An unrecognized final suffix is treated as part of the full legacy
model ID. If no configured model can be resolved and authenticated, /commit
falls back to Pi's currently selected/default model without passing a reasoning
level.