This page explains how to create custom preset packages for the Spec Kit preset system. A preset is a distributable package containing template files, command definitions, or script overrides that customize the behavior of a Spec Kit project. Presets enable organizations to standardize workflows, enforce compliance requirements, or adapt Spec-Driven Development to specific domains.
For information about installing and using presets, see 8.1 Using Presets. For details on how template resolution works, see 8.2 Template Resolution.
A preset package is a directory (or a ZIP archive) containing a preset.yml manifest and one or more artifact files. The directory structure follows this pattern:
Key constraints:
preset.yml is mandatory and must be in the root directory presets/PUBLISHING.md37templates/, commands/, scripts/) presets/PUBLISHING.md31-49speckit.{ext}.{cmd} pattern for extension overrides or speckit.{cmd} for core overrides presets/PUBLISHING.md93id must be lowercase with hyphens only presets/PUBLISHING.md87Sources: presets/PUBLISHING.md31-49 presets/PUBLISHING.md87-93
The preset.yml file uses YAML format and defines the metadata, requirements, and provided templates.
| Field | Type | Required | Description |
|---|---|---|---|
schema_version | string | Yes | Must be "1.0" presets/PUBLISHING.md58 |
preset.id | string | Yes | Unique lowercase-hyphenated ID presets/PUBLISHING.md61 |
preset.version | string | Yes | Semantic version string (X.Y.Z) presets/PUBLISHING.md63 |
requires.speckit_version | string | Yes | Minimum Spec Kit version required presets/PUBLISHING.md70 |
provides.templates | list | Yes | List of template/command objects presets/PUBLISHING.md72-79 |
Sources: presets/PUBLISHING.md57-83
Presets support overrides for templates, commands, and scripts. Unlike simple overrides, presets support composition strategies that determine how content is merged with lower-priority layers.
type: "template")These override the document scaffolds used to generate files like spec.md or plan.md.
spec-template) or extension templates presets/PUBLISHING.md74-78type: "command")These override the instructions (slash commands) given to AI agents.
.claude/commands/, .github/agents/) presets/PUBLISHING.md118-126Allows presets to provide alternative versions or wrappers for core workflow scripts found in .specify/scripts/ presets/PUBLISHING.md42
Sources: presets/PUBLISHING.md31-49 presets/PUBLISHING.md72-83 presets/PUBLISHING.md118-126
The following diagrams illustrate the relationship between the Natural Language concepts (Presets, Commands) and the code entities that implement them.
This diagram shows how the system resolves template content across different layers.
Sources: presets/PUBLISHING.md99-113 presets/catalog.community.json5-23
This diagram bridges the concept of "Installing a Command" to the actual file operations performed for AI agents.
Sources: presets/PUBLISHING.md115-126 presets/PUBLISHING.md144-149
When multiple presets provide the same template, the system uses a priority-based stack.
.specify/templates/overrides/.Sources: presets/PUBLISHING.md99-113
Create a new directory containing a preset.yml, a README.md, and a LICENSE presets/PUBLISHING.md33-49
Edit preset.yml. Ensure the id is unique and follows the lowercase-hyphenated convention presets/PUBLISHING.md61 Define the requires section to specify the minimum Spec Kit version presets/PUBLISHING.md69-70
templates/ and map them in the provides section presets/PUBLISHING.md72-79commands/. Use the speckit.{command}.md naming convention presets/PUBLISHING.md47-48Install the preset from your local directory to verify it works as expected:
Verify resolution:
Sources: presets/PUBLISHING.md96-113
To make a preset discoverable via specify preset search, it must be added to the community catalog.
preset.yml presets/PUBLISHING.md20specify preset add command presets/PUBLISHING.md22v1.0.0) presets/PUBLISHING.md128-136Submissions are processed via the Add Community Preset from Issue Submission workflow .github/workflows/add-community-preset.md46-50 This agent performs the following checks:
^[a-z][a-z0-9-]*$ and semver .github/workflows/add-community-preset.md94-100preset.yml and LICENSE .github/workflows/add-community-preset.md101-105Once validated, the agent automatically updates presets/catalog.community.json and docs/community/presets.md .github/workflows/add-community-preset.md183-210
Sources: presets/PUBLISHING.md1-216 .github/workflows/add-community-preset.md1-210 presets/catalog.community.json1-37
Refresh this wiki