Claude Code権限モード完全ガイド:6つのモードと設定階層を徹底解説¶
対象:
Claude Codeの権限システムを体系的に理解し、チーム運用に反映したいDevOps担当者・チームリーダー
この記事のポイント¶
- 権限モードは用途別に6種類あり、Shift+Tabで循環する3つとJSON設定の3つに分かれる
- settings.jsonは4階層(Managed → Project → Local → User)の優先度で適用される
- 権限とサンドボックスは別レイヤーであり、併用が推奨される
検証環境(2026年3月)
| コンポーネント | バージョン / 備考 |
|---|---|
| Claude Code | v2.0+ |
| 権限ドキュメント | Configure permissions - Claude Code Docs1 |
| 設定ドキュメント | Claude Code settings2 |
権限システムの全体像¶
Claude Codeはデフォルトで読み取り専用。ファイル編集やコマンド実行は、すべて明示的な承認を経て実行される1。
この動作を制御するのが権限モード、allow/deny/askルール、Hooks、サンドボックスの4つの仕組み。ツール呼び出し時の評価順序は以下の通り。
- Hooksの評価:PreToolUseフックが実行され、許可・拒否・変更を返す
- denyルールの評価:settings.jsonのdenyに該当すればブロック(bypassPermissionsモードでも有効)
- allowルールの評価:allowに該当すれば承認
- askルールの評価:askに該当すれば確認プロンプト
- 権限モードの適用:上記のいずれにも該当しない場合、アクティブなモードに従う
6つの権限モード¶
Shift+Tabで循環する3モード¶
セッション中にShift+Tabを押すと、以下の3モードが順に切り替わる1。
| モード | バナー表示 | 動作 | 用途 |
|---|---|---|---|
| default | (バナーなし) | 各ツール初回使用時に確認を求める | 通常の開発作業。安全性を最優先する場面 |
| acceptEdits | ⏵⏵ accept edits on | ファイル編集を自動承認。Bashコマンドは個別に確認 | リファクタリング、テストコード修正など編集中心のタスク |
| plan | ⏸ plan mode on | 読み取り専用。変更やコマンド実行を行わない | コードレビュー、調査、実行前の計画立案 |
JSON設定で有効化する追加モード¶
以下のモードはsettings.jsonのdefaultModeまたはCLIフラグで指定する1。
| モード | 設定方法 | 動作 | 用途 |
|---|---|---|---|
| dontAsk | settings.jsonのみ | allowルールに該当しないツール呼び出しを自動拒否(確認プロンプトなし) | ヘッドレスエージェント。許可するツールを明示的に定義し、それ以外をサイレントに拒否する場合 |
| bypassPermissions | claude --dangerously-skip-permissions or settings.json | 全権限チェックをスキップ(denyルールとHooksは引き続き評価される) | 隔離されたコンテナ、VM、CI/CDパイプライン専用 |
| Auto Mode | claude --enable-auto-mode | Claudeがリスクを判断し自動承認/確認を切り替え(具体的な判断基準は非公開) | リサーチプレビュー(2026年3月〜)。判断基準が非公開のため、隔離環境での利用を推奨3 |
settings.jsonでのデフォルトモード設定¶
{
"defaultMode": "acceptEdits"
}
defaultModeに指定できる値はdefault、acceptEdits、plan、dontAsk、bypassPermissionsの5つ2。Auto Modeは別系統のCLIフラグで有効化する。
settings.jsonの4階層と優先度¶
Claude Codeの設定は4つの階層で管理され、上位が下位を上書きする2。
| 優先度 | 種別 | ファイルパス | 用途 |
|---|---|---|---|
| 最高 | Managed(管理) | macOS: /Library/Application Support/ClaudeCode/managed-settings.json、Linux/WSL: /etc/claude-code/managed-settings.json | 組織全体のポリシー強制(MDM配布可能) |
| 高 | Project(チーム共有) | .claude/settings.json(ソース管理にコミット) | チームで共有するプロジェクト規約 |
| 中 | Project Local(個人) | .claude/settings.local.json(gitignore対象) | 個人の実験・調整用 |
| 最低 | User(ユーザー) | ~/.claude/settings.json | 全プロジェクト共通の個人設定 |
例えばユーザー設定でallowされた権限が、プロジェクト設定でdenyされている場合、プロジェクト設定が優先されブロックされる。
権限ルールの構文¶
ルールはToolまたはTool(specifier)の形式で記述する1。
基本構文¶
{
"permissions": {
"allow": [
"Edit",
"MultiEdit",
"Bash(npm run *)",
"Bash(git commit *)"
],
"deny": [
"Bash(git push *)",
"Bash(rm -rf *)",
"Bash(curl *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)"
]
}
}
重要な構文ルール¶
グロブパターンのスペースに注意が必要。Bash(ls *)はls -laにマッチするがlsofにはマッチしない。一方Bash(ls*)は両方にマッチする1。
シェル演算子への対応として、Claude Codeは&&などのシェル演算子を認識する。Bash(safe-cmd *)というallowルールはsafe-cmd && other-cmdを承認しない1。
MCPツールの指定はmcp__サーバー名__ツール名形式を使う。例:mcp__puppeteer__puppeteer_navigate。ワイルドカードmcp__puppeteer__*でサーバー内の全ツールを指定することも可能1。
Subagent制御はAgent(AgentName)形式で行う。例:Agent(Explore)をdenyに追加するとExploreサブエージェントが無効化される1。
Bashパーミッションの制限事項¶
Bashの権限パターンでコマンド引数を制約するアプローチは脆弱。例えばBash(curl http://github.com/ *)はGitHub URLに制限する意図だが、以下のバリエーションでバイパスされる1。
- URLの前にオプションが付く場合:
curl -X GET http://github.com/... - プロトコル違い:
curl https://github.com/... - リダイレクト経由:
curl -L http://bit.ly/xyz
推奨される代替手段として、Bashのネットワークツール(curl、wget等)をdenyでブロックし、WebFetch(domain:github.com)で許可ドメインを制御するか、PreToolUseフックでURL検証を実装する1。
サンドボックスとの関係¶
権限システムとサンドボックスは補完的なセキュリティレイヤーであり、併用が推奨される14。
| レイヤー | 適用範囲 | 制御内容 |
|---|---|---|
| 権限 | 全ツール(Bash, Read, Edit, WebFetch, MCP等) | Claudeがどのツール・ファイル・ドメインにアクセス可能か |
| サンドボックス | Bashツールとその子プロセスのみ | ファイルシステムとネットワークへのOSレベルアクセス制限 |
サンドボックスはmacOSではSeatbelt(v1.0.20以降デフォルト有効)、LinuxではbubblewrapをOSプリミティブとして使用する4。
ファイルシステム隔離:作業ディレクトリへの読み書きを許可し、外部ファイルの変更をブロック。ネットワーク隔離:承認済みサーバーへの接続のみ許可し、データの外部送信を防止。
Anthropicの内部テストでは、サンドボックスにより権限プロンプトが84%削減されたと報告されている4。
エンタープライズ管理¶
Managed Settings¶
組織全体のポリシーを強制するには、Managed Settings(管理設定)を使用する2。MDMまたはファイル配置で配布し、ユーザーやプロジェクト設定よりも常に優先される。
{
"permissions": {
"deny": [
"Bash(rm -rf *)",
"Read(./.env)",
"Read(./.env.*)"
]
},
"disableBypassPermissionsMode": "disable",
"disableAutoMode": "disable"
}
disableBypassPermissionsModeを"disable"に設定すると、--dangerously-skip-permissionsフラグとsettings.jsonのbypassPermissionsモード設定の両方が無効化される1。
disableAutoModeを"disable"に設定すると、Auto Mode(--enable-auto-mode)が無効化される3。
/permissionsコマンド¶
セッション中に/permissionsコマンドを実行すると、現在適用されている全ルールとそのソース(どのsettings.jsonから来ているか)を一覧表示できる1。
Hooksによるプログラマティック制御¶
PreToolUseフックは権限システムの前に実行され、ツール呼び出しの許可・拒否・変更をプログラムから制御する5。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "python3 validate_command.py \"$TOOL_INPUT\"",
"timeout": 5000
}
]
}
}
フックの出力JSONで{"hookSpecificOutput": {"permissionDecision": "allow"}}を返すと許可、非ゼロ終了コードで拒否となる。
denyルールの不具合(GitHub Issues #6631等)が報告されているため、セキュリティクリティカルな制限にはdenyルールとHooksの併用が推奨される。
実運用の判断フローチャート¶
| 状況 | 推奨モード | 理由 |
|---|---|---|
| 初めてのリポジトリを調査 | plan | 変更リスクゼロで全体像を把握 |
| 定型的なリファクタリング | acceptEdits | 編集は自動、コマンドは確認 |
| 20ステップ超のエージェンティックタスク | Auto Mode | 判断ベースの自動承認で中断を最小化 |
| CI/CDパイプライン内の自動実行 | bypassPermissions(コンテナ内) | 環境自体がセキュリティ境界 |
| ヘッドレスエージェントで許可ツールを固定 | dontAsk + allowリスト | 未許可ツールをサイレント拒否 |
| 本番資格情報を持つマシンでの作業 | default + denyリスト | 全操作を個別確認、機密ファイルをブロック |
次に読む記事¶
- Claude Code自動承認を安全に運用する完全ガイド — Shift+Tab・Auto Mode・--dangerously-skip-permissionsの使い分け
- Claude Code Hooks完全ガイド — PreToolUse / PostToolUseフックの実装方法
- 運用ベストプラクティス上級編(2026年版) — Hooks・Subagents・コンテキスト管理の11テクニック
- CLAUDE.md入門ガイド — プロジェクト固有の指示を記載する方法
- Claude Code完全コマンドリファレンス — CLI・スラッシュコマンド・キーボードショートカット一覧
Anthropic, "Configure permissions - Claude Code Docs", https://code.claude.com/docs/en/permissions ↩↩↩↩↩↩↩↩↩↩↩↩↩↩
Anthropic, "Claude Code settings", https://code.claude.com/docs/en/settings ↩↩↩↩
Awesome Agents, "Claude Code Gets Auto Mode - No More Permission Prompts", 2026年3月9日, https://awesomeagents.ai/news/claude-code-auto-mode-research-preview/ ↩↩
Anthropic Engineering, "Making Claude Code More Secure and Autonomous", https://www.anthropic.com/engineering/claude-code-sandboxing ↩↩↩
Anthropic, "Control execution with hooks", https://docs.anthropic.com/en/docs/claude-code/hooks ↩