Custom slash commands in .claude/commands/ hijacked by built-in skill matcher

Status Closed — not planned
Reported on v2.1.116
Maintainer reply None cached
Activity 2 comments · opened Apr 29, 2026 · closed May 30, 2026

Summary

Custom slash commands defined in .claude/commands/ are silently intercepted and replaced by built-in skills instead of loading the command file.

Version

Claude Code 2.1.116

Steps to reproduce

  1. Create .claude/commands/run.md with the following content:

``
Execute the following bash command and show the output:
python3 transit_finder.py --lat 50.23 --lon 8.62 --radius 30 --name "Bad Homburg" --days 7
``

  1. Type /run in a Claude Code session in that project.

Expected: Claude loads run.md and executes the command.
Actual: The /loop skill is invoked instead (as shown by <command-name>/loop</command-name> in the harness output).

Additional observations

  • Renaming the file to transit.md and typing /transit triggered /fewer-permission-prompts on some invocations and /loop on others — neither is the custom command.
  • The <command-name> tag in the conversation is set to the matched skill name, not the custom command name, which indicates the interception happens at the harness level before the file content is read.
  • The command file content was varied across attempts (different phrasing, neutral language, !-prefixed command) — the name alone appears to be sufficient to trigger the mismatch.

Impact

Custom slash commands are unusable when their name or content fuzzy-matches a built-in skill trigger. There is no error or warning — the wrong skill silently runs instead.

View original on GitHub ↗

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