Skip to main content
Voir en Markdown

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

app.yaml
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.

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.
app.yaml
approval:
  mode: selective
  required: [record.delete, email.send]
  timeout: 1800
  escalation:
    after: 600
    to: admin

Lisez 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.

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

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.

Construit avec Sovrium