Claude Media
Claude CodeのBypass permissionsが無視される原因と直し方

Claude CodeのBypass permissionsが無視される原因と直し方

バックグラウンドに出る「Bypass permissions was requested at launch and ignored」の意味と、skipDangerousModePermissionPromptの置き場所を直す手順です。

Claude Codeのバックグラウンドセッションで Bypass permissions was requested at launch and ignored と表示されたら、bypassPermissionsモードで起動しようとした要求が捨てられ、セッションがManualモードで始まっています。原因は、bypassの警告ダイアログを承認した記録が、ユーザー設定にも管理設定にも見つからないことです。直し方は ~/.claude/settings.json に "skipDangerousModePermissionPrompt": true を足し、新しいバックグラウンドセッションを始めることです。

通知の全文と、起きていること

バックグラウンドセッションとは、claude --bg や /bg、claude agents(agent view)から作る、端末を占有しないセッションです。そこで出る通知は次の1行です。

Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true

後半は「身に覚えがあるなら、~/.claude/settings.json にこのキーが必要です」という案内です。bypassPermissionsは、確認なしで操作を実行するモードです。画面の前にいない裏のセッションがそのモードに入るので、Claude Codeは「本人が警告を承認した」という記録を求めます。記録が見つからなければ、要求のほうを捨てます。

捨てられた結果は、起動時にどのフラグを渡したかで変わります。

起動時の指定無視されたときの結果
--permission-mode bypassPermissions無視されたときの結果Manualモードで始まる
--dangerously-skip-permissions無視されたときの結果Manualモードで始まる
--allow-dangerously-skip-permissions無視されたときの結果Shift+Tab の切り替え順からbypassPermissionsが外れる

Manualモードは、ツールの実行ごとに承認を求めるモードです。無人で回すつもりだったセッションが、承認待ちで止まる形になります。

どこに書いた記録なら有効か

skipDangerousModePermissionPrompt は、ユーザー設定・ローカル設定・管理設定のどれにも置けるキーです。ところがバックグラウンドセッションが数えるのは、ユーザー設定と管理設定に記録された承認だけです。

くらべる

同じキーでも置き場所で結果が分かれる

有効

~/.claude/settings.json

バックグラウンドセッションが承認の記録として読みます。bypassの要求はそのまま通ります。

無視される

.claude/settings.local.json

対話セッションは、ここにあるキーも承認として数えます。バックグラウンドセッションは数えないので、要求が捨てられます。

プロジェクトの .claude/settings.local.json に書いたキーは、対話セッションでは効きます。そのため「いつもの claude では警告が出ないのに、--bg だけ無視される」という食い違いが起こります。agent viewのドキュメントには、--settings で渡した設定ファイルにだけ承認がある場合も同じ結果になると書かれています。

承認の記録がどこにも無い場合は、通知が出る前の段階で止まります。claude --bg --permission-mode bypassPermissions は拒否され、先に対話セッションでダイアログを承認するよう求められます。ダイアログの仕組みはallow-dangerously-skip-permissionsの解説で詳しく扱っています。

通知が出る2つの経路

通知に行き当たるのは、主に次の2つの経路です。

経路

通知に行き当たりやすい場面

  • claude --bg で直接起動

    --permission-mode bypassPermissions や --dangerously-skip-permissions を付けて起動し、承認がローカル設定にしか無いとき。

  • bypass中のセッションからagent viewを開いて新規作成

    bypassPermissionsで動くセッションから ← でagent viewを開き、そこで新規に作ったセッションが該当します。承認がローカル設定か --settings ファイルだけにあるとき、新しいセッションはManualモードで始まります。

なお、claude agents を直接開く場合とは別の話です。claude agents に --dangerously-skip-permissions や --permission-mode bypassPermissions を渡すと、承認がまだ無いときにその場で警告ダイアログが出ます。承認すれば、そのビューから起動するセッションにbypassPermissionsが適用されます。

原因を切り分ける

承認の記録がどこにあるかを確かめれば、原因は決まります。~/.claude/settings.json とプロジェクトの .claude/settings.local.json を、キー名で検索します。

grep -n skipDangerousModePermissionPrompt \
  ~/.claude/settings.json .claude/settings.local.json

出力の見方は次のとおりです。

切り分け

通知が出たときの切り分け

  1. Q~/.claude/settings.json にキーがあり、値が true か?
    答えがユーザー設定に承認が無い

    次の節の手順で、ユーザー設定にキーを足します。ローカル設定にだけあるなら、これが原因です。

    答えがはい
  2. Q管理設定で disableBypassPermissionsMode が disable になっていないか?
    答えが管理側の制限ではない

    管理者がこの値を "disable" にすると、bypassPermissionsモード自体が使えません。組織の管理設定を確認します。

    答えがはい

それでも出るとき

すでに起動済みのセッションは設定を読み直しません。ユーザー設定に追記したあとは、新しいバックグラウンドセッションを始めます。

管理設定にあるキーは、ユーザー設定と同じく承認として数えられます。組織が配った設定で承認が済んでいるなら、手元で追記する必要はありません。

直し方 — ユーザー設定にキーを足す

直し方は2通りあります。どちらも、承認の記録が ~/.claude/settings.json に残る点は同じです。

手順

ユーザー設定に承認を記録する

  1. 1

    対話セッションで警告を承認する

    bypassPermissionsモードを有効にして対話セッションを始め、警告ダイアログで承認します。承認すると、Claude Codeが ~/.claude/settings.json に skipDangerousModePermissionPrompt: true を書き込みます。

  2. 2

    または、手でキーを足す

    すでに内容を理解しているなら、設定ファイルに直接書けます。

  3. 3

    新しいバックグラウンドセッションを始める

    既存のセッションは直りません。--bg で作り直すか、agent viewから新規にセッションを作ります。

手で書く場合の断片は次のとおりです。ほかのキーがある場合は、既存の内容に1行足します。

{
  "skipDangerousModePermissionPrompt": true
}

ダイアログをもう一度出したくなったら、このキーを消すか false にします。false は未設定と同じ扱いで、ほかの設定ファイルが true を持っていれば、そちらが効きます。

承認は、bypassPermissionsモードに入る前の確認を省くだけの設定です。bypassPermissionsは、保護されたパスへの書き込みも含めて確認なしで通します。公式の警告は、コンテナーやVMのように隔離された環境で使うモードだと述べています。プロンプトインジェクションや意図しない操作への防御が無いため、確認を減らしたいだけならauto modeを使う選択肢もあります。

Manualモードのまま続ける選択肢もある

通知が出たからといって、必ずbypassにする必要はありません。無視されたセッションは、Manualモードで正常に動いています。承認のたびに画面を見られるなら、そのまま続けても問題はありません。

承認が必要な場面を減らしたいだけなら、/permissions で許可ルールを足す方法があります。使い方は/permissionsコマンドの記事にあります。裏で動く複数のセッションを扱うときの止め方は、/backgroundと/stopの記事が参考になります。

claude agentsで警告が出るのに、対話では出ない場合

通知とは別に、似た食い違いがもう1つあります。claude agents を開くとbypassの警告が出るのに、普段の対話セッションでは出ない場合です。対話セッションは、.claude/settings.local.json や --settings ファイルのキーも承認として数えます。claude agents は数えません。

原因を探すときは、まずローカル設定にキーが無いかを確認します。見つかったかどうかにかかわらず、警告を承認すれば ~/.claude/settings.json にキーが書かれ、claude agents はそこを読みます。

defaultModeにbypassPermissionsを書いても同じ結果になる

起動時のモードを permissions.defaultMode で決めている場合も、置き場所の制約があります。bypassPermissions を defaultMode に指定しても、プロジェクトの .claude/settings.json や .claude/settings.local.json に書いた値は効きません。その場合、セッションはManualモードで始まります。効くのは、管理設定・--settings ファイル・~/.claude/settings.json に書いた値です。

つまり、モードの指定と承認の記録は、どちらも ~/.claude/settings.json に集めると食い違いが起きにくくなります。承認だけを直して、モードの指定がプロジェクト側に残っていないかも合わせて確認しておきます。

似た見た目の別エラーとの見分け方

バックグラウンドセッションでは、権限まわり以外にも似た見た目の表示があります。

  • Commands refused: 端末が接続されていないために /mcp などの対話ダイアログが拒否される表示です。直し方はCommands refusedの記事にあります。
  • --dangerously-skip-permissions cannot be used with root/sudo privileges: rootまたは sudo で起動したときに、bypassPermissionsが拒否される表示です。認識されたサンドボックスの内側では、この確認は省かれます。

今回の通知は、あくまで「承認の記録の置き場所」の問題です。モードの選択やフラグの綴りとは別に切り分けます。

まとめ

Bypass permissions was requested at launch and ignored は、バックグラウンドセッションがユーザー設定か管理設定で承認の記録を見つけられず、bypassの要求を捨てたことを示します。ローカル設定にだけキーがある人は、いつもの対話セッションでは何も起きないため、原因に気づきにくい構成です。直し方は、~/.claude/settings.json に承認を記録し、新しいセッションを始めることに尽きます。そのうえで、そもそもbypassが必要な作業かを一度見直す価値があります。

この記事を共有:XはてブLinkedIn