Claude Code の権限モード(Plan mode、acceptEdits)の違い: claude -p では git commit が止まる
Claude Code を claude -p(対話の画面を開かずに、1回の指示を実行して結果を受け取る使い方)で動かすと、何も指定しないときのモード(Manual、default)では、ファイルの書き込みもコマンドも止まります。acceptEdits にするとファイルの書き込みと touch は通り、git commit は止まりました。設定に許可ルールがあるコマンドは、どのモードでも通ります。2026年11月4日に、Claude Code 2.1.309 で確かめた動きです。
経緯
スクリプトから claude -p で作業を頼んだとき、何が実行されて何が止まるのかが、モードの名前だけでは分かりませんでした。そこで、ファイルの書き込みとコマンドと git commit の3つを、モードごとに頼んで確かめました。
環境
- macOS 26.6
- Claude Code 2.1.309(2026年11月4日に確認)
- Claude Code の VS Code の拡張機能 2.1.318(2026年11月4日に確認)
動き
画面の Manual や Plan は、設定では default や plan と書く
権限モードは、Claude Code がファイルの書き換えやコマンドの前に、承認を聞くかどうかを決めるものです。VS Code の拡張機能とターミナルの対話では、画面に出る名前と、設定や --permission-mode で書く名前が違います(公式の権限モードのページによる)。
| 画面の名前 | 設定で書く名前 | 何をするか |
|---|---|---|
Manual | default | ファイルの書き換えと、多くのコマンドの前に聞く |
Edit automatically | acceptEdits | ファイルの書き換えと、mkdir、touch などのファイル操作のコマンドは、聞かずに通す |
Plan | plan | コードを読むだけで、書き換えの前に計画を見せる |
Auto | auto | 別のモデルが操作を確かめ、問題のないものは聞かずに通す |
VS Code の拡張機能では、入力欄の右下にあるモードの表示を押すと、モードを選べます。ターミナルで対話するときと VS Code の拡張機能では、2.1.283 以降は Auto から始まります。claude -p は Manual(default)から始まります(公式の権限モードのページによる)。
Manual にしてファイルの書き換えを頼むと、Make this edit to calc.js? と確認が出ます。Yes と Yes, allow all edits this session と No から選び、Esc で取り消せます。claude -p にはこの確認を出す画面がないので、承認が要る操作はそのまま止まります。
claude -p では、acceptEdits でも git commit は止まる
空のリポジトリで、次の3つを1回の指示で頼みました。
- ファイルの書き込みのツールで
note.mdを作る - コマンド
touch created-by-bash.txtを実行する - コマンド
git commit --allow-empty -m secondを実行する
ユーザーの設定の許可ルールが混ざらないように、--setting-sources project,local を付けて実行しました。
terminal$ claude -p "(上の3つを頼む文)" --permission-mode acceptEdits --setting-sources project,local
| モード | ファイルの書き込み | touch | git commit |
|---|---|---|---|
default(Manual。claude -p で何も指定しないとき) | 止まる | 止まる | 止まる |
acceptEdits | 通る | 通る | 止まる |
dontAsk | 止まる | 止まる | 止まる |
plan | 止まる(計画のファイルだけ書く) | 止まる | 止まる |
claude -p では承認を聞く相手がいないので、default では承認が要るものはすべて止まります。dontAsk は、承認が要るものを聞かずにすべて断るモードです。acceptEdits は、ファイルを作る touch までは通しましたが、git commit は承認が要るとして止めました。
許可ルールがあるコマンドは、モードに関係なく通る
ユーザーの設定(~/.claude/settings.json)に Bash(git *) の許可ルールがある状態で同じことを頼むと、dontAsk でも git commit だけは通りました。
terminal$ claude -p "(同じ文)" --permission-mode dontAsk
textOnly the git commit succeeded; creating note.md and running touch were both blocked by don't-ask mode.
モードは「聞くかどうか」を決めるもので、許可ルールで決めたものは聞かずに通ります。
公式との違い
公式の権限のページには、モードごとの説明と、許可ルールの書き方があります。claude -p で acceptEdits にしたときに touch が通って git commit が止まること、許可ルールがモードより先に効くことを、実際の結果で並べたものはありません。
対処
スクリプトで決まったコマンドだけ通したいとき
モードを変えるのではなく、--allowedTools でコマンドを指定します。
terminal$ claude -p "..." --allowedTools "Bash(git commit:*)"
何が止まったかを知りたいとき
claude -p は止まった理由を返事の中で説明するので、返事を読みます。上の例では、blocked because they need permission approval のように書かれていました。
注意点
ユーザーの設定の許可ルールは、どのプロジェクトでも効く
~/.claude/settings.json の許可ルールは、すべてのプロジェクトで、どのモードでも効きます。スクリプトで動きを固定したいときは、--setting-sources project,local でユーザーの設定を外します。
bypassPermissions と auto は、この表に入っていない
bypassPermissions はすべての確認を飛ばすモードなので、この表に入れていません。auto の claude -p での動きも、この表には入っていません。どちらも、公式の権限モードのページで確かめてください。
参考文献
著書
articleCloudflare Zero Wire の php2shell のプロンプトを Claude Code で使う手順: 77秒で古い版を特定
articleCursor の Claude Code 拡張機能 2.1.312、2.1.313 の不正な版を確かめる手順: 版と6つの印を見る
articleCodex の常駐プロセス(app-server)と会話の記録: 画面を閉じても動き続ける
articleClaude Code と Codex の違いを同じ課題で比較: 3つともテストは通り、差はテストの数と説明に出た
articleClaude Code のアップデートの動き: Homebrew は自動で上がらず brew upgrade が要る
articleClaude Code の利用制限(usage limit)の見方: 5時間と1週間の残りは /usage で分かる
articleCloudflare Zero Wire の php2shell のプロンプトを Claude Code で使う手順: 77秒で古い版を特定
articleCursor の Claude Code 拡張機能 2.1.312、2.1.313 の不正な版を確かめる手順: 版と6つの印を見る
articleCodex の常駐プロセス(app-server)と会話の記録: 画面を閉じても動き続ける
articleClaude Code と Codex の違いを同じ課題で比較: 3つともテストは通り、差はテストの数と説明に出た
articleClaude Code のアップデートの動き: Homebrew は自動で上がらず brew upgrade が要る
articleClaude Code の利用制限(usage limit)の見方: 5時間と1週間の残りは /usage で分かる


