仕様変更点
Claude Code で、日本時間 2026/02/17 ~ 2026/02/21 のどこか (v2.1.44-v2.1.50 のどこか) に、(少なくとも) 旧カスタムスラッシュコマンド式で定義したスキルであって動的コンテクスト注入を伴うものを使用するための条件が変わった (以下)。
- 従来はスコープの
settings.jsonの"permissions"の"allow"で明示的に"Skill(スキル名)"を許可する必要はなかったが、明示的な許可が必要になった。 - 従来はスキル内の動的コンテクスト注入
!commandのコマンド実行については PreToolUse フックを通っていなかったが、PreToolUse フックを通るようになった (ので、PreToolUse フックで Claude のコマンド実行をフィルタしている場合、スキル内で実行するコマンドも明示的に許可する必要がある)。- ただし、画面上 Error: Bash command permission check failed ... と出力されるのだが、実はコマンド自体は実行されてしまっているため、フックをトリガーはするが実行をブロックはされていないという中途半端な状態である (2026/02/22 現在)。
なので、従来通りに利用するには上記 2 点を対応する必要がある。
参考: この変更に伴う私の dotfiles の差分 (pre-bash-hook.sh は PreToolUse フックから呼び出しているシェルスクリプト) → [2026-02-24 追記] この差分のうち PreToolUse フックのコマンド許可はやはり以下のように修正する必要がある。
if [[ "$command" =~ ^bash\ -c\ \'source\ ~/.claude/scripts/ask\.sh\' ]]; then
exit 0
fi
おそらくこの変更は、これまでカスタムスラッシュコマンドは「単なるテンプレートとしての利用がメイン&基本的にユーザが能動的に使用するもの」であったために使用権限が管理されていなかったのが、スキルに統合されたため Claude が自主的に利用する可能性も生じ (設定による)、セキュリティが強化されたのだろうかと思う。
なお、私の使用しているスキルは全て「旧カスタムスラッシュコマンド式で定義したスキルであって動的コンテクスト注入を伴うもの」であるため、「新スキル式で定義したスキル」「動的コンテクスト注入を伴わないスキル」についての状況はわかっていない。
詳細
私は ~/.claude/commands/ask.md に定義した旧カスタムスラッシュコマンド (現スキル) /ask をどのプロジェクトからも使用している。この /ask はマークダウンファイル (後半にメモを取ることも可能) から Claude に依頼を送信でき & 引数に応じて定型文の挿入もできるものである。/ask はシェルスクリプト ~/.claude/scripts/ask.sh を呼び出す (いわゆる動的コンテクスト注入 )。
---
allowed-tools: Bash(bash -c 'source ~/.claude/scripts/ask.sh':*)
---
!`bash -c 'source ~/.claude/scripts/ask.sh' _ $ARGUMENTS`
そしてシェルスクリプト ~/.claude/scripts/ask.sh は以下を実行する。
- 呼び出し元ディレクトリにある
$(pwd)/ask.mdの内容を標準出力する。ただし、- 「## BACKLOG」または「### BACKLOG」という行があればそれ以降無視する。
- 引数として 1, 2, 3 のいずれかが与えられたら定型文を冒頭に挿入する。
/ask の使用にあたって、スコープの settings.json への権限設定はしていなかった (そもそも旧カスタムスラッシュコマンドに許可とか禁止とかはなかったのではないかと思う)。また、/ask 内のシェルスクリプト実行は PreToolUse フックでの許可パターンに含めていなかった (私は一部の許可パターンを除き Claude の Bash コマンド実行を PreToolUse フックでブロックしている)。
~/.claude/settings.jsonへの PreToolUse フックの設定-
フックから呼び出している許可パターン判定スクリプト
pre-bash-hook.sh- デフォルトでpytest(完全一致) のみ許可。個別プロジェクトで許可を追加したい場合はプロジェクト側にも同名のスクリプトを配置する。
それで 2/17 頃までは問題なく使えていたのだが、Weekly limits が明けた 2/21 の夜に実行したところ、/ask がエラーになった。ので、さしあたり PreToolUse フックで /ask 内でのスクリプト実行を許可パターンに追加して再度実行したところ、「このプロジェクトで /ask を許可するか」と確認されたので settings.json で許可するようにした。
なお、settings.json で許可すれば PreToolUse フックでの許可は不要になるのか疑問に思い、PreToolUse フックを元に戻したところ、下のキャプチャのように Error: Bash command permission check failed ... と出力された。が、その実コマンド自体は実行され (実行結果が出力されている)、私の依頼は Claude に伝わっていた (もちろんこんな状態で運用したくはないので PreToolUse フックは修正した)。
備考
許可パターン判定スクリプトが意図通りに動作するか確認するには、プロジェクト直下で以下のように実行する ("command" に許可したいコマンドを書く)。0 と出力されればそのコマンドは許可されている。2 と出力されればブロックされている。
bash ~/.claude/scripts/pre-bash-hook.sh <<'EOF'
{
"tool_input": {
"command": "bash -c 'source ~/.claude/scripts/ask.sh' _ 1"
}
}
EOF
echo $?
