リスクの高いアクションを実行前に承認する BETA
escalate_on_deny は承認リクエストを発行しません拒否は実行されます。 escalate_on_deny: true のタグが付いたルールは、記述どおりに拒否します。一致したルール自身の policy_id、effect: "deny"、reason_code: "RULE_MATCH" が返されます。
英語の原文 -- 翻訳は技術レビュー待ちです
You are protected.
英語の原文 -- 翻訳は技術レビュー待ちです
The escalation does not. The tag is accepted by the policy schema and
carried into the policy bundle, and no enforcer acts on it: no approval request
is raised, no approver is notified, and decision.requires_approval stays
false. Code that branches on decision.requires_approval in order to act on
this tag therefore never runs. (A different mechanism, LLM function policies'
require_approval, does set that field -- escalate_on_deny is not wired to
it.) Tracking: #2391.
現時点で承認をリクエストするには、明示的に呼び出してください。 client.request_approval(decision) は実際の承認リクエストを送信します。タグがこれを自動的に呼び出すことはありません。承認コールバックを参照してください。#2363 のとおり、承認者向けの /approvals ページは本番環境では承認が必要な状態(ゲート)になっているため、リクエストは API を通じて解決します。
これは、公開済みの Python SDK(controlzero 1.13.14)と公開済みの Node SDK(@controlzero/sdk 1.13.6)のどちらにも当てはまります。
使用する適用面: 承認ワークフロー(ダッシュボード + 通知チャネル) 対応モード: Hosted (SaaS) プラン: Teams ステータス: BETA。リクエストの経路は、ホスト型(SaaS)プランを含むすべてのデプロイメントで 提供されています。ポリシーが承認リクエストを発行し、エージェントは一時停止します。承認はデフォルトでオフです。管理者が Settings -> Approvals でスコープ(組織、プロジェクト、または APIキー)ごとに有効にします。有効にするには別の承認者が必要なため、Teams プランから利用できます。
このフローのうち、アクションを一時停止する部分は現在動作します。人間がそれを解除する部分は動作しません。承認の受信箱とリクエスト詳細のルートは、出荷済みのすべてのデプロイメントでダッシュボードにリダイレクトされ、通知のディープリンクも同じパスを指しています。現時点では、Teams を含むどのプランでも、UI からリクエストを承認できません。
その結果は安全ですが、かなり融通が利きません。一時停止されたリクエストは期限まで待機し、SDK は合成された拒否とともに HITLTimeoutError を送出し、アクションは実行されません。現時点で承認を有効にすると、approval_required アクションに対して、監査証跡付きの完全な停止が得られます。承認して続行する動作はまだ提供されません。エンドツーエンドのガイドは承認のセットアップを参照してください。
実施すること
AI エージェントが、ポリシーで approval_required としているアクション(本番デプロイ、高額の返金、外部へのメール送信など)を試みると、リクエストは一時停止し、承認者にすべてのコンテキストを含む Slack またはメールの通知が届きます。受信箱が提供された後は、承認者が Approve または Deny をクリックし、エージェントは続行するか、理由付きの拒否を受け取ります。
このパスが適している理由
- AI エージェントに重要な作業を任せたいが、実行しっぱなしにはさせたくない場合、このパターンが適しています。
- 承認者のプールが小さく予測可能な場合、承認フローはリクエストごとのポリシー編集よりも優れています。
- 明確に拒否したい場合は、通常の DLP ルールまたはポリシーを使用してください。承認は「場合によって可否が変わる」判定のためのものです。
このアプローチを使うべきでない場合
答えが常に同じ場合(「エージェントによる本番への書き込みは決して許可しない」など)は、承認を待たないでください。今すぐ拒否ルールを書いてください。
体験の流れ
Agent -> Control Zero: invoke tool "send_refund" args {amount: $9500, customer: ...}
Control Zero: policy match "high_value_refund" -> deny
SDK: your code calls client.request_approval(decision) -> POST approval request
Control Zero -> Slack / email / in-app bell: "Agent 'billing-bot' wants to refund $9500 to cust_123.
[ Approve ] [ Deny ] [ Open context ]"
Approver clicks Approve once / for 24h / 7d / 30d / forever.
SDK: PendingApproval.wait() resolves -> agent proceeds with the call (allow path).
一時停止して待機するプリミティブは、現在 SDK で提供されています。エージェントはレビュー可能と判断した拒否に対して request_approval() を呼び出し、承認者が判定を下すまで PendingApproval.wait() でブロックします。ポリシーアクション、通知チャネル、監査証跡のすべてがこのフローを支えています。エージェント自身のコードが行うべきステップは request_approval() の呼び出しです。ポリシータグがこれを自動的に行うことはありません。
セットアップ方法
- ルールにタグを付ける。 レビューしたいルールに
escalate_on_deny: trueを付けます。現時点では、これはポリシーを読む人に意図を伝える記録です。拒否をリクエストに変えるのはステップ 3 です。 - 承認を有効にする。 管理者が Settings -> Approvals でスコープ(組織、プロジェクト、または APIキー)の承認を有効にします。デフォルトではオフです。
- SDK を組み込む。 コードがレビュー可能と扱う拒否に対して、
request_approval()とwait()(Python)/requestApproval()とwait()(Node)を呼び出します。リクエストを発行するのはこのステップです。承認コールバックガイドを参照してください。 - どこからでも承認する。 承認者は、アプリ内のベル、メールのマジックリンク、または接続済みのアラートチャネルから操作します。
英語の原文 -- 翻訳は技術レビュー待ちです
Every approval is auditable: who approved, when, why, and what grant was created. See Set up approvals for the full walkthrough and Approval workflow for the decision-kind and scope model.
常時拒否の方がよい場合
答えが常に「いいえ」であれば、承認は使わず、拒否ルールを書いてください。承認を有効にせずに、拒否時に通知してレビューする軽量なループが必要な場合は、理由を付けて拒否し、チャネルに転送します。
- name: high_value_refund
match:
tool: send_refund
argument_gt: { amount: 1000 }
action: deny
reason: 'Refunds over $1,000 require a human approver. Reply in #approvals to authorize.'
アラートチャネルと組み合わせると、拒否の理由とツールの引数がレビュー用のチャネルに届きます。
よくある次のステップ
- 「承認フローを完全にセットアップしたい」 -> 承認のセットアップ
- 「SDK のコールバックを組み込みたい」 -> 承認コールバック
- 「代わりに単純な拒否ルールを書きたい」 -> DLP ルールのセットアップ
- 「ロードマップにほかに何があるか見たい」 -> 機能の提供状況
リファレンス
- コンセプト: ポリシー、通知
- API: API リファレンス