Files
github-spec-kit/extensions/git
Manfred Riem 8fc2bd3489 fix: allow Claude to chain skills for hook execution (#2227)
* 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.
2026-04-15 14:35:05 -05:00
..

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 implementation
  • scripts/bash/git-common.sh — Shared Git utilities (Bash)
  • scripts/powershell/create-new-feature.ps1 — PowerShell implementation
  • scripts/powershell/git-common.ps1 — Shared Git utilities (PowerShell)