*.delete em dados reais. Para essas você quer uma
pessoa no loop: retenha a chamada, deixe um humano olhar, depois prossiga apenas
num sim. É exatamente isso que o
veredito pending_approval faz.
Esta página cobre o fluxo de aprovação de agente com human in the loop de
ponta a ponta: como uma chamada retida aparece, como um revisor a resolve do
console ou de um webhook, e como o agente reenvia a chamada aprovada. Para onde o
veredito fica na gramática de regras, veja
Regras do Firewall; para o modelo de política em
torno dele, veja a Visão geral do Firewall.
1. Como é uma chamada retida
Quando uma regra resolve parapending_approval, o motor enfileira um registro
de aprovação e a chamada não chega à ferramenta. O relay retorna HTTP
400 com error.code firewall_approval_pending; o id de aprovação no qual o
agente vai consultar é carregado na error.message legível por humanos:
error.metadata estruturado (quando presente) carrega o detalhe do motivo do
veredito — reason_code, factors, risk_score — não o id de aprovação.
Parseie o id da mensagem, ou obtenha-o do helper do SDK abaixo.
A retenção é imediata — não há um long-poll inline bloqueando sua requisição.
O agente recebe o id de volta, a chamada é estacionada no lado do servidor no
estado pending, e a resolução acontece fora de banda.
Uma chamada retida é registrada como um evento de firewall com veredito
pending_approval, então é filtrável no
log de events bem ao lado dos eventos deny —
você sempre pode ver o que foi retido e, via o registro de aprovação, o que foi
resolvido.2. Um exemplo concreto
Crie uma regra que retém qualquer escrita a uma conexão de produção para um humano:O agente chama a ferramenta
O agente emite
db.write contra prod. A regra corresponde, o motor retém a
chamada, e o relay retorna 400 firewall_approval_pending com um
approval_id.Um humano (ou seu sistema) revisa
Um revisor resolve a aprovação — no console ou via um callback de webhook
assinado (veja §3).
O agente consulta até resolver
O agente consulta o id de aprovação até seu estado não ser mais
pending
(veja §4).3. Resolvendo uma aprovação
Há duas maneiras de transformar uma aprovaçãopending em approved ou
rejected. Ambas compartilham uma garantia de primeira-decisão-vence — a
primeira resolução a aterrissar é aplicada atomicamente, e qualquer resolução
posterior (ou uma duplicata) é um no-op idempotente retornando 200.
Console — um revisor clica aprovar/rejeitar (Developer+)
Console — um revisor clica aprovar/rejeitar (Developer+)
A aba Approvals lista as retenções pendentes mais-antigas-primeiro, cada uma
com o nome da ferramenta e uma linha “Held because…” nomeando a política e a
cláusula de regra que disparou. (Os argumentos crus da chamada não são
armazenados no registro de aprovação — apenas o nome da ferramenta, a
proveniência e um hash de args — então o revisor decide a partir da ferramenta
mais a cláusula correspondida.) Um revisor resolve uma com:
decision deve ser approved ou rejected. Esta rota é UserAuth (a
sessão de console do revisor) e restrita a Developer+ — a identidade do
seu revisor é a autorização, então nenhum segredo compartilhado está
envolvido. As resoluções são escritas no log de auditoria do workspace.Webhook — seu próprio sistema decide, assinado por HMAC
Webhook — seu próprio sistema decide, assinado por HMAC
Para conectar aprovações a um sistema externo (uma aprovação no Slack, um fluxo
de ticketing), configure um segredo de webhook de aprovação para o
workspace, depois faça POST da decisão de volta:O callback é autenticado por HMAC-SHA256: defina o header
X-Orca-Signature: sha256=<hex> para o HMAC de <approval_id>\n<raw_body>
chaveado com o segredo de webhook de aprovação do seu workspace. O id é parte
do material assinado, então uma assinatura capturada não pode ser reproduzida
contra uma aprovação diferente. Sem um segredo configurado, a resolução
conduzida por callback é rejeitada — resolva via o PATCH do console em vez
disso.4. Consulte, depois reenvie
O lado do agente é um loop de consulta seguido de um reenvio. Consulte o estado de aprovação com um token com escopo de firewall-gateway:/evaluate e o gateway MCP); uma chave de relay normal recebe 403. Ela retorna
o documento de aprovação — espere até state ser approved ou rejected em vez
de pending. Um id de outro workspace ou desconhecido retorna 404, nunca
revelando que ele existe para outro tenant.
Reenvie uma vez que o estado for approved: reemita a mesma chamada de
ferramenta, carregando o id de aprovação num header de uso único:
rejected nunca é reivindicável, então o agente deve tratar a rejeição
como um deny terminal e escolher outro caminho.
5. Estados e papéis em resumo
| Estado | Significado | Ação do agente |
|---|---|---|
pending | Retido, aguardando uma decisão | Continue consultando |
approved | Revisor disse sim | Reenvie uma vez com o header |
rejected | Revisor disse não | Trate como um deny |
| Ação | Rota | Auth · papel |
|---|---|---|
| Listar a fila | GET /api/workspace/firewall/approvals | UserAuth · Developer+ |
| Resolver | PATCH /api/workspace/firewall/approvals/:id | UserAuth · Developer+ |
| Callback de webhook | POST /api/v1/firewall/approvals/:id/callback | Assinado por HMAC |
| Consultar estado | GET /api/v1/firewall/approvals/:id | Token de gateway |
6. Onde as aprovações se encaixam
Um vereditopending_approval é um dos
vereditos de firewall — ele se compõe com tudo o
mais numa política. Duas interações que vale conhecer:
- A quarentena de skill escala para uma retenção. Se uma chamada de ferramenta
retida é de propriedade de uma skill em quarentena,
qualquer coisa aquém de um deny é escalada para
pending_approvalautomaticamente — quarentena e aprovações são o mesmo portão de revisão de duas direções. - O shadow mode o achata. No shadow mode
um veredito
pending_approvalé rebaixado paraaudite registrado como[shadow] would …, então você pode medir com que frequência uma retenção dispararia antes de ela começar a controlar o tráfego real.
Para onde ir a seguir
Vereditos
Todos os seis vereditos de firewall e o veredito padrão.
Chaves de gateway
Cunhe o token de firewall-gateway usado para consultar aprovações.
Shadow mode
Meça uma retenção antes de ela controlar o tráfego real.
Referência de regras
Crie a regra que produz um veredito pending_approval.
