Permissions et approbation
Deux questions distinctes, deux blocs distincts. permissions dit qui peut mettre un agent en mouvement. approval dit lesquelles de ses actions s'arrêtent pour attendre une personne une fois qu'il tourne.
Qui peut invoquer
agents:
- name: support-agent
role: support
systemPrompt: You are a courteous support assistant.
permissions:
type: agent
trigger: [admin, member]| Propriété | Description |
|---|---|
permissions.type |
Discriminant de type d'utilisateur. Toujours agent. |
permissions.trigger |
Qui peut invoquer : all, authenticated, ou un tableau de rôles comme [admin, member]. |
Chaque agent reçoit un enregistrement utilisateur synthétique à {name}@agents.sovrium.local. Ce domaine est fixe et non configurable.
Ce qu'admet chaque valeur
| Valeur | Admet |
|---|---|
| omis | Tout appelant authentifié, et personne d'autre. |
authenticated |
Tout appelant authentifié — la même règle que l'omission du grant, énoncée explicitement. |
all |
Tout le monde, appelants anonymes compris. L'opt-in explicite pour un agent public. |
[admin, member] |
Les appelants portant l'un des rôles listés. admin satisfait n'importe quel tableau de rôles, qu'il y figure ou non. |
Omettre trigger ne laisse pas l'agent ouvert. Un agent sans grant déclaré est atteignable par tout appelant authentifié et par personne d'autre — une requête anonyme est refusée. Un agent réellement public, un bot de support sur une page marketing par exemple, doit le dire avec trigger: all. Ce défaut ne coûte rien à un déploiement, car une application qui déclare agents sans auth est rejetée au démarrage : il y a toujours un moyen de détenir une session.
Les refus répondent 404
Un appelant que le grant n'admet pas reçoit 404 Not Found — jamais 403, jamais 401 — et le corps ne nomme aucun agent. C'est délibéré. Le nom de l'agent figure dans l'URL : une réponse distinguant « existe, mais pas pour vous » de « aucun agent de ce nom » permettrait de cartographier votre déploiement, une supposition à la fois. Les deux réponses sont identiques octet pour octet.
La conséquence pratique vaut d'être connue avant d'avoir à déboguer : sur ces routes, le 404 est l'erreur de permission. Il n'y a pas de 403 à chercher.
L'invocation et la relecture
trigger régit toutes les surfaces qui mettent l'agent en mouvement — le panneau de chat, POST /api/agents/{name}/execute, le déclenchement manuel de la planification, une automatisation — ainsi que les surfaces qui le relisent : sa définition, sa planification, sa consommation de jetons et ses approbations en attente. Ces relectures livrent le prompt système, le prompt de tâche et la liste blanche d'outils, c'est-à-dire précisément le matériau qu'il faut pour viser l'agent avec une injection de prompt.
GET /api/agents, la collection, exige une session dans tous les cas — y compris sur un déploiement où un agent déclare trigger: all. all ouvre un agent à l'invocation ; il n'ouvre pas votre inventaire à l'énumération. Un appelant qui franchit ce garde-fou ne voit que les agents qu'il peut déclencher individuellement.
Une surface reste hors du grant, à dessein : la planification cron de l'agent lui-même. Une minuterie n'est pas un appelant externe : trigger: [admin] restreint donc qui peut invoquer l'agent sans l'empêcher de tourner tout seul.
trigger ne régit pas ce que l'agent peut ensuite faire : cela reste son rôle plus sa liste blanche d'outils. Un viewer autorisé à déclencher un agent de rôle admin déclenche quelque chose de plus privilégié que lui : lisez donc trigger comme une délégation, et réglez-le délibérément.
Approbation humaine dans la boucle
approval insère une personne entre la décision du modèle et son effet.
| Propriété | Description |
|---|---|
approval.mode |
none (exécuter aussitôt), all (tout attend), ou selective. |
approval.required |
Actions nécessitant une approbation — un sous-ensemble de tools.actions. Requis si mode: selective. |
approval.timeout |
Secondes avant expiration d'une approbation en attente. Vaut 3600 par défaut. |
approval.escalation |
{ after: <secondes>, to: <rôle> } — confier une demande sans réponse à un autre rôle. |
approval:
mode: selective
required: [record.delete, email.send]
timeout: 1800
escalation:
after: 600
to: adminLisez cela comme une chronologie. L'agent décide d'envoyer un courriel ; la demande part vers un humain. Dix minutes plus tard, personne n'a agi : elle escalade vers admin. Vingt minutes après cela, le délai expire et la demande s'éteint sans avoir été exécutée.
after doit être inférieur à timeout. Une escalade programmée à l'expiration ou au-delà ne se déclenche jamais — la demande meurt avant que quiconque soit sollicité. Laissez après l'escalade assez de marge pour que le rôle escaladé puisse réellement répondre ; after: 600 avec timeout: 660 est techniquement valide et pratiquement inutile.
Choisir un mode
| Mode | Approprié quand |
|---|---|
none |
Toutes les actions possibles sont réversibles et à faible enjeu. Un analyste en lecture seule. |
selective |
L'essentiel du travail est routinier mais quelques actions sortent de l'immeuble. La réponse usuelle. |
all |
Un agent tout neuf en qui vous n'avez pas encore confiance, ou dont tout le périmètre engage. |
selective est le choix courant en pratique, et la discipline consiste à se demander, pour chaque action : si le modèle se trompe, puis-je annuler ? Un record.update sur une table auditée se rattrape. Un email.send, non — le message est parti. Un auth.banUser non plus, du point de vue de l'utilisateur banni.
Passer un nouvel agent en all pendant une quinzaine de jours est un moyen peu coûteux d'apprendre ce qu'il fait réellement avant de resserrer en selective. La file d'approbation fait alors office de journal d'intentions.
Approbation et planification
Les exécutions planifiées respectent l'approbation. Un agent en mode: all sur un cron nocturne ne s'exécute pas à 3 h du matin — il met une demande en file, qui attend l'arrivée de quelqu'un et expire si timeout passe d'abord.
Cette combinaison est généralement une erreur, et elle mérite d'être nommée : un déclencheur sans surveillance associé à un garde-fou surveillé produit un agent qui, très fidèlement, ne fait rien la nuit. Soit vous resserrez en selective pour que la partie routinière avance, soit vous acceptez que la planification ne fasse que préparer du travail pour le matin. Voir Planification et limites.
Pages associées
- Présentation des agents — l'agent que ces blocs configurent.
- Outils — les actions parmi lesquelles
approval.requiredchoisit. - Planification et limites — les exécutions sans surveillance.
- Rôles et RBAC — les rôles nommés dans
triggeretescalation. - Chat IA — l'une des surfaces que régit
trigger.
Dernière mise à jour 1 septembre 2026
Cette documentation a été rédigée avec de l'IA : des erreurs ou du contenu obsolète sont donc possibles. Sovrium est en bêta. Les contributions et corrections sont les bienvenues.