`--dangerously-skip-permissions` を知っていて、計画モードで開始した後に途中で全権承認モードへ切り替える可能性も残しておきたい人向け
devcontainer や VM の中で、まず plan モード(読み込みだけして計画を立てるモード)で安全に作業を始めて、計画を私が確認して納得した後に Shift+Tab で全権モードへ切り替えて長時間タスクを自動で走らせたい場面で、起動の時に <code>claude --permission-mode plan --allow-dangerously-skip-permissions</code> の形で付ける
このスイッチ、字面だけ見ると「危険な権限スキップを許可する」と読めて、結局 --dangerously-skip-permissions と何が違うのか分かりづらい代物です。やっていることは1つだけ。起動時のモードは別のものにしておいて、Shift+Tab で切り替えられる選択肢の中に bypassPermissions モードを忍ばせる、それだけです。
つまり、最初は plan モードで安全に計画立てて、内容を見て納得できたら自分のタイミングで全権モードに切り替えたい。そういう「途中で権限を緩めたい人」のための起動時の指定です。
噛み砕くと
家電の電源タップで例えるなら、--dangerously-skip-permissions は「コンセント挿した瞬間から全口に通電する」タップです。最初から全部の機器が動き出してしまう。
こちらの --allow-dangerously-skip-permissions は、「全口通電のスイッチを付け足すだけで、最初は1口しか通電してない」タップです。手元のスイッチを押すと初めて全口に通電する。押すかどうか、いつ押すかは私の判断にゆだねられています。
この違いが大事なのは、Claude Code を長く触っている人ほど「最初から全権モードで起動するのは雑、でも全権モードに切り替えられない起動も窮屈」という板挟みに気づくからです。このスイッチはその板挟みを解いてくれる存在です。
大事な前提:Shift+Tab の選択肢に「追加するだけ」で、起動モードは別
このスイッチ単独では何も切り替わりません。起動時のモードは --permission-mode で指定した値か、何も指定しなければ default です。bypassPermissions は Shift+Tab を押して順番に切り替えた時に初めて出てくる選択肢として「待機」している状態になります。
Shift+Tab の巡回順は固定で、default → acceptEdits → plan の3つが基本巡回。このスイッチを付けて起動すると、plan の次に bypassPermissions が割り込みます。auto モードも有効なら最後に auto が来ます。
「料理ブログサイトの旧CSS 200ファイル一括書き換え」を例に、実際の手順を見る
題材は、もう何年も継ぎ足しで運用してきた料理ブログサイト。style.css や個別ページ用の .css が合計200ファイルくらいあり、これを Tailwind 風の書き方に一気に書き換えたい。ただし1ファイルずつ確認するのは現実的じゃないし、最初から全自動で走らせるのも怖い。devcontainer の中で安全に進めます。
ステップ1: devcontainer を起動して非rootユーザーで入る
VS Code から開発用の箱を開いて、その中の黒い画面に入ります。whoami で自分が root ではないことを確認しておきます。bypassPermissions モードは root や sudo で起動できない仕様なので、ここで root だったら起動時に弾かれます。
$ whoami
node
ステップ2: plan モード開始+bypassPermissions を選択肢に加えて起動
本題のスイッチを付けて Claude Code を立ち上げます。
$ claude --permission-mode plan --allow-dangerously-skip-permissions
起動直後の画面下のステータス表示は plan です。bypassPermissions ではありません。あくまで「Shift+Tab を巡回した時に選べるようになる隠し選択肢」として用意されている状態。
ステップ3: plan モードで計画を作らせる
Claude に話しかけます。
> このプロジェクトの css/ 配下の全 CSS ファイルを Tailwind v4 風の utility class 中心の書き方に書き換える計画を立ててください。ファイル単位の対応表と、書き換えのリスクが高い箇所を一覧にしてください。
plan モードなので Claude は読み込みだけ行います。書き換えは一切しません。10分ほど考えて、ファイル200個のリスト、書き換え方針、リスクの高い7ファイル一覧を出してきます。リスクが高いのは古い IE 対応のための hack が残っているファイル群です。
ステップ4: 計画レビュー、リスク7ファイルは手作業に切り出す
ここで初心者がやりがちな勘違いがあります。「計画モードだから安全」と思ってザッと流し読みするとあとで痛い目を見ます。私は plan モードを「Claude に整理させた地図を、自分が読み込む時間」として使うようにしています。リスク7ファイルは別タスクに分けて、残り193ファイルだけ自動で書き換えてもらう方針に決定。
ステップ5: Shift+Tab を押して bypassPermissions まで巡回
キーボードの Shift キーを押しながら Tab を1回叩くと、画面下のモード表示が acceptEdits に変わります。もう1回叩くと plan、もう1回叩くと bypassPermissions に変わります。ここで止めます。
もし起動時にこのスイッチを付けていなかったら、3回目の Shift+Tab で default に戻るだけで bypassPermissions は永遠に出てきません。途中から有効化することはできず、起動し直しになります。
ステップ6: 残り193ファイルを自動で書き換えてもらう
Claude にゴーサインを出します。
> さっきの計画通り、リスクなしと判定した193ファイルを順番に書き換えてください。途中で迷ったら止めずに、判断ログを最後に出してください。
あとは Claude が黙々と書き換えていきます。bypassPermissions モードなので「このファイルを書き換えていいですか?」の確認は一切出ません。途中でコーヒー淹れてきます。
ステップ7: 終わったら git diff で全部確認
30分ほどで完了。git diff --stat で193ファイルが変更されていることを確認し、サンプル10ファイルくらいを目で見て品質をチェック。問題があれば git checkout で戻せばいい。devcontainer の中で動かしているので、最悪コンテナごと作り直せば真っさらな状態に戻せる安心感もあります。
つまり --allow-dangerously-skip-permissions は何をしてくれるのか
- やってくれる: Shift+Tab の巡回モード一覧に
bypassPermissionsを追加する。起動時は別モードで安全に始めて、途中で全権モードに切り替える動線を確保する - やってくれない: 起動時のモードを
bypassPermissionsにすることはない。Shift+Tab の巡回順を変えることもない。順番は固定です - 意味が薄い場面: 最初から全権モードで突っ走る前提のタスクには不要で、そういう時は
--dangerously-skip-permissions単独で十分。逆に plan や acceptEdits だけで完結する作業にも不要。「途中で切り替える可能性」を残したい時だけ価値が出る指定です
使いどころ3シナリオ
シナリオ1: 料理ブログの大規模リライトを devcontainer で安全に進めたい時
本記事の実演がそのまま当てはまる場面です。200ファイルの一括書き換えを最初から全自動でやると、計画ミスに気づかないまま180ファイル目まで進行してしまうリスクがあります。plan モードで地図を作って、納得してから Shift+Tab で全権モードに切り替える流れだと、計画と実行の境目で必ず私の判断が1回入ります。この「1回の判断」がプロジェクトを救うことがある。
シナリオ2: 家計簿アプリの依存ライブラリを20個まとめてアップデートしたい時
家計簿アプリで、半年放置していた依存ライブラリを Renovate のリストを見ながらまとめて上げたい。npm outdated の結果が長くて、1個ずつ npm install foo@latest を打つのもしんどい。devcontainer の中で claude --permission-mode plan --allow-dangerously-skip-permissions で起動して、まず plan モードで「どれをどの順番で上げるか、breaking change が出そうなのはどれか」を整理させる。納得したら Shift+Tab で全権モードに移して、自動でアップデート+テスト実行を回します。
シナリオ3: OSS を持ってきた直後、CLAUDE.md を作ってもらいたい時
GitHub から OSS を持ってきて、まず構造を把握したい。devcontainer は .devcontainer/devcontainer.json が既にあるはずなので、それで開く。claude --permission-mode plan --allow-dangerously-skip-permissions で起動して plan モードで全体を読ませる。/init 相当の作業として CLAUDE.md の雛形を提案させる。内容を私が確認して、書き出しは Shift+Tab で acceptEdits に落として手元で見直し、ドキュメント整備が必要なら bypassPermissions まで切り替えて一気に進める。3段階で段階的に権限を緩めていける構成が便利です。
同カテゴリの起動スイッチとの違い
似た名前の起動時の指定が3つあるので、対比表で整理しておきます。
| 起動時に付けるもの | 起動時のモード | bypassPermissions を巡回に追加 | 推奨される動かし方 |
|---|---|---|---|
--allow-dangerously-skip-permissions |
別モード(plan など) | あり | devcontainer などの隔離環境、途中で切り替えたい時 |
--dangerously-skip-permissions |
bypassPermissions で起動 | 既に有効 | devcontainer などの隔離環境、最初から全権でいい時 |
--permission-mode bypassPermissions |
bypassPermissions で起動 | 既に有効 | 上と同じで、書き方が違うだけ |
--permission-mode plan |
plan | なし | 大規模変更前の調査、書き換えは絶対にさせたくない時 |
VS Code 拡張版を使っている場合は、対応する設定として「Allow dangerously skip permissions」のトグルが拡張機能の設定にあります。これをオンにすると、モード表示器の選択肢に bypassPermissions が加わる仕組みです。
初心者が踏みやすい落とし穴
- 「これを付けただけで Shift+Tab の順番が変わる」と誤解する。順番は固定で
default→acceptEdits→plan→bypassPermissions→autoの流れ。bypassPermissions と auto は有効化した時だけ出現します。並び替えはできません - 「
--dangerously-skip-permissionsと何が違うかピンと来ない」まま雰囲気で選ぶ。後者は起動した瞬間から全権モード、こちらは「Shift+Tab を巡回した時に選べるようになる」だけ。最初の挙動が真逆なので、必ず違いを理解してから選んでください - 「セッション中に思い立って
bypassPermissionsを有効化できる」と勘違いする。できません。起動時に--allow-dangerously-skip-permissionsか--dangerously-skip-permissionsか--permission-mode bypassPermissionsのいずれかを付けて起動した時にしか、bypassPermissionsは使えるようになりません。途中で気づいたら起動し直しです - ホストのパソコン本体で起動してしまう。
bypassPermissionsモードに切り替えた瞬間から、Claude はあらゆるファイル書き換え・コマンド実行を確認なしで走らせます。devcontainer や VM の中で、ホストとは隔離された環境で動かすのが鉄則です - root や sudo で起動しようとする。Linux と macOS では、Claude Code は root や sudo 経由で起動した時に
bypassPermissionsモードへ移行することを拒否します。「--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons」というメッセージで止まります。devcontainer の中でnodeのような非root ユーザーで動かすのが公式の推奨 - 「全権モードなら何でもやってくれる」と思い込む。
rm -rf /やrm -rf ~のような壊滅的なコマンドはbypassPermissionsモードでも止まる仕様。v2.1.126 以降は protected paths への書き込みも自動承認の対象に含まれる更新が入っています。最低限の安全装置は残っていますが、ホストで動かして良い理由にはなりません - plan モードで「実行までやってくれる」と期待する。plan モードは読み込みと計画作成のみ。書き換えは絶対にしません。書き換えに進みたければ Shift+Tab で別モードに切り替える必要があります
書き方
claude --permission-mode <モード名> --allow-dangerously-skip-permissions
やってみるとこうなる
入力
claude --permission-mode plan --allow-dangerously-skip-permissions
出力例
起動直後の画面下のステータス表示は plan のまま。Shift+Tab を1回押すと acceptEdits、2回押すと plan、3回押すと bypassPermissions に切り替わる(このスイッチを付けない場合、bypassPermissions は巡回に出てこない)。
このページに出てきた言葉
- 権限モード
- Claude Code がファイル書き換えやコマンド実行の前に私へ確認を取るかどうかの方針。default / acceptEdits / plan / bypassPermissions / auto / dontAsk の6種類
- bypassPermissions モード
- ファイル書き換えもコマンド実行も全部、確認なしで自動承認する権限モード。devcontainer や VM など隔離された環境で使う前提
- plan モード
- Claude が読み込みだけ行い、書き換えは絶対にしない権限モード。大規模変更の前に計画を作らせるために使う
- Shift+Tab
- Claude Code の対話画面で押すと現在の権限モードを順番に切り替えるキー操作
- devcontainer
- プロジェクトフォルダの中に開発環境一式を箱詰めしておく仕組み。ホストのパソコン本体と隔離されているので、中で何が起きても外には影響しない
- root / sudo
- パソコンの中で何でもできる最高権限の利用者、またはその権限を一時的に借りる仕組み。Claude Code はこの権限下では bypassPermissions モードでの起動を拒否する
- protected paths
- Claude Code が「ここだけは自動承認しない」と決めている特別なファイル・フォルダ群。<code>.git</code> や <code>.bashrc</code> など、壊れると作業環境ごと壊れる場所が指定されている