This guide covers adding integrations to both the built-in and community catalogs.
Built-in integrations are maintained by the Spec Kit core team and ship with the CLI.
- Create the integration subpackage under
src/specify_cli/integrations/<name>/ - Implement the integration class extending
MarkdownIntegration,TomlIntegration, orSkillsIntegration - Register the integration in
src/specify_cli/integrations/__init__.py - Add tests under
tests/integrations/test_integration_<name>.py - Add a catalog entry in
integrations/catalog.json - Update documentation in
AGENTS.mdandREADME.md
Add your integration to integrations/catalog.json:
{
"my-agent": {
"id": "my-agent",
"name": "My Agent",
"version": "1.0.0",
"description": "Integration for My Agent",
"author": "spec-kit-core",
"repository": "https://github.com/github/spec-kit",
"tags": ["cli"]
}
}Community integrations are contributed by external developers and listed in integrations/catalog.community.json for discovery.
- Working integration — tested with
specify integration install - Public repository — hosted on GitHub or similar
integration.ymldescriptor — valid descriptor file (see below)- Documentation — README with usage instructions
- License — open source license file
Every community integration must include an integration.yml:
schema_version: "1.0"
integration:
id: "my-agent"
name: "My Agent"
version: "1.0.0"
description: "Integration for My Agent"
author: "your-name"
repository: "https://github.com/your-name/speckit-my-agent"
license: "MIT"
requires:
speckit_version: ">=0.6.0"
tools:
- name: "my-agent"
version: ">=1.0.0"
required: true
provides:
commands:
- name: "speckit.specify"
file: "templates/speckit.specify.md"
scripts:
- update-context.sh| Field | Rule |
|---|---|
schema_version |
Must be "1.0" |
integration.id |
Lowercase alphanumeric + hyphens (^[a-z0-9-]+$) |
integration.version |
Valid semantic version |
requires.speckit_version |
PEP 440 version specifier |
provides |
Must include at least one command or script |
provides.commands[].name |
String identifier |
provides.commands[].file |
Relative path to template file |
- Fork the spec-kit repository
- Add your entry to
integrations/catalog.community.json:
{
"my-agent": {
"id": "my-agent",
"name": "My Agent",
"version": "1.0.0",
"description": "Integration for My Agent",
"author": "your-name",
"repository": "https://github.com/your-name/speckit-my-agent",
"tags": ["cli"]
}
}- Open a pull request with:
- Your catalog entry
- Link to your integration repository
- Confirmation that
integration.ymlis valid
To update your integration version in the catalog:
- Release a new version of your integration
- Open a PR updating the
versionfield incatalog.community.json - Ensure backward compatibility or document breaking changes
The specify integration upgrade command supports diff-aware upgrades:
- Hash comparison — the manifest records SHA-256 hashes of all installed files
- Modified file detection — files changed since installation are flagged
- Safe default — the upgrade blocks if any installed files were modified since installation
- Forced reinstall — passing
--forceoverwrites modified files with the latest version
# Upgrade current integration (blocks if files are modified)
specify integration upgrade
# Force upgrade (overwrites modified files)
specify integration upgrade --force