soft_denyを1つ足したいだけです。最も安全な書き方は?
配列の最初に"$defaults"を置き、その後に自分のルールを書く。公式によれば組み込みルールがその位置に差し込まれ、将来の更新も継承できる。編集後はclaude auto-mode configで有効な設定を確認する。
プロジェクトの.claude/settings.jsonにautoModeを書いたのに反応しません。なぜ?
分類器はプロジェクト設定のautoModeを読まない。公式の理由は、それらのファイルがリポジトリ内にあり、チェックイン済みのリポジトリが自分用のallowルールを注入できてしまうからだ。~/.claude/settings.json、managed settings、または--settingsで渡す。
pushの前に必ず確認を挟みたい。何を使う?
permissions.askを使う。例:Bash(git push *)。分類器より先に評価され、常に確認が出る。制限は、その文字列で始まるコマンドにしか一致しない点で、git -C <dir> pushは素通りする。コマンド全文を見るならPreToolUse hookを使う。
エンジニアではありません。これは私に関係ありますか?
チームがauto modeを使っていて誰かがこの設定を編集すると、force pushの保護などが誰にも気づかれずに外れる可能性がある。安全ルールブックへの「追記」と「書き換え」の違いが、既定値マーカー1つだと考えるとよい。変更後はclaude auto-mode configを実行して結果を読む。
auto modeは、分類器が各ツール呼び出しを審査する権限モードだ。公式のauto mode設定ページには見落としやすい警告がある。autoMode.environment、allow、soft_deny、hard_denyのいずれかの配列に文字列"$defaults"を入れずに設定すると、そのセクションの組み込みリストが丸ごと置き換わる。本稿はこの落とし穴、ルールの優先順位、設定ファイルの置き場所を整理する。特記がない限り、以下は公式ページの内容だ。
組み込みルールを残して自分のルールを足す例:
{
"autoMode": {
"soft_deny": [
"$defaults",
"Never modify files under infra/terraform/prod/"
]
}
}
こちらは"$defaults"の1行が違うだけだ:
{
"autoMode": {
"soft_deny": [
"Never modify files under infra/terraform/prod/"
]
}
}
公式の警告は率直だ。soft_denyから"$defaults"を外すと組み込みのsoft blockルールがすべて消え、ページはforce push、curl | bash、本番デプロイ、auto modeの迂回を挙げている。hard_denyから外すと組み込みのデータ流出ルールが消える。各セクションは独立しているので、environmentだけ設定しても他の3つの既定リストには影響しない。
分類器内部は4段階だ。hard_denyは無条件でブロックし、ユーザーの意図もallowの例外も効かない。次がsoft_denyで、ユーザーの意図とallowで上書きできる。allowはsoftルールへの例外として働く。最後に、ユーザーのメッセージがClaudeのこれから行う正確な操作を直接具体的に述べていれば、残るsoftブロックも解除される。ページの例では、「リポジトリを整理して」はforce pushの許可にならないが、「このブランチをforce-pushして」は許可になる。
分類器の外側にはさらに強い2層がある。permissions.denyは分類器の前にブロックし、何も上書きできない。Bash(git push *)のような内容指定のpermissions.askは常に確認を出し、分類器は承認できない。ただしこの種のルールはその文字列で始まるコマンドにしか一致せず、git -C <dir> pushは対象外だと公式も注意している。コマンド全文を検査するならPreToolUse hookを使う。
分類器がautoModeを読むのは~/.claude/settings.json、managed settings、--settingsフラグだけだ。プロジェクトの.claude/settings.jsonやsettings.local.jsonは読まない。リポジトリ内のファイルだと、チェックイン済みのリポジトリやビルド手順が自分用のallowルールを注入できてしまうからだ。プロジェクトに書いても効かない。各スコープの項目は結合され、開発者は追加できてもmanagedの項目は削除できない。ただし公式ページ自身が、開発者の追加したallowが組織のsoft_denyを上書きできると明記している。これは加算であり厳格なポリシー境界ではなく、絶対に実行させたくないものはmanagedのpermissions.denyに置く。
claude auto-mode defaultsは組み込みの4リストを出力する。--labelでラベルの先頭から1ルールだけ表示できる(v2.1.208以降)。claude auto-mode configは分類器が実際に使う設定を出力する。編集のたびに実行して確認する。claude auto-mode critiqueは自作ルールの曖昧さ、重複、誤検知の可能性をAIがレビューする。claude auto-mode resetはユーザー設定からautoModeを削除する(v2.1.212以降)。確認が入り、managedと--settingsのルールは残る。/auto-mode-setupはプロジェクトと最近のセッションからenvironment項目を下書きする。docsページはPro、Max、Teamプランが必要でクラウドセッションでは実行できないと書く一方、v2.1.304のリリースノートはBedrock、Vertex、Foundry、Claude apps gateway、テレメトリ無効のセッションでも使えると書いている。2つの記述は食い違っており、私には整合させられないので、自分のバージョンでの実際の挙動を確認してほしい。CLAUDE.md、README、設定、最近のセッションでClaudeが実行したコマンドを走査し、あなたのメッセージは読まない。承認すると、触れたallow、soft_deny、hard_denyに"$defaults"が追加される。無難な進め方は、まずenvironmentだけを設定し(公式は多くの組織でそれで足りると述べる)、ルールを足すときはすべての配列の先頭に"$defaults"を置くことだ。ここまでは公式ドキュメントの事実で、この順序は公式の導入手順を私が言い換えたものであり、自分で検証した結果ではない。