workflows/PUBLISHING.md
This guide explains how to publish your workflow to the Spec Kit workflow catalog, making it discoverable by specify workflow search.
Before publishing a workflow, ensure you have:
workflow.yml that passes specify workflow run validationworkflow.version fieldHost your workflow in a repository with this structure:
your-workflow/
├── workflow.yml # Required: Workflow definition
├── README.md # Required: Documentation
├── LICENSE # Required: License file
└── CHANGELOG.md # Recommended: Version history
Verify your definition is valid:
schema_version: "1.0"
workflow:
id: "your-workflow" # Unique lowercase-hyphenated ID
name: "Your Workflow Name" # Human-readable name
version: "1.0.0" # Semantic version
author: "Your Name or Organization"
description: "Brief description (one sentence)"
integration: claude # Default integration (optional)
model: "claude-sonnet-4-20250514" # Default model (optional)
requires:
speckit_version: ">=0.6.1"
integrations:
any: ["claude", "gemini"] # At least one required
inputs:
spec:
type: string
required: true
prompt: "Describe what you want to build"
scope:
type: string
default: "full"
enum: ["full", "backend-only", "frontend-only"]
steps:
- id: specify
command: speckit.specify
input:
args: "{{ inputs.spec }}"
- id: review
type: gate
message: "Review the output."
options: [approve, reject]
on_reject: abort
Validation Checklist:
id is lowercase alphanumeric with hyphens (single-character IDs are allowed)version follows semantic versioning (X.Y.Z)description is concisecommand, prompt, shell, gate, if, switch, while, do-while, fan-out, fan-incondition for if, expression for switch)string, number, boolean: (reserved for engine-generated nested IDs like parentId:childId)# Run with required inputs
specify workflow run ./workflow.yml --input spec="Build a user authentication system with OAuth support"
# Check validation
specify workflow info ./workflow.yml
# Resume after a gate pause
specify workflow resume <run_id>
# Check run status
specify workflow status <run_id>
Create a GitHub release for your workflow version:
git tag v1.0.0
git push origin v1.0.0
The raw YAML URL will be:
https://raw.githubusercontent.com/your-org/spec-kit-workflow-your-workflow/v1.0.0/workflow.yml
specify workflow add your-workflow
# (once published to catalog)
Spec Kit uses a dual-catalog system:
catalog.json — Official, verified workflows (install allowed by default)catalog.community.json — Community-contributed workflows (discovery only by default)All community workflows should be submitted to catalog.community.json.
git clone https://github.com/YOUR-USERNAME/spec-kit.git
cd spec-kit
Edit workflows/catalog.community.json and add your workflow.
⚠️ Entries must be sorted alphabetically by workflow ID. Insert your workflow in the correct position within the
"workflows"object.
{
"schema_version": "1.0",
"updated_at": "2026-04-10T00:00:00Z",
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/workflows/catalog.community.json",
"workflows": {
"your-workflow": {
"id": "your-workflow",
"name": "Your Workflow Name",
"description": "Brief description of what your workflow automates",
"author": "Your Name",
"version": "1.0.0",
"url": "https://raw.githubusercontent.com/your-org/spec-kit-workflow-your-workflow/v1.0.0/workflow.yml",
"repository": "https://github.com/your-org/spec-kit-workflow-your-workflow",
"license": "MIT",
"requires": {
"speckit_version": ">=0.15.0"
},
"tags": [
"category",
"automation"
],
"created_at": "2026-04-10T00:00:00Z",
"updated_at": "2026-04-10T00:00:00Z"
}
}
}
git checkout -b add-your-workflow
git add workflows/catalog.community.json
git commit -m "Add your-workflow to community catalog
- Workflow ID: your-workflow
- Version: 1.0.0
- Author: Your Name
- Description: Brief description
"
git push origin add-your-workflow
Pull Request Checklist:
## Workflow Submission
**Workflow Name**: Your Workflow Name
**Workflow ID**: your-workflow
**Version**: 1.0.0
**Repository**: https://github.com/your-org/spec-kit-workflow-your-workflow
### Checklist
- [ ] Valid workflow.yml (passes `specify workflow info`)
- [ ] README.md with description, inputs, and step graph
- [ ] LICENSE file included
- [ ] GitHub release created with raw YAML URL
- [ ] Workflow tested end-to-end with `specify workflow run`
- [ ] All gate steps have clear review messages
- [ ] Input prompts are descriptive
- [ ] Added to workflows/catalog.community.json (alphabetical order)
After submission, maintainers will review:
workflow.yml, correct schemaOnce verified, the workflow appears in specify workflow search.
When releasing a new version:
version in workflow.ymlgit tag v1.1.0 && git push origin v1.1.0version and url in workflows/catalog.community.jsongate steps after each major output so users can review before proceedingprompt field is shown to users when running the workflowenum for validationnumber for counts, boolean for flags, string for namesintegration at workflow level — use the workflow.integration field as the defaultrequires.integrations{{ steps.plan.output.file }} only work if plan ran before the current stepdefault filter — {{ val | default('fallback') }} prevents failures from missing values