Smart Commit
> Adapted from PRPs-agentic-eng by Wirasm. Part of the PRP workflow series.
Input: $ARGUMENTS
Phase 1 — ASSESS
git status --short
If output is empty → stop: "Nothing to commit."
Show the user a summary of what's changed (added, modified, deleted, untracked).
Phase 2 — INTERPRET & STAGE
Interpret $ARGUMENTS to determine what to stage:
| Input | Interpretation | Git Command |
|---|---|---|
| *(blank / empty)* | Stage everything | git add -A |
| staged | Use whatever is already staged | *(no git add)* |
| *.ts or *.py etc. | Stage matching glob | git add '*.ts' |
| except tests | Stage all, then unstage tests | git add -A && git reset -- '/*.test.*' '/*.spec.*' '**/test_*' 2>/dev/null \|\| true |
| only new files | Stage untracked files only | git ls-files --others --exclude-standard \| grep . && git ls-files --others --exclude-standard \| xargs git add |
| the auth changes | Interpret from status/diff — find auth-related files | git add |
| Specific filenames | Stage those files | git add |
For natural language inputs (like "the auth changes"), cross-reference the git status output and git diff to identify relevant files. Show the user which files you're staging and why.
git add <determined files>
After staging, verify:
git diff --cached --stat
If nothing staged, stop: "No files matched your description."
Phase 3 — COMMIT
Craft a single-line commit message in imperative mood:
{type}: {description}
Types:
feat— New feature or capabilityfix— Bug fixrefactor— Code restructuring without behavior changedocs— Documentation changestest— Adding or updating testschore— Build, config, dependenciesperf— Performance improvementci— CI/CD changes
- Imperative mood ("add feature" not "added feature")
- Lowercase after the type prefix
- No period at the end
- Under 72 characters
- Describe WHAT changed, not HOW
git commit -m "{type}: {description}"
Phase 4 — OUTPUT
Report to user:
Committed: {hash_short}
Message: {type}: {description}
Files: {count} file(s) changedNext steps:
- git push → push to remote
- /prp-pr → create a pull request
- /code-review → review before pushing
Examples
| You say | What happens |
|---|---|
| /prp-commit | Stages all, auto-generates message |
| /prp-commit staged | Commits only what's already staged |
| /prp-commit *.ts | Stages all TypeScript files, commits |
| /prp-commit except tests | Stages everything except test files |
| /prp-commit the database migration | Finds DB migration files from status, stages them |
| /prp-commit only new files | Stages untracked files only |