T-CREATOR

<div />

Claude Code の権限モード(Plan mode、acceptEdits)の違い: claude -p では git commit が止まる

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 で書く名前が違います(公式の権限モードのページによる)。

画面の名前設定で書く名前何をするか
Manualdefaultファイルの書き換えと、多くのコマンドの前に聞く
Edit automaticallyacceptEditsファイルの書き換えと、mkdir、touch などのファイル操作のコマンドは、聞かずに通す
Planplanコードを読むだけで、書き換えの前に計画を見せる
Autoauto別のモデルが操作を確かめ、問題のないものは聞かずに通す

VS Code の拡張機能では、入力欄の右下にあるモードの表示を押すと、モードを選べます。ターミナルで対話するときと VS Code の拡張機能では、2.1.283 以降は Auto から始まります。claude -p は Manual(default)から始まります(公式の権限モードのページによる)。

入力欄の右下のモードの表示を押すと、Manual、Edit automatically、Plan、Auto から選べる

Manual にしてファイルの書き換えを頼むと、Make this edit to calc.js? と確認が出ます。Yes と Yes, allow all edits this session と No から選び、Esc で取り消せます。claude -p にはこの確認を出す画面がないので、承認が要る操作はそのまま止まります。

Manual のときにファイルの書き換えを頼むと、Make this edit to calc.js? と確認が出て、Yes、Yes, allow all edits this session、No から選ぶ

claude -p では、acceptEdits でも git commit は止まる

空のリポジトリで、次の3つを1回の指示で頼みました。

  1. ファイルの書き込みのツールで note.md を作る
  2. コマンド touch created-by-bash.txt を実行する
  3. コマンド git commit --allow-empty -m second を実行する

ユーザーの設定の許可ルールが混ざらないように、--setting-sources project,local を付けて実行しました。

terminal$ claude -p "(上の3つを頼む文)" --permission-mode acceptEdits --setting-sources project,local
モードファイルの書き込みtouchgit 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 での動きも、この表には入っていません。どちらも、公式の権限モードのページで確かめてください。

参考文献

著書

とあるクリエイター

フロントエンドエンジニア Next.js / React / TypeScript / Node.js / Docker / AI Coding