Repository navigation
[Bug]: specify extension add bug is unable to install the extension when the project works with multiple IA providers. #4888
Description
Activity
- addedtriage-out-of-scopeVerdict: won't land in core — invalid, duplicate, off-mission, or redirected to an extensionVerdict: won't land in core — invalid, duplicate, off-mission, or redirected to an extensionand removedtriage-out-of-scopeVerdict: won't land in core — invalid, duplicate, off-mission, or redirected to an extensionVerdict: won't land in core — invalid, duplicate, off-mission, or redirected to an extension
on Oct 8, 2026 Bug assessment — multi-provider-extension: Invalid · severity low
Bug Assessment: specify extension add is unable to install the extension when the project uses multiple AI providers
- Slug: multi-provider-extension
- Created: 2026-10-09T13:08:23Z
- Source: issue [Bug]: specify extension add bug is unable to install the extension when the project works with multiple IA providers. #4888
- Verdict: invalid
- Severity: low
Report (summarized)
The reporter uses Spec Kit with Claude, Codex, Antigravity, and GitHub Copilot. They first initialize Claude and install the bundled
bugextension, then initialize Codex. A subsequentspecify extension add bugreports that the extension is already installed;--forceallows the operation but the generated bug skills are present only under Codex (.agents) and no longer under Claude (.claude). The expected result is for the extension skills to remain installed for both providers. The report identifies Spec Kit CLI version 1.1.2 and macOS, and gives the already-installed error shown above.Symptom
The extension package is project-scoped and is already installed when the second
extension addis attempted. With--force, the existing installation and its registered artifacts are replaced, and registration targets the currently active integration only. This matches the documented single-active-integration behavior; it does not provide simultaneous extension registration for every installed provider.Reproduction
- Run
specify init .and select Claude. - Run the extension-install command reported as
specify add extension bug(the current CLI form isspecify extension add bug). - Run
specify init .again and select Codex. - Run
specify extension add bug --force. - Inspect the generated skills under
.claudeand.agents.
The report does not establish whether Claude remains an installed integration after the second
init, nor whetherspecify integration use claudewas run afterward. Those details affect which provider is active and which artifacts are expected to be regenerated.Suspected Code Paths
src/specify_cli/extensions/__init__.py:1520-1575,ExtensionManager._register_commands_for_active_agent()— explicitly scopesextension addcommand registration to the integration recorded ininit-options; the docstring states that non-active integrations are populated when selected withintegration useorswitch.src/specify_cli/extensions/__init__.py:2427-2480,ExtensionManager.install_from_directory()— checks the project-wide registry and raises the reported “already installed” error unlessforce=True; this is why a second add is rejected rather than treated as a per-provider install.src/specify_cli/extensions/__init__.py:3934-4060,register_enabled_extensions_for_agent()/_register_extension_skills()— extension skills are rendered only when the requested agent is the active agent, using the activeinit-optionsselection.docs/reference/integrations.md:541-545— documents that extensions register for the current default integration only and thatintegration useorswitchrescaffolds enabled extensions for another integration.
Root Cause Hypothesis
Confidence: high. The observed behavior follows an intentional project-scoped extension model: one installed extension package is shared by the project, while generated command/skill artifacts are scoped to the active/default integration.
--forceis an overwrite/reinstall operation, not a request to maintain independent provider installations. The report's expected “installed in both” behavior conflicts with the current documented contract rather than exposing an implementation defect.Proposed Remediation
Preferred: No code change for the behavior described. Install the extension once, then activate each already-installed integration in turn with
specify integration use <key>(orswitch <key>) so Spec Kit rescaffolds the enabled extension for that provider. Do not useextension add --forcemerely to add another provider; it overwrites the project-wide extension installation.If maintainers want simultaneous artifacts for all installed providers as a product change, that should be a separately specified feature: registration would need an explicit multi-agent mode, per-agent ownership/cleanup, conflict handling, and tests covering add, force, remove, update, and integration switching. It would change the documented single-active model and should not be inferred from this bug report.
Files likely to change:
- None for the current contract.
- If the product behavior is intentionally changed:
src/specify_cli/extensions/__init__.py, integration lifecycle/registration helpers, related documentation, and extension lifecycle tests.
Tests to add or update:
- Existing behavior should remain covered by tests that verify
extension addregisters only the active integration and thatintegration use/switchrescaffolds enabled extensions for the newly active integration. - If simultaneous registration is adopted, add positive and negative tests for two installed providers, force reinstall, removal cleanup, update, and provider switching.
Risks & Considerations
- Treating
--forceas a per-provider install would conflict with the project-wide extension registry and could create ambiguous ownership or stale artifacts. - Re-registering every detected provider by default was intentionally avoided because provider-specific command/skill layouts can conflict and because inactive integrations are expected to be refreshed on activation.
- The reported command spelling (
specify add extension) should be clarified; the documented command isspecify extension add.
Open Questions
- [NEEDS CLARIFICATION: After initializing Codex, was Claude still installed as an integration, and was
specify integration use clauderun to regenerate its artifacts?] - [NEEDS CLARIFICATION: Is the desired requirement a documented change to simultaneous multi-provider registration, rather than the current single-active integration contract?]
Generated by 🐛 Assess Bug from Labeled Issue for #4888 · copilot · gpt52codex · 2.87 AIC · ⌖ 0.646 AIC · ⊞ 22.1K · ◷
Thanks for the detailed report. Extensions are installed once per project, not separately for each AI provider. The issue in this reproduction is running
specify init .a second time:initinitializes the project with the selected integration; it does not add another integration to the existing installation.To keep Claude installed and add Codex, use:
specify init . --integration claude specify extension add bug specify integration install codex specify integration use codexClaude and Codex are both multi-install safe.
integration install codexadds Codex while retaining Claude, andintegration use codexgenerates the enabled extension's skills for Codex. There is no need to installbugagain.specify extension add bug --forcereinstalls the project-wide extension instead, removing its previously registered artifacts.We're closing this report because the steps use
initand extension reinstallation where the supported multi-integration workflow usesintegration installandintegration use. If that workflow still removes Claude's skills, please share the exact commands andspecify integration listoutput so we can investigate.AI disclosure: Drafted by GitHub Copilot (GPT-6 Sol, interactive, human-directed) for issue analysis and response wording.
Bug Description
Hi Github team and community,
I currently working speckit with different providers, specifically with Claude, Codex, Antigravity and Github Copilot, I notice an error when trying to install the skills speckit-bug-* for all my providers.
The skills is only installed for the last IA provider added with
specify init .For example: I first installed speckit for claude, and that saved the skills on
.claude, then I installed the extension bug for Claude, all good. After that, I usedspecify init .for Codex, and that installed the basic skills on .agents, but then, when I try to usespecify extension add bugI get the messageError: Extension 'bug' is already installed. Use 'specify extension remove bug' first, or retry with --force to overwrite.Then I tried doing it with
--forceflag, and that uninstalled the extension from.claudeand install it on.agents, the expected result was for the extension to be installed in both.claudeand.agentsSteps to Reproduce
specify init .and select as provider Claude.specify add extension bug.specify init .and select as provider Codex.specify add extension bug --forceExpected Behavior
For the skill to be installed in both .Claude and .agents
Actual Behavior
The skill is only installed in the last installed IA provider and deletes the skills if already installed in other provider.
Specify CLI Version
1.1.2
AI Agent
Claude Code
Operating System
MacOS 27.0 (26A428)
Python Version
python 3.14.7
Error Logs
Additional Context
No response
AI Disclosure
N/A