Unknown command: /<name>
結論
指定したスラッシュコマンドが見つからない状態。終了コード0で成功として返るため、CIでは失敗に気づけない。
確認した版
Claude Code v2.1.259
確認日
2026年9月3日
文言の照合
Claude Code v2.1.259
最終更新
2026年9月3日
根拠
実機で確認
エラー文字列
Unknown command: /<name>
🔴 このメッセージが出ても、終了コードは 0(成功)です。 標準出力に出ます。 CI では何も実行されないまま緑になります。
何が起きているか
指定したスラッシュコマンドが、その実行環境で見つからなかった状態です。
⭐ 近い名前のコマンドがあると、候補まで出ます。
v2.1.238 で実測した結果です。プロジェクトに .claude/commands/hello.md を置いた状態で実行しています。
| 実行したもの | 出たもの | 終了コード |
|---|---|---|
claude -p /hello |
Not logged in · Please run /login(コマンドは見つかっている) |
1 |
claude -p /hallo |
Unknown command: /hallo. Did you mean /hello? |
0 |
claude -p /hello(ファイルなし) |
Unknown command: /hello |
0 |
⚠️ 終了コードだけでは、コマンドが実行されたかどうかを判定できません。 むしろ**見つからなかったときのほうが 0(成功)**になります。
🔴 CI で起きること
claude -p "/deploy-check" # コマンド名を打ち間違えている
echo $? # → 0
パイプラインは緑になります。チェックは1つも実行されていません。
コマンドが見つからない理由
| 理由 | 確認するところ |
|---|---|
| コマンド名の綴り違い | Did you mean の候補が出ていないか |
| プロジェクトにファイルが無い | .claude/commands/<name>.md がそのチェックアウトに含まれているか |
ファイルが .gitignore されている |
CI のチェックアウトには存在しないことがある |
| 作業ディレクトリが違う | プロジェクト用コマンドは実行時の作業ディレクトリから探される |
| プラグイン由来のコマンド | そのプラグインがその環境に入っているか |
直し方
1. その環境で実際に見えているコマンドを確認する
⭐ 手元で動くことは、CI で動く理由になりません。確認は実行される環境で行ってください。
Windows(PowerShell)
Get-ChildItem -Recurse -Filter *.md .claude\commands -ErrorAction SilentlyContinue |
ForEach-Object { "/" + $_.BaseName }
macOS / Linux
ls .claude/commands/*.md 2>/dev/null | sed 's|.*/|/|; s|\.md$||'
2. ファイルが git に入っているか確認する
CI で「無い」と言われる原因で最も多いところです。
git ls-files .claude/commands/
⚠️ 出力が空なら、そのファイルは**コミットされていません。**手元にしかないため、CI からは見えません。
.gitignore に .claude/ が入っていないかも確認してください。
git check-ignore -v .claude/commands/deploy-check.md
3. CI では終了コードに頼らず、出力を検査する
終了コードが 0 でも実行されていないことがあるため、出力を見て判定します。
out=$(claude -p "/deploy-check")
if printf '%s' "$out" | grep -q '^Unknown command:'; then
echo "コマンドが見つかりませんでした: $out" >&2
exit 1
fi
printf '%s\n' "$out"
Windows(PowerShell)
$out = claude -p "/deploy-check"
if ($out -match '^Unknown command:') {
Write-Error "コマンドが見つかりませんでした: $out"
exit 1
}
$out
4. 作業ディレクトリを固定する
プロジェクト用コマンドは、実行時の作業ディレクトリを起点に探されます。
CI のステップで cd している場合は、リポジトリのルートから実行してください。
再発防止
- 🔴
claude -pの出力を検査する。終了コードだけでは足りません。 見つからないときは 0 が返ります - コマンドを追加したら、コミットされているかを確認する(
git ls-files .claude/commands/) - CI に新しいコマンドを入れたら、まず単体で1回動かして確認する
- 打ち間違いは
Did you meanの候補で分かる。出ていたらそれが正しい名前