Repository navigation
feat(copilot): add --no-model-invocation integration option - #5118
Conversation
`specify init --integration copilot --integration-options="--no-model-invocation"` writes `disable-model-invocation: true` on the core command skills in the skills layout (github#2654). VS Code documents the field as requiring manual `/` invocation; Copilot CLI docs do not list it. The default is unchanged, the option persists through integration.json so `integration upgrade` reapplies it, extension skills stay model-invocable, and `--commands` ignores it. Confined to the Copilot integration, its tests and docs. Assisted-by: Claude Code (claude-sonnet-5-5) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XhaPZg7kBwheHtH9wf2AZv
Assisted-by: Claude Code (claude-sonnet-5-5) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XhaPZg7kBwheHtH9wf2AZv
There was a problem hiding this comment.
🔵 Needs a closer look
Headless Copilot CLI behavior remains unverified, and setup failure-state cleanup still needs correction.
1 open issue
What changed in this PR
Adds a Copilot-only option to make core Spec Kit command skills manually invocable, extending the existing Claude and Droid support without changing shared integration code.
Changes:
- Adds
--no-model-invocationfor core skills while preserving extension invocation and commands layouts. - Persists the option across upgrades and adds coverage for defaults, lifecycle behavior, and extension hooks.
- Documents platform behavior and preset-related limitations.
AI-generated review for the requester by GitHub Copilot (model: unknown; autonomous mode).
| File | Description |
|---|---|
tests/integrations/test_integration_copilot.py |
Tests option handling, generated skills, upgrades, and failure paths. |
src/specify_cli/integrations/copilot/__init__.py |
Declares the option and injects core-skill frontmatter based on setup state. |
docs/integrations/copilot.md |
Explains usage, supported layouts, and lifecycle caveats. |
Review effort: Max
|
Please address Copilot feedback |
Move emit_events() inside the protected block in setup() so a failure while installing native hooks no longer leaves _disable_model_invocation set for later core-skill rendering in the same process. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015w5WirGUspLsYEpCkaHWxV
|
@mnriem Addressed the Copilot feedback in 7382585: Headless Copilot CLI dispatch ( Disclosure: posted on behalf of @echarrod by Claude Code (model: claude-opus-5-5, autonomous mode). The agent made the change, ran the tests and wrote this comment. Commit 7382585 is agent-authored but is missing its |
There was a problem hiding this comment.
🟡 Changes recommended
The documentation omits that the option is ignored for inherited commands layouts without an explicit --commands flag, potentially misleading users into thinking a successful upgrade applied the setting.
1 open issue
1 resolved since last review
Review effort: Max
|
Please address Copilot feedback |
Clarify the effect of the option in commands layout. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
|
@mnriem The latest Copilot item is addressed in 8b97d96. Disclosure: posted for @echarrod by Claude Code (model: claude-opus-5-5, autonomous mode). Ed made the docs change himself. The agent checked the wording against the code and wrote this summary. |
The documented commands-to-skills migration passes --integration-options, which replaces all stored options. A stored --no-model-invocation is dropped without warning and the skills become model-invocable, so say so where the migration command is documented. Assisted-by: Claude Code (model: claude-opus-5-5, autonomous) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015w5WiqwEFQkgenh2YdQLV8
|
Addressed the latest review summary in a86445f: the commands-to-skills migration in I reproduced the drop on 8b97d96 with Posted on behalf of @echarrod by Claude Code (model: claude-opus-5-5, autonomous mode), which diagnosed the issue, wrote the change and ran these checks. |
|
Thank you! |


Description
Refs #2654. Follow-up to #4919 (Claude) and #5116 (Droid).
Adds a Copilot-only integration option:
specify init my-project --integration copilot --integration-options="--no-model-invocation"disable-model-invocation: trueon the corespeckit-*command skills, including preset overrides of them. VS Code's agent skills docs say this requires manual invocation through the/slash command only. The default is unchanged (the key is omitted, which VS Code treats asfalse).speckit.git.featureneed the model to invoke them.integration.json, sospecify integration upgrade copilotreapplies it.Differences from Droid:
--commandsthe files are.agent.mdand.prompt.md, not skills, so the option is ignored and no flag is written.skilltool forspeckit-specifywithout the flag and did not with it, and an explicit/speckit-specifystill ran. With the flag the model could still read the skill'sSKILL.mdas a plain file, so it is not a hard block. Neither source says whether a flagged skill keeps its description out of the model's context, so the context-budget benefit from Allow opting out of model invocation for installed skills (large monorepo skill-budget pain) #2654 is unverified.multi_install_safe; the existing multi-install note is unchanged.Only the Copilot package, its tests and
docs/integrations/copilot.mdchange; no sharedbase.pychange.AI Disclosure
AI disclosure: Written for @echarrod by Claude Code (claude-sonnet-5-5) running autonomously. It wrote the code, tests and docs, ran the test suite and an automated
/code-review medium. @echarrod reviewed it before marking it ready.