In Silico

AIエージェント

毎回聞くのをやめる二つの設計、分類器と同意の刻み方

2026/9/7

目次
※ 概念図(背景→問い)・作図:AI 【背景】 代わりに動く道具は、行動のたびに許可を求めてくる毎回確認を求めること自体が新しい障害になっていく 【問い】 聞く回数を減らすとき何を手放しているのか分類器の設計と、同意画面の設計を見比べる
※ 概念図(背景→問い)・作図:AI。実データではない値を一つも含まない。代わりに動く道具は行動のたびに許可を求めてくるという背景から、聞く回数を減らすとき何を手放しているのかという問いへ進む構図を描いた図であり、本文で引く各一次資料そのものの主張ではない。
背景

代わりに動く道具に仕事を任せると、道具は何かをする前に立ち止まって聞いてくる。ファイルを書き換える、外部と通信する、取り消せない操作をする。こうした場面のたびに、道具は進めていいかを尋ねる。

道具が尋ねること自体は理にかなっている。ただし確認が毎回同じ形で続くと、応じる側の姿勢が変わる。中身を読まずに承認する回数が増え、確認は形だけの手続きになる。読まずに通した確認は、安全装置として働いていない。

そこで、聞く回数そのものを減らす必要が出てくる。ただし全部を一度に任せると、確認が果たしていた役目まで手放すことになる。聞かずに済ませる方法は一つではない。実在する設計は複数ある。

問い

承認を毎回求めるのをやめるとき、判断を自動化するのと、聞く単位を小さくするのとでは、何が違うのか。

要点

前者は判断の速さを買い、後者は与える範囲を削る。同じ「聞かない」でも、減らしているものが違う。 一つ目はClaude Codeのauto modeで、承認するかどうかの判断を人手から分類器(あらかじめ学習させたモデルが、個々の行動を機械的に許可・拒否・保留へ振り分ける仕組み)へ渡す設計である1。二つ目はCloudflareが実装したOAuth(アプリが利用者の代わりにサービスへアクセスする権限を、パスワードを渡さずに借りるための取り決め)の同意画面(利用者がアプリに何を許すかをそのつど選ぶ画面)を、作業ごとに必要なスコープ(許可の範囲を切り分けた単位)だけに絞る設計である2。前者は聞く判断そのものを自動化し、後者は聞く範囲を作業単位まで小さくする。どちらも「毎回聞く」をやめているが、中身は同じではない。範囲を絞る側は、絞った分の確認をアプリ自身に持ち帰らせる。独立した二つの実装ドキュメントは、利用者が同意しなかったスコープをアプリが見落とすと機能がその場で壊れる、と注意している34

二つの設計は、同じ問いに逆から答える

代わりに動く道具が広がるほど、確認を求める場面も増える。二つの実在の設計は、この同じ問題を逆方向から解いている。

Claude Codeのauto modeは、確認するかどうかの判断そのものを自動化する1。人が読んで許可を出す代わりに、分類器が個々の行動を機械的に振り分ける。判断を代行させる設計である。

Cloudflareが実装した作業単位のOAuth同意は、逆に判断を人の手に残したまま、聞く範囲を切り詰める2。利用者は画面を見て選ぶが、その画面に載る選択肢は、いま進めようとしている作業が必要とする分だけである。

どちらも結果として、確認のたびに立ち止まる回数は減る。ただし減らしている中身は違う。前者が節約するのは判断にかかる時間で、後者が節約するのは同意を求める範囲そのものである。

判断を自動化する側は、分類器に任せて被害を別の層で縛る

Anthropicは、auto mode以前は二つの選択肢しか無かったと述べている1。一つは、あらゆる行動を人が承認する運用で、実測の承認率は93%に達し、それ自体が確認疲れを招いていた。もう一つは、確認そのものを切る--dangerously-skip-permissionsで、こちらは安全装置を残さない。auto modeはこの二つの間に、分類器による自動承認という中間を置いた。

止まらずに進むのは、ファイルの読み取り、テキストやパターンの検索、コードの参照、利用者があらかじめ設定した常時許可のパターン、プロジェクト内でのファイル編集(バージョン管理を通じて事後に確認できることが前提)、そして組み込みの安全な許可リストに載った道具である1。逆に、シェルコマンドの実行、外部への通信、外部ツール連携、サブエージェントの起動、プロジェクトディレクトリの外側にあるファイルの操作は、いまも分類器の評価にかかる1

判断を分類器に渡すと、次に効くのは分類器自身の作り方である。開発側は、モデルが出す説明文を分類器の入力から取り除いている。その理由を「assistant textを取り除くのは、エージェントが分類器を言いくるめて悪い判断をさせられないようにするためだ」と説明している1。判断させる材料を絞ることで、判断される側が判断する側を説得する余地を減らしている。

自動化しても、蓄積した拒否は人へ返す。分類器が連続して3回拒否するか、セッション全体で20回拒否すると、auto modeは判断を人へエスカレーションする1

ここまでは「うまくいっている」側の説明である。ただしこの設計の価値は、開発元自身が数字つきで限界を書いている点にもある。実運用に近い行動を集めて調べたところ、本来止めるべきだった行動を見逃す率は17%あったと開発元は報告している1。開発側は「これは、被害の大きいインフラに対する注意深い人間のレビューの代わりにはならない」と述べている1。分類器がしていることの限界も、開発側が自分の言葉で名指している。分類器が確かめているのは、利用者が承認したと読める材料(先に出ていた指示や、過去に似た行動を承認した事実)が会話に在るかどうかであり、その材料がこの行動の影響範囲まで同意したものかどうかは確かめていない、という趣旨である1

Anthropicは、被害を抑える役目を判断の外側にも置いている。同じ開発元の別の記事は、サンドボックス(道具が触れる範囲をあらかじめ区切っておく仕組み)を扱っている。この記事が置く条件は二つある。ファイルシステムの隔離、すなわち「Claudeは指定したディレクトリだけにアクセス・変更できる」ことと、ネットワークの隔離、すなわち「Claudeは承認済みのサーバーにしか接続できない」ことである5。両方が要る理由を、開発元は「効果のあるサンドボックスには、ファイルシステムの隔離とネットワークの隔離の両方が要る。ネットワークの隔離が無ければ、乗っ取られたエージェントはSSH鍵のような機微なファイルを持ち出せてしまう。ファイルシステムの隔離が無ければ、乗っ取られたエージェントは容易く外へ逃げてしまう」と説明している5。ここでの脅威モデルは、指示を受け取る側が汚染された入力に乗っ取られるプロンプトインジェクションである5。開発元は社内の検証として、サンドボックスが確認のプロンプトを84%減らしたとも報告している5

つまりauto modeは、判断を分類器へ渡す一方で、被害が着地する範囲そのものはバージョン管理・サンドボックス・人への引き継ぎという、判断とは別の層で縛っている。分類器の精度だけに賭けている設計ではない。

聞く単位を小さくする側は、同意画面をタスクの大きさに合わせる

Cloudflareは、OAuthの以前の姿を「あるアプリケーションが、利用者が心地よいと感じる以上のアクセスを求めた場合、利用者に残された選択肢は、その要求を丸ごと承認するか、まるごと断るかだけだった」と書いている2

これに対してCloudflareが実装したのは、OAuthクライアントを作るときに、標準のscopesと並べてoptional_scopesという配列を渡せるようにする仕組みである2。利用者は同意画面で、この任意スコープを個別に外すことができる。

外した結果は、発行されるトークン(そのアプリがどこまでアクセスしてよいかを運ぶ認可の証)に反映される。Cloudflareは「利用者が任意スコープのいずれかを外して認可フローを完了すると、生成されるアクセストークンには、利用者が同意したスコープしか含まれない」と書いている2。同意画面での選択が、トークンの中身を決める。

もう一つの決定が効いている。Cloudflareは判定の範囲そのものを限定した。「必須スコープと任意スコープは、その特定の認可フローで要求されたスコープに対してのみ評価され、クライアントに設定されているすべてのスコープに対してではない」2。この一文があるため、同じアプリでも作業によって画面に載るスコープの中身が変わる。結果として同意の体験は「アプリが要求しうるすべての能力ではなく、いまの作業に絞られた」ものになる、とCloudflareは書いている2。任意スコープを一つも要求しなければ、同意の体験はこれまでと変わらない2

なお、Cloudflareのこの投稿は、自分たちの設計の限界を書いていない。これは設計に穴が無いという意味ではなく、どちらの開発元が何を公表したかという、開示の姿勢の違いとして読むべきである。この記事が引く資料のうち、自分の弱さを数字つきで書いているのはAnthropicの記事であり、Cloudflareの記事はそれを書いていない。両者の差はこの非対称にとどまる。

削った分は、どこかへ移る

任意スコープという設計は、同意画面を軽くする代わりに、どこかへ仕事を移している。移った先は、そのアプリの実装である。

Googleの文書は、この移った先の仕事を「あなたのアプリは、利用者がどのスコープを許可したかを常に確認し、スコープが拒否された場合はそれに応じた機能を無効にすべきである」と述べている3。同じ文書は正しい実装と誤った実装を対比し、誤った実装を「利用者がどのスコープを許可したかを確認せず、利用者がすべてのスコープを許可したと仮定している」と説明する3。具体的には、呼び出しのたびにスコープの有無を条件分岐で確かめ(tokens.scope.includes(...)のような形)、使えない機能は無効化し、必要になった時点でスコープを求める段階的な認可を組み込む必要がある3。同意画面で一度に聞かなかった分の判断は、アプリの呼び出し箇所の一つ一つへ移っている。

Slackの文書は、アプリがこの移った先の仕事を怠った場合の代償を書いている。以前の姿を「利用者はアプリが求めるすべてのスコープを受け入れるか、立ち去るかのどちらかだった」と述べたうえで、それが「インストールの離脱の増加。信頼の低下。利用者の減少」を生んでいたとする4。任意スコープを導入した後も、Slackは開発側へ「あなたのアプリは、利用者がそれらを許可しない場合に備えておく必要がある」と注意する。許可リストに載っているかどうかを機能を出す前に確認せずにいると、利用者は「作業の途中で壁にぶつかる」ことになる。文書は代わりに「その機能に何が必要で、どうすれば有効にできるかを説明する案内を出すべきで、壊れた体験を見せてはいけない」と書いている4。この文書がもっとも強く書いているのは、こうした手当てを怠るアプリは「仕組み全体の意図を台無しにする」という一文である4

二つの文書は、開発元も対象のプロダクトも違う。それでも移った先の仕事は同じ形をしている。スコープを確認する、機能を無効にする、代替の案内を出す、の三つである。同意画面を軽くする代償は、消えたのではなく、アプリの側へ移動している。

何を集めたのかを見分ける

Anthropicは分類器の限界を一文で書いている。分類器が見つけるのは承認したと読める材料であって、その材料がこの行動の影響範囲に対する同意かどうかまでは確かめない、という一文である1。この一文は、この記事で並べた二つの設計を読み直す基準になる。Anthropicはこの一文をClaude Code自身への注意として書いているが、同じ一文が二つの設計を読む道具にもなる。

承認したと読める材料が在ることと、その行動の影響範囲に同意していることは、別の事実である。 Claude Codeのauto modeは、分類器が前者の材料を集めて判断を代行し、実際の爆発半径(壊れたときに届く範囲)のほうはバージョン管理・サンドボックス・人へのエスカレーションという別の層で縛っている。Cloudflareの任意スコープは逆に、爆発半径そのものを作業単位まで縮めることで、その縮んだ範囲について同意を集めている。前者は証拠を効率よく集める側の設計であり、後者は集める対象そのものを縮める側の設計である。

自分の道具で確認プロンプトを減らそうとするときも、同じ問いを当てられる。減らした後に残っているのは、承認したと読める材料だけなのか、それとも実際の影響範囲についての同意なのか。前者だけなら、被害が着地する範囲を別の層で縛る仕組みを別に用意する必要がある。後者であれば、同意画面を軽くしたぶんの仕事がどこかの呼び出し箇所へ移っていることを、GoogleとSlackの二例と同じ形で引き受ける必要がある。どちらの設計を選ぶにせよ、削った確認の中身がどちらだったかを、自分の言葉で言えるかどうかが分かれ目になる。

出典5件
  1. Anthropic engineering, “Claude Code auto mode”(2026年3月25日公開)。auto mode以前は、あらゆる行動を人が承認する運用(実測の承認率93%で確認疲れを招く)と、確認そのものを切る--dangerously-skip-permissions(安全装置なし)の二択しか無かったと述べる。auto modeはこの間に、モデルベースの分類器による自動承認という中間を置き、安全のガードは保ったまま承認を自動化すると説明する。止まらずに進むのは、ファイル読み取り、テキスト・パターン検索、コード参照、利用者が設定した常時許可パターン、プロジェクト内のファイル編集(バージョン管理で事後に確認できることが前提)、組み込みの安全な許可リストに載った道具。逆に、シェルコマンド実行、外部への通信、外部ツール連携、サブエージェントの起動、プロジェクトディレクトリ外のファイル操作は、いまも分類器の評価にかかる。設計上の判断として「We strip assistant text so the agent can’t talk the classifier into making a bad call.」と述べ、モデルの説明文を分類器の入力から取り除く理由を説明する。連続3回の拒否、またはセッション全体で20回の拒否があると、判断は人間へエスカレーションされる。開発元自身が限界も数字つきで公表している。実運用に近い行動での検証で、本来止めるべきだった行動を見逃す誤り(false negative)が17%あったと報告し、「It is not a drop-in replacement for careful human review on high-stakes infrastructure.」と明記する。加えて、見逃しの中身を「The classifier finds approval-shaped evidence and stops short of checking whether it’s consent for the blast radius of the action.」と述べる。分類器は、利用者が承認したと読める材料(先に出ていた指示や、過去の似た承認)を見つけるところまでは行うが、その材料がこの行動の影響範囲に対する同意であるかどうかは確かめない、という意味である。https://www.anthropic.com/engineering/claude-code-auto-mode 2 3 4 5 6 7 8 9 10 11

  2. Cloudflare blog, “From all-or-nothing to task-based OAuth consent”(2026年8月20日公開、Miller Vargas・José Enrique Rodríguez)。以前の姿を「If an application requested more access than a user was comfortable granting, their only options were to approve the full request, or deny outright.」と述べる。これに対し、OAuthクライアント作成時に標準のscopesと並べてoptional_scopes配列を渡せるようにし、利用者は同意画面でこの任意スコープを個別に外せるようにした。トークンへの反映は「When a user deselects any optional scopes and completes the authorization flow, the generated access token will only contain the scopes they consented to.」と明記。必須・任意の判定は「Required and optional scopes are evaluated only against the scopes requested in a specific authorization flow, not every scope configured on the client.」と述べる。クライアント全体の設定ではなく、そのつどの認可フローの要求だけを見る。結果として同意の体験は「focused on the task at hand, rather than every capability the application could request」になり、任意スコープを一つも要求しない場合は同意の体験は変わらないとする。この投稿自体は、自分たちの設計についての限界を一つも述べていない。それは設計に欠点が無いことの証拠ではなく、この記事が引く四本のうちどれが自らの限界を公表したかという、開示の姿勢の違いとして読む必要がある。https://blog.cloudflare.com/task-based-oauth-consent/ 2 3 4 5 6 7 8

  3. Google for Developers, “How to handle granular permissions”(Identity / OAuth2 ドキュメント)。「Your app should always check which scopes were granted by the user and handle any denial of scopes by disabling relevant features.」と明記し、正しい実装と誤った実装を対比する。誤った実装は「neglects to check which scopes users granted and assumes users granted all scopes」と説明される。具体的には、tokens.scope.includes(...)のような条件分岐で個々のスコープの有無を確認し、使えない機能を無効化し、必要になった時点でスコープを求める段階的な認可(incremental authorization)を組み込むよう案内している。部分的な同意は、同意画面での一括判断ではなく、アプリの呼び出し箇所ごとの確認へと仕事を移すという読み方の根拠になる。https://developers.google.com/identity/protocols/oauth2/resources/granular-permissions 2 3 4

  4. Slack Developers, “Give users the power to choose: introducing optional scopes for Slack apps”(2026年4月14日更新)。以前の姿を「Users either accept every scope your app requests, or they walk away」と述べ、それが「higher installation abandonment. Lower trust. Fewer users.」を生んでいたとする。任意スコープの導入後も、開発側への注意は続く。「Your app needs to be ready for users who don’t grant them」と述べ、エラーは「catch these errors explicitly and respond gracefully」すべきで、機能を出す前に「check whether that scope is in the stored grant list」しないと利用者は「hit a wall mid-workflow」する。代わりに「a prompt explaining what the feature requires and how to enable it, rather than a broken experience」を出すよう勧める。こうした手当てを怠るアプリは「defeats the whole purpose」だと明記する。独立した別のプロダクトのドキュメントが、部分同意のコストが呼び出し箇所へ移るという同じ構図を裏づけている。https://slack.dev/introducing-optional-scopes-for-slack-apps/ 2 3 4

  5. Anthropic engineering, “Claude Code sandboxing”(2025年10月20日公開)。サンドボックスはファイルシステムの隔離(“Claude can only access or modify specific directories”)とネットワークの隔離(“Claude can only connect to approved servers”)の二つの境界からなり、「Effective sandboxing requires both filesystem and network isolation. Without network isolation, a compromised agent could exfiltrate sensitive files like SSH keys; without filesystem isolation, a compromised agent could easily escape.」と説明する。想定する脅威モデルはプロンプトインジェクションである。開発元の内部検証では、サンドボックスの導入で確認プロンプトが84%減ったと報告されている。https://www.anthropic.com/engineering/claude-code-sandboxing 2 3 4

この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。