Regras
Regras sobre os dados da chamada, o editor de regras, listas de valores exatos, comparação com trusted attributes e edição em CEL.
A terceira pergunta é se os dados desta chamada atendem às condições do cliente. Relações dizem se o agente pode; regras dizem quando. "Pode reembolsar, mas só até o limite do funcionário que pediu" é uma regra, e "só para os pedidos 1001 e 1002" também.
Onde ficam as regras
Uma regra sempre pertence a uma ligação agente · server · tool. Nunca a uma pessoa e nunca a um valor. A regra descreve o que o agente pode fazer com aquela tool, e vale igual para todo mundo que delega a ele e para toda instância do agente.
Uma ligação pode ter várias regras, e todas precisam passar. Várias regras dão o mesmo resultado que uma regra só com todas as condições unidas por AND; mantê-las separadas permite que a negação diga qual regra falhou e que você remova uma parte sozinha.
O editor de regras
No painel de uma tool, Add rule abre o editor. Ninguém precisa escrever CEL:

- Name vem primeiro e é obrigatório. Aparece no grafo, no painel e no Investigate.
- Allow the call when all / any of these are true: todas as condições precisam passar, ou basta uma.
- Cada linha é uma condição, com campo, operador e valor. Add a condition inclui uma linha; o ícone de lixeira remove.
Os campos vêm de dois lugares, e cada um mostra o tipo e a origem:
- Call arguments: os argumentos da tool, lidos do schema dela, como
amount · number — Call arguments. - Trusted attributes: os atributos que as context sources desta tool fornecem, agrupados por fonte, como
subject.refund_limit · number — Acme Employee Directory / Employee profile.
Os operadores dependem do tipo do campo:
| Tipo | Operadores |
|---|---|
| Texto | is, is not, is one of, starts with |
| Número | is at most, is less than, is at least, is more than, is |
| Booleano | is true, is false (sem valor) |
Reads as mostra a regra numa frase, com as condições unidas por AND ou OR: "amount is at most 500 AND order_id is one of [1001, 1002]".
Listas de valores exatos
is one of recebe uma lista, editada como um todo: cada valor aparece entre os colchetes com uma marca para remover, Enter ou vírgula incluem o valor digitado, e colar uma lista inclui todos os valores dela. Uma regra como "order_id is one of [1001, 1002]" só deixa o agente agir nesses pedidos; qualquer outro valor é negado com condition.
Para uma regra que depende de quem é dono de um registro, e não de uma lista fixa, compare o argumento com um trusted attribute, como abaixo.
Comparar com um trusted attribute
Uma condição pode comparar um campo com um trusted attribute do mesmo tipo. Compare with a trusted attribute troca o valor fixo por um seletor de trusted attributes; o botão só aparece quando a tool tem algum desse tipo. Uma condição nunca compara dois argumentos da chamada.

Esta regra só libera o reembolso quando o valor pedido está dentro do limite da pessoa que delegou. O limite vem da API de RH, pelos trusted attributes Employee profile, na hora da chamada:
context.chokepoint.arguments["amount"] <= subject.properties.chokepoint["<binding>"].values["refund_limit"]Mesmo agente, mesma tool, mesma regra: um analista com limite de 200 e uma gerente com limite de 2.000 recebem respostas diferentes para o mesmo pedido, sem ninguém criar agentes separados. Se a API de RH não responde, a chamada é bloqueada, não liberada (Enriquecimento).
Use a value volta para um valor fixo.
Regras sobre o objeto da chamada
Trusted attributes também podem descrever aquilo sobre o que a tool age. Uma regra em refund_order pode ler o pedido na API de pedidos do cliente e só permitir o reembolso de um pedido aberto da pessoa que pediu:
resource.properties.chokepoint["<binding>"].values["status"] == "open"
&& resource.properties.chokepoint["<binding>"].values["owner_id"] == subject.idEditar em CEL
Quem precisa de algo que o editor não expressa usa Edit as CEL (advanced):

O campo CEL expression recebe a expressão. O backend confere se ela devolve um booleano e se os trusted attributes que ela lê existem; o Admin não compila CEL. Depois de uma edição em CEL, a regra não volta para o editor. Discard CEL edits and use the builder descarta a edição.
Salvar
Add to draft inclui a regra no rascunho. O cartão da regra mostra New in draft, e a ligação ganha a marca {} N no grafo. Quando a regra lê trusted attributes, o grafo desenha uma ligação tracejada da tool até a context source. A regra só vale depois de publicar. Uma regra salva não é editada: remova e inclua outra.
No painel, cada regra salva mostra o nome e Reads as com a frase dela. Uma regra escrita em CEL avançado, ou em qualquer CEL que o builder não escreve, aparece em CEL.
O que o Investigate mostra de uma regra
Quando uma regra nega, a lista do Investigate mostra "Rule not met" e a regra como frase, e o inspetor mostra o nome dela no caminho e "Rule not met: amount is at most 500" no resultado, mas nunca os valores avaliados. O registro diz que "Refund up to 500" falhou; ele não guarda o valor da chamada.