誰が承認ボタンを押すのか:AIエージェントのツールは実行前に本当に確認しているか
執筆: ReviewRamble editors ·
エージェント向けのツールのほとんどは、取り消せない操作の前に確認すると説明しています。問うべきは、その確認がどこにあるかです。エージェントへの指示の中、エージェントを動かすクライアントの中、エージェントと操作対象の間に置かれたゲートウェイの中、あるいはどこにもない、のいずれかです。尋ねないと決めたエージェントを止められるのはこのうち一つだけで、それにも裏口があります。
この記事では、今週公開したレビューを「誰が承認ボタンを押すのか」という一つの問いで読み直します。安全性モデルやプロンプトインジェクション対策のフィルターはAIアプリとエージェントのガードレールに関するガイドで、コーディングエージェントのサンドボックスは5つの層のガイドで扱っているので、ここでは繰り返しません。以下の事実はすべてレビューとそこで引用しているプロジェクト文書に基づいており、私たち自身はこれらのツールを動かしていません。
承認が置かれうる4つの場所
- プロンプトの中。スキルやシステムプロンプトに「先に確認すること」と書かれた一行です。モデルはこれを助言として読みます。
- クライアントの中。Claude Code、Codex、Cursorなどは、ツールを実行する前に承認を求める画面を出します。誰かが無効にするまでは機能しますが、ほとんどのクライアントは無効にできます。
- ゲートウェイの中。エージェントと、それが操作するスマートフォン、アカウント、家との間に置かれたプログラムで、人が答えるまで操作を保留します。モデルが言葉で言いくるめられない唯一の種類です。
- どこにもない。ツールは言われたとおりに動き、確認はその時クライアントで有効になっているものだけです。
プロンプト:お願いであって鍵ではない
Agent Autoloop(3.8)はこの点で珍しく率直です。cronジョブやWebhookからClaude CodeやCodexを無人で動かし、各ルールにはリスクのある手順の前に確認するよう指示するaskFirstを付けられます。プロジェクト自身のセキュリティノートは、askFirstはプロンプトに書かれたお願いにすぎず、エージェントは無視でき、ハブはそれを止められないと明記しています。実行を本当に制限するのはアクセスレベルで、これはクライアント側の権限モードに対応します。fullレベルはClaude CodeのbypassPermissions、Codexのdanger-full-accessに対応し、つまり何に対しても承認がありません。
Google Agent Skills(4.2)は同じ隙間を反対側から見せます。gcloudスキルは、IAMの変更、APIの有効化、削除には明示的な承認が必要だと書く一方で、同じファイルでエージェントにすべてのコマンドへ--quietを付けるよう指示し、gcloud自身の確認プロンプトで止まらないようにしています。cloud-run-basicsスキルはAPIを有効にし、IAMロールを付与し、--allow-unauthenticatedで公開サービスをデプロイし、そのすべてに--quietが付きます。プログラムが強制していた唯一の確認は取り除かれ、残っているのはモデルが従うかどうかわからない一文です。
クライアント:オフにできる確認
多くのMCPサーバーでは、クライアントのツール承認画面が安全対策のすべてです。Xの公式サーバーであるX MCP(3.8)には、投稿の前に確認する仕組みがX側にありません。読み取り専用のスイッチがなければ、確認はクライアントの承認画面だけで、ほとんどのクライアントではこれをオフにできます。投稿は1件$0.015、リンク付きの投稿は$0.200なので、放っておかれたエージェントは評判だけでなくお金も使います。
今週レビューしたツールのいくつかは、設定一つでこの承認画面が消える位置にあります。Autoloopのfullレベルがその一つです。llama-modchip(3.6)はローカルモデルに向けてClaude Codeを起動でき、そのスクリプトはMODCHIP_CLAUDE_SKIP_PERMS=1が設定されたときだけ--dangerously-skip-permissionsを付けます。正しい初期設定ですが、簡単に変えられる設定でもあります。クライアントの承認は本物の制御ですが、設定を編集する人のものであり、無人で動かす構成はたいていこれをオフにして作られます。
クライアントの承認は、誰が答えたかも証明しません。Call Me(3.6)は、エージェントが質問で止まると電話をかけ、あなたの口頭の返事を文字起こしとして返します。「はい、出荷して」は誰が言ったかを示すものが何もないただのテキストとして届き、ホスト型のエンドポイントには10桁の番号以外の認証がありません。レビューは、二度目の確認はエージェント自身の権限設定に置く必要があるとはっきり書いています。
ゲートウェイ:持ちこたえるもの
Pinky(3.6)は、私たちが読んだ中で最も明確なゲートウェイです。エージェントがスマートフォンで行うタップはすべてここを通ります。「支払う」や「送信」のタップはエージェントにapproval_pendingとして返り、あなたがAllowをクリックするまで端末では何も起きず、60秒以内に応答がなければ拒否として扱われます。銀行アプリやパスワード管理アプリはエージェントから見えず、ワンタイムコードは伏せ字で届きます。重要な制限が二つあります。初期状態で承認を待つのは支払い、取引、送金だけで、送信、削除、通話、インストールはSettingsで有効にする必要があります。また、危険なボタンは10言語のラベルで判定するため、珍しいラベルはすり抜ける可能性があり、そのためにすべての手順の前に確認するモードが用意されています。
Codex Security(4.1)は、境界を人ではなくサンドボックスに置きます。検証は読み取り専用でネットワークなしで動き、書き込みを行うパッチ作成の手順はサンドボックスが起動するかを確認し、起動しなければSANDBOX_UNAVAILABLEで拒否します。--external-sandboxオプションはこの強制をオフにして隔離をあなたのコンテナに任せます。Deep scanのワーカーは読み取り専用ですが、OpenAIの言葉では隔離されたオフライン環境ではありません。
Stroq(3.8)はエージェントのフックに入り、エージェントがページ、issue、ファイルから読んだばかりのテキストを繰り返すコマンドについてあなたに確認し、curl | shはそのまま拒否します。README自身が、これはサンドボックスではなくフィルターだと述べています。照合はテキスト単位なので、モデルが一から書いたコマンドは出どころをたどれず、CodexとWindsurfではフックは拒否できても確認はできません。
どこにもない:ただ実行するツール
HomeMCPBridge(2.8)はエージェントをAppleのHomeKitにつなぎます。control_deviceツールはデバイス名と操作を受け取り、その操作にはドアロックの解錠とガレージドアの開放が含まれます。私たちがソースを読んだ限り、確認の手順も許可リストもなく、ロックを読み取り専用にする方法もありません。iPhone MCP(3.2)はAppleのミラーリングアプリを通じて実機のiPhoneを操作し、確認の手順もアプリの許可リストも読み取り専用モードもありません。自身の免責事項には、意図しないメッセージ、データの削除、購入が挙げられています。
このグループで最も強い設計は、存在しないツールです。WhatsApp MCP (finereli)(3.8)には意図的に送信ツールがなく、メッセージングエージェントの最悪の失敗が起こりえません。X MCPのread_only=trueはサーバー側で同じことをします。投稿、メッセージ送信、何らかの変更を行うツールは一覧から外され、トークンに書き込み権限があってもサーバーはそうした呼び出しを拒否します。存在しないツールには、誰かが何かを押す必要がありません。
どのゲートウェイにも裏口がある
ゲートウェイが持ちこたえるのは、それが唯一の入口である場合だけです。PinkyのFAQははっきり書いています。あなたの権限でコマンドを実行できるエージェントは、adb経由でAndroid端末に届き、すべてのルールを飛ばせます。助言は、そうしたエージェントを端末にアクセスできないサンドボックスで動かすか、端末を別のコンピューターにつないでそこでPinkyにHTTPで接続することです。これは通常の構成のClaude CodeとCodexに当てはまるため、ほとんどの読者にとって、ゲートウェイが端末を守るのはこの追加の手順を踏んだ後です。
同じ理屈は逆向きにも働きます。経路上のプロキシは通過するものをすべて見ます。billion-context(3.4)は古いコンテキストを折りたたむためにコーディングエージェントとモデルAPIの間に入るので、すべてのプロンプトとAPIキーが認証なしでここを通り、初期設定では3分ごとにnpmで自身の新しいバージョンを確認します。ゲートウェイに操作の保留を任せる前に、それが何を読めるのか、誰がそのコードを変えられるのかを確かめてください。
承認はどこにあるか:ツール別
| ツール | 取り消せない操作 | 確認の置き場所 | 強化の方法 |
|---|---|---|---|
| Pinky | スマートフォンでの支払い、送信、削除 | ゲートウェイ。初期設定は支払いのみ | 送信と削除を有効にする。シェルを持つエージェントをadbから遠ざける |
| Agent Autoloop | エージェントCLIができることすべて | クライアントの権限モード。askFirstはプロンプト | editのままにする。無人で構わない場合だけfullにする |
| Codex Security | パッチを書く | サンドボックス。--external-sandboxを除く | 組み込みのサンドボックスを保つ。すべてのパッチを読む |
| Google Agent Skills | デプロイ、IAMロールの付与、APIの有効化 | プロンプトのみ。--quietがgcloudの確認を消す | 限定したプロジェクトロール、課金予算、クライアントの承認をオンに |
| X MCP | 投稿とArticlesの公開 | クライアントのみ、またはread_only=true | 読み取り専用で始める。支出上限を設定する |
| HomeMCPBridge | ロックとガレージドアを開ける | どこにもない | 単独で動くエージェントにはつながない |
| Call Me | 口頭の承認を伝える | エージェントの権限設定 | 音声の「はい」は未確認として扱う |
| Stroq | コマンドについて確認するか拒否する | エージェントのフック、テキスト照合 | コンテナか別のアカウントと組み合わせる |
今週から使えるルール
- 取り消せない操作ごとに承認の場所を突き止める。支払い、送信、削除、デプロイ、物理的な操作のそれぞれについて、どのプログラムが保留するのかを書き出してください。答えが「プロンプトに確認するよう書いてある」なら、確認なしとして数えます。
- 確認付きのツールより、ないツールを選ぶ。読み取り専用のスイッチや書き込みツールのないサーバーは、どんなプロンプトにも勝ります。X MCPはread_only=trueで始め、読むだけの仕事なら送信と削除を含まないサーバーを選んでください。
- ゲートウェイがオフにしているものをオンにする。初期設定は狭い範囲です。Pinkyは、送信、削除、通話、インストールを追加するまで支払いの前にしか確認しません。
- 表口を信じる前に裏口を閉じる。シェルを持つエージェントは、adbを含め、あなたのユーザーアカウントが届くものすべてに届きます。ゲートウェイが守る端末や認証情報が見えないサンドボックスか別ユーザーで動かしてください。
- 設定ファイルからスイッチを探す。bypassPermissions、danger-full-access、--dangerously-skip-permissions、--quiet、--external-sandboxは、それぞれ確認を一つ取り除きます。どこで、なぜ設定されているのかを把握してください。
- モデルが反論できない制限でプロンプトを補う。狭いクラウドロール、課金予算、有料APIの支出上限は、エージェントが手順を飛ばしても効き続けます。
- 離れた場所からの「はい」は未確認として扱う。電話やチャットの返事は、誰が答えたかを証明しません。デプロイと支払いは、自分のログインに結びついた承認の後ろに置いてください。
注意点:最もよく持ちこたえるゲートウェイほど新しいものです。Pinkyは公開から1週間、Autoloopは10日、Stroqは約10週間で、安全性の説明は外部のレビューではなくメンテナーによるものです。成熟した制御であるクライアントの承認やクラウドの権限は、エージェントを無人で動かすために人々がオフにするものでもあります。ここに挙げたどのツールも、あなたのお金や玄関のドアをエージェントに任せきりにして安全にしてくれるものではありません。
結論:エージェントの構成には、会社のカードを持たせた新入社員に聞くのと同じ質問をしてください。誰が承認するのか、そしてその人はあなた抜きで承認できるのか。正直な答えが社員本人なら、承認は存在しません。承認はエージェントが編集できないプログラムに置き、仕事に要らないツールは取り上げ、注意は本当に重要な数回のクリックのために取っておくことです。