Custom slash commands with non-ASCII (Japanese) names cannot be sent from the composer

Status Open
Reported on v2.1.183
Maintainer reply None cached
Activity 4 comments · opened Oct 2, 2026

Bug report: Custom slash commands are blocked by the composer validator

Date: 2026-10-02
Claude Code version: 2.1.183
Platform: Windows 11 Pro 10.0.26300 (Claude desktop app, Code tab)

Summary

Typing a user-defined slash command into the composer fails to send. The composer
shows a validation warning and silently refuses to submit the message.

Built-in slash commands (e.g. /agents) work normally in the same session.
Only user-defined commands from ~/.claude/commands/ are affected.

Warning text shown (Japanese UI)

コマンドではファイルの@メンションを使用できますが、それ以外の@メンション、 スラッシュコマンド、リンク、インライン書式は使用できないため、送信されませんでした。 これらを削除してください。

Rough translation: "In commands you may use file @mentions, but other @mentions,
slash commands, links and inline formatting are not allowed, so the message was
not sent. Please remove them."

The warning is self-contradictory: the only content in the composer is the
slash command, and the validator rejects it as "a slash command that cannot be used".

Steps to reproduce

  1. Place a user-defined command at ~/.claude/commands/予定検出.md with normal

YAML frontmatter (description:).

  1. Confirm the command is registered (it appears in the available-skills list and

in the / autocomplete menu).

  1. In the composer, type /予定検出 so that it is the only content.
  2. Press Enter.

Expected

The command runs.

Actual

Nothing is sent. The warning above appears. This reproduces for every
user-defined command tried (/配当金, /予定検出).

Notes / things already ruled out

  • Not caused by argument-hint in frontmatter. Removing the argument-hint:

line from all 18 command files did not change the behaviour.

  • Not caused by the composer being in an edit / dictation mode. The problem

persists with the composer in the normal "自動" state.

  • Not caused by leftover text in the input. Reproduces with a cleared input and

with the command selected from the autocomplete menu via arrow keys + Enter.

  • The / autocomplete menu does list the commands, so command discovery and

registration are working. The failure is in the pre-send validation step.

  • Built-in /agents executed successfully in the same session, so the slash

command mechanism itself is functional.

Root cause (confirmed by test)

The bug is specific to non-ASCII (Japanese) command names.

A minimal ASCII-named user-defined command (~/.claude/commands/testcmd.md,
plain frontmatter with only description:) was created and invoked as
/testcmd. It sent and executed normally.

The same session, same composer, same frontmatter shape, Japanese-named commands
(/配当金, /予定検出) are rejected.

So:

| Command | Name | Result |
|---|---|---|
| /agents | built-in, ASCII | works |
| /testcmd | user-defined, ASCII | works |
| /予定検出 | user-defined, Japanese | blocked by validator |
| /配当金 | user-defined, Japanese | blocked by validator |

This isolates the defect to the composer's pre-send validation: it tokenises the
slash command name in a way that does not match non-ASCII names against the
registered command list, so the text is classified as a stray slash command
inside a plain message and submission is refused. Note that the / autocomplete
menu does list and offer the Japanese-named commands, so registration and
discovery use a different (working) code path than the validator.

Impact

All user-defined workflow commands with non-ASCII names are unusable from
the composer. For a non-English user base this is effectively all of them. Workaround is
to invoke them by describing them in plain language, which still loads the same
command file but loses the explicit invocation path.

View original on GitHub ↗

3 Comments

ccs-junpei-yoshino · 12 days ago

The defect is not limited to non-ASCII names: dotted ASCII names are blocked too

Measured on a separate machine from the issue author's. Command names are described by their character class rather than by name.

Environment

| | |
|---|---|
| Date | 2026-10-02 |
| Claude Code | 2.1.286 |
| Desktop app | 2.19675.0.0 (Microsoft Store build), Code tab composer |
| OS | Windows 11 Pro 10.0.26200 |

Results

Each command below was invoked on its own, from a fully cleared composer, selected from the / autocomplete.

| Command name | Kind | Result |
|---|---|---|
| /agents, /model | built-in, alphanumeric | works |
| alphanumeric only | user-defined | works |
| contains - | user-defined (2 tried) | works |
| contains : (plugin-namespaced) | user-defined | works |
| contains . | user-defined | blocked |
| non-ASCII | user-defined (per the issue body) | blocked |

Blocked ones show exactly the warning quoted in the issue body, and nothing is sent. The / autocomplete lists them and they can be selected with the arrow keys and Enter; the refusal happens at send. So discovery and registration work, and the failure is in the pre-send validation step, as the issue body says.

This is not the mid-line picker problem (#95735 / #89398): the composer was empty and / was the first character.

Narrower root cause

Hyphens and colons are accepted. The two failing classes are a dot in the name and non-ASCII characters in the name.

That is consistent with one defect: the pre-send validator extracts the command name with an ASCII word-character pattern — something equivalent to /[A-Za-z0-9_:-]+ — and matches the result against the registered command list.

  • A dotted name is read only up to the dot, the remainder is left over, no registered command matches, so the whole thing is classified as a stray slash command inside a plain message and the send is refused.
  • A non-ASCII name matches no characters at all, with the same outcome.

So the issue title describes one symptom of a wider defect. Dotted names are affected too, and they are pure ASCII. Dotted names are a common namespacing convention for grouped command sets, so this is not limited to non-English users.

Suggested repro, all user-defined and ASCII

| File | Invoke | Expected under the above |
|---|---|---|
| ~/.claude/commands/testcmd.md | /testcmd | works (already confirmed in the issue body) |
| ~/.claude/commands/test-cmd.md | /test-cmd | works |
| ~/.claude/commands/test.cmd.md | /test.cmd | blocked |

If that holds, the fix is to align the validator's accepted name pattern with what the autocomplete and the command registry already accept, rather than to special-case either dots or non-ASCII.

kebisawagani92 · 12 days ago

Confirmed on a second version and a second machine. Thank you for the measurements — your corrected root cause holds here too.

I ran your suggested repro on the machine from the issue body (Claude Code 2.1.183, Windows 11 Pro 10.0.26300, desktop app Code tab). Both files were plain description:-only frontmatter in ~/.claude/commands/, each invoked on its own from a fully cleared composer.

| File | Invoke | Result |
|---|---|---|
| testcmd.md | /testcmd | works (as reported originally) |
| test-cmd.md | /test-cmd | works |
| test.cmd.md | /test.cmd | blocked |

The blocked one shows exactly the warning in the issue body and nothing is sent; the / autocomplete lists it and it can be selected. So the dotted-name failure reproduces across 2.1.183 and 2.1.286, on two separate machines — it is not specific to your build.

This also confirms hyphens are fine, consistent with your correction.

Combined, the failing classes are a dot in the name and non-ASCII characters in the name, which matches a single validator that extracts the command name with an ASCII word-character pattern and then matches it against the registry.

I agree the title understates the defect. Suggested retitle:

Custom slash commands whose name contains a dot or non-ASCII characters are blocked by the composer validator

Happy for a maintainer to edit the title, or I can update it.

pfilippin-es · 2 days ago

I am experiencing the same issue, in my case I believe it is because Claude automatically appends (MCP) to the custom command. Works in VS code and terminal, but fails in the desktop app (using the Linux Desktop Client)

Showing cached comments. Read the full discussion on GitHub ↗