Overview
Extensions enable you to:- Integrate with external tools (Jira, Linear, GitHub, etc.)
- Automate repetitive tasks with hooks
- Customize workflows for your team
- Share solutions across projects
Extension Catalogs
Spec Kit uses a dual-catalog system to give organizations full control over available extensions:Your Catalog (catalog.json)
- Purpose: Default upstream catalog used by the Specify CLI
- Default State: Empty by design - you or your organization populate it with trusted extensions
- Location:
extensions/catalog.jsonin the GitHub-hosted spec-kit repo - Customization: Copy entries from the community catalog or add your own extensions
Community Reference Catalog (catalog.community.json)
- Purpose: Browse available community-contributed extensions
- Status: Active - contains extensions submitted by the community
- Location:
extensions/catalog.community.json - Usage: Reference catalog for discovering extensions
- Submission: Open to community contributions via Pull Request
Finding Extensions
Get Extension Details
- Description and requirements
- Commands provided
- Hooks available
- Documentation links
- Installation status
Installing Extensions
From Catalog
- Download the extension from GitHub
- Validate the manifest
- Check compatibility with your spec-kit version
- Install to
.specify/extensions/jira/ - Register commands with your AI agent
- Create config template
From URL
From Local Directory
Installation Output Example
Installation Output Example
Using Extensions
Extension Commands
Extensions add commands to your AI agent:Extension Configuration
Most extensions require configuration:Configuration Layers
Configuration Layers
Configuration is merged in this order (highest priority last):Final resolved config uses
- Extension defaults (from
extension.yml) - Project config (
jira-config.yml) - Local overrides (
jira-config.local.yml- gitignored) - Environment variables (
SPECKIT_JIRA_*)
Project config (.specify/extensions/jira/jira-config.yml)
Local override (.specify/extensions/jira/jira-config.local.yml)
Environment variable
DEVTEST from environment variable.Extension Hooks
Some extensions provide hooks that execute after core commands:Managing Extensions
List Installed
Example Output
Example Output
Update Extensions
Disable/Enable
Remove Extension
Organization Catalog Customization
Organizations customize theircatalog.json to:
- Control available extensions - Curate which extensions your team can install
- Host private extensions - Internal tools that shouldn’t be public
- Customize for compliance - Meet security/audit requirements
- Support air-gapped environments - Work without internet access
Setting Up a Custom Catalog
1. Create Your Catalog File
1. Create Your Catalog File
Create a
catalog.json file with your extensions:2. Host the Catalog
2. Host the Catalog
Options for hosting:
| Method | URL Example | Use Case |
|---|---|---|
| GitHub Pages | https://your-org.github.io/spec-kit-catalog/catalog.json | Public or org-visible |
| Internal web server | https://internal.company.com/spec-kit/catalog.json | Corporate network |
| S3/Cloud storage | https://s3.amazonaws.com/your-bucket/catalog.json | Cloud-hosted teams |
| Local file server | http://localhost:8000/catalog.json | Development/testing |
3. Configure Your Environment
3. Configure Your Environment
Option A: Environment variable (recommended for CI/CD)Option B: Per-project configuration
4. Verify Configuration
4. Verify Configuration
Available Community Extensions
The following extensions are available incatalog.community.json:
| Extension | Purpose |
|---|---|
| V-Model Extension Pack | Enforces V-Model paired generation of development specs and test specs with full traceability |
| Cleanup Extension | Post-implementation quality gate that reviews changes, fixes small issues (scout rule), creates tasks for medium issues |
Creating Extensions
See the Extension Development Guide for detailed instructions on creating your own extensions.Quick Start
Test Locally
Best Practices
Version Control
Do commit:.specify/extensions.yml(project extension config).specify/extensions/*/jira-config.yml(project config)
.specify/extensions/.cache/(catalog cache).specify/extensions/.backup/(config backups).specify/extensions/*/*.local.yml(local overrides).specify/extensions/.registry(installation state)
Team Workflows
For teams:- Agree on which extensions to use
- Commit extension configuration
- Document extension usage in README
- Keep extensions updated together
Environment-Specific Config
Use environment variables for CI/CD:.github/workflows/deploy.yml
Security
- Never commit secrets: Use environment variables
- Validate input: Sanitize user arguments
- Document permissions: What files/APIs are accessed
- Review extensions: Always review extension code before installing
Troubleshooting
Extension Not Found
Extension Not Found
Error:
Extension 'jira' not found in catalogSolutions:- Check spelling:
specify extension search jira - Verify catalog URL is set correctly
- Check internet connection
- Extension may not be in your catalog yet
Configuration Not Found
Configuration Not Found
Error:
Jira configuration not foundSolutions:- Check if extension is installed:
specify extension list - Create config from template:
- Reinstall extension:
specify extension remove jira && specify extension add jira
Command Not Available
Command Not Available
Issue: Extension command not appearing in AI agentSolutions:
- Check extension is enabled:
specify extension list - Restart AI agent (Claude Code, opencode, etc.)
- Check command file exists:
- Reinstall extension
Incompatible Version
Incompatible Version
Error:
Extension requires spec-kit >=0.2.0, but you have 0.1.0Solutions:- Upgrade spec-kit:
- Install older version of extension:
Environment Variables
| Variable | Description | Default |
|---|---|---|
SPECKIT_CATALOG_URL | Override extension catalog URL | GitHub-hosted catalog |
GH_TOKEN / GITHUB_TOKEN | GitHub API token for downloads | None |
SPECKIT_{EXTENSION}_* | Extension-specific configuration | Extension defaults |