Claude Codeの"permission denied"を症状別に切り分ける——EACCESとAuto Modeクラシファイアは別物だった

Claude Codeの"permission denied"を症状別に切り分ける——EACCESとAuto Modeクラシファイアは別物だった

Claude Codeでpermission deniedが出る原因は一つじゃない。npm installのEACCES権限エラーと、2026年8月にAuto Modeが標準になったことで急増した「classifierによる拒否」を、公式ドキュメントとGitHub Issueの一次情報で切り分けて整理した。

エンジニアのゆとです。

Claude Codeで「permission denied」と出て詰まった人向けの記事を書こうとGitHub Issueを漁っていたら、想定してたのと違う話に行き着いた。

「npm installでEACCESが出る」系の古典的な権限エラーは、実は解決策がほぼ固まっている。ネイティブインストーラーに切り替えれば大体片付く。厄介なのはそっちじゃなくて、2026年8月14日以降、Pro/Max/Teamプランで新規セッションの標準モードが「Auto Mode」に切り替わったことで急増している、まったく別種の「permission denied」だ。

「Permission for this action was denied by the Claude Code auto mode classifier」——これはOSの権限エラーじゃない。allowlistに入れてても、bypassPermissionsを指定してても拒否される、という報告がここ2週間のGitHub Issueに次々積み上がっている。

この記事では、この2種類の「permission denied」を症状別に切り分けて、それぞれの原因と対処法を公式ドキュメントとGitHub Issueの一次情報でまとめた。どっちに当てはまるか分からないまま片方の対処法を試して「直らない」と困っている人向けの内容になっている。


まず切り分ける — 「permission denied」には性質の違う2種類がある

結論から言うと、Claude Codeで見る「permission denied」は大きく2パターンに分かれる。

パターン発生タイミングエラーの正体発生時期
A. OSレベルの権限エラーインストール時・ファイル作成時OS(npm/ファイルシステム)がアクセスを拒否以前からある古典的な問題
B. Auto Modeクラシファイアの拒否セッション実行中AIによる安全性審査が「危険」と判定2026年8月のAuto Mode標準化以降に急増

パターンAは、Claude Code自体の不具合というよりOSの一般的な権限管理の話で、npmのグローバルインストール先が自分の所有じゃない、ファイルの実行ビットが立っていない、といった原因がはっきりしている。

パターンBは事情が違う。Claude Codeが「これは危険な操作かもしれない」と判断したときに、AIの分類器(classifier)が実行前に止める仕組みで、2026年3月にリリースされた機能自体は新しくない。ただし2026年8月14日、Claude Code 2.1.228以降でPro/Max/Teamプランの新規セッションのデフォルト起動モードがAuto Modeに変わったことで、今まで一度もこの機能を意識してこなかった人が急にこの拒否に遭遇するようになった。

code.claude.com
Choose a permission mode - Claude Code Docs 「Pro, Max, and Team plansでは、標準の起動パーミッションモードはAuto Modeである」と明記。この標準化はClaude Code 2.1.228以降(macOS/Linux/WSL)、2.1.233以降(Windowsネイティブ)が対象で、それ以前のバージョンではManualモードが標準のまま。

まずこの2つを混同しないことが最短ルートになる。順番に見ていく。


パターンA — OSレベルの権限エラー(EACCES系)

npm install で EACCES: permission denied が出る

いちばん典型的なのがこれだ。npm install -g @anthropic-ai/claude-code を実行すると、こういうエラーで止まる。

npm error code EACCES
npm error syscall access
npm error path /usr/local/lib/node_modules
npm error errno -13
npm error Error: EACCES: permission denied, access '/usr/local/lib/node_modules'

原因は明確で、npmのグローバルインストール先ディレクトリがroot所有になっているのに、rootではない自分のユーザーで書き込もうとしているから起きる。Anthropic公式のトラブルシューティング記事にも、この原因がそのまま書かれている。

support.claude.com
Troubleshoot Claude Code installation and authentication | Anthropic Help Center EACCES/permission deniedは「sudoでインストールを実行した」か「グローバルnpmディレクトリがroot所有になっている」ときに典型的に発生すると明記。対処法としてネイティブインストーラーへの切り替えか、npmのprefixをユーザー所有ディレクトリに変更する2案を案内している。

ここで絶対にやってはいけないのが sudo npm install -g で押し通すことだ。一時的には通っても、root所有のファイルができてしまい、次のアップデートやアンインストールで別の権限エラーを踏むことになる。公式ドキュメントも「sudoは使うな」と明言している。

対処法1(推奨) — ネイティブインストーラーに切り替える

npmを経由せず、Node.js不要でインストールできるネイティブインストーラーに乗り換えるのが、公式が案内している本命の対処法だ。

# macOS / Linux
curl -fsSL https://claude.ai/install.sh | bash

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

このインストーラーは自前のランタイムを内包していて、npmのグローバルディレクトリの権限問題を丸ごと回避できる。バックグラウンドで自動更新もしてくれるので、以降のバージョンアップ時にまた同じエラーを踏む心配もない。

対処法2 — npmのままいく場合はprefixを変更する

どうしてもnpm経由を維持したい事情がある場合は、グローバルインストール先を自分のユーザーが所有するディレクトリに変更する。

npm config set prefix ~/.npm-global

変更後、~/.npm-global/bin をPATHに追加するのを忘れずに。

# ~/.bashrc または ~/.zshrc に追記
export PATH=~/.npm-global/bin:$PATH

追記後は source ~/.bashrc(または ~/.zshrc)で反映させてから再度インストールする。

zsh: permission denied: claudecommand not found になる場合

インストール自体は成功しているのに、実行しようとすると「permission denied」または「command not found」が交互に出るケースもある。これは実行ビットが落ちている、もしくはPATHの解決順序でWindows側やGit Bash側のバイナリが先に見つかっているパターンで、原因の切り分け方は別記事にまとめてある。

Claude Codeで「command not found: claude」——インストールは成功してるのに動かない理由
Claude Codeで「command not found: claude」——インストールは成功してるのに動かない理由Claude Codeをインストールしたのに「command not found: claude」「is not recognized」と出る原因をPATH・複数インストールの競合・VS Code拡張機能の落とし穴に分けて解説。macOS/Linux/Windows別のコマンド付き。読む →

ファイル作成・編集時に EACCES: permission denied が出る

インストールは無事終わったのに、Claude Codeがファイルを作成しようとした瞬間に権限エラーで止まる、という報告もGitHub Issueに上がっている。

github.com
[BUG] EACCES permission denied when creating Python files · Issue #77172 macOSで claude 「create hello.py with a print statement」 を実行すると、ファイルアクセスのプロンプトを承認したにもかかわらず EACCES: permission denied, open '/home/user/test.py' が出てファイルが作成されない、という報告。それまでは動いていた挙動からのリグレッションだと報告者は述べている。

このケースは作業ディレクトリの所有権や、親ディレクトリのパーミッション設定を疑うのが定石になる。まず自分のユーザーがそのディレクトリに書き込み権限を持っているか確認する。

# 現在のディレクトリの所有権とパーミッションを確認
ls -la .

# 自分のユーザーに所有権を戻す(macOS/Linux)
sudo chown -R $(whoami) .

chown のときだけはsudoを使ってよい。ここでのsudoは「自分のホームディレクトリ配下の所有権を自分に戻す」操作であって、npmのグローバルディレクトリに書き込む操作とは別物だからだ。


パターンB — Auto Modeクラシファイアによる”permission denied”

ここからが今回いちばん書きたかった話だ。パターンAの対処法をひと通り試しても直らない「permission denied」がある場合、疑うべきはOSの権限ではなくAuto Modeのクラシファイアになる。

そもそもAuto Modeとは何か

Auto Modeは、ファイル編集やコマンド実行のたびに人間に確認を求める代わりに、専用の分類器モデル(classifier)がその場で安全性を判断して実行の可否を決める仕組みだ。仕組みの詳細は別記事で扱っているので、まだ触れたことがない場合は先にそちらを読んでおくと理解が早い。

Claude Code Auto Mode 完全攻略 2026——2段階分類器の仕組み・カスタマイズ設定・安全な使い方
Claude Code Auto Mode 完全攻略 2026——2段階分類器の仕組み・カスタマイズ設定・安全な使い方Claude Code Auto ModeはShift+Tabで起動する自律承認モード。2段階分類器の仕組み(17%見落とし率含む)、--dangerously-skip-permissionsとの違い、カスタマイズJSON設定、Enterprise封鎖設計まで網羅。読む →

問題は、2026年8月14日以降、Claude Code 2.1.228(Windowsネイティブは2.1.233)以降のバージョンで、Pro/Max/Teamプランの新規セッションがデフォルトでこのAuto Modeから起動するようになったことだ。Manualモードで確認プロンプトを見ながら作業してきた人が、アップデートを機に何も知らないままAuto Modeに切り替わっている、というケースが相当数あると見ている。

公式ドキュメントは、初回だけ通知を出すとしている。

起動時のパーミッションモードがはじめてAuto Modeになったセッションでは、ターミナルの場合はセッション冒頭に一度だけ、このドキュメントへのリンク付きで通知を表示する

とはいえ流し読みしていれば見落としても不思議はない。「なんか最近、聞かれずに色々やってくれるな」くらいの感覚で使い続けて、ある日いきなり拒否に当たって困惑する、という流れが今のGitHub Issueの傾向に近い。

症状 — Permission for this action was denied by the Claude Code auto mode classifier

拒否されたときに表示される典型的な文言がこれだ。

Permission for this action was denied by the Claude Code auto mode classifier.
Reason: Blocked by classifier.

Blocked by classifier というそっけない理由だけが表示され、具体的に何が引っかかったのかは書かれないことが多い(Claude Code 2.1.208以降の仕様)。ここがパターンAとの決定的な違いで、OSの権限エラーならエラーメッセージにパスやerrnoが出るが、こちらは「AIが危ないと判断した」という抽象的な理由しか出てこない。

公式ドキュメントには、拒否される代表的な操作の一覧がある。ここに該当していないのに拒否される場合は、次に紹介する「誤検知」の可能性が高い。

code.claude.com
Eliminate permission prompts with auto mode - Claude Code Docs curl | bashのような外部コードの実行、本番環境へのデプロイ、force push、シークレットを外部に送る可能性のある変更などをデフォルトでブロックすると明記。一方、作業ディレクトリ内のローカルファイル操作やlockファイルに基づく依存関係のインストールはデフォルトで許可される。

allowlistに入れているのに拒否される(誤検知パターン)

ここが今、GitHub Issueで最も報告数が多いパターンだ。permissions.allow に明示的にツール名を書いてあるのに、Auto Modeのクラシファイアがそれを無視して拒否する。

github.com
A tool listed in permissions.allow is denied by the permission classifier · Issue #83611 settings.local.jsonのpermissions.allowにMCPツール名が正しく含まれている(jqコマンドで実際に確認済み)にもかかわらず、classifierがそのツール呼び出しを拒否する。deny/askルールにも該当箇所はなく、設定ファイル自体は正しくパースされている状態での報告。
github.com
[Bug] Auto mode classifier denies MCP tool calls already in permissions allow list · Issue #88575 permissions.allowに登録済みのMCPツール呼び出しが、Auto Modeのclassifierによって拒否される別の報告。2026年8月21日時点でもオープンのまま。

公式ドキュメントを読むと、これは仕様上の想定順序と矛盾している。本来の評価順序は「1. allow/ask/denyルールで即座に解決 → 2. 作業ディレクトリ内の読み取り専用操作・ファイル編集は自動承認 → 3. それ以外はclassifierへ」となっていて、allowlistに一致した時点でclassifierには回らないはずになっている。この矛盾自体がバグとして報告され続けている状態だ。

bypassPermissionsを指定しているのに拒否される

--dangerously-skip-permissionspermissions.defaultMode: "bypassPermissions" を設定しているセッションでも、Auto Modeのclassifierに引っかかるケースが報告されている。

github.com
Auto mode classifier denies tool calls in bypassPermissions sessions (v2.1.231) · Issue #86451 permissions.defaultModeがbypassPermissionsに設定され、ステータスバーにもbypass permissions onと表示されている状態で、Auto Modeのclassifierによる拒否が発生。公式ドキュメントに列挙されている「bypassPermissionsでも例外的にプロンプトが出るケース」のどれにも該当せず、しかもプロンプトではなく無条件の拒否になっている点が報告者によって指摘されている。

公式ドキュメントの原則では、bypassPermissionsモードでも例外的に確認を求められるケースは「明示的なaskルール」「criticalパスへのrm/rmdir」など、ごく限られたリストに列挙されているだけで、Auto Modeのclassifierはそこに含まれていない。つまりこの動作自体が仕様と食い違っている、という位置づけで報告されている。

MCP経由の操作で「再認証しても直らない」

Google Driveなど外部サービスと連携するMCPコネクタでも、似た症状の報告がある。

github.com
Google Drive MCP connector: permission denied even after full re-auth · Issue #78137 Google Drive MCPコネクタで認証自体は「Authentication successful」と成功するのに、ファイル検索などのツールを呼ぶたびに「The caller does not have permission」エラーが返る。Googleアカウント側の権限を確認・再認証・スコープの取り消しと再許可まで一通り試しても改善しなかったと報告されている。

これはAuto Modeのclassifier起因というより、MCPコネクタ側のスコープ設定とツール呼び出しの間で権限情報が正しく引き継がれていない可能性が高い。「reasonが曖昧なpermission denied」というくくりでまとめて調べていると混ざりやすいので、MCP連携の場合は再認証で直らない時点でMCPサーバー側のログも確認したほうがいい。

対処法 — 拒否されたときにできること

Auto Modeのclassifierによる拒否は、OSの権限エラーと違って「設定を1つ直せば終わり」という単純な話にならない。公式ドキュメントが案内している現実的な対処は次の3つだ。

1. /permissions の「Recently denied」タブから再試行する

拒否された操作は通知として表示され、/permissions コマンドの「Recently denied」タブに一覧される。ここで r キーを押すと、その操作だけ手動承認に切り替えて再実行できる。

# セッション内で実行
/permissions

2. 3回連続または累計20回拒否されると自動でプロンプトに切り替わる

これは覚えておくと安心材料になる仕様で、同じ種類の拒否が3回連続、またはセッション内で累計20回発生すると、Auto Modeは一時停止して通常の確認プロンプトに戻る。この閾値は設定で変更できない。

3. 誤検知が多い場合は /feedback で報告するか、信頼できるインフラを管理者が設定する

公式ドキュメントは「繰り返し拒否される場合、大抵はclassifierが自分のインフラ構成を認識できていないことが原因」としている。個人利用の場合は /feedback で誤検知を報告する、チーム利用の場合は管理者が信頼できるリポジトリ・バケット・サービスを autoMode.environment 設定に登録する、という2つの経路が案内されている。

code.claude.com
Configure auto mode - Claude Code Docs autoMode.environment設定で、組織が信頼するリポジトリ・クラウドバケット・外部サービスを登録し、classifierの誤検知を減らす方法を解説。permissions.askルールを追加して、Auto Modeのままでも特定の操作だけ人間の確認を必須にする「Common boundaries」の設定例も含む。

4. どうしても急ぎたい場合は、その場だけManualモードに戻す

Shift+Tabauto から default(Manual)に切り替えられる。恒常的にAuto Modeを避けたい場合は、~/.claude/settings.jsonpermissions.defaultMode を明示的に "default" にしておけば、次回以降のセッションもManualから起動するようになる。

{
  "permissions": {
    "defaultMode": "default"
  }
}

ここで1つ注意点がある。この defaultMode の設定はプロジェクト側の .claude/settings.json.claude/settings.local.json に書いても効かない"auto" を有効にできるのはユーザー設定(~/.claude/settings.json)またはmanaged settingsだけで、プロジェクト側の設定は無視される仕様になっている。逆に言うと、Auto Modeをオフにして "default" に固定したい場合はこの制約を受けないので、チームの .claude/settings.json にManual固定を書いても機能する。

allowlistの設計自体を見直したい場合は、パーミッション設定の基本設計を扱った別記事も参考にしてほしい。Auto Modeの不具合を踏まえた上で、それでも確認頻度を抑えたい場合の設計パターンがまとまっている。

Claude Codeのパーミッションプロンプトを設計する——allowlistとsettings.jsonで確認頻度を最適化する
Claude Codeのパーミッションプロンプトを設計する——allowlistとsettings.jsonで確認頻度を最適化するClaude Codeのパーミッションプロンプトが頻繁に出て作業が止まる問題を解決する。settings.jsonのallowlist設定、プロジェクト別権限とグローバル権限の使い分け、危険コマンドは残しつつ安全なコマンドを通す設計パターンを実装例付きで解説。読む →

自分の症状がどっちのパターンか、コマンドで確認する

エラーメッセージだけで判断がつかない場合、以下の手順で切り分けられる。

# 1. インストール状態と設定ファイルの妥当性を確認
claude doctor

# 2. 現在のバージョンを確認(2.1.228未満ならAuto Modeはそもそも標準化されていない)
claude --version

# 3. 現在のパーミッションモードを確認(ステータスバー表示)
# ⏵⏵ auto mode on / ⏸ manual mode on などの表示を見る

エラーメッセージに EACCESerrno、具体的なファイルパスが含まれていればパターンA(OSレベル)。Blocked by classifierauto mode classifier という文言が含まれていればパターンB(Auto Mode)、という判断基準になる。ステータスバーに auto mode on と出ている状態で原因不明の拒否に遭遇したら、まずパターンBを疑うのが早い。


OS別の追加の注意点

WindowsやWSL環境では、パターンA・Bどちらとも別に、環境固有の権限まわりの不具合がいくつか報告されている。WSL特有の症状(許可設定が無視される、settings.jsonのglobパターンが効かない等)は別記事で詳しく扱っているので、WSL環境で本記事の対処法を試しても改善しない場合はそちらも確認してほしい。

Claude CodeがWSLで重い・権限プロンプトが消えない——症状別に公式ドキュメントとGitHub Issueで原因を特定した
Claude CodeがWSLで重い・権限プロンプトが消えない——症状別に公式ドキュメントとGitHub Issueで原因を特定したClaude CodeをWSL2で使うと応答開始まで1〜6分かかる、起動直後にフリーズする、settings.jsonの許可設定が効かない——症状別にGitHub Issueと公式ドキュメントの一次情報で原因を切り分け、対処法とネイティブWindows/WSLの選び方をまとめた。読む →

macOSの場合、Gatekeeperやシステム整合性保護(SIP)が絡んで実行がブロックされるケースもある。ネイティブインストーラーで入れ直すことで大半は解消するが、それでも直らない場合はターミナルアプリ自体にフルディスクアクセス権限が付与されているかを「システム設定 → プライバシーとセキュリティ」から確認するといい。


恒久チェックリスト

詰まった時に上から順に試せるチェックリストとしてまとめておく。

  1. claude doctor でインストール状態と設定ファイルの妥当性を確認する
  2. エラーメッセージに EACCES やファイルパスが含まれるか確認する。含まれていればパターンA
  3. パターンAなら、npm経由をやめてネイティブインストーラーに切り替える。sudoは使わない
  4. ファイル作成時のEACCESなら、作業ディレクトリの所有権を chown -R $(whoami) . で確認・修正する
  5. エラーに Blocked by classifierauto mode が含まれるか確認する。含まれていればパターンB
  6. パターンBなら /permissions の「Recently denied」から r で再試行する
  7. 誤検知が多発する場合、個人なら /feedback、チームなら管理者に autoMode.environment の設定を依頼する
  8. とにかく急ぎたいときは Shift+Tab でManualモードに一時的に戻す。恒久的に避けたいなら ~/.claude/settings.jsondefaultMode"default" に固定する(プロジェクト側の設定では無効なので注意)
# 診断コマンドをまとめて実行する
claude --version
claude doctor

FAQ

Auto Modeを完全に無効化することはできる?

個人アカウントでは、~/.claude/settings.jsonpermissions.defaultMode"default" に設定すれば、新規セッションはManualモードから起動する。組織管理下の場合は、管理者がmanaged settingsで permissions.disableAutoMode"disable" に設定すると、Auto Mode自体がShift+Tabのサイクルからも消える。

Blocked by classifier としか表示されないのはなぜ?

Claude Code 2.1.208以降、多くのセッションでは拒否理由が固定文言の Blocked by classifier になっていて、詳しい説明は表示されない仕様になっている。理由を深掘りしたい場合は /permissions の「Recently denied」タブから該当の拒否を確認するのが現状の手段になる。

sudo npm install -gで一度は成功したが、今度は別のエラーが出るようになった

典型的な「rootで書き込んだファイルが後から邪魔をする」パターンだ。一度sudoでインストールした環境は、中途半端にroot所有のファイルが残っている可能性が高い。この場合は既存のグローバルインストールを削除してから、ネイティブインストーラーで入れ直すのが確実になる。

# 既存のnpmグローバルインストールを削除(該当する場合)
npm uninstall -g @anthropic-ai/claude-code

# ネイティブインストーラーで入れ直す
curl -fsSL https://claude.ai/install.sh | bash

Auto Modeの拒否は、セキュリティ的には信頼していい?

「安全側に倒した結果として誤検知が多い」というのが現状に近い。ドキュメント自身も「Auto Modeはプロンプトを減らすが安全性を保証するものではない」と明記している。誤検知の多さにストレスを感じる場合、無理にAuto Modeを使い続けるより、Manualモード+Bashサンドボックスのauto-allowモードを組み合わせる方が、確認頻度を抑えつつ挙動が予測しやすいこともある。


まとめ

Claude Codeの「permission denied」は、原因の階層が全く違う2種類が同じエラー文言でくくられている状態だ。npm installやファイル作成時に出るならOSの権限エラーで、ネイティブインストーラーへの切り替えや所有権の修正で大体片付く。一方、セッション実行中に理由もなく拒否される、allowlistに入れているのに効かない、という場合は2026年8月にPro/Max/Teamの標準モードになったAuto Modeのclassifierを疑うべきで、こちらは設定ファイルの修正だけでは直らないことも多い。

「permission denied」という文字列だけで検索して、片方の対処法を全部試しても直らない、という人は、まずステータスバーで今どのモードにいるかを確認するところから始めるのが遠回りに見えて早い。

github.com
anthropics/claude-code Issues 「permission denied」「classifier」で検索すると、今回扱った以外の関連報告や、その後の修正状況が見つかることがある。同じ症状に心当たりがあれば、既存Issueへのコメントで環境情報を追加すると優先度が上がりやすい。
← 記事一覧に戻る