原文(日本語に翻訳)
パーミッション設定において、コンテンツレベルの ask 設定がツールレベルの allow 設定よりも優先されるようになりました。
原文(英語)
Content-level ask now takes precedence over tool-level allow in permission configuration
概要
Claude Code 2.1.27で、パーミッション設定の動作が改善されました。コンテンツレベルの ask 設定が、ツールレベルの allow 設定よりも優先されるようになり、より細かく安全なコマンド実行制御が可能になりました。
基本的な使い方
以前は allow: ["Bash"] がすべてのbashコマンドを許可してしまい、ask の設定が無視されていました。新しいバージョンでは、ask の設定が優先されます。
json
{
"allow": ["Bash"],
"ask": [
"Bash(rm *)",
"Bash(rm -rf *)",
"Bash(sudo *)"
]
}この設定により:
- 通常のbashコマンドは自動的に実行される
rm *、rm -rf *、sudoで始まるコマンドは実行前に確認が求められる
実践例
危険なコマンドのみ確認
開発作業では多くのbashコマンドを実行しますが、破壊的なコマンドのみ確認を求めることで、安全性と効率性を両立できます。
json
{
"allow": ["Bash", "Write", "Edit"],
"ask": [
"Bash(rm *)",
"Bash(git push --force)",
"Bash(npm publish)",
"Bash(docker system prune)"
]
}プロダクション環境での操作制限
本番環境に影響を与える可能性のあるコマンドを厳重に管理できます。
json
{
"allow": ["Bash"],
"ask": [
"Bash(*production*)",
"Bash(*deploy*)",
"Bash(kubectl delete *)",
"Bash(terraform destroy)"
]
}パターンマッチングを活用した包括的な設定
json
{
"allow": ["Bash", "Write", "Edit", "Read"],
"ask": [
"Bash(rm *)",
"Bash(* --force *)",
"Bash(sudo *)",
"Bash(*production*)",
"Bash(git push * main)",
"Bash(git push * master)",
"Write(*.env)",
"Write(*secret*)"
]
}この設定では、ファイル削除、--force オプション付きコマンド、sudo権限が必要なコマンド、本番環境関連、機密ファイルの書き込みなどが確認対象になります。
deny 設定との併用
json
{
"allow": ["Bash"],
"ask": ["Bash(rm *)"],
"deny": ["Bash(rm -rf /)"]
}- 通常のbashコマンドは許可
rm *は確認を求めるrm -rf /は完全に禁止
注意点
- 設定の優先順位: コンテンツレベルの
ask設定(最優先)→ ツールレベルのallow設定 → デフォルトの動作 - パターンマッチング:
*はワイルドカードとして機能し、部分一致で動作します(Bash(rm *)はrm -rf file.txtにもマッチ) - プロジェクト設定の優先: プロジェクトの
.claude/permissions.jsonはグローバルの~/.claude/permissions.jsonより優先されます - 設定ファイルの場所:
- グローバル:
~/.claude/permissions.json - プロジェクト:
/path/to/project/.claude/permissions.json
- グローバル: