O modelo fine-grained
As três perguntas que o Xokepoint faz em toda chamada de tool, e como cada parte da configuração do agente responde a uma delas.
Quase todo controle de acesso para agentes para na tool: o agente pode chamar merge_pull_request ou não pode. Fica de fora quase tudo o que importa. Fazer merge em qual repositório? Agindo por quem? Com quantas aprovações no pull request? Até quando?
O Xokepoint confere cada chamada com três perguntas, em ordem, e cada parte da configuração do agente responde a uma delas:
| Pergunta | Parte da configuração | Onde fica | Página |
|---|---|---|---|
| Quem delegou? | Who can delegate, por identity provider | Relação no OpenFGA | Quem pode delegar |
| Qual tool? | Os servers e tools do agente | Relação no OpenFGA | Tools |
| Sob quais condições? | Regras na ligação agente · server · tool | CEL no PDP | Regras |
As duas primeiras são relações: existem ou não, e podem ter data de fim. São publicadas antes de qualquer chamada e consultadas no OpenFGA a cada verificação. A terceira é uma regra sobre os dados da chamada: só tem resposta com os argumentos e os trusted attributes daquele momento, e quem avalia é o PDP (Condições).
O que torna o controle fino
Uma regra chega ao objeto concreto. "Pode chamar merge_pull_request" se torna "pode fazer merge em acme/payments-api, e só lá", com a regra repository is one of [acme/payments-api] naquela tool. Cada tool tem suas regras, então o agente pode listar issues em dois repositórios e fazer merge em um só.
Uma regra lê o mundo real. Uma regra pode comparar um argumento da chamada com um trusted attribute que o Xokepoint busca naquele momento numa API do cliente: as aprovações de um pull request, o limite de reembolso de um funcionário, o status de um pedido.
A delegação é por pessoa. O agente só age por quem está marcado no diretório do identity provider, e o mesmo agente pode atender 80 pessoas de um time e ninguém de outro.
Tudo é conferido em toda chamada. Nada fica congelado num token. Revogar uma relação ou mudar uma regra vale na próxima chamada.
A unidade de configuração
Tudo pertence ao agente. A delegação liga sujeitos ao agente, e tools e regras são as mesmas para todo sujeito que delega a ele e para toda instância do agente. Por isso não existe "regra para a alice": se a alice precisa de outro conjunto de permissões, isso é outro agente, outra tool ou outra regra na ligação do agente.
O exemplo completo monta um agente do zero e mostra o resultado de cinco chamadas diferentes.