Référence du manifeste
Toutes les clés de beeuni.yaml v2, avec leurs valeurs par défaut, leurs limites et leurs règles de validation.
Le manifeste est le fichier que la plateforme considère comme faisant autorité pour un projet. Cette page répertorie chaque clé beeuni.yaml (v2), son type, sa valeur par défaut et la façon dont la plateforme la valide. Pour une version en langage courant, consultez Votre projet.
Deux surfaces de configuration
Un projet Beeuni comporte deux surfaces de configuration aux responsabilités strictement distinctes.
- Configuration Beeuni —
beeuni.yamlà la racine du dépôt définit l’environnement du projet, les agents, les outils, les connecteurs et les déclencheurs. Les modèles de sandbox peuvent référencer un Dockerfile personnalisé. - Configuration de l’agent — les fichiers d’agent, les compétences et les fichiers du harnais. Le harnais de l’agent la lit, dans la sandbox comme en local.
| Chemin | Contenu |
|---|---|
beeuni.yaml |
Le manifeste : les agents et les éléments auxquels chacun peut accéder, les déclencheurs, les connecteurs, l’environnement et les modèles de sandbox. |
agents/<name>.md |
Un agent : frontmatter et invite système. agents.<name>.file le désigne. |
skills/<name>/SKILL.md |
Une compétence. Tous les harnais la chargent. |
memory/ |
La mémoire du projet. |
tools/<name>.ts |
Les outils du projet, un module par outil. tools: les déclare ; tous les harnais les exécutent. Consultez Outils. |
harnesses/opencode/ |
Les fichiers lus uniquement par harness standard : opencode.jsonc, plugins/, tools/, commands/. opencode.config_dir pointe ici. |
Les projets créés avant 2026-09 conservent leurs agents et compétences dans .beeuni/opencode/ et leur mémoire dans .beeuni/memory/. Beeuni lit les deux structures.
Le lien entre ces deux parties est le fichier .md de l’agent. Une clé du manifeste agents.<name> régit le fichier désigné par agents.<name>.file, ou agents/<name>.md si file est omis. Tous les champs comportementaux figurent uniquement dans le frontmatter et le corps de ce fichier .md, jamais dans beeuni.yaml :
- invite système
model,modetemperature,top_psteps,permission
Le bloc agents: du manifeste définit uniquement la gouvernance : quels agents peuvent être lancés et à quoi chacun peut accéder. Le validateur l’impose. Il rejette tout bloc d’agent v2 contenant un champ comportemental et affiche une erreur indiquant le fichier .md de l’agent concerné.
Emplacement et versions
Tout dépôt dont la racine contient un manifeste valide est un projet Beeuni. beeuni.yaml (v2, YAML uniquement) est le format actuel pour les nouveaux projets, créés par le flux Web « Create project » et par beeuni init. beeuni.toml (v1) fonctionne toujours pour les projets existants, mais la plateforme n’y accepte aucune nouvelle fonctionnalité v2. Consultez TOML hérité pour le schéma v1 et les étapes de migration de v1 vers v2.
beeuni_version: 2 exige le format YAML : un fichier .toml qui déclare beeuni_version: 2 échoue à la validation. Tout manifeste déclarant une version supérieure à 2 est rejeté, afin que la plateforme n’interprète jamais silencieusement un champ futur de travers. Les clés de premier niveau inconnues sont ignorées ; vous pouvez donc y ajouter vos propres métadonnées.
validateManifest() est le contrôle unique utilisé par beeuni ship, la vérification de fusion des demandes de modification et beeuni validate. Les mêmes règles s’appliquent partout ; tout ce qui est fusionné dans main est donc structurellement valide. Le schéma est public et généré à partir du même paquet :
beeuni.v2.schema.jsonbeeuni.v1.schema.jsonbeeuni.schema.json(effectue la sélection selonbeeuni_version)
Pointez un beeuni.yaml vers le schéma v2 pour valider dans l’éditeur, ou récupérez-le depuis la CLI :
# yaml-language-server: $schema=https://beeuni.ai/schema/beeuni.v2.schema.json
beeuni_version: 2
beeuni schema --version 2
Exemple complet
beeuni_version: 2
default_agent: beeuni
project:
name: my-project
description: What this project is.
env:
required: [DATABASE_URL]
optional: [STRIPE_API_KEY, WEBHOOK_SLACK_SECRET]
sandbox:
templates:
- slug: ml
name: ML Development
dockerfile: Dockerfile.ml
cpu: 4
memory: 16
opencode:
config_dir: harnesses/opencode
agents:
beeuni:
file: agents/beeuni.md
connectors: all
secrets: all
beeuni_permissions: all
skills: all
release-bot:
file: agents/release-bot.md
sandbox: ml
connectors: [github]
beeuni_permissions: [project.gitops.push]
secrets: [GITHUB_AGENT_TOKEN]
triggers:
- slug: daily-digest
type: cron
agent: beeuni
cron: '0 0 9 * * 1-5'
timezone: America/Los_Angeles
prompt: |
Summarize yesterday's commits. Open a CR against main.
Clés de premier niveau
| Clé | Obligatoire | Remarques |
|---|---|---|
beeuni_version |
oui | doit être 2 |
default_agent |
oui | doit désigner un agent déclaré et activé |
imports |
non | autres fichiers YAML ou répertoires dont triggers, connectors, agents, apps et tools sont fusionnés dans ce manifeste. Consultez imports: |
tools |
non | les outils attribués à chaque session : nom de l’outil → chemin du module relatif au dépôt, ou beeuni:<name> pour un outil Beeuni. Avec une clé tools, les sessions ne reçoivent que les outils Beeuni qu’elle énumère. Tous les harnais les exécutent. Consultez tools: |
runtime |
non | "opencode" (valeur par défaut) ou "pi" — le harnais de l’agent qu’une session démarre dans sa sandbox ; pi exécute harness expérimental en processus dans le démon de sandbox et lit les mêmes fichiers .md de l’agent et ses compétences. L’indicateur de fonctionnalité pi_harness du projet sélectionne harness expérimental sans cette ligne. harness expérimental nécessite l’indicateur llm_gateway ; sans lui, la session démarre harness standard. |
harnesses.pi.packages |
non | les paquets harness expérimental chargés par les sessions harness expérimental du projet. Consultez harnesses: |
pi.config_dir |
non | harnesses/pi, puis .beeuni/pi s’il est présent. settings.json, extensions/, skills/ et prompts/ propres à harness expérimental. |
project.name / project.description |
non | métadonnées d’affichage ; la plateforme ne lit pas project.name pour déterminer le nom affiché du projet |
env.required / env.optional |
non | noms de variables d’environnement ; required est fourni à titre indicatif uniquement et n’est jamais imposé au démarrage d’une session |
sandbox / sandbox.templates / sandbox.default |
non | image(s) de sandbox et matériel |
opencode.config_dir |
non | valeur par défaut harnesses/opencode, puis .beeuni/opencode hérité |
triggers |
non | liste de déclencheurs cron, webhook et de surveillance |
connectors |
non | liste des définitions de connecteurs |
policy.default_mode |
non | allow_all (valeur par défaut) ou risk ; mode d’approbation des connecteurs à l’échelle du projet |
agents |
oui | table de gouvernance associant les noms aux blocs ; ne doit pas être vide. Avec imports, cette table peut se trouver dans un fichier importé |
imports:
Répartissez un manifeste entre plusieurs fichiers YAML. Utilisez cette option lorsque beeuni.yaml dépasse une page : 30 déclencheurs avec des invites sur plusieurs lignes, un connecteur par équipe, un fichier par groupe d’agents.
# beeuni.yaml
beeuni_version: 2
default_agent: beeuni
imports:
- triggers/ # a directory: every .yaml and .yml file below it
- agents.yaml # a single file
agents:
beeuni:
connectors: all
beeuni.yaml
agents.yaml
triggers/
reports/
weekly.yaml
monthly.yaml
dockets/
freedom-forever.yaml
# triggers/reports/weekly.yaml
triggers:
- slug: weekly-report
name: Cross-Sector Weekly Report
type: cron
agent: galileo
cron: "0 15 * * 0"
prompt: |-
Build the weekly report.
Le fichier racine et ses imports forment une configuration de projet. Un déclencheur dans un fichier peut désigner un agent déclaré dans un autre.
Règles
- Un chemin est relatif à la racine du dépôt.
.., les chemins absolus et les motifs glob sont refusés. - Un import de répertoire inclut tous les fichiers
.yamlet.ymlqu’il contient, quelle que soit leur profondeur, triés par chemin. Les autres fichiers sont ignorés. - Un fichier importé déclare
triggers,connectors,agents,apps,toolsetimports. Toutes les autres clés (beeuni_version,default_agent,runtime,project,env,opencode,sandbox,policy,policies) restent dans le fichier racine. Un fichier importé qui en définit une échoue à la validation. - Un fichier importé peut en importer d’autres. La limite est de 8 niveaux et de 200 fichiers. Une boucle constitue une erreur. Un fichier atteint plusieurs fois n’est fusionné qu’une seule fois.
- Un nom, un fichier. Si un slug de déclencheur, un slug de connecteur, un nom d’agent, de app ou d’outil est déclaré dans deux fichiers, une erreur nommant les deux fichiers est signalée. Aucun remplacement n’est effectué silencieusement.
- Les entrées sont fusionnées dans l’ordre : le fichier importateur d’abord, puis ses imports dans l’ordre indiqué.
Un import incorrect invalide l’ensemble du manifeste, tout comme une erreur de syntaxe YAML. beeuni validate, beeuni ship et la vérification de fusion de la demande de modification le signalent avant qu’il n’atteigne main :
imports: triggers "weekly-report" is declared in both triggers/a.yaml and triggers/b.yaml — one name, one file
Les modifications sont apportées au fichier qui déclare l’entrée. Lorsque le tableau de bord, l’API ou beeuni triggers enable|disable|rm modifie un déclencheur, un connecteur, un agent ou une app déclaré par un fichier importé, seul ce fichier est écrit. Le fichier racine n’est pas réécrit. Une nouvelle entrée est écrite dans le fichier racine. Déplacez-la manuellement dans un fichier importé si vous le souhaitez.
imports exige beeuni.yaml. Un manifeste beeuni.toml ignore cette clé.
tools:
Les outils attribués à une session, par nom. Une valeur peut prendre l’une de ces deux formes :
| Forme | Signification |
|---|---|
beeuni:<name> |
Un outil Beeuni (web_search, image_search, scrape_webpage, memory, show), géré par Beeuni. La clé doit être <name>. |
| Chemin de module relatif au dépôt | Un outil propre au projet, dans n’importe quel dossier. Sous un nom d’outil Beeuni, le module remplace l’outil Beeuni. |
tools:
web_search: beeuni:web_search
image_search: beeuni:image_search
scrape_webpage: beeuni:scrape_webpage
memory: tools/memory.ts # replaces the Beeuni memory tool
lookup_order: tools/lookup_order.ts
crm_note: integrations/crm/note.ts
harness standard et harness expérimental exécutent le même module. Le contrat du module, beeuni tools ls,
beeuni tools eject et la migration depuis harnesses/opencode/tools/ sont décrits dans
Outils.
Règle de sélection.
- Aucune clé
tools, dans le fichier racine ou dans un fichier importé : les sessions disposent des cinq outils Beeuni. Tous les projets créés avant l’existence de cette liste les conservent. - Une clé
tools, même vide (tools: {}outools:avec toutes les lignes supprimées) : les sessions disposent uniquement des outils Beeuni qu’elle répertorie, sous la formebeeuni:<name>ou d’un chemin de module. Une clétoolsdans un fichier importé est également prise en compte.
Supprimez une ligne beeuni:<name> pour retirer cet outil de tous les agents. Utilisez
agents.<name>.tools pour limiter cela à un seul
agent.
Erreurs.
-
Un nom doit être en snake_case :
^[a-z][a-z0-9_]{0,63}$. -
Un nom d’outil du harnais (
bash,read,write,edit,apply_patch,glob,grep,list,task,question,todowrite,webfetch,websearch,skill,lsp,invalid,execute,plan_exit,pty_*) constitue une erreur. -
Un chemin se termine par
.ts,.js,.mts,.mjs,.ctsou.cjs. Il ne doit pas commencer par/ou-, ni contenir de segment.ou... -
beeuni:<name>sous une autre clé constitue une erreur. Sous un nom d’outil Beeuni, par exempleweb_search: beeuni:image_search:tools.web_search : doit être `beeuni:web_search` (l’outil Beeuni) ou un chemin relatif au dépôt vers un module .ts ou .js (par ex. `tools/web_search.ts`) qui le remplace. -
beeuni:<name>pour un nom qui n’est pas celui d’un outil Beeuni, par exempleweb_serch: beeuni:web_serch:tools.web_serch : doit être un chemin relatif au dépôt vers un module .ts ou .js (par ex. `tools/web_serch.ts`). `beeuni:<name>` désigne un outil Beeuni sous son propre nom : `web_search: beeuni:web_search`, `image_search: beeuni:image_search`, `scrape_webpage: beeuni:scrape_webpage`, `memory: beeuni:memory`, `show: beeuni:show`. -
beeuni validatesignale également un module déclaré qui n’existe pas. Une valeurbeeuni:ne nécessite aucun fichier.
Avertissements. Un avertissement n’invalide jamais beeuni validate.
-
Une clé
toolsqui ne répertorie aucun des cinq outils Beeuni :tools : les sessions de ce projet ne disposent d’aucun outil Beeuni (web_search, image_search, scrape_webpage, memory, show). Ajoutez `<name>: beeuni:<name>` pour en conserver un.Cela permet de détecter un projet qui ajoute son premier outil personnalisé et supprime les cinq outils par erreur.
-
Le
toolsd’un agent qui nomme un outil Beeuni que le projet ne charge pas :agents.beeuni.tools : « show » est un outil Beeuni que ce projet ne charge pas : ajoutez `show: beeuni:show` sous la clé `tools` de premier niveau, ou supprimez-le ici.
project:
Métadonnées facultatives destinées aux personnes : name et description. La plateforme ne lit pas cette table — le nom affiché d’un projet provient de son propre enregistrement dans la base de données. Considérez-la comme de la documentation pour les personnes qui consultent le dépôt.
env:
Déclare les noms des variables d’environnement dont vos sessions ont besoin. Les valeurs se trouvent sur la page Variables d’environnement du tableau de bord, jamais directement dans le manifeste. La plateforme les déchiffre et les injecte en tant que variables d’environnement simples au démarrage de la session.
env:
required: [DATABASE_URL]
optional: [STRIPE_API_KEY]
| Champ | Type | Remarques |
|---|---|---|
required |
string[] |
À titre indicatif. Le tableau de bord demande ces valeurs à l’utilisateur, mais le démarrage de la session n’est pas bloqué si une valeur manque. |
optional |
string[] |
Disponibles pour les sessions si elles sont définies. Leur absence ne pose pas de problème. |
Les noms des variables d’environnement doivent respecter ^[A-Z_][A-Z0-9_]*$. Secrets Manager limite les noms à 64 caractères : un nom plus long est analysé ici, mais ne peut jamais recevoir de valeur. Il en va de même pour les noms commençant par BEEUNI_. Limitez les noms à 64 caractères et évitez le préfixe BEEUNI_. Spécification complète : Secrets.
sandbox: et sandbox.templates
Une liste d’images de sandbox nommées et amorçables. Facultative — sans entrée, chaque session démarre avec l’image par défaut de la plateforme. Chaque modèle doit définir exactement l’un de ces éléments : dockerfile (relatif au dépôt) ou image (une référence Docker publique, épinglée à un tag ou à un digest).
sandbox:
templates:
- slug: ml
name: ML Development
dockerfile: Dockerfile.ml
cpu: 4
memory: 16
disk: 50
| Champ | Type | Par défaut | Notes |
|---|---|---|---|
slug |
string | — | Obligatoire. Unique par projet. default est réservé. |
name |
string | slug | Libellé affiché dans le sélecteur du tableau de bord. |
dockerfile |
string | — | Chemin relatif au dépôt. Mutuellement exclusif avec image. |
image |
string | — | Image Docker publique, avec tag ou digest fixé. Mutuellement exclusif avec dockerfile. |
entrypoint |
string | propre à la couche d’exécution | Remplace le point d’entrée du conteneur. |
cpu |
int | valeur par défaut du fournisseur | Cœurs vCPU. Limite : 1–32. |
memory |
int | valeur par défaut du fournisseur | RAM en Gio. Limite : 1–128. |
disk |
int | valeur par défaut du fournisseur | Disque en Gio. Limite : 1–500. |
container_runtime |
bool | false |
Exécuter Docker dans le bac à sable avec une mise en réseau bridge + overlay. Voir Runtime. |
Chaque valeur doit être un entier positif. Une valeur inférieure au minimum échoue à la validation et génère une erreur. Une valeur supérieure au maximum passe avec un avertissement, puis est ramenée à la limite à l’exécution. Les GPU ne sont pas pris en charge — déclarer gpu génère un avertissement, pas une erreur. Consultez Runtime pour savoir ce que la couche d’exécution ajoute à votre image.
sandbox.default
Définissez default sur sandbox pour faire d’un modèle le modèle par défaut de tout le projet. Toutes les sessions, tous les déclencheurs et tous les canaux le démarrent alors sans avoir à préciser de slug.
sandbox:
default: dev
templates:
- slug: dev
dockerfile: Dockerfile.dev
default doit désigner un modèle déclaré dans ce manifeste, ou la valeur réservée "default" pour l’image de la plateforme.
Un agent peut sélectionner son environnement avec agents.<name>.sandbox. La valeur doit désigner un modèle du manifeste ou du tableau de bord, ou "default".
agents:
researcher:
sandbox: ml
La résolution du modèle de session suit cet ordre :
sandbox_slugde session explicite.sandboxde l’agent sélectionné.sandbox.defaultdu projet."default"de la plateforme.
Les déclencheurs cron, les déclencheurs webhook, les planifications et les canaux utilisent le modèle de l’agent sélectionné.
Une modification de spécification (cpu, memory, disk, container_runtime ou l’image elle-même) reconstruit l’instantané du projet. La nouvelle taille s’applique à la session suivante, pas à une session en cours.
opencode:
Emplacement du répertoire de configuration harness standard. Facultatif, avec une valeur par défaut.
opencode:
config_dir: harnesses/opencode
| Champ | Type | Par défaut | Notes |
|---|---|---|---|
config_dir |
string | harnesses/opencode, puis .beeuni/opencode |
Répertoire relatif au dépôt. |
Si config_dir n’est pas défini, Beeuni utilise le premier de harnesses/opencode et .beeuni/opencode qui contient un opencode.json ou un opencode.jsonc. Ce répertoire contient les fichiers lus uniquement par harness standard : opencode.jsonc, plugins/, tools/ et commands/. Les agents et les compétences se trouvent à la racine du dépôt, dans agents/ et skills/. opencode.jsonc reste le registre natif d’harness standard pour les plugins, les serveurs MCP, les fournisseurs et les autorisations — ne dupliquez pas ces paramètres dans le manifeste. Voir Agents.
harnesses:
Paramètres propres à chaque moteur. pi.config_dir pointe vers un répertoire de configuration natif de harness expérimental relatif au dépôt (par défaut : harnesses/pi, puis .beeuni/pi). Le répertoire est importé au démarrage de harness expérimental. pi.packages est distinct : il installe des paquets à partir de harnesses.pi.packages du manifeste, par agent. Il existe aujourd’hui une clé de paquet : pi.packages, les paquets harness expérimental chargés par chaque session harness expérimental de ce projet (runtime: pi ou l’indicateur pi_harness). Un paquet peut être n’importe quel élément de packages : extensions (outils, hooks, commandes), ainsi que les compétences et les prompts fournis avec un paquet.
runtime: pi
harnesses:
pi:
packages:
- npm:pi-web-access@0.30.0 # pinned extension version
- source: npm:pi-mcp-adapter@2.36.0
extensions: ["extensions/*.ts"] # load only these files of the package
skills: [] # load none of its skills
- ./harnesses/pi/audit.ts # an extension file in this repository
| Forme de l’entrée | Signification |
|---|---|
npm:<name>@<x.y.z> |
Paquet npm à une version précise. Une plage de versions ou l’absence de version échoue à la validation. |
./<path> |
Fichier d’extension ou répertoire de paquet dans ce dépôt. Il ne peut pas sortir du dépôt avec ... |
{ source, extensions, skills, prompts, themes } |
Même source, avec les filtres d’inclusion et d’exclusion propres à harness expérimental. Si aucun filtre n’est indiqué, tout est chargé ; [] ne charge rien. |
20 entrées maximum. Les sources Git sont refusées.
Par agent
Un agent peut ajouter ses propres paquets et en retirer de la liste de premier niveau, sous agents.<name>.harnesses :
harnesses:
pi:
packages: [npm:pi-web-access@0.30.0] # every agent
agents:
researcher:
harnesses:
pi:
packages: [npm:@juicesharp/rpiv-todo@2.11.0] # researcher only
reviewer:
harnesses:
pi:
exclude: [pi-web-access] # reviewer loads no web tools
- Les paquets d’un agent correspondent à la liste de premier niveau, moins son
exclude, plus son proprepackages. - Pour un agent, une entrée qui concerne un paquet également répertorié au premier niveau remplace l’entrée de premier niveau (autre version ou autres filtres).
excluderépertorie les noms de paquets (pi-web-access,@scope/name) ou les chemins./tels qu’ils sont indiqués dans la liste de premier niveau. Il ne prend jamais de version.- Chaque liste de paquets distincte est construite une seule fois. Les agents qui partagent la même liste partagent la même compilation.
- Les paquets dépendent de l’agent avec lequel une session démarre. Un sous-agent démarré par un autre agent à l’aide de l’outil
taskutilise uniquement les outils d’espace de travail standard (bash,read,write,edit,glob,grep), pas ses propres paquets ni ceux de son agent parent ; les hooks d’extension du parent s’appliquent toujours à ses appels. Démarrez une session avec cet agent pour utiliser ses paquets.
Comment les paquets sont mis à disposition d’une session :
- La fusion de la demande de modification qui édite cette liste construit les paquets une seule fois, pour la plateforme du bac à sable, avec les scripts d’installation désactivés. Chaque extension est précompilée dans un fichier minifié. La compilation conserve les autres fichiers du paquet, sauf le code déjà inclus dans ce fichier, les déclarations de types, les source maps, ainsi que les fichiers README et CHANGELOG à la racine. Les projets qui ont la même liste partagent la compilation.
- Une nouvelle session ou une session redémarrée télécharge la compilation pendant le clonage de son dépôt, puis charge directement chaque extension. Une session n’exécute jamais
npm installet ne compile jamais de paquet. - Un paquet qui ne peut pas être précompilé (par exemple, si son
pi.extensionsutilise des globs) fonctionne quand même : la session le charge depuis les paquets installés, ce qui prend plus de temps. Si le code d’un paquet lit l’un des fichiers exclus de la compilation, ajoutez un filtreextensionsà son entrée : la session le chargera également depuis les paquets installés. - Une session qui démarre avant que la compilation soit disponible démarre sans les paquets du projet et lance la compilation ; la session suivante les aura.
Beeuni installe également un ensemble de paquets système dans chaque session harness expérimental. Une entrée de projet pour le même paquet remplace la version système. Un dépôt peut aussi contenir des extensions natives de harness expérimental dans .pi/extensions/*.ts ; harness expérimental les charge sans entrée de manifeste.
Les extensions s’exécutent sans interface de terminal : les outils, hooks et commandes fonctionnent ; les widgets réservés au terminal ne font rien.
triggers:
Liste des définitions cron, webhook et de surveillance. Chaque entrée déclenche une session qui exécute prompt comme premier message.
triggers:
- slug: daily-digest
type: cron
cron: '0 0 9 * * 1-5'
prompt: Summarize yesterday's commits.
| Champ | Obligatoire | Valeur par défaut | Remarques |
|---|---|---|---|
slug |
oui | — | [a-z0-9][a-z0-9_-]{0,127}, unique parmi les déclencheurs. |
type |
oui | — | cron, webhook ou monitor (expérimental). |
prompt |
oui | — | Non vide. Prend en charge la création de modèles. |
name |
non | slug | Libellé lisible. |
agent |
non | default_agent |
Doit désigner une clé de agents:. Omettez-le pour utiliser default_agent ; n’écrivez pas la valeur littérale default. |
enabled |
non | true |
false ignore l’entrée. |
model |
non | résolu au déclenchement | Format filaire provider/model. Fige le modèle de la session déclenchée. Voir Modèles. |
session_mode |
non | fresh |
fresh, reuse, pinned ou keyed. |
session_id |
obligatoire pour pinned |
— | Session exacte à laquelle envoyer un nouveau prompt. |
Les déclencheurs Cron nécessitent exactement l’un de cron (une expression à 6 champs) ou run_at (un horodatage ISO-8601 ponctuel), ainsi que timezone, un nom IANA. Les déclencheurs Webhook nécessitent secret_env, le nom d’un secret qui utilise la livraison broker avec le consommateur connector. Les déclencheurs Monitor nécessitent run (une commande relative au dépôt) et mode (poll ou stream), et rejettent tous les champs Cron et Webhook. Pour la référence complète des champs, la configuration des identifiants, la création de modèles de charge utile, les points de terminaison et la stratégie de session, voir Déclencheurs.
connectors:
Une liste d’outils externes qu’un agent peut appeler. La définition se trouve dans git ; les identifiants se trouvent sur la plateforme, jamais dans le manifeste. Voir Connecteurs pour le modèle conceptuel.
connectors:
- slug: gmail-read
name: Gmail read only
provider: pipedream
app: gmail
authorization_strategy: user
policies:
- match: search_email
action: always_run
| Champ | Obligatoire | Remarques |
|---|---|---|
slug |
oui | [a-z0-9][a-z0-9_-]{0,127}, unique parmi les connecteurs. |
provider |
oui | pipedream, mcp, openapi, postman, graphql, http ou channel. |
name |
non | Nom affiché. Par défaut, le slug. |
authorization_strategy |
non | project ou user. Par défaut, project si omis. Une stratégie de projet utilise les connexions actives du projet. Une stratégie utilisateur utilise uniquement la connexion du membre qui agit. |
enabled |
non | Par défaut, true. |
credential |
non | Seul shared est pris en charge. Le mode per_user, désormais obsolète, provoque une erreur bloquante. |
sensitive |
non | Par défaut, false. true fait de require_approval la valeur par défaut pour les actions non correspondantes, y compris les lectures. Les règles explicites du projet et du connecteur sont toujours résolues en premier. |
Champs spécifiques au fournisseur :
| Fournisseur | Champ obligatoire | Remarques |
|---|---|---|
pipedream |
app |
account facultatif, valeur par défaut : slug. |
mcp |
url |
transport : http (par défaut) ou sse. |
openapi |
spec |
Une URL ou un chemin relatif au dépôt. |
postman |
spec |
Une URL ou un chemin vers une Collection JSON, un manifeste .postman/api ou une URL d’espace de travail Postman. |
graphql |
endpoint |
spec facultatif (SDL). |
http |
base_url |
spec facultatif. |
channel |
platform |
slack, teams, email ou voice. |
computer |
— | Géré par l’API. Vous ne pouvez pas le déclarer manuellement. Chaque ordinateur connecté correspond à l’un de ses comptes. Voir Ordinateurs. |
Les connecteurs channel nécessitent rarement une entrée rédigée à la main : la connexion d’un canal depuis le tableau de bord en crée une automatiquement. Voir Slack et canaux. Les slugs beeuni_slack, beeuni_teams, beeuni_email et computer sont réservés à la plateforme ; leur utilisation avec un autre fournisseur provoque une erreur de validation. Le connecteur computer est créé lorsque le premier membre connecte un ordinateur, car les identifiants des machines sont des identités du plan de contrôle du compte et ne doivent pas figurer dans le manifeste.
connectors.auth : facultatif, pour les fournisseurs autres que pipedream. type est bearer, basic, custom, api_key, oauth1, hmac, aws_sigv4, mtls ou none (par défaut). oauth1 est réservé aux fournisseurs openapi, postman et http. in est header (par défaut), query ou cookie. name est obligatoire lorsque type vaut custom ou api_key.
connectors.policies : une liste de paires {match, action}. match est un motif glob appliqué aux noms d’outils. action vaut always_run, require_approval ou block. Les politiques sont associées au connecteur. Toutes les connexions de ce connecteur utilisent les mêmes politiques.
policy.default_mode : une clé de premier niveau, distincte de connectors:, qui définit le mode d’approbation des connecteurs à l’échelle du projet. Elle accepte allow_all (par défaut ; tous les outils sans correspondance s’exécutent) ou risk (approbation requise pour les appels sans correspondance qui modifient ou détruisent des données). Définissez-la avec beeuni connectors policy set --default <risk|allow_all> — voir CLI.
Canaux
La v2 supprime channels: du schéma. Le routage des canaux vers les agents (Slack, Microsoft Teams, e-mail et voix actuellement) relève de l’état opérationnel en direct, et non d’une configuration déclarative. Vous le définissez depuis la page Channels du tableau de bord ou à l’aide de commandes de chat ; cette séparation permet aussi de garder les identifiants hors de git. La connexion d’un canal crée toujours une entrée connectors avec provider: channel que l’agent peut appeler. Voir Slack et canaux. La table [[channels]] de la v1 est présentée dans Ancien format TOML.
agents:
Une table de correspondance entre noms et blocs, indexée par nom d’agent. Cette table sert uniquement à la gouvernance : elle définit ce qu’un agent peut utiliser, jamais ce qu’il dit ou fait.
Ce bloc constitue la deuxième des deux liaisons : un principal obtient ses rôles de Beeuni, et un agent reçoit en plus les autorisations Beeuni déclarées ici. Une session ne peut faire que ce que les deux autorisent. Voir Un vocabulaire, deux liaisons.
default_agent: beeuni
agents:
beeuni:
file: agents/beeuni.md
connectors: all
secrets: all
beeuni_permissions: all
skills: all
release-bot:
file: agents/release-bot.md
connectors: [github]
connectors_required: [github]
beeuni_permissions: [project.gitops.push]
secrets: [GITHUB_AGENT_TOKEN]
| Champ | Valeur par défaut | Notes |
|---|---|---|
| (clé de la table) | — | [a-z0-9][a-z0-9_-]{0,127}, unique au projet. Sans file, c’est aussi le nom de fichier .md. |
file |
agents/<name>.md |
Chemin relatif au dépôt vers le .md de l’agent. Voir Le fichier de l’agent. |
enabled |
true |
false considère l’agent comme non déclaré — la plateforme ne le lancera pas. |
connectors |
none |
Slugs de connecteurs que cet agent peut appeler. all signifie tous les connecteurs. |
connectors_required |
none |
Obsolète : analysé et ignoré. Le démarrage du bac à sable n’est plus conditionné par la présence d’un connecteur ; un appel à un connecteur sans connexion renvoie connector_not_connected avec un lien de connexion. Doit toujours être un sous-ensemble de connectors lorsqu’il est présent. |
secrets |
none |
Secrets du projet transmis à cet agent sous forme de variables d’environnement du bac à sable. Renommé depuis env dans la v1. |
beeuni_permissions |
none |
Autorisations Beeuni (actions du projet) que cet agent peut exercer via la CLI, l’API ou git. all signifie toutes les autorisations du projet, toujours limitées par le rôle maximal de l’agent et sans jamais inclure les autorisations réservées aux humains. beeuni_cli est l’ancienne orthographe, toujours acceptée avec un avertissement de validation ; définir les deux avec des valeurs différentes constitue une erreur. |
skills |
none |
Compétences que cet agent peut charger. |
apps |
none |
Slugs d’applications Beeuni que cet agent peut ouvrir lorsque l’application est restricted ou private. all signifie toutes les applications du projet. Voir Agents et applications. |
tools |
all |
Outils que cet agent peut utiliser : outils du harnais, de Beeuni et du projet. all, none, une liste (uniquement ceux-ci) ou { exclude: [...] } (tous sauf ceux-ci). L’ancienne forme de table { bash: false } fonctionne toujours. Contrairement aux autorisations ci-dessus, si tools est omis, tous les outils sont autorisés. Voir Qui peut utiliser quel outil. |
repository_access |
true |
Indique si les nouvelles sessions reçoivent le dépôt du projet. false désactive la remise du dépôt et l’accès à celui-ci via les identifiants de session. Les sessions existantes conservent la politique enregistrée. |
La v2 applique le refus par défaut : si connectors, secrets, beeuni_permissions, skills ou apps est omis pour un agent déclaré, sa valeur devient none. Accordez explicitement à chaque agent toutes les autorisations dont il a besoin, comme le fait l’agent beeuni du modèle de démarrage ci-dessus. Un projet qui migre depuis la v1 doit réaccorder manuellement toutes les autorisations : dans la v1, env (secrets) prend la valeur all lorsqu’il est omis, soit l’inverse de la v2.
connectors_personal reste un alias d’entrée obsolète pour
connectors_required. Les nouveaux manifestes doivent utiliser connectors_required. Le paramètre authorization_strategy du connecteur détermine si l’autorisation appartient au projet ou au membre.
Les autorisations beeuni_permissions proviennent d’un ensemble fixe d’autorisations limitées au projet (project.read, project.gitops.push, project.gitops.merge, project.gitops.ref.any, project.trigger.*, project.secret.*, project.connector.*, et plus encore). Les autorisations limitées au compte — member.*, billing.*, project.create — ne peuvent jamais être accordées à un agent. Exécutez beeuni validate --scopes depuis une session pour afficher la liste actuelle des autorisations pouvant être accordées.
Le fichier de l’agent
agents.<name>.file indique le .md de l’agent, relatif à la racine du dépôt.
agents:
support:
file: agents/support.md
- Le chemin doit se terminer par
.md. - Le chemin ne doit pas commencer par
/ou-. Il ne doit contenir aucun segment.ou.., ni aucun segment vide. - Chaque segment ne peut contenir que des lettres, des chiffres,
_,-,.et des espaces. - Si
fileest omis, Beeuni litagents/<name>.md, puis.beeuni/opencode/agents/<name>.md. Lorsqueopencode.config_direst défini, le second chemin est<config_dir>/agents/<name>.md. - Lorsque le tableau de bord enregistre un agent doté de
.md, il écritfileavec ce chemin. - L’API refuse toute requête qui modifie
file(400, codeinvalid_config). Pour déplacer un agent, déplacez son.mdet mettez à jourfiledansbeeuni.yamlau sein du même commit.
beeuni validate et la vérification de fusion de la demande de modification rejettent tout file invalide avec une erreur sur agents.<name>.file.
Quand les modifications de configuration prennent effet
- Une modification du manifeste,
agents/,skills/ou du répertoire de configuration harness standard ne s’applique qu’après la fusion d’une demande de modification dansmain. Les sessions et les déclencheurs lisent la branche par défaut, et non les branches de session. - Une modification du cron ou du webhook d’un déclencheur est prise en compte par le planificateur quelques secondes après la fusion.
- Une modification de l’image sandbox ou du matériel reconstruit l’instantané. La nouvelle spécification s’applique à la prochaine session, pas à la session en cours.
- Une modification de la valeur d’un secret dans le tableau de bord est prise en compte lors de la création du sandbox. Elle s’applique à la prochaine session, pas à une session en cours.
Règles de conversion aller-retour
Les modifications effectuées dans le tableau de bord correspondent à une opération de lecture-modification-écriture sur le fichier qui déclare l’entrée : beeuni.yaml, ou un fichier importé. Pour que les différences restent propres entre les modifications dans l’interface et celles effectuées pendant une session :
- Gardez
beeuni_versioncomme première clé. - Dans une entrée de déclencheur, ordonnez les champs ainsi :
slug,name,type,agent,enabled, puis les champs propres au type, et enfinprompt. - Si vous ajoutez un déclencheur webhook avant que son secret soit défini, indiquez le nom du secret dans
env.optional. Laissez le déclencheurenabled: falsejusqu’à ce que la valeur soit renseignée.
Accès au dépôt
Définissez agents.<name>.repository_access sur false pour les agents qui n’ont pas besoin des fichiers source du projet.
Ils peuvent tout de même créer des fichiers sandbox et utiliser les outils, secrets et connecteurs qui leur sont accordés.
Définissez-le sur true pour les agents qui ont besoin du dépôt. Les autorisations Git restent distinctes.
Modifiez ce paramètre dans l’éditeur d’agent, sous Workspace → Project repository access.
Le paramètre s’applique aux nouvelles sessions. Les sessions existantes conservent la politique qui leur a été enregistrée, y compris après le remplacement du runtime.
agents:
support:
repository_access: false
engineer:
repository_access: true
Le champ obsolète workspace reste lisible : branch signifie true, et runtime signifie false.
Les configurations read héritées continuent de rejeter la création de sessions tant que vous n’avez pas remplacé ce champ par une valeur booléenne explicite.
Il n’existe pas de mode de dépôt en lecture seule. Les champs anciens et nouveaux en conflit sont rejetés.
L’éditeur et le SDK envoient repository_access. Lorsque l’accès est désactivé, l’API stocke également workspace: runtime comme valeur miroir de compatibilité. Cela préserve la restriction pour les anciennes répliques de l’API pendant un déploiement ou un retour à une version précédente. Les lectures de l’API omettent cette valeur miroir. Les manifestes rédigés à la main qui utilisent uniquement repository_access nécessitent la version mise à jour de l’API.