Claude Codeの権限モードを改めて確認してみました。ほぼ公式ドキュメントの情報です。
権限モードの種類
こんだけあります。
| モード名 | CLIでの表示 | Desktopアプリでの表示 | 備考 |
|---|---|---|---|
| default | manual mode | 手動 | |
| acceptEdits | accept edits | 編集を受け入れる | |
| plan | plan mode | プラン | |
| auto | auto mode | 自動 | 利用条件あり |
| bypassPermissions | bypass permissions | 権限をバイパス | 設定により有効化が必要 |
| dontAsk | don't ask | ― | CLIで--permission-mode dontAskを明示的に指定した場合のみ |
作業ディレクトリ
Claude Codeには作業ディレクトリの考え方があり、基本的にはclaudeを起動したディレクトリが作業ディレクトリになります。--add-dirオプションや、スラッシュコマンドの/add-dirを使って別のディレクトリを追加することもできます。
Claude Codeは作業ディレクトリ内のファイルは基本的に触れるのですが、.git, .claude, .vscodeなどは、「保護パス(Protected paths)」として特別扱いされます。
権限モードの整理
defaultモード
ユーザーの許可無しで作業ディレクトリのファイルは読める。作業ディレクトリの書き込みや作業ディレクトリ以外の場所のアクセスには許可を求める。Web検索なども許可が必要。
acceptEditsモード
作業ディレクトリのファイルについては読み取りだけでなく書き込みも行える。ただし、保護パスは例外。作業ディレクトリ外の場所は読み取りも書き込みも許可を求める。
Bashツールで自動で実行されるのは以下のもののみ。(それ以外は許可を求められる)
mkdir, touch, rm, rmdir, mv, cp, and sed
planモード
計画を行うモード。権限としてはdefault相当ですが、そもそも書き込みをしようとしない制御が入っている気がします。
autoモード
acceptEditsモードの動作を基準(作業ディレクトリに書き込める)にしたうえで、ツールを実行していいかを、「classifier」と呼ばれる別モデルが判断。実行していいと判断されてば、作業ディレクトリ外への読み書きや任意のコマンドも実行されるかもしれない。
許可を求める回数は減るものの、「安全は保証しないよ」との注意書きがあるので利用は自己責任で。
bypassPermissionsモード
権限チェックを行わないモードで、基本的にすべてのツールが許可無しで実行されます。rm -rf /のようなものの場合には確認が出ることもあるようですが、そもそもこんなコマンドを実行したいことはあるのかな?
dontAskモード
dontAskは、対話型ではなく、プログラム的に自動実行させる際に使うモードのようです。自動実行中なのでユーザーが許可を出すことができないので、許可が必要な状況になったら自動で「許可しない」動作をします。
まとめ
使ってる感覚ではautoモードで明らかな変なことをされた経験はないですが、作業ディレクトリ以外のファイルも操作可能ということは、改めて頭の片隅に入れておく必要がありますね。
また、保護パスの話は知りませんでした。Claude Codeの設定を変えさせようとしたらいつもと動きが違うな?と思ってたんですが、これの影響だったんですね。(Claude Code出たばかりの頃は「.git消された!」みたいなのがよくあった気がするのですが、いつの間にかブロックされているようでした。)