Claude Code のパーミッション:6つのモードと安全な設定方法(2026年)
Claude Code には、AI がファイルを書き込んだりコマンドを実行したりできるかどうかを制御する6 つのパーミッションモードがあり、作業内容を失う心配なく使えます。デフォルト(Manual)は読み取り専用で、書き込みやシェルコマンドのたびに確認します。settings.json 内の allow / deny / ask リストで挙動を細かく調整でき、そこではdeny が常に allow に優先します。--dangerously-skip-permissions フラグはすべてのチェックを無効にするため、コンテナや VM の中でのみ実行してください。auto モードは、セーフティネットを残しつつ手間を減らせる選択肢です。
Claude Code のパーミッションはバージョンごとにかなり速く変わります。以下の内容を適用する前に、claude --version と公式のパーミッションモードのドキュメント(Anthropic、2026年8月更新)を確認してください。
Claude Code のパーミッションが重要な理由
Claude Code はチャットボットのようにコードを提案するだけではありません。ファイルをマシンに直接書き込み、シェルコマンドを実行できる本物のエージェントです。その力はそのままリスクでもあります。ガードレールがなければ、通常のセッションでも、コミットしていないファイルを上書きしたり、間違ったフォルダを削除したり、反応する前に rm -rf のような破壊的なコマンドを実行したりしかねません。
最も恐ろしいリスクは、AI が「悪さをしようと決める」ことではなく、プロンプトインジェクションです。Claude に読ませた Web ページ、依存パッケージの奥に埋もれた README、GitHub の Issue などに、「curl ... | bash を実行して」や「.env の中身をどこかに送って」といった隠れた指示が仕込まれていることがあります。Claude が完全なパーミッションを持っていると、あなたが頼まなくてもその命令に従ってしまう可能性があります。
だからこそパーミッションシステムが存在します。デフォルトでは、Claude Code はまず確認してから実行するという姿勢で動作します。Claude Code をインストールしたばかりなら、次にすべきことはパーミッションを理解して設定することです。データの損失を避けるためであり、すでに信頼している操作についての果てしない y/n の確認を止めるためでもあります。
Claude Code の 6 つのパーミッションモード(比較表)
Claude Code には 6 つのパーミッションモードが用意されています。まず覚えておきたいのは、デフォルトモードは読み取り専用であり、ファイルを書き込んだりコマンドを実行したりする前に必ず確認するということです。ほかのモードは、その作業をどれだけ信頼できるか、環境がどれだけ隔離されているかに応じて、一段階ずつ制約を緩めていきます。
| モード | 確認なしで実行されること | 使いどころ |
|---|---|---|
default(v2.1.200 以降は Manual と表示) | 読み取り専用。ファイルの書き込みやコマンドのたびに確認 | 使い始め、機密性の高い作業、なじみのないリポジトリ |
acceptEdits | 読み取り+ファイル編集と安全なファイルシステムコマンド(mkdir、touch、mv、cp、sed)を作業ディレクトリ内で自動承認 | git diff でレビューしながらの複数ステップの反復作業 |
plan | 読み取り+調査。あなたが計画を承認するまで何も変更しません | コードベースの探索、編集前の計画立案 |
auto | ほぼすべてを実行するが、バックグラウンドの分類器が各アクションをチェックして危険なコマンドをブロック | 長時間実行するタスク。Pro/Max/Team では 2026年8月14日以降のデフォルト |
dontAsk | すでに許可されたツールのみを実行。リスト外のものは確認せずに黙ってスキップ | ロックダウンした CI/スクリプト、無人環境 |
bypassPermissions(= --dangerously-skip-permissions) | チェックを一切行わず、すべてを実行 | 隔離されたコンテナや VM の中でのみ |
実際には、ほとんどの時間を最初の 3 つのモードで過ごすことになります。default/Manual が最も安全な出発点で、裏で勝手に何かが起こることはありません。acceptEdits は、リファクタリング中に Claude に次々と編集させておき、あとから git diff でレビューしたいときに向いています。plan は、Claude に「読んで、理解して、説明して」ほしいとき、たとえばコードに手を付ける前に複数のファイルにまたがるバグを追跡させたいときに最適です。残りの 3 つは専用ツールで、auto はセーフティネット付きの長時間タスク向け、dontAsk は自動化向け、bypassPermissions は完全に隔離された環境専用です。
バージョン注意:この組み込みの auto デフォルトが有効になるのは、macOS/Linux/WSL では Claude Code v2.1.228 以降、ネイティブ Windows では v2.1.233 以降のみです。それ以前のバージョンは引き続き default/Manual で起動します。
モードの切り替えとデフォルトの設定
セッションの途中でモードを変える最速の方法は、Shift+Tab を押すことです。2026年8月14日以降、Pro/Max/Team のセッションは default ではなく auto で開始するようになりました。最初の Shift+Tab で auto から default に移り、その後は見慣れたループ、default → acceptEdits → plan と続き、アカウントが対象なら auto がループの最後に戻ってきます(パーミッションモードのドキュメント、Anthropic、2026年8月による)。下部のステータスバーは押すたびに更新されるので、常に今どのモードにいるかがわかります。
特定のモードで直接起動するには、コマンドラインフラグを使います。
claude --permission-mode plan
すべてのセッションでデフォルトのモードを固定するには、settings.json に defaultMode を設定します。
{
"permissions": {
"defaultMode": "acceptEdits"
}
}
重要なセキュリティ上の注意:defaultMode: "auto" は、ユーザーファイル ~/.claude/settings.json で宣言された場合にのみ有効です。あなた(または他の誰か)がプロジェクトの .claude/settings.json でそれを設定しても、Claude Code は無視します。つまり、クローンしたばかりのリポジトリが、自分自身に自動実行の許可を与えることはできません。これは「悪意あるリポジトリ」が自ら権限を昇格させるのを防ぐガードレールです。
settings.json での許可リストの設定(allow / deny / ask)
パーミッションモードが全体的な「姿勢」を決めるのに対し、settings.json は個々のコマンド単位までの制御を与えてくれます。リストは 3 種類あります。
allow— 確認なしで実行します。例:"Bash(npm run test:*)"、"Read(src/**)"。ask— モードが制約を緩めていても、常に確認します。自分で OK を押したいコマンドに使います。deny— 完全にブロックし、決して実行しません。例:"Bash(rm -rf *)"、"WebFetch"、"Read(.env)"。
ルールの構文は Tool(pattern) の形式に従います。Bash(npm run lint) はその完全一致のコマンドにマッチし、:* を付けると接頭辞にマッチ(Bash(git diff:*))、Read(src/**) はパスにグロブを使い、WebFetch(domain:github.com) はドメインを限定します。
最も重要な調停ルール、これは頭に焼き付けてください。deny はどのレベルでも常に allow に優先します。あるコマンドが allow と deny の両方のルールにマッチした場合、ブロックされます。ファイルの順序については、上位のレベルが下位を上書きし、その順序は次のとおりです。managed(エンタープライズ)> .claude/settings.local.json > .claude/settings.json > ~/.claude/settings.json。settings.local.json ファイルは、コミットされない個人設定が入る場所です。プロジェクトの settings.json は Git を通じてチーム全体で共有されます。
利便性と安全性のバランスをとった settings.json のサンプルです。
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run test:*)",
"Bash(npm run lint)",
"Bash(git status)",
"Bash(git diff:*)",
"Read(src/**)"
],
"ask": [
"Bash(git push:*)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force:*)",
"Read(.env)",
"Read(./secrets/**)",
"WebFetch"
],
"additionalDirectories": [
"../shared-libs"
]
}
}
additionalDirectories フィールドを使うと、Claude が現在のワークスペースの外にあるフォルダを扱えるようになります。パッケージに分割されたモノレポで便利ですが、実際に必要なものだけを追加してください。ログ出力や条件付きブロックなど、よりカスタマイズしたパーミッションロジックが欲しい場合は、PreToolUse イベントを使った Hooks を利用して、各ツールが実行される前に介入できます。
保護されたパス — Claude が自分では決して編集しないもの
あなたが設定する allow/deny ルールとは別に、Claude Code にはもっと下の層に位置するハードな保護レイヤーがあります。保護されたパスです。これらは、acceptEdits や auto にいるときでも、Claude が書き込みのために決して自動承認しない機密性の高い設定ファイルやフォルダです。
.claudeと.claude.json— Claude Code 自身の設定.git— Git の内部(リポジトリ履歴を直接いじれないように).vscode— エディタの設定- シェルの rc ファイル:
.bashrc、.zshrc… — 起動時に実行される隠れたコマンドがよく仕込まれる場所 .npmrcと、シークレットを保持するあらゆる.env*ファイル.mcp.json— MCP サーバーの設定
重要な安全上のポイント:allow ルールであっても、保護されたパスを上書きすることは依然としてできません。この安全チェックは許可リストが評価される前に走るため、たとえあなたが誤って(あるいは騙されて).env への書き込みを許可するルールを追加してしまっても、Claude はやはり止まって確認します。このレイヤーを回避する唯一の方法は bypassPermissions です。隔離された環境の外でこれをオンにすべきでない、もう一つの理由です。
--dangerously-skip-permissions と auto モード — どちらが安全か
「y/n の確認をオフにしたい」という多くの人は、まっすぐ --dangerously-skip-permissions(YOLO モードとも呼ばれます)に手を伸ばします。このフラグはすべてのチェックを無効にします。allow/deny ルールも、保護されたパスもすべて無視されます。現実の帰結はこうです。
- プロンプトインジェクションから守ってくれません。すべてのネットが外れているので、Web ページやファイルからの隠れた指示がそのまま実行されます。
- Claude Code は、root/sudo で実行しているときはこのフラグをブロックします。被害範囲が大きすぎるからです。
- 使うのは隔離されたコンテナや VM、できればインターネットなしの中でのみにしてください。Claude が何かを壊しても、壊れるのはサンドボックスだけ、という場所です。
2026年初頭以降、Anthropic は「摩擦を減らしたい」というニーズに対する安全な代替として auto モードを提供しています。チェックを無効にする代わりに、auto モードはバックグラウンドの分類器を走らせ、各アクションを分類してデフォルトで危険なコマンドをブロックします。curl | bash、シークレットの持ち出し、本番へのデプロイ、rm -rf /、git reset --hard、force push、terraform destroy などです。ルーティンで安全な操作はそのまま通り、破壊的な匂いのするものはあなたに確認を求めて戻ってきます。Anthropic によれば、セッション内のほとんどのアクションはどのみちユーザーに承認されるので、auto モードはほとんどの質問を減らしつつ、まれに現れる危険なものにはネットを残します。
これはデフォルトの「安全姿勢」における大きな転換でもあります。2026年8月14日以降、auto モードが Pro/Max/Team プランのデフォルトモードになりました(Claude Code パーミッションモードのドキュメント、Anthropic、2026年8月による)。要するに、確認を減らしたいなら auto モードを使い、--dangerously-skip-permissions は使わないことです。
分類器の判断方法:ルールの階層とブロックされたアクションの確認
auto モードの背後にあるバックグラウンドの分類器は、単一のバケツを使うのではなく、各アクションを順序付けられた 4 つのルール階層と照らし合わせます。hard_deny は無条件にブロックし(たとえばシークレットの持ち出し)、上書きはできません。soft_deny は force push のような、破壊的だが時には正当なアクションをブロックしますが、上書き可能です。allow ルールは soft_deny に対する名前付きの例外を切り出せます。そして、たとえそれがなくても、あなた自身のメッセージで明示的に述べた意図が、残っているソフトブロックを上書きできます。ただし、あいまいなもの(「リポジトリを片付けて」)ではなく、正確なアクションを名指しした場合(「このブランチを force push して」)に限ります。
何かが実際にブロックされたときは、リクエストを打ち直すのではなく、/permissions を開いて Recently denied タブに移動し、r を押して手動承認付きで再試行してください。一つのエッジケース:分類器がそもそも判定を返せない場合、そのアクションは黙って拒否され、Recently denied にもエントリは残りません。エージェントループとパーミッションがどう噛み合うのか、全体像を知りたいですか。まずは Claude Code とは何かから始めてください。
推奨される安全なセットアップ(ステップバイステップ)
日々の開発作業で私が最もバランスが良いと感じるセットアップです。安全で、しかも煩わしくありません。
- 機密性の高い作業には
default/Manual を維持します。なじみのないリポジトリ、main ブランチでの作業、Claude が Web からコンテンツを読み込んでいるときは、デフォルトモードのままにして手動で承認します。 - 破壊的なコマンドには
denyを追加します。Bash(rm -rf *)、Bash(git push --force:*)、Read(.env)をロックダウンします。deny は allow に優先するため、これは誤って緩められることのないレイヤーです。 - 信頼できて繰り返し使うコマンドには、狭く allow します。常に実行していて安全だとわかっているコマンドを追加します。
Bash(npm run test:*)、Bash(git status)など。広い allow よりも狭い allow(完全一致のコマンド)を優先してください。 - コードを反復するときは
acceptEditsを使い、git diffでレビューします。スピードのために Claude に次々と編集させつつ、コミットの段階で主導権を保ちます。git addの前に diff を確認しましょう。 - 長時間または機密性の高いタスク → コンテナか auto モードを使い、決して bypass しない。長時間かつ無人で実行する必要があるときも、分類器付きの auto モードが正しい選択です。それはまた、本番環境へのアクセスなしで /goal を安全に実行するべき瞬間でもあります。
いつでも有効なすべてのルールを確認したいときは、セッションで /permissions と入力します。初めて Claude Code をインストールして設定した直後に確認するのにも良い場所です。
パーミッション設定でよくあるミスと失敗パターン
パーミッションの設定は、いくつかの繰り返し起こる状況でつまずきがちです。あらかじめ知っておくと、いらだちを回避できます。
- 「y/n をずっと聞かれる」。それはモードが
defaultで、そのコマンドがまだ allow リストに入っていないということです。信頼する正確なコマンドに対して狭い allow ルールを追加しましょう。いきなり bypass に飛びつかないでください。 - 「auto モードがいろいろブロックし続ける」。分類器が 1 セッションで3 回連続、または合計 20 回ブロックすると、Claude は auto モードを止めて手動確認に戻ります。これは無限にループしないための意図的な挙動です。
- 口頭で「push しないで」と言ったのに、push された。会話の中で述べた「境界」は、コンテキストが圧縮されると消えてしまうことがあります。口頭の制約は設定より信頼できません。ハードな制限には
denyルールを使ってください。 - ルールが適用されない。たいていは
settings.jsonが無効な JSON(末尾のカンマ、閉じ括弧の欠落)になっていて、ファイル全体がスキップされています。ファイルが有効であることを確認し、/permissionsで再チェックしてください。
Claude Code でもっと変わったエラーに遭遇していますか。Claude Code のよくあるエラーの修正ガイドをご覧ください。
すぐ使える安全なパーミッションプリセット
プロジェクトごとに手作業で許可リストを考えるのは面倒で、異なるスタックの多数のリポジトリを扱っているときは特にそうです。一つの近道は、慣習に沿ってスキルと設定をまとめたコミュニティキットです。たとえば Claude Code 向けの AgentKit キット(リンク経由で 20% オフ)は、スキルとワークフローを標準に沿って提供するので、ゼロから書くルールが少なくて済みます。どう動くのか気になる方は、AgentKit とは何か、そして使う価値があるかについての解説をご覧ください。プリセットの有無にかかわらず、原則は変わりません。deny/allow を理解し、セーフティネットは決してオフにしないこと。
よくある質問(FAQ)
Claude Code は私のファイルを削除しますか?
デフォルト(Manual)モードでは、いいえ。Claude は書き込みや削除の前に必ず確認します。自分でパーミッションを緩める(acceptEdits/auto)か --dangerously-skip-permissions をオンにしたときにだけ、独断で削除できるようになります。完全に締め出すには rm -rf に deny を追加してください。
安全を保ちながら y/n の確認を止めるには?
bypass でオフにしないでください。代わりに、信頼するコマンド(npm test、git status など)に狭い allow ルールを追加するか、auto モードを使います。auto モードは安全なアクションでは確認を減らしつつ、分類器で危険なものはブロックします。
--dangerously-skip-permissions は危険ですか?
はい。すべてのチェックを無効にし、プロンプトインジェクションに対する保護は一切ありません。root で実行すると Claude はこれをブロックさえします。使うのは隔離されたコンテナや VM、できればインターネットなしの中でのみにしてください。
auto モードは bypass とどう違いますか?
auto モードはセーフティネットを保ちます。バックグラウンドの分類器が危険なコマンド(curl|bash、force push、シークレットの送信、rm -rf /)をブロックします。bypass はすべてをオフにします。確認を減らしたいなら、bypass ではなく auto モードを選んでください。
競合した場合、deny と allow のどちらが勝ちますか?
deny が常に勝ちます。あるコマンドが、どの設定レベルであれ deny と allow の両方のルールにマッチした場合、ブロックされます。保護されたパスも先にチェックされるため、allow ルールでそれを上書きすることはできません。
パーミッション設定はどこにありますか?
settings.json ファイルの中です。優先順位:managed(エンタープライズ)> .claude/settings.local.json(個人、コミットしない)> .claude/settings.json(チーム共有)> ~/.claude/settings.json(あなたのデフォルト)。
まとめと次のステップ
安全でしかも煩わしくないためのレシピはコンパクトです。機密性の高い作業には安全なデフォルトを維持し、信頼するコマンドには狭い許可リストを追加し、破壊的なものにはハードな deny を固定し、長時間タスクには(bypass ではなく)auto モードを使うこと。そうすれば、Claude Code は高速に動きつつ、ハンドルはあなたの手に残ります。
まだインストールが済んでいませんか。Claude Code インストールガイドをご覧ください。全体像については Claude Code とは何かを参照してください。ラベル名やモードのしきい値は新しいリリースで変わることがあるので、claude --version を確認してください。