Summary
In coordinator mode, any skill whose SKILL.md frontmatter sets disable-model-invocation: true is omitted from the model's skill listing entirely. Typing its slash command yields "that skill isn't installed in this session" — even though the skill is installed, valid, current, and readable on disk.
disable-model-invocation is documented as meaning user-invocable only: hidden from autonomous model invocation, but still typeable as /name. In coordinator mode it instead becomes completely unreachable, and the failure presents as a missing install rather than as a restriction.
Environment
- Claude Code 2.1.220
- macOS (Darwin 25.5.0), arm64
- Surface: desktop app — coordinator mode (
CLAUDE_CODE_COORDINATOR_MODE=1)
Reproduction
- Install any skill carrying
disable-model-invocation: true into ~/.claude/skills/<name>/SKILL.md.
- Start a session on a coordinator-mode surface (desktop app).
- Type
/<name>.
Actual: the assistant reports the skill isn't installed, and suggests a differently-named skill as the nearest match.
Expected: the skill runs — or, failing that, the user is told it's user-invocable-only and unavailable in this mode.
Verification that the skill really is present and well-formed:
$ readlink -f ~/.claude/skills/grill-with-docs
/Users/kave/.agents/skills/grill-with-docs
$ cat ~/.claude/skills/grill-with-docs/SKILL.md
---
name: grill-with-docs
description: A relentless interview to sharpen a plan or design, ...
disable-model-invocation: true
---
Across 63 installed skills the split was exact: all 35 without the flag appeared in the model's skill listing, and all 28 carrying it were absent — a clean partition with no exceptions in either direction.
Evidence from the binary
2.1.220 contains a dedicated message for precisely this state:
Skill "/${e.name}" is user-invocable only (disable-model-invocation) and cannot run in coordinator mode: the coordinator does not load skill content, and workers cannot invoke it via the ${Hh} tool.
reached via
if (e.disableModelInvocation || A) { ... }
inside a coordinator-mode branch (y() && !r.agentId). Coordinator mode itself is gated on CLAUDE_CODE_COORDINATOR_MODE:
function By(){ if(!Yt(process.env.CLAUDE_CODE_COORDINATOR_MODE)) return !1; ... return !0 }
So the restriction is deliberate and a helpful message exists — but in my session that message never reached the user. The skill was simply absent from the listing, so the model answered from the only information it had: no such skill.
Impact
This is not a single-skill edge case. mattpocock/skills — distributed through Claude Code's own official plugin marketplace — ships 24 user-invoked skills that use this flag by design, including /handoff, /teach, /triage, /wizard, /implement and /wayfinder. On coordinator-mode surfaces every one of them is invisible and reports as uninstalled.
The maintainer triaged a user report of exactly this as "Harness issue" in mattpocock/skills#366, which is what prompted filing here.
The failure mode is worth emphasising: it doesn't read as "unavailable in this mode", it reads as "you never installed this". That sends users to reinstall software that was never broken.
Suggested fix
Either of these would resolve it:
- Keep
disable-model-invocation skills typeable as /name in coordinator mode, matching the documented meaning of the field, or
- Surface the message the binary already prepares, so the user learns the skill exists but is restricted here — rather than being told it isn't installed.
Option 1 preserves the field's purpose across surfaces. Option 2 is strictly a messaging fix, but would still have saved this entire debugging session.
Workaround
Deleting the disable-model-invocation: true line makes the skill visible immediately, with no restart. To preserve the author's intent, the restraint can be moved into the description instead:
description: <original>. Use only when the user explicitly asks for it
(e.g. types /name) — never invoke it on your own initiative.
Note this must be re-applied after any skill update that re-copies files from source.
Refs
Summary
In coordinator mode, any skill whose
SKILL.mdfrontmatter setsdisable-model-invocation: trueis omitted from the model's skill listing entirely. Typing its slash command yields "that skill isn't installed in this session" — even though the skill is installed, valid, current, and readable on disk.disable-model-invocationis documented as meaning user-invocable only: hidden from autonomous model invocation, but still typeable as/name. In coordinator mode it instead becomes completely unreachable, and the failure presents as a missing install rather than as a restriction.Environment
CLAUDE_CODE_COORDINATOR_MODE=1)Reproduction
disable-model-invocation: trueinto~/.claude/skills/<name>/SKILL.md./<name>.Actual: the assistant reports the skill isn't installed, and suggests a differently-named skill as the nearest match.
Expected: the skill runs — or, failing that, the user is told it's user-invocable-only and unavailable in this mode.
Verification that the skill really is present and well-formed:
Across 63 installed skills the split was exact: all 35 without the flag appeared in the model's skill listing, and all 28 carrying it were absent — a clean partition with no exceptions in either direction.
Evidence from the binary
2.1.220contains a dedicated message for precisely this state:reached via
inside a coordinator-mode branch (
y() && !r.agentId). Coordinator mode itself is gated onCLAUDE_CODE_COORDINATOR_MODE:So the restriction is deliberate and a helpful message exists — but in my session that message never reached the user. The skill was simply absent from the listing, so the model answered from the only information it had: no such skill.
Impact
This is not a single-skill edge case. mattpocock/skills — distributed through Claude Code's own official plugin marketplace — ships 24 user-invoked skills that use this flag by design, including
/handoff,/teach,/triage,/wizard,/implementand/wayfinder. On coordinator-mode surfaces every one of them is invisible and reports as uninstalled.The maintainer triaged a user report of exactly this as "Harness issue" in mattpocock/skills#366, which is what prompted filing here.
The failure mode is worth emphasising: it doesn't read as "unavailable in this mode", it reads as "you never installed this". That sends users to reinstall software that was never broken.
Suggested fix
Either of these would resolve it:
disable-model-invocationskills typeable as/namein coordinator mode, matching the documented meaning of the field, orOption 1 preserves the field's purpose across surfaces. Option 2 is strictly a messaging fix, but would still have saved this entire debugging session.
Workaround
Deleting the
disable-model-invocation: trueline makes the skill visible immediately, with no restart. To preserve the author's intent, the restraint can be moved into the description instead:Note this must be re-applied after any skill update that re-copies files from source.
Refs