Bug Description
Running specify integration use copilot against a Copilot integration that was installed with --integration-options "--skills" removes "ai_skills": true from .specify/init-options.json.
Steps to Reproduce
# 1. Install Copilot in skills mode
$ specify init proj --integration copilot --integration-options "--skills" --script sh --ignore-agent-tools
$ cd proj
$ cat .specify/init-options.json
{
"ai": "copilot",
"ai_skills": true,
"feature_numbering": "sequential",
"here": false,
"integration": "copilot",
"script": "sh",
"speckit_version": "0.12.16"
}
$ find .github -type f | sort
.github/skills/speckit-analyze/SKILL.md
.github/skills/speckit-checklist/SKILL.md
...
(10 files total, all SKILL.md under .github/skills/)
# 2. Add an extension as an example — it is installed as skills
$ specify extension add git
$ find .github -type f | sort
.github/skills/speckit-analyze/SKILL.md
...
.github/skills/speckit-git-commit/SKILL.md
.github/skills/speckit-git-feature/SKILL.md
...
(15 files total — the git extension commands were also added as skills)
# 3. Just re-select the same copilot as the default integration
$ specify integration use copilot
✓ Default integration set to copilot.
$ cat .specify/init-options.json
{
"ai": "copilot",
"feature_numbering": "sequential",
"here": false,
"integration": "copilot",
"script": "sh",
"speckit_version": "0.12.16"
}
$ find .github -type f | sort
.github/agents/speckit.git.commit.agent.md
.github/agents/speckit.git.feature.agent.md
...
.github/prompts/speckit.git.commit.prompt.md
.github/prompts/speckit.git.feature.prompt.md
...
.github/skills/speckit-analyze/SKILL.md
.github/skills/speckit-checklist/SKILL.md
...
(the 5 git extension commands were regenerated in the legacy commands layout under agents/ + prompts/, coexisting with the 15 existing skills files)
No switch to another integration is needed — running use copilot alone triggers the bug (a round-trip like use claude → use copilot triggers it as well).
Expected Behavior
use only changes the default integration using the stored configuration, so:
"ai_skills": true is preserved
.github keeps its skills layout unchanged
Actual Behavior
- The
"ai_skills" key is removed from init-options.json, while integration_settings.copilot.parsed_options in .specify/integration.json still says {"skills": true} — the two files now contradict each other.
- The 5 git extension commands are regenerated as
.github/agents/speckit.git.*.agent.md + .github/prompts/speckit.git.*.prompt.md (legacy commands layout), duplicating and coexisting with the existing .github/skills/speckit-git-*/SKILL.md.
Specify CLI Version
0.12.16
AI Agent
GitHub Copilot
Operating System
macOS 26.5.2
Python Version
Python 3.14.3
Error Logs
Additional Context
None
Bug Description
Running
specify integration use copilotagainst a Copilot integration that was installed with--integration-options "--skills"removes"ai_skills": truefrom.specify/init-options.json.Steps to Reproduce
No switch to another integration is needed — running
use copilotalone triggers the bug (a round-trip likeuse claude→use copilottriggers it as well).Expected Behavior
useonly changes the default integration using the stored configuration, so:"ai_skills": trueis preserved.githubkeeps its skills layout unchangedActual Behavior
"ai_skills"key is removed from init-options.json, whileintegration_settings.copilot.parsed_optionsin.specify/integration.jsonstill says{"skills": true}— the two files now contradict each other..github/agents/speckit.git.*.agent.md+.github/prompts/speckit.git.*.prompt.md(legacy commands layout), duplicating and coexisting with the existing.github/skills/speckit-git-*/SKILL.md.Specify CLI Version
0.12.16
AI Agent
GitHub Copilot
Operating System
macOS 26.5.2
Python Version
Python 3.14.3
Error Logs
Additional Context
None