Skip to content

[Bug]: specify extension add bug is unable to install the extension when the project works with multiple IA providers. #4888

Description

@GeotrendsDev

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 used specify init . for Codex, and that installed the basic skills on .agents, but then, when I try to use specify extension add bug I get the message Error: Extension 'bug' is already installed. Use 'specify extension remove bug' first, or retry with --force to overwrite.

Then I tried doing it with --force flag, and that uninstalled the extension from .claude and install it on .agents, the expected result was for the extension to be installed in both .claude and .agents

Steps to Reproduce

  1. Run command specify init .and select as provider Claude.
  2. Run command specify add extension bug.
  3. Run command specify init . and select as provider Codex.
  4. Run command specify add extension bug --force
  5. Check the skills installed, you will see the extension is only installed on Codex and no longer in Claude.

Expected 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

Error: Extension 'bug' is already installed. Use 'specify extension remove bug' first, or retry with --force to overwrite.

Additional Context

No response

AI Disclosure

N/A

Activity

  1. added
    triage-out-of-scopeVerdict: won't land in core — invalid, duplicate, off-mission, or redirected to an extension
    and removed
    triage-out-of-scopeVerdict: won't land in core — invalid, duplicate, off-mission, or redirected to an extension
    on Oct 8, 2026
  2. github-actions commented on Oct 9, 2026

    @github-actions
    Contributor

    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

    Report (summarized)

    The reporter uses Spec Kit with Claude, Codex, Antigravity, and GitHub Copilot. They first initialize Claude and install the bundled bug extension, then initialize Codex. A subsequent specify extension add bug reports that the extension is already installed; --force allows 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 add is 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

    1. Run specify init . and select Claude.
    2. Run the extension-install command reported as specify add extension bug (the current CLI form is specify extension add bug).
    3. Run specify init . again and select Codex.
    4. Run specify extension add bug --force.
    5. Inspect the generated skills under .claude and .agents.

    The report does not establish whether Claude remains an installed integration after the second init, nor whether specify integration use claude was 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 scopes extension add command registration to the integration recorded in init-options; the docstring states that non-active integrations are populated when selected with integration use or switch.
    • src/specify_cli/extensions/__init__.py:2427-2480, ExtensionManager.install_from_directory() — checks the project-wide registry and raises the reported “already installed” error unless force=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 active init-options selection.
    • docs/reference/integrations.md:541-545 — documents that extensions register for the current default integration only and that integration use or switch rescaffolds 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. --force is 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> (or switch <key>) so Spec Kit rescaffolds the enabled extension for that provider. Do not use extension add --force merely 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 add registers only the active integration and that integration use/switch rescaffolds 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 --force as 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 is specify extension add.

    Open Questions

    • [NEEDS CLARIFICATION: After initializing Codex, was Claude still installed as an integration, and was specify integration use claude run 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 · ◷

  3. mnriem commented on Oct 9, 2026

    @mnriem
    Collaborator

    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: init initializes 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 codex

    Claude and Codex are both multi-install safe. integration install codex adds Codex while retaining Claude, and integration use codex generates the enabled extension's skills for Codex. There is no need to install bug again. specify extension add bug --force reinstalls the project-wide extension instead, removing its previously registered artifacts.

    We're closing this report because the steps use init and extension reinstallation where the supported multi-integration workflow uses integration install and integration use. If that workflow still removes Claude's skills, please share the exact commands and specify integration list output so we can investigate.

    AI disclosure: Drafted by GitHub Copilot (GPT-6 Sol, interactive, human-directed) for issue analysis and response wording.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions