This file captures the design decisions behind these integrations so they are not accidentally reverted when revving or regenerating it. Read this before adding, removing, or regenerating skills.
The Copilot integration hub for Spec Kit. It can contain independently versioned Copilot CLI/App plugins, skills, extensions, canvases, hooks, and workflow surfaces. Do not assume every integration belongs in the core skills plugin.
A GitHub Copilot CLI plugin (plugin.json + skills/<name>/SKILL.md) that
exposes the Spec Kit specify CLI to the Copilot agent. Each skill documents a
specify command group and tells the agent when and how to shell out to
specify. The plugin does not dispatch prompts to another agent — Copilot itself
runs the CLI.
-
The integration is always Copilot in skills mode — do NOT expose
specify integration. This is the Copilot plugin, so the agent is already Copilot. Managing or switching integrations (claude, gemini, etc.) is meaningless here. There is intentionally nospeckit-integrationskill. Do not re-add it when regenerating the skill set.speckit-initalways scaffolds Copilot in skills mode:--integration copilot --integration-options="--skills". Skills mode makes spec-kit commands (and later-added extensions) install as Copilot Agent Skills (.github/skills/speckit-<cmd>/SKILL.md) instead of.agent.mdfiles, which is what Copilot CLI discovers asSKILL.md. Do not drop--integration-options="--skills".- Skills must not tell the user to pick or switch a different agent.
-
Expose the rest of the
specifysurface as skills, including nestedcatalogsubcommands andworkflow step:speckit-cli-setup→ detect/install thespecifyCLI (bootstrap; prerequisite for all others)speckit-init→specify init(Copilot only)speckit-check→specify check,specify versionspeckit-artifact→specify artifact …speckit-extension→specify extension …(+catalog)speckit-preset→specify preset …(+catalog)speckit-bundle→specify bundle …(+catalog)speckit-workflow→specify workflow …(+catalog)speckit-workflow-step→specify workflow step …(+catalog)speckit-self→specify self …
Every command-running skill carries a Prerequisite note that defers to
speckit-cli-setupwhenspecify --versionfails.speckit-cli-setupinstalls the latestspecify-clifrom PyPI viauv(preferred) orpipx;speckit-selfhandles upgrading an already-installed CLI. Keep this prerequisite wiring when adding new skills. -
Plugins are independently versioned and are not pinned to Specify CLI. The core
spec-kit-copilotplugin targets the latestspecifypublished on PyPI (packagespecify-cli), with a minimum floor of >= 0.11 for thebundle/workflow stepskills and >= 1.0.7 for theartifactskill and preset/extension JSON inventory — do not hard-pin an@vX.Y.Zinstall tag in the skills. The plugin's ownversioninplugin.jsonand.github/plugin/marketplace.jsonis an independent semver that tracks changes to the plugin/skills themselves, not the CLI release. Marketplace metadata and each plugin entry must match the component they describe; do not force unrelated plugins to share a version. When revving a plugin, update its manifest, marketplace entry, and README version note together. Note:specify initstamps whichever installed CLI version ran it into the generated project (.specify/init-options.json, integration manifests), so the CLI version is determined at init time, not by this plugin. -
Skills are guidance, not dispatch. SKILL.md frontmatter needs
name(matching the directory), a discovery-orienteddescription(USE FOR / DO NOT USE FOR), and anargument-hint. The body lists the exact subcommands, options, and notes so the agent runs the realspecifybinary correctly. -
Picking up newly generated skills. When a
specifycommand writes new/changedSKILL.mdfiles into the project's.github/skills/(extensions onadd, bundles oninstall, and presets only if they regenerate skills), Copilot loads them in the current session via the/skills reloadslash command — no restart needed — and automatically on the next session start. This is distinct from this plugin's own skills, which are refreshed withcopilot plugin install//plugin.
spec-kit-presets/ holds Copilot-specific Spec Kit presets — this repo is their
canonical, sole home. Guard the boundary so contributors never conflate the two
toolchains:
- Two different consumers. Copilot plumbing (
plugin.json,skills/,plugins/,.github/plugin/marketplace.json) is consumed by thecopilot pluginCLI/App. Presets are consumed by thespecifyCLI (specify preset add). They are not Copilot plugins, skills, canvases, or marketplace entries. - Isolate, don't scatter. All preset content — including its
catalog.json— lives insidespec-kit-presets/. Do not put a presetcatalog.jsonat the repo root, and do not mix it up with the Copilot marketplace manifest at.github/plugin/marketplace.json. Keep the boundary note inspec-kit-presets/README.md. - Naming convention:
copilot-<scope>[-<behavior>]. Preset ids (directory,preset.ymlid,catalog.jsonkey) carry a shortcopilot-prefix marking them Copilot-specific (e.g.copilot-sub-agents,copilot-assess-ask-questions), and display names lead with "Copilot" (e.g. "Copilot Sub-Agent Delegation"). Do not use the fullspec-kit-copilot-*plugin prefix for preset ids — that namespace is Copilot plugins (copilot plugin), and reusing it here would re-blur the plumbing boundary and bloatspecify preset add. - Promotion criterion: Copilot-specific only. A preset belongs here only if it
depends on Copilot's own agent mechanisms (e.g.
copilot-sub-agentsuses the VS CoderunSubagenttool / Copilot CLI sub-agents /.github/agents/;copilot-assess-ask-questionsrequires Copilot's interactiveask_usertool with no plain-text fallback). Agent-agnostic presets (generic themes, or workflows tied to an extension rather than to Copilot's tools) do not belong here. Do not import them. - Independent versioning & release. Each preset carries its own
versioninpreset.ymland a matchingcatalog.jsonentry, separate from plugin versions. Releases are cut by CI (.github/workflows/release-preset.yml), which zips the preset inline (no build script) on a pushed<preset>-v<version>tag; use the Release Preset Trigger workflow to create that tag from a preset id + version. When revving a preset, bumppreset.yml+ thecatalog.jsonentry together before tagging.
- Re-enumerate the
specifyCLI surface for the latest release (specify <group> --help, including nestedcatalog/stepgroups). - Add/adjust skills for new or changed command groups — but keep decision (1):
no integration-management skill, and
initstays Copilot + skills mode (--integration copilot --integration-options="--skills"). - Bump the core plugin's
versioninplugin.jsonand its marketplace entry together. Bump marketplace metadata when the catalog changes. Do not bumpspec-kit-copilot-assessunless that plugin changes. Update the README "Versioning" note. Keep thespeckit-cli-setupskill installing the latestspecify-clifrom PyPI (no@vX.Y.Zpin); only touch the>= 0.11and>= 1.0.7minimum notes if the floors actually change. - Reinstall and verify.
copilot plugin installtakes aplugin@marketplace,owner/repo,owner/repo:path, or git URL — it does not accept a local path. After the change is pushed and the marketplace catalog is refreshed (copilot plugin marketplace update spec-kit-marketplace), runcopilot plugin install spec-kit-copilot@spec-kit-marketplace(orcopilot plugin update) and confirmcopilot plugin listreports the new version with the expected skill count.