| name | speckit-git-commit |
| description | Commit reviewed Spec Kit paths after a command completes; refuses blanket staging |
| compatibility | Requires spec-kit project structure with .specify/ directory |
| metadata | {"author":"github-spec-kit","source":"git:commands/speckit.git.commit.md"} |
Auto-Commit Changes
Commit only an explicitly reviewed Spec Kit path set after a command completes.
Behavior
This command is invoked as a hook after (or before) core commands. It:
- Determines the event name from the hook context (e.g., if invoked as an
after_specify hook, the event is after_specify; if before_plan, the event is before_plan)
- Checks
.specify/extensions/git/git-config.yml for the auto_commit section
- Looks up the specific event key to see if auto-commit is enabled
- Falls back to
auto_commit.default if no event-specific key exists
- Uses the per-command
message if configured, otherwise a default message
- Requires one or more reviewed pathspecs and runs
git add -- <paths> followed
by git commit. It refuses to run without pathspecs; git add . and
git add -A are prohibited.
Execution
Determine the event name from the hook that triggered this command, then run the script:
- Bash:
.specify/extensions/git/scripts/bash/auto-commit.sh <event_name> <reviewed-path>...
- PowerShell:
.specify/extensions/git/scripts/powershell/auto-commit.ps1 <event_name> <reviewed-path>...
Replace <event_name> with the actual hook event (e.g., after_specify, before_plan, after_implement).
Derive the path list from the reviewed diff. Do not include unrelated dirty-tree
changes. Auto-commit remains disabled by default.
Configuration
In .specify/extensions/git/git-config.yml:
auto_commit:
default: false
after_specify:
enabled: true
message: "[Spec Kit] Add specification"
after_plan:
enabled: false
message: "[Spec Kit] Add implementation plan"
Graceful Degradation
- If Git is not available or the current directory is not a repository: skips with a warning
- If no config file exists: skips (disabled by default)
- If no changes to commit: skips with a message
- If no reviewed pathspec is supplied: refuses with an actionable warning