Skill invocation is invisible to users when auto-loaded via slash command

Resolved 💬 3 comments Opened Mar 30, 2026 by thebrubaker Closed Mar 30, 2026

Description

When a user types a slash command (e.g., /introspect) at the start of their prompt, the system auto-loads the skill content via <command-name> tags and injects it into Claude's context. Claude's system prompt then instructs:

"If you see a <command-name> tag in the current conversation turn, the skill has ALREADY been loaded - follow the instructions directly instead of calling this tool again"

This means no Skill tool call is ever made, so the user sees no visible indication that the skill was loaded. From the user's perspective, it's ambiguous whether Claude received the skill content or is improvising.

The Confusion Loop

  1. User types /my-skill at the start of a message — system auto-loads it silently
  2. Claude follows the skill instructions without a visible tool call
  3. User can't tell if Claude is executing the skill or guessing
  4. User asks Claude to "call the skill" — Claude says it already has it, but user has no evidence
  5. Trust breaks down

This gets worse when:

  • The user mentions /skill-name mid-sentence (e.g., "use /cmux and /exp for this") — the system does NOT auto-load in this case, and Claude may or may not use the Skill tool
  • Claude has seen CLI examples for the same tool in CLAUDE.md or memory, giving it enough confidence to skip skill invocation entirely

Observed Behavior

In my session, I asked Claude to use /cmux and /exp skills. Claude:

  1. Did not invoke the Skill tool
  2. Ran the CLI commands directly from memorized examples
  3. Got the arguments wrong (sent terminal commands to the wrong workspace)
  4. When confronted, couldn't clearly explain whether it had the skill content or not

Later, I typed /introspect at the start of a message. Claude:

  1. Had the skill content (auto-loaded by the system)
  2. Started executing the framework directly — no tool call visible
  3. I couldn't tell if Claude knew the skill or was making it up
  4. I interrupted and asked Claude to "call /introspect" — Claude said it already had it, but I had no way to verify

The Positional Behavior (Undocumented?)

Through testing, we discovered:

  • /skill at the start of a prompt → system auto-loads the skill content
  • /skill in the middle of a prompt → system does NOT auto-load; Claude must use the Skill tool

This positional sensitivity is not documented and creates inconsistent behavior depending on where in the message the user references the skill.

Suggestion

Make skill loading always visible to the user. Options:

  1. Always require the Skill tool call — remove silent auto-loading. When the user types /skill, have Claude use the Skill tool explicitly so there's a visible action in the terminal.
  2. Show a visible indicator when the system auto-loads a skill (e.g., "Loaded skill: introspect" in the terminal output), so the user knows Claude has the content.
  3. At minimum, document the positional behavior — users should know that /skill at the start of a message behaves differently than /skill mid-sentence.

The core problem is trust: when the user can't see whether a skill was loaded, they can't tell if Claude is following instructions or improvising. This is especially problematic for complex skills where getting the details wrong has real consequences.

Environment

  • Claude Code CLI
  • Terminal: CMUX
  • Multiple custom skills in ~/.claude/skills/

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗