Permissões do agente
O que um agente pode fazer, quem decide isso e o que a pessoa que o executa contribui.
Um agente atua no seu projeto por meio da CLI, da API, do git, dos conectores e dos Apps. Esta página explica como o Beeuni decide o que um agente pode fazer.
Um agente atua como ele mesmo, não como a pessoa que o iniciou. A autoridade dele é suas permissões do Beeuni ∩ sua função de teto. Somente as permissões decidem, da mesma forma que decidem para uma pessoa. Ninguém empresta sua própria função a um agente, portanto o agente faz a mesma coisa independentemente de quem o execute.
O agente é o principal atuante
Cada sessão de agente tem duas identidades:
| Identidade | O que ela decide |
|---|---|
| Principal atuante — o agente | Tudo em recursos compartilhados: permissões do projeto, contas de conectores compartilhadas, segredos do projeto, Apps e git. |
| Em nome de — a pessoa | Somente os recursos próprios daquela pessoa, e apenas na sessão privada dela. |
Cada agente tem uma identidade por projeto: uma conta de serviço que o Beeuni cria para ele. Você nunca possui uma credencial para essa conta.
Permissões do Beeuni — o manifesto decide
Cada agente declara suas permissões do Beeuni em beeuni.yaml, em agents.<name>.beeuni_permissions. O manifesto na branch padrão é a fonte de verdade.
agents:
report-writer:
beeuni_permissions: [project.file.read, project.connector.read, project.app.read]
connectors: [reports-dashboard-api]
secrets: [REPORTS_API_KEY]
apps: [reports-dashboard]
- A lista nega por padrão. Um agente sem
beeuni_permissionsnão recebe nenhuma permissão. allconcede todas as permissões do projeto, ainda limitado pelo teto.beeuni_clié a forma obsoleta. Ela ainda é validada, com um aviso. A presença das duas chaves com valores diferentes em um agente é um erro de validação.
Edite a lista em Customize → Agents → o agente → Beeuni permissions. Um salvamento faz commit de beeuni.yaml. Consulte a referência do manifesto.
O teto — um administrador decide
O teto é uma função do projeto que um administrador vincula à conta de serviço do agente. As permissões do Beeuni do agente nunca excedem esse teto.
- Nenhuma função vinculada: aplica-se o teto padrão do agente. Ele inclui todas as permissões do projeto, exceto
project.credentials.issue. - Uma função vinculada:
memberoumanagerintegradas, ou uma função personalizada. O agente mantém apenas as permissões do Beeuni que a função também concede. - Um teto nunca adiciona uma permissão. Um teto
managernão dá ao agente uma permissão que o manifesto dele não liste.
Defina o teto em Access hub → Projects → o projeto → Add. Selecione o agente em Agents e escolha uma função. Somente administradores que gerenciam funções veem agentes no seletor. A lista de acesso do projeto mostra o teto de cada agente com um selo Agent.
all significa todas as permissões
beeuni_permissions: all, "*" e qualquer lista que contenha "*" significam a mesma coisa: todas as permissões do projeto. Isso inclui project.members.manage (adicionar, alterar ou remover membros e concessões do projeto) e project.delete.
Uma permissão continua exclusiva das pessoas: project.credentials.issue (emitir um token do projeto ou um PAT com escopo no projeto). Um token emitido por um agente não teria permissões de agente, portanto atuaria fora delas. A recusa responde 403 com code: "agent_human_only_action".
Uma entrada que não seja uma permissão concedível é ignorada em tempo de execução, e o restante da lista continua valendo. beeuni validate e uma solicitação de alteração de merge a relatam como erro.
project.read é o inverso: um agente sempre a possui dentro do próprio projeto.
Executar um agente empresta sua autoridade
A pessoa que executa um agente não o limita. Portanto, o direito de executar um agente é a delegação. O Beeuni verifica “esta pessoa pode executar este agente” em todos os pontos de entrada:
| Ponto de entrada | Obrigatório |
|---|---|
| Criar, iniciar ou enviar um prompt para uma sessão; trocar o agente dela | A pessoa pode executar o agente |
| Acionar manualmente um gatilho | A pessoa que o aciona pode executar o agente do gatilho |
| Iniciar uma sessão filha a partir de uma sessão de agente | A pessoa por trás do agente pai pode executar o agente filho. Sem uma pessoa por trás dele, somente o mesmo agente. |
Conceda “pode executar” na guia People do agente ou no Access hub. Os agentes são fechados por padrão: um membro só executa um agente quando uma atribuição o nomeia ou nomeia um de seus grupos.
Recursos pessoais continuam pessoais
Uma sessão de agente acessa um recurso pertencente a uma pessoa somente quando as duas condições são verdadeiras:
- A sessão é executada em nome dessa pessoa.
- A sessão é privada.
Recursos pessoais são conexões de conectores pertencentes a membros, segredos pessoais do projeto, chaves pessoais de provedores e o próprio computador da pessoa. Uma sessão compartilhada, uma sessão de gatilho ou canal e uma execução sem supervisão não acessam nenhum deles.
Quando outra pessoa envia um prompt para uma sessão privada — por exemplo, um administrador da conta que pode abrir as sessões privadas dos membros — a sessão deixa de atuar em nome do criador, permanentemente. O agente mantém suas próprias permissões. A pessoa que envia o prompt nunca atua pelas contas de outra pessoa.
Apps
Um agente abre um App restrito ou privado somente quando sua concessão apps: nomeia o slug do App ou é all, e suas permissões efetivas incluem project.app.read.
| Modo de acesso do App | O agente é admitido quando |
|---|---|
| Público | Sempre |
| Projeto | project.app.read é efetivo |
| Restrito ou privado | O slug está em apps: e project.app.read é efetivo |
| Senha | Nunca |
A caixa de diálogo Access do App lista os agentes com acesso, com base em agents.<name>.apps. Altere a lista na página Apps do agente (Customize → Agents → o agente → Apps), com beeuni agents scope <agent> --apps <slug,slug> ou com uma solicitação de alteração para beeuni.yaml. A página Apps aparece somente quando o projeto está com a flag de recurso Apps ativada.
Backends
Um projeto pode possuir Convex Backends hospedados pelo próprio cliente. Duas permissões os governam. Elas seguem as permissões dos Apps: uma função que possui project.app.read ou project.app.write possui a permissão correspondente de Backend.
| Permissão | Permite |
|---|---|
project.backend.read |
Listar e inspecionar os Backends do projeto: nome, status e URL |
project.backend.write |
Criar e excluir Backends e ler as credenciais de administrador de um Backend. Implica project.backend.read |
A chave de administrador dá controle total sobre os dados e o código de um Backend, portanto sua leitura exige project.backend.write. A função integrada Manager possui ambas as permissões. A função integrada Member possui project.backend.read.
Alterar agentes e gatilhos
beeuni.yaml define o que os agentes podem fazer; portanto, quem incorpora uma alteração na branch padrão define os agentes. As mesmas permissões decidem para um agente e para uma pessoa:
- Fazer merge de uma solicitação de alteração exige
project.gitops.merge. - Um merge que altera
beeuni.yamltambém exige a permissão necessária para a rota direta dessa alteração:agents.*→project.agent.write;triggers→project.trigger.create,.updateou.delete;default_agent→project.agent.write. A função Manager possui essas permissões, e o editor de funções as adiciona a qualquer função que recebaproject.gitops.merge. Obeeuni_permissionsdo agente deve listá-las ou serall. Assim, um agente que só pode fazer merge não consegue ampliar a própria autoridade. - Um agente concede somente o que possui. Quando um agente grava a concessão de qualquer agente (o editor de agentes, as rotas de escopo e concessão de segredos ou uma solicitação de alteração que ele incorpora), toda permissão, conector, segredo e App adicionados pela gravação devem estar na própria concessão efetiva do agente que grava. Conceder
allexige todos eles. Restringir ou remover uma concessão é sempre permitido. Uma recusa responde403comcode: "agent_grant_escalation". - Um push direto para a branch padrão ignora a solicitação de alteração. Uma sessão de agente exige
project.gitops.ref.anye todas as permissões do item 2. O manifesto enviado não pode ser verificado antes de chegar à branch, portanto o agente também deve possuir cada concessão (permissõesall, conectores, segredos e Apps). Caso contrário, ele abre uma solicitação de alteração. - Uma recusa responde
403comcode: "agent_scope_insufficient"(agente) ou"project_role_insufficient"(pessoa) e oactionausente. Quando o manifesto não pode ser lido, o merge responde503comcode: "CR_GOVERNANCE_UNVERIFIED"eRetry-After. Tente novamente. - O teto é um estado IAM exclusivo do administrador. O manifesto nunca o excede.
Ler uma recusa
Cada 403 proveniente de uma verificação de autorização contém code e action:
code |
Significado | Correção |
|---|---|---|
agent_scope_insufficient |
action não está nas permissões do Beeuni do agente |
Adicione-o a agents.<name>.beeuni_permissions |
agent_ceiling_insufficient |
action está fora da função de teto do agente |
Um administrador aumenta o teto |
agent_not_accessible |
A pessoa não pode executar este agente | Conceda o agente a ela |
agent_grant_escalation |
A gravação dá a um agente algo que o agente que grava não possui | Conceda somente o que o autor possui ou peça a uma pessoa para fazer a alteração |
project_role_insufficient |
A própria função da pessoa nega action |
Altere a função dela no projeto |
Auditoria
Cada ação de agente registra três campos: actor é o agente, on_behalf_of é a pessoa ou null, e initiator é human, trigger ou channel. Uma execução de gatilho não registra nenhuma pessoa.
Veja no dashboard
Abra Customize → Agents → o agente → Beeuni permissions. O painel What this agent can do mostra:
- as permissões do Beeuni declaradas em
beeuni.yaml, - a função de teto ou Default agent ceiling,
- a única permissão exclusiva de humanos,
project.credentials.issue, - as permissões efetivas: “As pessoas que podem executar este agente atuam com estas permissões.”
Escopo
Esta página se aplica a todos os agentes que um projeto declara em agents: dentro de beeuni.yaml. Um projeto sem um mapa agents: não declara nenhum agente governado, portanto não há nada para ativar. Não existe uma opção para voltar ao antigo modelo de função do launcher.