[BUG] Fully-qualified plugin command namespace ignored — local skill executed instead

Resolved 💬 4 comments Opened Feb 19, 2026 by elliottgaryusa Closed Mar 20, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When invoking a plugin command using its fully-qualified namespace
(e.g., /spearit-framework:move feat-201 todo), Claude Code silently
executed a different command — a local .claude/commands/ skill named
fw-move — without any error, warning, or platform-level indication
that the wrong command ran. The move succeeded by coincidence (both
commands perform the same operation). The mis-dispatch was only caught
because the user was actively monitoring the output; no system
mechanism flagged it.

What Should Happen?

The fully-qualified namespace /spearit-framework:move should
unambiguously route to the plugin command defined in
plugins/spearit-framework/commands/move.md. The namespace exists
precisely to prevent collision and should be enforced at dispatch time,
not treated as a hint.

Error Messages/Logs

No error was produced. The wrong command ran silently and produced
plausible-looking output.

Steps to Reproduce

  1. Install a plugin with a command (e.g., spearit-framework:move)
  2. Have a local .claude/commands/ skill with a similar name/intent

(e.g., fw-move) in the same project

  1. In a VSCode session where the local skill has previously been invoked,

type the fully-qualified plugin command:
/spearit-framework:move feat-201 todo

  1. Observe that the local fw-move skill SOMETIMES executes instead of the plugin

command

  1. No error is reported; output appears correct

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.45

Platform

Other

Operating System

Windows

Terminal/Shell

VS Code integrated terminal

Additional Information

This is distinct from #24420 (autocomplete resolves to first plugin when
multiple plugins share a skill name). That issue notes that manually typing
the fully-qualified name works as a workaround — our case is the opposite:
the fully-qualified name was used explicitly and was still not respected.

The root cause appears to be that Claude Code passes the <command-name>
tag to Claude as text with no runtime dispatcher enforcing namespace routing.
Claude pattern-matches on intent and session context. A recently-invoked local
command with similar intent can override an explicitly namespaced plugin command.

If the colliding commands had different effects (e.g., a release command that
deploys vs. one that archives work items), silent mis-dispatch could cause
irreversible damage with no indication anything went wrong.

View original on GitHub ↗

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