🎯 はじめに
--dangerously-skip-permissions(通称 YOLO モード)を常用していませんか。
Claude Code の権限まわりは、v2.1.55(2026-02-25)から v2.1.251(2026-08-28)の半年で大きく作り替えられました。ポイントは「プロンプトの数を減らしつつ、危険な操作は確実に止める」という方向です。
# v2.1.248 で追加された最も厳しいモード
claude --restricted
# または
CLAUDE_CODE_RESTRICTED=1 claude
本記事では auto mode の進化 / 新しい --restricted / パーミッションルールの書き方 / サンドボックスの認証情報保護 の4本立てで整理します。
📌 3行まとめ
-
auto mode は分類器(classifier)ベースの権限判断。
git reset --hardやterraform destroyなど破壊的操作を文脈から判断してブロックする(v2.1.183) -
--restricted(v2.1.248)はコード実行系ツールを丸ごと外し、ユーザー・プロジェクト・ローカル設定をすべて無視する最も硬いモード - サンドボックスは認証情報のマスキング(v2.1.221 / v2.1.224)まで到達。JWT のクレーム単位マスクや AWS SigV4 の再署名まで対応
🏷 まず用語:「default」は「Manual」になった
v2.1.200 で名称が変わりました。
Changed the "default" permission mode to "Manual" across the CLI,
--help, VS Code, and JetBrains;--permission-mode manualand"defaultMode": "manual"are accepted alongsidedefault
default という指定も引き続き通りますが、UI 上の表示は Manual です。さらに v2.1.203 で、Manual モードのときフッターにグレーの ⏸ バッジが出るようになりました。「今どのモードで動いているか」が常に見えるようになっています。
現在のモードは以下の4つです。
| モード | 挙動 |
|---|---|
manual(旧 default) |
すべての操作で確認 |
plan |
計画のみ立て、実行しない |
acceptEdits |
ファイル編集を自動承認 |
auto |
分類器が個別に判断 |
bypassPermissions |
すべてスキップ(危険) |
🤖 auto mode — 分類器が判断する
auto mode は、コマンドを静的なルールではなく分類器(LLM)が文脈込みで評価するモードです。この半年で最も手が入った領域です。
何をブロックするようになったか
v2.1.183 — 破壊的 git コマンドと IaC の destroy
これが一番実感しやすい変更です。
-
git reset --hard/git checkout -- ./git clean -fd/git stash dropを、あなたがローカルの変更を捨てるよう頼んでいない場合はブロック -
git commit --amendを、そのコミットがこのセッションでエージェントが作ったものでない場合はブロック -
terraform destroy/pulumi destroy/cdk destroyを、特定のスタックを指定して頼んでいない限りブロック
「コマンドが危険か」ではなく「あなたがそれを頼んだか」で判断しているのがポイントです。
v2.1.205 — トランスクリプトの改竄と、解決できない変数の rm -rf
- セッションのトランスクリプトファイルへの改竄をブロックするルールを追加
- 文脈から中身を解決できない変数に対する
rm -rf(rm -rf $DIRの$DIRが不明など)は確認してから実行
v2.1.154 — データ持ち出しの検知
リポジトリ内容の一括転送など、データ持ち出しの検知が強化されました。
v2.1.178 / v2.1.222 — 抜け道を塞ぐ
- v2.1.178:サブエージェントの起動そのものを分類器が起動前に評価。サブエージェント経由でブロック対象の操作を要求する穴を塞いだ
- v2.1.222:
SendMessageによる他セッションへのメッセージ送信も、送信前に分類器で評価されるように
「別のエージェント/別のセッションに頼めば通る」という迂回路が順番に潰されています。
設定
autoMode.classifyAllShell(v2.1.193)
{
"autoMode": {
"classifyAllShell": true
}
}
既定では「任意コード実行パターン」に該当する Bash / PowerShell コマンドだけが分類器を通ります。true にするとすべてのシェルコマンドが分類器を通ります。安全側に倒したい場合に。
autoMode.hard_deny(v2.1.136)
{
"autoMode": {
"hard_deny": ["..."]
}
}
ユーザーの意図や allow 例外に関係なく無条件でブロックするルールを書けます。通常の分類器ルールは「あなたが頼んだかどうか」を見ますが、hard_deny は文脈を一切見ません。組織ポリシーとして「絶対にやらせない」ものを書く場所です。
v2.1.207 の破壊的変更:auto mode は .claude/settings.local.json(リポジトリ内に置かれるファイル)から autoMode 設定を読まなくなりました。~/.claude/settings.json に書いてください。リポジトリに commit された設定でセキュリティ境界を緩められないようにする措置です。
使い勝手の改善
| バージョン | 内容 |
|---|---|
| v2.1.118 | auto mode の opt-in プロンプトに「Don't ask again」を追加 |
| v2.1.160 | 定型操作での推論を減らし分類器のレイテンシを改善。"could not evaluate this action" によるブロックが減少 |
| v2.1.193 | 拒否理由をトランスクリプト・拒否トースト・/permissions の recent denials に表示 |
| v2.1.210 | 外部セッションでは分類器が既定で Sonnet 5 を使用。セッション最初のリクエストで検証してセッション中は固定 |
| v2.1.218 | dangerous-rm / background-& / 疑わしい Windows パスのチェックがダイアログを開かず分類器が裁定するように |
| v2.1.218 | plan モード + auto で、静的解析が read-only と証明できない Bash コマンドについてプロンプトを出さず分類器が判断 |
| v2.1.221 | 並列ツール呼び出しの権限チェックがキャッシュ効率化。チェック中のモード切替でも古い結果が適用されなくなった |
| v2.1.236 | Bedrock / Vertex AI / Foundry、テレメトリ無効時でも Claude API と同じ既定(severity スコア付き分類)を使用 |
| v2.1.236 | git status チェックが、リポジトリの status.showUntrackedFiles=no 設定に騙されなくなった
|
| v2.1.246 |
/permissions に Auto mode タブを追加。分類器ルールの閲覧・編集が可能に |
| v2.1.247 | Bash の権限プロンプトに auto mode への案内を追加。「Yes, and switch to auto mode」がワンキーで選べる |
v2.1.246 の /permissions Auto mode タブは、これまでブラックボックスだった分類器のルールを可視化するもので、auto mode を導入する際の心理的ハードルを下げます。
🔒 --restricted — 最も硬いモード(v2.1.248)
2026-08-27 に追加された、まだ新しいフラグです。
claude --restricted
CLAUDE_CODE_RESTRICTED=1 claude
やっていることは4つです。
-
コマンドやコードを実行する組み込みツールと
WebFetchを削除(--toolsで明示的に指定した場合を除く) - ファイル系ツールを作業ディレクトリ内に限定
bypassPermissionsを拒否- ユーザー・プロジェクト・ローカルの設定ファイルをすべて無視
4番目が効いています。「設定ファイルで権限を緩める」経路そのものを断つので、設定を書き換えられていても安全側に倒れます。信頼できないリポジトリを読ませるとき、あるいは CI で読み取り専用の解析だけさせたいときに向きます。
📝 パーミッションルールの書き方
Tool(param:value) 構文(v2.1.178)
ツールの入力パラメータにマッチさせられるようになりました。
{
"permissions": {
"deny": ["Agent(model:opus)"]
}
}
上の例は「Opus を使うサブエージェントの起動を禁止」です。* ワイルドカードも使えます。
deny ルールでのグロブ(v2.1.166)
{
"permissions": {
"deny": ["*"]
}
}
ツール名の位置でグロブが使えるようになり、"*" で全ツール拒否ができます。allow ルール側では非 MCP のグロブは拒否されます(誤って全許可してしまう事故を防ぐため)。
⚠️ 書き間違えやすいルール
Write / NotebookEdit / Glob にパスを付けるのは無効(v2.1.210)
{
"permissions": {
"allow": ["Write(src/**)"]
}
}
これは意図どおりに動きません。Edit(path) または Read(path) を使ってください。 v2.1.210 以降は起動時に警告が出ます。
Bash ルールのサブコマンド前ワイルドカード(v2.1.246)
{
"permissions": {
"allow": ["Bash(git * main)"]
}
}
これも危険です。* がサブコマンドの前にあるため、サブコマンドの前に挿入されたオプションにもマッチしてしまいます。v2.1.246 以降は起動時に警告が出ます。
「always allow」の保存先(v2.1.211)
権限プロンプトで「always allow」を選んだときの保存先が、リポジトリのルートに変わりました。git worktree 内で承認した内容が、セッションや worktree を跨いで維持されます。
プロンプトを減らす
v2.1.71 / v2.1.72 — auto-approval allowlist の拡充
読み取り専用コマンドが追加されました。
- v2.1.71:
fmt/comm/cmp/numfmt/expr/test/printf/getconf/seq/tsort/pr - v2.1.72:
lsof/pgrep/tput/ss/fd/fdfind
v2.1.111 — /less-permission-prompts スキル
トランスクリプトを走査して、頻出する読み取り専用の Bash / MCP ツール呼び出しを検出し、優先度付きの allowlist を .claude/settings.json 向けに提案してくれます。まずこれを実行するのが手っ取り早いです。
逆に厳しくなったもの
| バージョン | 内容 |
|---|---|
| v2.1.214 |
file コマンドの -m/--magic-file、-f/--files-from が read-only 扱いされなくなり、権限が必要に |
| v2.1.214 |
docker(Podman の docker シム含む)のデーモンリダイレクト系フラグ(--url / --connection / --identity、Podman のリモートモード)に権限プロンプトを追加 |
| v2.1.235 | 権限ダイアログの表示テキストと「don't ask again」が、実際に付与される範囲と常に一致するように。内容を完全に表示できない場合は「don't ask again」が出なくなった |
| v2.1.251 | Bash の権限チェックが、整数シェル変数への算術式代入(OPTIND=1/0、RANDOM=2+2 など)を自動承認していた問題を修正 |
🛡 サンドボックス — 認証情報を守る
サンドボックスは「ファイルシステム分離」と「ネットワーク egress 制御」の2軸です。この半年での目玉は認証情報の保護でした。
sandbox.credentials(v2.1.187)
サンドボックス内のコマンドが、認証情報ファイルや秘密の環境変数を読むのをブロックします。
mode: "mask"(v2.1.221)— Linux / WSL
ここが面白い機能です。ブロックするのではなく、偽物を読ませます。
- サンドボックス内のコマンドはセンチネル(ダミー)のコピーを読む
- ファイル全体、または
extract正規表現でキャプチャしたスパンだけをダミー化できる - egress の際にサンドボックスプロキシが本物の値に差し替える
つまり、~/.aws/credentials を読んで API を叩くツールは正常に動くのに、認証情報そのものはプロセスから見えないという状態を作れます。
macOS ではファイルのマスキングはサポートされず、deny にフォールバックします。
高度なマスキングオプション(v2.1.224)
{
"sandbox": {
"network": { "tlsTerminate": true },
"credentials": {
"...": {
"decode": "jwt",
"maskClaims": ["sub", "email"]
}
}
}
}
-
extract/onExtractNoMatch:構造化された環境変数値から特定部分だけを抽出してマスク -
decode: "jwt"+maskClaims:JWT をデコードしてクレーム単位でマスク -
awsPairs/sigv4:AWS SigV4 の再署名
いずれも network.tlsTerminate が必要で、ユーザー設定・マネージド設定・--settings からのみ有効です(プロジェクト設定からは指定できません)。
ネットワーク制御
| 設定 | バージョン | 内容 |
|---|---|---|
sandbox.network.deniedDomains |
v2.1.113 | 広い allowedDomains ワイルドカードがあっても、特定ドメインを個別にブロック |
sandbox.network.strictAllowlist |
v2.1.219 | 許可リストに無いホストをプロンプトを出さずに拒否 |
sandbox.filesystem.disabled |
v2.1.216 | ファイルシステム分離だけスキップし、ネットワーク egress 制御は維持 |
sandbox.failIfUnavailable |
v2.1.83 | サンドボックスが有効なのに起動できない場合、サンドボックス無しで実行せずエラー終了 |
allowRead |
v2.1.77 |
denyRead 領域の中で読み取りを再許可 |
sandbox.failIfUnavailable は地味に重要です。既定では「サンドボックスが使えなければサンドボックス無しで実行」という挙動なので、セキュリティを前提にしているなら明示的に true にすべきです。
その他の関連改善:
- v2.1.191:ネットワーク権限ダイアログで "Yes" したホストがセッション中記憶されるように(接続のたびに聞かれなくなった)
-
v2.1.229:ネットワークドメインリスト内の IPv6 リテラルを角括弧付き(
[::1]:443)に。曖昧な記法は fail-closed で強制され、/doctorがフラグを立てる - v2.1.243:サンドボックス化された Bash のプロンプトが許可済みホストを列挙しなくなった。Claude がリクエストを試み、新しいホストをあなたが承認する流れに変更
- v2.1.251:サンドボックス内 Bash のコマンド出力ファイルの作成・読み戻し方法を変更し、サンドボックス内コマンドがそれをリダイレクト・置換できないように
認証情報の漏洩を防ぐその他の仕組み
-
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1(v2.1.83):Bash ツール・フック・MCP stdio サーバーのサブプロセス環境から、Anthropic とクラウドプロバイダの認証情報を除去 -
PID 名前空間分離(v2.1.98):Linux で
CLAUDE_CODE_SUBPROCESS_ENV_SCRUBが設定されている場合、サブプロセスサンドボックスに PID 名前空間分離が入る。CLAUDE_CODE_SCRIPT_CAPSでセッションあたりのスクリプト実行回数を制限可能 -
GitLab トークンの秘匿(v2.1.232):
glrt-/gloas-/glptt-など GitLab のトークンファミリを redaction 対象に追加。glpat-/gldt-は完全 redaction。glabCLI の設定ストアもghと同等のサンドボックス保護・認証情報パス保護の対象に
🏢 マネージド設定側の締め付け
v2.1.251 で、組織が配布するサーバーマネージド設定にも承認が要求されるようになりました。
Changed server-managed settings that terminate sandbox TLS, route sandbox traffic through your own proxy, inject credentials, or weaken sandbox isolation to require approval before they apply
サンドボックスの TLS を終端する、トラフィックを独自プロキシに通す、認証情報を注入する、サンドボックス分離を弱める——これらは適用前にユーザーの承認が必要になりました。
あわせて、ANTHROPIC_CUSTOM_HEADERS がマネージド/プロジェクト設定から Authorization や Host などの認証・ルーティング系ヘッダを設定する場合も承認が必要です。また、プロジェクトレベルの .claude/settings.json の env は CLAUDE_CONFIG_DIR / CLAUDE_CODE_TMPDIR / TMPDIR / TMP / TEMP を設定できなくなりました。
「リポジトリに入っている設定ファイルは、セキュリティ境界を緩める権限を持たない」 という原則が、この半年で一貫して徹底されています。
✅ まとめ
- auto mode は「コマンドが危険か」ではなく「あなたがそれを頼んだか」で判断する。
git reset --hardやterraform destroyが文脈でブロックされる -
autoMode設定は~/.claude/settings.jsonに書く(v2.1.207 以降、.claude/settings.local.jsonからは読まれない) - 権限プロンプトを減らしたいなら、まず
/less-permission-promptsを実行する -
Write(path)/Glob(path)のルールは無効。Edit(path)/Read(path)を使う - 信頼できないコードを扱うなら
--restricted。サンドボックスを前提にするならsandbox.failIfUnavailable: trueを忘れずに
--dangerously-skip-permissions を常用している人ほど、まず auto モードを試す価値があります。プロンプトの数は大きく減りつつ、破壊的な操作はきちんと止まります。