mirror of
https://github.com/github/spec-kit.git
synced 2026-07-03 12:28:06 +08:00
* fix: allow Claude to chain skills for hook execution (#2178) - Set disable-model-invocation to false so Claude can invoke extension skills (e.g. speckit-git-feature) from within workflow skills - Inject dot-to-hyphen normalization note into Claude SKILL.md hook sections so the model maps extension.yml command names to skill names - Replace Unicode checkmark with ASCII [OK] in auto-commit scripts to fix PowerShell encoding errors on Windows - Move Claude-specific frontmatter injection to ClaudeIntegration via post_process_skill_content() hook on SkillsIntegration, wired through presets and extensions managers - Add positive and negative tests for all changes Fixes #2178 * refactor: address PR review feedback - Preserve line-ending style (CRLF/LF) in _inject_hook_command_note instead of always inserting \n, matching the convention used by other injection helpers in the same module. - Extract duplicated _post_process_skill() from extensions.py and presets.py into a shared post_process_skill() function in agents.py. Both modules now import and call the shared helper. * fix: match full hook instruction line in regex The regex in _inject_hook_command_note only matched lines ending immediately after 'output the following', but the actual template lines continue with 'based on its `optional` flag:'. Use [^\r\n]* to capture the rest of the line before the EOL. * refactor: use integration object directly for post_process_skill_content Instead of a free function in agents.py that re-resolves the integration by key, callers in extensions.py and presets.py now resolve the integration once via get_integration() and call integration.post_process_skill_content() directly. The base identity method lives on SkillsIntegration.
Git Branching Workflow Extension
Git repository initialization, feature branch creation, numbering (sequential/timestamp), validation, remote detection, and auto-commit for Spec Kit.
Overview
This extension provides Git operations as an optional, self-contained module. It manages:
- Repository initialization with configurable commit messages
- Feature branch creation with sequential (
001-feature-name) or timestamp (20260319-143022-feature-name) numbering - Branch validation to ensure branches follow naming conventions
- Git remote detection for GitHub integration (e.g., issue creation)
- Auto-commit after core commands (configurable per-command with custom messages)
Commands
| Command | Description |
|---|---|
speckit.git.initialize |
Initialize a Git repository with a configurable commit message |
speckit.git.feature |
Create a feature branch with sequential or timestamp numbering |
speckit.git.validate |
Validate current branch follows feature branch naming conventions |
speckit.git.remote |
Detect Git remote URL for GitHub integration |
speckit.git.commit |
Auto-commit changes (configurable per-command enable/disable and messages) |
Hooks
| Event | Command | Optional | Description |
|---|---|---|---|
before_constitution |
speckit.git.initialize |
No | Init git repo before constitution |
before_specify |
speckit.git.feature |
No | Create feature branch before specification |
before_clarify |
speckit.git.commit |
Yes | Commit outstanding changes before clarification |
before_plan |
speckit.git.commit |
Yes | Commit outstanding changes before planning |
before_tasks |
speckit.git.commit |
Yes | Commit outstanding changes before task generation |
before_implement |
speckit.git.commit |
Yes | Commit outstanding changes before implementation |
before_checklist |
speckit.git.commit |
Yes | Commit outstanding changes before checklist |
before_analyze |
speckit.git.commit |
Yes | Commit outstanding changes before analysis |
before_taskstoissues |
speckit.git.commit |
Yes | Commit outstanding changes before issue sync |
after_constitution |
speckit.git.commit |
Yes | Auto-commit after constitution update |
after_specify |
speckit.git.commit |
Yes | Auto-commit after specification |
after_clarify |
speckit.git.commit |
Yes | Auto-commit after clarification |
after_plan |
speckit.git.commit |
Yes | Auto-commit after planning |
after_tasks |
speckit.git.commit |
Yes | Auto-commit after task generation |
after_implement |
speckit.git.commit |
Yes | Auto-commit after implementation |
after_checklist |
speckit.git.commit |
Yes | Auto-commit after checklist |
after_analyze |
speckit.git.commit |
Yes | Auto-commit after analysis |
after_taskstoissues |
speckit.git.commit |
Yes | Auto-commit after issue sync |
Configuration
Configuration is stored in .specify/extensions/git/git-config.yml:
# Branch numbering strategy: "sequential" or "timestamp"
branch_numbering: sequential
# Custom commit message for git init
init_commit_message: "[Spec Kit] Initial commit"
# Auto-commit per command (all disabled by default)
# Example: enable auto-commit after specify
auto_commit:
default: false
after_specify:
enabled: true
message: "[Spec Kit] Add specification"
Installation
# Install the bundled git extension (no network required)
specify extension add git
Disabling
# Disable the git extension (spec creation continues without branching)
specify extension disable git
# Re-enable it
specify extension enable git
Graceful Degradation
When Git is not installed or the directory is not a Git repository:
- Spec directories are still created under
specs/ - Branch creation is skipped with a warning
- Branch validation is skipped with a warning
- Remote detection returns empty results
Scripts
The extension bundles cross-platform scripts:
scripts/bash/create-new-feature.sh— Bash implementationscripts/bash/git-common.sh— Shared Git utilities (Bash)scripts/powershell/create-new-feature.ps1— PowerShell implementationscripts/powershell/git-common.ps1— Shared Git utilities (PowerShell)