権限とは?AIエージェントにどの操作を許すかを決める仕組み

AIエージェントを使っていると、「このコマンドを実行してよいですか」と何度も尋ねられます。毎回答えるのは手間ですが、すべてを任せきりにするのも不安ではないでしょうか。AIエージェントがどの操作を自分で進めてよく、どの操作で人に尋ね、どの操作をしてはいけないかを決める仕組みが権限です。
本記事では、AIエージェントの開発元の公式ドキュメントをもとに、権限の決め方と判定の順番、サンドボックスとの違いを解説しましょう。
権限とは
権限とは、AIエージェントがツールを使う前に、その操作をしてよいかを判定する設定です。ファイルの読み取りや書き換え、コマンドの実行、Webのページの取得といった操作が対象になります。
判定するのは、モデルではなく、モデルの外側で動くハーネスです。モデルがどれほど自信を持って「実行する」と決めても、権限で止められた操作は実行されません。Claude Codeのドキュメントは、設定した権限のルールについて、Claudeが何を判断するかに関係なく強制される、と説明していました。
許可・確認・拒否の3つ
権限の基本は、操作ごとに3つの扱いのどれかを決めることです。
| 扱い | 意味 | 例 |
|---|---|---|
| 許可 | 尋ねずに実行する | テストのコマンド、ファイルの読み取り |
| 確認 | 実行する前に利用者に尋ねる | ファイルの書き換え、パッケージの追加 |
| 拒否 | 実行しない | 秘密の値を書いたファイルの読み取り、本番の環境への反映 |
多くの製品は、初期設定の段階で、危なさに応じて扱いを分けています。Claude Codeでは、作業フォルダーの中のファイルを読むのは尋ねずに進め、コマンドの実行とファイルの書き換えは確認を求める決まりです。利用者は、この初期設定に自分のルールを足していきます。
ルールを書くときは、ツールの名前と対象を組み合わせてください。Claude Codeの書き方なら、Bash(npm run test *) は「npm run test で始まるコマンド」です。WebFetch(domain:github.com) は「github.comからの取得」を指します。
判定の順番
1つの操作に、複数のルールが当てはまることもあるでしょう。そのため、どのルールを先に見るかが決まっています。
Claude Codeは、拒否、確認、許可の順にルールを見て、最初に当たったものに従います。ルールの細かさは順番に関係しません。「aws で始まるコマンドは拒否」と広く決めておけば、「aws s3 ls は許可」という細かいルールを足しても、拒否が勝ちます。
Codexのコマンドのルールも、考え方は同じです。複数のルールが当てはまったときは、最も厳しい扱いを採ります。
拒否を先に見るのは、安全のためです。誰かが許可のルールを足しても、拒否と決めた操作が実行されることはありません。してはいけない操作は、許可のルールで囲むより、拒否のルールで名指しするほうが確実です。
モードで全体の振る舞いを決める
個々のルールとは別に、全体の振る舞いを切り替える「モード」を持つ製品もあります。どのルールにも当たらない操作を、どう扱うかの初期設定です。
モードは、おおまかに次の段階に分かれます。
- 読み取りだけを許し、書き換えはさせない
- 作業フォルダーの中の書き換えは許し、それ以外は尋ねる
- 尋ねずに進め、別のAIに危なさを判定させる
- 尋ねずにすべて実行する
最後の「すべて実行する」モードは、両社のドキュメントとも扱いに慎重です。Claude Codeは、コンテナや仮想マシンのように、AIが被害を出せない環境でだけ使うよう書いていました。
サンドボックスとの違い
権限とよく並べて語られるのが、サンドボックスです。どちらも危ない操作を防ぐ仕組みですが、働く場所が違います。
権限による判定は、ツールを実行する前に、操作の内容を見て行われます。判定の材料は、コマンドの文字列やファイルの名前です。そのため、見た目で分からない操作は止めきれません。Claude Codeのドキュメントも、ファイルの読み取りを拒否するルールでは、スクリプトが自分でファイルを開く読み取りまでは止まらないと注意していました。
サンドボックスは、実行したコマンドとそこから起動したプログラムを、OSの水準で囲います。作業フォルダーの外へ書けない、許した宛先にしかつながらないといった制限は、コマンドの書き方によらず有効です。
両社とも、2つを補い合う層として位置づけていました。Codexの説明では、サンドボックスが技術的にできることを決め、承認の方針がいつ人に尋ねるかを決めます。Claude Codeは、プロンプトインジェクションでClaudeの判断が迂回されてもサンドボックスの制限は残る、と書いていました。
決めるときの注意
権限を決めるときは、次の点に気をつけましょう。
尋ねられるたびに「今後は尋ねない」を選んでいくと、許可が広がりすぎることがあります。特に、Bash(*) のような、どんなコマンドでも当てはまる許可は避けてください。広く許すなら、サンドボックスと組み合わせましょう。
確認を求められたときは、何を実行しようとしているかを読んでから答えてください。読まずに許可を続けるなら、確認の意味がありません。
チームで使うときは、プロジェクトの設定ファイルに権限を書いて共有するのが便利です。組織によっては、管理者が配る設定で、利用者が上書きできない拒否のルールを決めていることもあります。
製品での使われ方
ここでは、Claude CodeとCodexを例に挙げましょう。
Claude Codeの権限は、設定ファイル(settings.json)の permissions に、allow(許可)、ask(確認)、deny(拒否)のルールとして書く形式です。モードには尋ねながら進める初期設定のほか、ファイルの書き換えを尋ねずに進める acceptEdits や、調べるだけで書き換えない plan、別のAIに危なさを判定させる auto などがあります。
Codexでは、サンドボックスのモード(read-only、workspace-write など)と、承認の方針(on-request、never など)の組み合わせで決める仕組みです。初期設定では、ネットワークへの接続は切られ、書き込みは作業フォルダーの中に限られています。サンドボックスの外で実行してよいコマンドは、.rules ファイルに、コマンドの先頭部分と allow、prompt、forbidden のどれかを書いて決めます(実験的な機能)。