[BUG] Skills/commands with `disable-model-invocation: true` are hidden from agent, blocking user-initiated slash invocation
Summary
When a user explicitly types /<command> for a command that has disable-model-invocation: true in its frontmatter, the agent has no way to know the command exists — it is omitted from the agent's available-skills list. The agent responds with "such skill is not available" or a similar refusal, even though the user initiated the action directly.
This turns disable-model-invocation from "prevent unsolicited auto-invocation" into "block all model-driven execution, including explicit user intent".
Repro (fresh, 2026-04-17)
Plugin: openai/codex-plugin-cc v1.0.3, installed via standard Claude Code plugin flow.
The plugin ships 7 commands in commands/:
adversarial-review.md,cancel.md,rescue.md,result.md,review.md,setup.md,status.md
Of these, 5 have disable-model-invocation: true in their frontmatter (adversarial-review, cancel, result, review, status). Only rescue and setup are model-invocable by default.
In a fresh Claude Code session:
- User types
/codex:statusin chat - Claude Code's autocomplete offers
/codex:status(visible in UI) - On submit, the agent receives the user's prompt but has only
codex:rescueandcodex:setupin its system-reminder skills list - Agent responds "no such skill is available" / refuses to invoke
- User has to manually explain: "but the command exists, just try it via the Skill tool"
- Second attempt succeeds
Expected behavior
When the user explicitly submits /<slash-command>, the agent should be able to invoke it regardless of disable-model-invocation. Either:
- Option A — ship
disable-model-invocation: truecommands to the agent with a flag like "user-initiated-only", so the agent knows about the command and will not auto-invoke it, but will execute on explicit user request. - Option B — expose these commands to the agent only within the turn in which the user typed the slash reference, and silently drop them otherwise.
The key distinction that the current implementation misses: there is a difference between "model decides on its own to call the command" (what the flag should block) and "user explicitly typed the command in chat" (what should always work).
Impact
- Affects every Claude Code plugin that uses
disable-model-invocationfor session-management commands (status, cancel, result, review).codex-plugin-ccis the most visible example, but this is the recommended pattern for commands that shouldn't be auto-fired. - Each plugin's user community has to independently discover the workaround ("just tell the agent to try anyway"). This becomes a de-facto hidden protocol.
- In the linked previous issues, multiple users reported the same friction. All closed by inactivity.
Previous issues (all CLOSED as NOT_PLANNED / inactivity, not on merit)
- #24042 — Skills/commands with
disable-model-invocation: trueappear in autocomplete but fail when invoked - #26251 — Skill with
disable-model-invocation: truecannot be invoked by user via slash command - #21649 — Skills marked
user-invocable: falseare visible in menu
The last comment on #24042 explicitly says "Please open a new issue if this is still relevant." — this is that new issue, with a current, publicly-installable plugin as the concrete repro target.
Related open issues: #43809 (subagents, similar root cause), #22345 (plugin skills and the flag), #48085 (docs outdated).
Environment: Claude Code with codex-plugin-cc v1.0.3 (@openai/codex-plugin-cc), Node 24.14.0, Windows 10, 2026-04-17.
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗