How Bundled Skills Work
Skill invocation flow
Section titled “Skill invocation flow”-
User types
/skill-nameor Claude’s model decides to invoke a skill -
Invocability check:
user-invocable: falseand invoked by user → skill not available in slash menudisable-model-invocation: trueand invoked by model → model cannot invoke; only user can- Otherwise → continue
-
Feature gate check: If the skill’s
isEnabled()returnsfalse(e.g. Anthropic-staff-only skills) → hidden from UI, not invokable -
Skill prompt loaded from binary (bundled skills) or disk (custom skills)
-
Reference files check:
- If the skill has a
filesmap → extract files to a temp cache directory; prefix the prompt withBase directory: <dir>so Claude can Read/Grep them - If no reference files → skip extraction
- If the skill has a
-
Skill prompt injected into Claude’s context
-
Claude executes using the tools available in this session
- Registered at startup: Each bundled skill definition calls
registerBundledSkill({ name, description, ... })once when the CLI initializes. The definition compiles into the binary—not markdown files on disk. - Prompt builder pattern: Unlike built-in commands that execute fixed logic, bundled skills use a
getPromptForCommand()function that returns the skill’s instructions as a dynamic prompt. Claude then orchestrates the work using tools. - Gating via
isEnabled(): The optionalisEnabledfunction controls whether a skill appears in the UI and is available to the model. Common checks:USER_TYPE === 'ant'(Anthropic staff only), feature flags, remote-mode availability, or permission policies. - Reference files extracted to disk: Some bundled skills include a
filesmap (reference documentation, templates, etc.). On first invocation, these files are extracted to a temporary cache directory, and the skill prompt is prefixed withBase directory for this skill: <dir>so Claude can Read/Grep them on demand, just like disk-based skills. - Invocation control via frontmatter:
user-invocable: true(default) — appears in the/menu and can be invoked with/skill-nameuser-invocable: false— hidden from the/menu; only Claude can invoke via the Skill tooldisable-model-invocation: true— Claude cannot invoke; only users can invoke via/skill-namedisableModelInvocation: false(default) — Claude can load and invoke the skill automatically when relevant
- Aliases: Some skills have aliases (alternative names). For example,
/loopalso responds to/proactive. - Exposed as slash commands: A subset of bundled skills are also listed in the Commands reference, marked as [Skill], and can be invoked directly. Examples:
/batch,/simplify,/loop,/debug,/claude-api.