JJ Commit Message Generator
Generate conventional commit messages for Jujutsu (jj) by analyzing diffs.
Instructions
When the user asks to create a commit message or commit changes:
- •
Run tests first:
- •Detect test framework from project (package.json, Cargo.toml, pyproject.toml, etc.)
- •Run appropriate test command:
- •npm/yarn:
npm testoryarn test - •Rust:
cargo test - •Python:
pytestorpython -m pytest - •Go:
go test ./...
- •npm/yarn:
- •If tests fail:
- •Show failures to user
- •Ask: "Tests failing. Fix before commit, skip tests, or commit anyway?"
- •Only proceed with commit if user explicitly chooses to skip/ignore
- •If no test command found, proceed without testing
- •
Gather context:
- •Run
jj diffto see current changes - •Run
jj log -r @to see the current change description - •If working with specific revisions, use
jj diff -r <revision>
- •Run
- •
Analyze changes:
- •Identify the type: feat, fix, refactor, docs, test, chore, style, perf
- •Determine scope if clear from file paths
- •Summarize the "why" (intent) not just "what" changed
- •
Generate message: Format:
<type>(<scope>): <subject>- •Subject: imperative mood, lowercase, no period, < 72 chars
- •Body (optional): explain why, not what
- •Favor precision over verbosity
Examples:
- •
feat(ui): add dark mode toggle - •
fix(auth): prevent token refresh loop - •
refactor(api): simplify error handling
- •
Handle immutable commits: If you get error:
Commit ... is immutable:- •Explain that the commit is immutable
- •Suggest running the command with
--ignore-immutableflag - •Ask user if they want to proceed with the flag
- •
Execute commit:
- •Use
jj describe -m "message"for current change - •Or
jj describe -r <revision> -m "message"for specific revision - •If immutable and user approves, add
--ignore-immutable
- •Use
Tool access
allowed-tools:
- •Bash
- •Read
- •Grep
Notes
- •Keep messages concise and clear
- •Focus on intent, not implementation details
- •Follow conventional commit format strictly