pending_approval 判定を返すと、エージェントのツール呼び出しは
ディスパッチされる代わりに保留されます — それは今や人間を待っています。このページは
レビュアーのためのものです:コンソールからエージェントのツール呼び出しの保留を
どう承認するか(または拒否するか)、キューが何を表示するか、そして OrcaRouter が
どう 2 人のレビュアーが同じ決定で衝突するのを防ぐか。
それはヒューマンインザループの解決半分です。呼び出しがなぜ保留されるか、そして
保留されたエージェントがその後どう再送信するかについては、
判定とより深い
承認リファレンスを参照してください。コンソールの
代わりに独自のシステムから解決するには、
承認 webhookを参照してください。
1. レビュアーの席から見た保留呼び出しのライフサイクル
保留された呼び出しは短い帯域外ループです。あなたの仕事は中間のステップです:呼び出しが保留される
ルールが
pending_approval に解決します。リレーはコード
firewall_approval_pending と承認 id を持つ HTTP 400 を返します;呼び出しは
ツールに決して到達しません。エージェントはその id でポーリングを開始します。保留の解決は Developer+ にゲートされています — ファイアウォール Events フィードと
同じゲートです。より低いロールはファイアウォールポリシー、設定、discovered tools を
読めますが、Developer 以上のロールのみが承認キューをリストしたり保留されたツール呼び出しを
承認/拒否したりできます。
ロールとスコープを参照。
2. 保留中キューをリストする
Approvals タブはGET /api/workspace/firewall/approvals を読みます。フィルタなしでは
pending キューを最古順で返します — そのため最も長く待っている呼び出しが上に
位置し、バックログを順に処理します。
state は重要な唯一のフィルタです。値は承認のライフサイクルにマップされます:
state | 返される承認 |
|---|---|
pending (デフォルト) | 保留、決定待ち — あなたの作業キュー。 |
approved | すでに通された。 |
rejected | すでにブロックされた。 |
3. 呼び出しがなぜ保留されたかを読む
各行はレビュアーが必要とする決定入力を運びます — ツール名(tool_name)、
引数フィンガープリント(args_hash、正規化された呼び出し引数の SHA-256 — 生の
引数値は承認に保存されません)、リクエスト id、そしてポリシー、ルール、発火した句を
名指しするプレーンな英語の来歴行:
policy_name — どのポリシーがそれを保留したか
policy_name — どのポリシーがそれを保留したか
マッチしたルールが属する名前付きポリシーで、ワークスペーススコープで解決される
ため、古い id が別のテナントのポリシー名を表面化することは決してありません。
rule_label + matched_clause — 人間向けの理由
rule_label + matched_clause — 人間向けの理由
ルールのラベルと 1 行の「なぜ」記述子 — 例:
command contains rm -rf、または
グロブのみのルールの tool matches "http_fetch"。これがキューの「Held because…」
行をレンダリングします。rule_changed — 信頼できる来歴
rule_changed — 信頼できる来歴
この承認が作成された時点またはそれ以降にマッチしたルールが編集されたとき
true。ライブのラベルと句はその後抑制され(それらはもはや実際に呼び出しを保留した
ものを反映していないかもしれません)、キューは古い来歴の代わりに「rule since
changed」の注記を表示します。ツール名と引数 — 本当の決定入力 — は常に表示されます。4. 承認または拒否
解決はPATCH /api/workspace/firewall/approvals/:id を、approved または rejected
の decision とオプションの reason とともに送ります。ボタンをクリックすると
コンソールがそれをあなたのために行います;形は:
approved→ 保留された呼び出しは進めます。エージェントの次の再送信は、単回使用の 承認ヘッダーを運び、一度通されます。rejected→ 呼び出しはブロックされたままになります。エージェントは拒否を見て、 別のパスを選んだり、ユーザーに尋ねたり、停止したりできます。
decision は閉じた {approved, rejected} セットに対して検証されます — それ以外は
すべて拒否されます。reason は決定とともに記録され、アクター、ツール名、リクエスト id
とともにファイアウォール監査ログに書き込まれます。
すべての解決は、誰が決定したか、決定、理由を名指しするワークスペース監査行を
書き込みます。コンソールの解決は人間のアクターを記録します;
webhookの解決はシステムアクターを記録
します。解決の来歴が決してサイレントにドロップされることはありません。
5. 最初のライターが勝つ:二重解決なし
保留中の承認はレースされる可能性があります — コンソール内の 2 人のレビュアー、または コンソールのクリックとwebhook コールバックが 一緒に到着。OrcaRouter はこれを単一の最初のライターが勝つルールで解決します:- 決定は、承認がまだ
pendingである間のみ発火するアトミックな条件付き更新です。 最初のライターが勝ち、決定を適用します。 - 後のすべてのライターは「すでに解決済み」を観測し、冪等の no-op として扱われ ます — エラーではなく、すでに解決されたドキュメントとともに HTTP 200 を受け取り ます。
resolved: true はあなたの呼び出しが決定を適用したことを意味します;
already_resolved: true は誰か(または何らかの webhook)が先に到達し、あなたが
その結果を見ていることを意味します。いずれにせよ、キューはひとつの一貫した状態に
調停されます。
6. キューを通る具体的なパス
balanced 自律性のワークスペースが、ルールがcommand contains rm -rf にマッチしたため
エージェントの shell.exec 呼び出しを保留します。レビュアーとしてあなたは:
- Approvals を開く — 保留された
shell.execが最古順のpendingリストの上に 位置します。 - 行を読む:ツール
shell.exec、args_hashフィンガープリント、リクエスト id、 そして「Held because…command contains rm -rf」行(マッチしたルールの句から レンダリング)。rule_changedフラグがないため、来歴は最新です。 - ターゲットはスクラッチディレクトリなので、理由とともに承認します。
- あなたの
PATCHはresolved: trueを返します;エージェントの次のポーリングがapprovedを見て、単回使用ヘッダーとともに再送信し、コマンドがちょうど一度 実行されます。
already_resolved: true を返したでしょう — 害なし、二重実行なし。
次に進む場所
承認リファレンス
完全な HITL ループ:保留、ポーリング、再送信、単回使用ヘッダー。
承認 webhook
HMAC 署名付きコールバックで独自のシステムから保留を解決。
判定
pending_approval が 6 つのファイアウォール判定の中のどこに位置するか。
Events ログ
解決された呼び出しの下流の結果をフィードで確認。
