Analyzes git changes, groups them by logical change or OpenSpec feature, and creates conventional commits for each group.
91
Quality
89%
Does it follow best practices?
Impact
94%
1.02xAverage score across 5 eval scenarios
Analyze the current git diff, group files into logical changes, then produce concise conventional-commit messages and commit each group separately.
Check for changes
git status --porcelainIf there are no changes, tell the user "Nothing to commit" and stop.
Analyze changed files before staging
Collect changed paths (modified, staged, untracked) and inspect them:
git status --porcelain
git diff --name-only
git diff --cached --name-onlyBuild file groups before staging anything.
Grouping priority (in order):
openspec/changes/<change-name>/ and related code/docs that clearly implement that same featurePrefer one commit per change group. If there is only one clear group, use one commit.
Important: If a single file contains unrelated edits for multiple groups and cannot be split cleanly at file-level, ask the user before proceeding (or keep it in one group and explain the tradeoff).
Draft a commit plan (group-by-group)
For each group:
Present the plan and ask for confirmation
Show:
Ask for confirmation before staging/committing.
Stage and commit each group individually
For each confirmed group, in order:
a. Stage only that group's files
git add -- <file1> <file2> ...b. Review the staged summary
git diff --cached --stat
git diff --cached --name-onlyc. Commit using the group's message
git commit -m "<message>"For multi-line messages, use multiple -m flags.
d. Continue to the next group (index should be clean after commit)
Confirm all commits
Show recent commits created in this run:
git log --oneline -<N>Confirm each planned group was committed.
Use this format for each group commit:
feat(<scope>): concise description of what changedRules:
connector, db, api, engine, frontend, docs, config, infra.openspec/changes/*/), use that feature name as the scope. For example: feat(mvp-full-sync): add Klaviyo connector.feat for new features, fix for bug fixes, refactor for restructuring, docs for documentation, chore for config/build changes.Examples:
Single-line:
feat(connector): add Klaviyo connector with cursor paginationMulti-line (when spanning multiple areas):
feat(connector): add Klaviyo connector with cursor pagination
feat(api): expose embedded PG URL via /api/config endpoint
fix(db): clean up stale postmaster.pid on startup
chore(docs): add project READMEInstall with Tessl CLI
npx tessl i spec-driven-magic/sdx-commit