Referencia del manifiesto
Cada clave de beeuni.yaml v2, con valores predeterminados, límites y reglas de validación.
La plataforma considera que el manifiesto es la fuente de verdad de un proyecto. Esta página enumera todas las claves beeuni.yaml (v2), su tipo, su valor predeterminado y cómo las valida la plataforma. Para una explicación en lenguaje sencillo, consulta Tu proyecto.
Dos superficies de configuración
Un proyecto de Beeuni tiene dos superficies de configuración con responsabilidades estrictas y sin superposición.
- Configuración de Beeuni —
beeuni.yamlen la raíz del repositorio define el entorno del proyecto, los agentes, las herramientas, los conectores y los activadores. Las plantillas de sandbox pueden hacer referencia a un Dockerfile personalizado. - Configuración del agente — los archivos del agente, las habilidades y los archivos del harness. El harness del agente la lee, tanto en el sandbox como localmente.
| Ruta | Qué contiene |
|---|---|
beeuni.yaml |
El manifiesto: agentes y a qué puede acceder cada uno, activadores, conectores, env y plantillas de sandbox. |
agents/<name>.md |
Un agente: frontmatter y prompt del sistema. agents.<name>.file lo nombra. |
skills/<name>/SKILL.md |
Una habilidad. Todos los harnesses la cargan. |
memory/ |
La memoria del proyecto. |
tools/<name>.ts |
Herramientas del proyecto, un módulo por herramienta. tools: las declara; todos los harnesses las ejecutan. Consulta Herramientas. |
harnesses/opencode/ |
Archivos que solo lee harness estándar: opencode.jsonc, plugins/, tools/, commands/. opencode.config_dir apunta aquí. |
Los proyectos creados antes de 2026-09 conservan los agentes y las habilidades en .beeuni/opencode/ y la memoria en .beeuni/memory/. Beeuni lee ambas estructuras.
La unión entre las dos partes es el archivo .md del agente. Una clave del manifiesto agents.<name> rige el archivo que nombra agents.<name>.file, o agents/<name>.md si se omite file. Todos los campos de comportamiento se encuentran únicamente en el frontmatter y el cuerpo de ese archivo .md, nunca en beeuni.yaml:
- prompt del sistema
model,modetemperature,top_psteps,permission
El bloque agents: del manifiesto establece únicamente la gobernanza: qué agentes pueden iniciarse y qué puede tocar cada uno. El validador hace cumplir estas reglas. Rechaza los bloques de agente v2 que contienen campos de comportamiento e indica en el error el archivo .md del propio agente.
Ubicación y versiones
Cualquier repositorio con un manifiesto válido en su raíz es un proyecto de Beeuni. beeuni.yaml (v2, solo YAML) es el formato actual para proyectos nuevos, creados mediante el flujo web «Create project» y mediante beeuni init. beeuni.toml (v1) sigue funcionando para los proyectos existentes, pero la plataforma no admite funciones nuevas de v2 en esta versión. Consulta TOML heredado para ver el esquema v1 y los pasos de migración de v1 a v2.
beeuni_version: 2 requiere YAML: un archivo .toml que declara beeuni_version: 2 no supera la validación. Se rechaza sin más un manifiesto que declara una versión superior a 2, para que la plataforma nunca interprete silenciosamente de forma incorrecta un campo futuro. Las claves desconocidas de nivel superior se ignoran, así que puedes guardar tus propios metadatos en el archivo.
validateManifest() es la única puerta de control tras beeuni ship, la comprobación de combinación de solicitudes de cambio y beeuni validate. Se aplican las mismas reglas en todas partes, de modo que todo lo que se combine en main tenga una estructura válida. El esquema es público y se genera desde el mismo paquete:
beeuni.v2.schema.jsonbeeuni.v1.schema.jsonbeeuni.schema.json(se selecciona segúnbeeuni_version)
Apunta un beeuni.yaml al esquema v2 para validar en el editor, o consíguelo mediante la CLI:
# yaml-language-server: $schema=https://beeuni.ai/schema/beeuni.v2.schema.json
beeuni_version: 2
beeuni schema --version 2
Ejemplo completo
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.
Claves de nivel superior
| Clave | Obligatoria | Notas |
|---|---|---|
beeuni_version |
sí | debe ser 2 |
default_agent |
sí | debe nombrar un agente declarado y habilitado |
imports |
no | otros archivos YAML o directorios cuyos triggers, connectors, agents, apps y tools se combinan con este manifiesto. Consulta imports: |
tools |
no | las herramientas que recibe cada sesión: nombre de herramienta → ruta del módulo relativa al repositorio, o beeuni:<name> para una herramienta de Beeuni. Si hay una clave tools, las sesiones reciben únicamente las herramientas de Beeuni que enumera. Todos los harnesses las ejecutan. Consulta tools: |
runtime |
no | "opencode" (predeterminado) o "pi": el harness del agente que inicia una sesión dentro de su sandbox; pi ejecuta harness experimental en el proceso dentro del daemon del sandbox y lee los mismos archivos .md del agente y las mismas habilidades. La marca de función pi_harness del proyecto selecciona harness experimental sin esta línea. harness experimental necesita la marca llm_gateway; sin ella, la sesión inicia harness estándar. |
harnesses.pi.packages |
no | paquetes de harness experimental que cargan las sesiones harness experimental del proyecto. Consulta harnesses: |
pi.config_dir |
no | harnesses/pi y, después, .beeuni/pi si está presente. settings.json, extensions/, skills/ y prompts/ nativos de harness experimental. |
project.name / project.description |
no | metadatos de visualización; la plataforma no lee project.name para obtener el nombre que se muestra del proyecto |
env.required / env.optional |
no | nombres de variables de entorno; required es solo orientativo y nunca se exige al iniciar la sesión |
sandbox / sandbox.templates / sandbox.default |
no | imagen o imágenes del sandbox y hardware |
opencode.config_dir |
no | harnesses/opencode predeterminado y, después, .beeuni/opencode heredado |
triggers |
no | lista de activadores cron, webhook y monitor |
connectors |
no | lista de definiciones de conectores |
policy.default_mode |
no | allow_all (predeterminado) o risk; modo de aprobación de conectores para todo el proyecto |
agents |
sí | mapa de gobernanza de nombre a bloque; no debe estar vacío. Con imports, el mapa puede estar en un archivo importado |
imports:
Divide un manifiesto entre varios archivos YAML. Úsalo cuando beeuni.yaml ya no quepa en una sola pantalla: 30 activadores con prompts de varias líneas, un conector por equipo o un archivo por grupo de agentes.
# 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.
El archivo raíz y sus importaciones forman una configuración de proyecto. Un activador de un archivo puede nombrar un agente declarado en otro.
Reglas
- Una ruta es relativa a la raíz del repositorio. Se rechazan
.., las rutas absolutas y los patrones glob. - Una importación de directorio toma todos los archivos
.yamly.ymlque haya debajo, a cualquier profundidad, ordenados por ruta. Los demás archivos se omiten. - Un archivo importado declara
triggers,connectors,agents,apps,toolsyimports. Todas las demás claves (beeuni_version,default_agent,runtime,project,env,opencode,sandbox,policy,policies) permanecen en el archivo raíz. Si un archivo importado define una de ellas, la validación falla. - Un archivo importado puede importar otros archivos. El límite es de 8 niveles y 200 archivos. Los ciclos generan un error. Si se llega a un archivo dos veces, se combina una sola vez.
- Un nombre, un archivo. Si un slug de activador, un slug de conector, un nombre de agente, un nombre de app o un nombre de herramienta se declara en dos archivos, se produce un error que indica ambos archivos. Nada se sobrescribe de forma silenciosa.
- Las entradas se combinan en orden: primero, el archivo que importa y, después, sus importaciones en el orden indicado.
Una importación con errores invalida todo el manifiesto, igual que un error de sintaxis YAML. beeuni validate, beeuni ship y la comprobación de combinación de la solicitud de cambio informan del error antes de que llegue a main:
imports: triggers "weekly-report" is declared in both triggers/a.yaml and triggers/b.yaml — one name, one file
Los cambios se escriben en el archivo que declara la entrada. Cuando el dashboard, la API o beeuni triggers enable|disable|rm modifica un activador, un conector, un agente o una app declarado en un archivo importado, solo se escribe en ese archivo. El archivo raíz no se vuelve a escribir. Las entradas nuevas se escriben en el archivo raíz. Si quieres que una entrada quede en un archivo importado, muévela allí manualmente.
imports requiere beeuni.yaml. Un manifiesto beeuni.toml ignora la clave.
tools:
Las herramientas que recibe una sesión, por nombre. Un valor tiene una de estas dos formas:
| Forma | Significado |
|---|---|
beeuni:<name> |
Una herramienta de Beeuni (web_search, image_search, scrape_webpage, memory, show), mantenida por Beeuni. La clave debe ser <name>. |
| Una ruta de módulo relativa al repositorio | Una herramienta propia del proyecto, en cualquier carpeta. Si usa el nombre de una herramienta de Beeuni, el módulo la reemplaza. |
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 estándar y harness experimental ejecutan el mismo módulo. El contrato del módulo, beeuni tools ls,
beeuni tools eject y la migración desde harnesses/opencode/tools/ están en
Tools.
Regla de selección.
- Si no hay ninguna clave
tools, ni en el archivo raíz ni en ningún archivo importado, las sesiones reciben las cinco herramientas de Beeuni. Todos los proyectos creados antes de que existiera la lista las conservan. - Si hay una clave
tools, aunque esté vacía (tools: {}otools:con todas las líneas eliminadas), las sesiones reciben solo las herramientas de Beeuni que incluya, comobeeuni:<name>o como ruta de módulo. También cuenta una clavetoolsen un archivo importado.
Elimina una línea beeuni:<name> para quitar esa herramienta de todos los agentes. Usa
agents.<name>.tools para limitarla a un solo
agente.
Errores.
-
Los nombres deben estar en snake_case:
^[a-z][a-z0-9_]{0,63}$. -
Un nombre de herramienta del entorno de ejecución (
bash,read,write,edit,apply_patch,glob,grep,list,task,question,todowrite,webfetch,websearch,skill,lsp,invalid,execute,plan_exit,pty_*) genera un error. -
Una ruta termina en
.ts,.js,.mts,.mjs,.ctso.cjs. No debe empezar por/ni-, ni contener un segmento.o... -
beeuni:<name>bajo otra clave genera un error. Bajo el nombre de una herramienta de Beeuni, por ejemploweb_search: beeuni:image_search:tools.web_search: debe ser `beeuni:web_search` (la herramienta de Beeuni) o una ruta relativa al repositorio a un módulo .ts o .js (p. ej., `tools/web_search.ts`) que la reemplace. -
beeuni:<name>para un nombre que no sea de una herramienta de Beeuni, por ejemploweb_serch: beeuni:web_serch:tools.web_serch: debe ser una ruta relativa al repositorio a un módulo .ts o .js (p. ej., `tools/web_serch.ts`). `beeuni:<name>` nombra una herramienta de Beeuni con su propio nombre: `web_search: beeuni:web_search`, `image_search: beeuni:image_search`, `scrape_webpage: beeuni:scrape_webpage`, `memory: beeuni:memory`, `show: beeuni:show`. -
beeuni validatetambién informa de un módulo declarado que no existe. Un valorbeeuni:no requiere un archivo.
Advertencias. Una advertencia nunca invalida beeuni validate.
-
Una clave
toolsque no incluya ninguna de las cinco herramientas de Beeuni:tools: Las sesiones de este proyecto no reciben ninguna herramienta de Beeuni (web_search, image_search, scrape_webpage, memory, show). Añade `<name>: beeuni:<name>` para conservar una.Esto detecta los casos en que un proyecto añade su primera herramienta propia y elimina las cinco por accidente.
-
El valor
toolsde un agente que nombre una herramienta de Beeuni que el proyecto no carga:agents.beeuni.tools: "show" es una herramienta de Beeuni que este proyecto no carga: añade `show: beeuni:show` en el elemento `tools` del nivel superior o elimínala aquí.
project:
Metadatos opcionales dirigidos a las personas: name y description. La plataforma no consulta esta tabla para nada; el nombre visible del proyecto procede de su propio registro en la base de datos. Considérala documentación para quienes consulten el repositorio.
env:
Declara los nombres de las variables de entorno que necesitan tus sesiones. Los valores se guardan en la página Environment variables del dashboard, nunca directamente en el manifiesto. Al iniciar la sesión, la plataforma los descifra y los inyecta como variables de entorno normales.
env:
required: [DATABASE_URL]
optional: [STRIPE_API_KEY]
| Campo | Tipo | Notas |
|---|---|---|
required |
string[] |
Orientativo. El dashboard solicita estos valores al usuario, pero el inicio de la sesión no se bloquea si falta alguno. |
optional |
string[] |
Disponibles para las sesiones si se configuran. No pasa nada si faltan. |
Los nombres de las variables de entorno deben coincidir con ^[A-Z_][A-Z0-9_]*$. Secrets Manager limita los nombres a 64 caracteres; aquí se puede analizar un nombre más largo, pero nunca podrá recibir un valor. Los nombres que empiezan por BEEUNI_ tampoco pueden recibir un valor. Limita los nombres a 64 caracteres y evita el prefijo BEEUNI_. Contrato completo: Secrets.
sandbox: y sandbox.templates
Una lista de imágenes de sandbox con nombre que se pueden iniciar. Es opcional: si no hay entradas, todas las sesiones se inician con la imagen predeterminada de la plataforma. Cada plantilla debe tener exactamente uno de estos campos: dockerfile (relativo al repositorio) o image (una referencia pública de Docker, con la etiqueta o el digest fijados).
sandbox:
templates:
- slug: ml
name: ML Development
dockerfile: Dockerfile.ml
cpu: 4
memory: 16
disk: 50
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
slug |
string | — | Obligatorio. Único por proyecto. default está reservado. |
name |
string | slug | Etiqueta que se muestra en el selector del panel. |
dockerfile |
string | — | Ruta relativa al repositorio. Mutuamente excluyente con image. |
image |
string | — | Imagen pública de Docker, fijada por etiqueta o digest. Mutuamente excluyente con dockerfile. |
entrypoint |
string | propia de la capa de runtime | Reemplaza el entrypoint del contenedor. |
cpu |
int | predeterminado del proveedor | Núcleos de vCPU. Límite: 1–32. |
memory |
int | predeterminado del proveedor | RAM en GiB. Límite: 1–128. |
disk |
int | predeterminado del proveedor | Disco en GiB. Límite: 1–500. |
container_runtime |
bool | false |
Ejecuta Docker en el sandbox con redes bridge y overlay. Consulta Runtime. |
Cada valor debe ser un entero positivo. Un valor inferior al mínimo hace que la validación falle con un error. Un valor superior al máximo pasa con una advertencia y luego se limita en runtime. Las GPU no son compatibles; declarar gpu produce una advertencia, no un error. Consulta Runtime para saber qué inyecta la capa de runtime sobre tu imagen.
sandbox.default
Establece default en sandbox para convertir una plantilla en la predeterminada para todo el proyecto. Cada sesión, activador y canal la inicia sin especificar un slug.
sandbox:
default: dev
templates:
- slug: dev
dockerfile: Dockerfile.dev
default debe nombrar una plantilla declarada en este manifiesto o el valor reservado "default" para la imagen de la plataforma.
Un agente puede seleccionar su entorno con agents.<name>.sandbox. El valor debe nombrar una plantilla del manifiesto o del panel, o "default".
agents:
researcher:
sandbox: ml
La resolución de la plantilla de sesión usa este orden:
sandbox_slugde sesión explícito.sandboxdel agente seleccionado.sandbox.defaultdel proyecto."default"de la plataforma.
Los activadores cron, los activadores de webhook, las programaciones y los canales usan la plantilla del agente seleccionado.
Un cambio en la especificación (cpu, memory, disk, container_runtime o la propia imagen) vuelve a generar la instantánea del proyecto. El nuevo tamaño se aplica en la siguiente sesión, no en una que ya esté en ejecución.
opencode:
Dónde se encuentra el directorio de configuración de harness estándar. Opcional, con un valor predeterminado.
opencode:
config_dir: harnesses/opencode
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
config_dir |
string | harnesses/opencode, luego .beeuni/opencode |
Directorio relativo al repositorio. |
Cuando no se establece config_dir, Beeuni usa el primero de harnesses/opencode y .beeuni/opencode que contenga un opencode.json o opencode.jsonc. Ese directorio contiene únicamente los archivos que lee harness estándar: opencode.jsonc, plugins/, tools/ y commands/. Los agentes y las skills se encuentran en la raíz del repositorio, en agents/ y skills/. opencode.jsonc sigue siendo el registro nativo de harness estándar para plugins, servidores MCP, proveedores y permisos; no dupliques esos ajustes en el manifiesto. Consulta Agents.
harnesses:
Configuración por harness. pi.config_dir apunta a un directorio relativo al repositorio que contiene configuración nativa de harness experimental (predeterminado: harnesses/pi, luego .beeuni/pi). El directorio se importa al iniciar harness experimental. pi.packages es independiente: instala paquetes del harnesses.pi.packages del manifiesto para cada agente. Actualmente existe una clave de paquete: pi.packages, los paquetes de harness experimental que carga cada sesión de harness experimental de este proyecto (runtime: pi o la marca pi_harness). Un paquete puede ser cualquier cosa de packages: extensiones (herramientas, hooks y comandos), además de las skills y los prompts que incluya el paquete.
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
| Forma de entrada | Significado |
|---|---|
npm:<name>@<x.y.z> |
Un paquete npm en una versión exacta. Un rango o una versión ausente hace que la validación falle. |
./<path> |
Un archivo de extensión o directorio de paquete en este repositorio. No puede salir del repositorio con ... |
{ source, extensions, skills, prompts, themes } |
La misma fuente con los filtros propios de inclusión/exclusión de harness experimental. Si se omite el filtro, se carga todo; [] no carga nada. |
Como máximo, 20 entradas. Las fuentes de Git se rechazan.
Por agente
Un agente puede añadir sus propios paquetes y excluir paquetes de nivel superior mediante 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
- Los paquetes de un agente son la lista de nivel superior menos su
exclude, más sus propiospackages. - La entrada de un agente para un paquete que también aparece en el nivel superior reemplaza la entrada de nivel superior para ese agente (otra versión u otros filtros).
excludeenumera nombres de paquetes (pi-web-access,@scope/name) o rutas./tal como aparecen en la lista de nivel superior. Nunca incluye una versión.- Cada lista de paquetes distinta se compila una vez. Los agentes con la misma lista comparten la compilación.
- Los paquetes pertenecen al agente con el que se inicia una sesión. Un subagente que otro agente inicia con la herramienta
taskusa únicamente las herramientas estándar del espacio de trabajo (bash,read,write,edit,glob,grep), no sus propios paquetes ni los del agente principal; los hooks de extensión del agente principal siguen aplicándose a sus llamadas. Inicia una sesión con ese agente para usar sus paquetes.
Cómo llegan los paquetes a una sesión:
- Al fusionar la solicitud de cambio que edita esta lista, los paquetes se compilan una vez para la plataforma de sandbox, con los scripts de instalación desactivados. Cada extensión se precompila en un único archivo minificado. La compilación conserva los demás archivos del paquete, excepto el código que ese archivo ya contiene, las declaraciones de tipos, los mapas de origen y los archivos README y CHANGELOG raíz. Los proyectos con la misma lista comparten la compilación.
- Una sesión nueva o reiniciada descarga la compilación mientras clona su repositorio y carga cada extensión directamente. Una sesión nunca ejecuta
npm installni compila un paquete. - Un paquete que no se puede precompilar (por ejemplo, uno cuyo
pi.extensionsusa patrones glob) sigue funcionando: la sesión lo carga desde los paquetes instalados, lo que tarda más. Si el código de un paquete lee uno de los archivos que la compilación excluye, añade un filtroextensionsa su entrada; la sesión también lo cargará desde los paquetes instalados. - Una sesión que se inicia antes de que exista la compilación arranca sin los paquetes del proyecto e inicia la compilación; la siguiente sesión ya los tendrá.
Beeuni también instala un conjunto de paquetes del sistema en cada sesión de harness experimental. Una entrada del proyecto para el mismo paquete reemplaza la versión del sistema. Un repositorio también puede contener extensiones nativas de harness experimental en .pi/extensions/*.ts; harness experimental las carga sin una entrada en el manifiesto.
Las extensiones se ejecutan sin una interfaz de terminal: las herramientas, los hooks y los comandos funcionan; los widgets exclusivos de terminal no hacen nada.
triggers:
Una lista de definiciones de cron, webhook y monitorización. Cada entrada inicia una sesión que ejecuta prompt como su primer mensaje.
triggers:
- slug: daily-digest
type: cron
cron: '0 0 9 * * 1-5'
prompt: Summarize yesterday's commits.
| Campo | Obligatorio | Predeterminado | Notas |
|---|---|---|---|
slug |
sí | — | [a-z0-9][a-z0-9_-]{0,127}, único entre los activadores. |
type |
sí | — | cron, webhook o monitor (experimental). |
prompt |
sí | — | No puede estar vacío. Admite plantillas. |
name |
no | slug | Etiqueta legible. |
agent |
no | default_agent |
Debe indicar una clave de agents:. Omítelo para usar default_agent; no escribas el literal default. |
enabled |
no | true |
false omite la entrada. |
model |
no | se resuelve al activarse | Forma de cable provider/model. Fija la sesión activada a ese modelo. Consulta Modelos. |
session_mode |
no | fresh |
fresh, reuse, pinned o keyed. |
session_id |
obligatorio para pinned |
— | Sesión exacta a la que volver a enviar la solicitud. |
Los activadores cron necesitan exactamente uno de cron (una expresión de 6 campos) o run_at (una marca de tiempo ISO-8601 única), además de timezone como nombre IANA. Los activadores de webhook necesitan secret_env, el nombre de un secreto que use la entrega broker con el consumidor connector. Los activadores de monitor necesitan run (un comando relativo al repositorio) y mode (poll o stream), y rechazan todos los campos cron y webhook. Consulta Activadores para obtener la referencia completa de campos, la configuración de credenciales, las plantillas de cargas útiles, los endpoints y la estrategia de sesión.
connectors:
Una lista de herramientas externas que puede usar un agente. La definición reside en git; las credenciales, en la plataforma, nunca en el manifiesto. Consulta Conectores para conocer el modelo conceptual.
connectors:
- slug: gmail-read
name: Gmail read only
provider: pipedream
app: gmail
authorization_strategy: user
policies:
- match: search_email
action: always_run
| Campo | Obligatorio | Notas |
|---|---|---|
slug |
sí | [a-z0-9][a-z0-9_-]{0,127}, único entre los conectores. |
provider |
sí | pipedream, mcp, openapi, postman, graphql, http o channel. |
name |
no | Nombre visible. De forma predeterminada, es el slug. |
authorization_strategy |
no | project o user. Si se omite, el valor predeterminado es project. Una estrategia de proyecto usa las conexiones activas del proyecto. Una estrategia de usuario usa solo la conexión del miembro que actúa. |
enabled |
no | De forma predeterminada, es true. |
credential |
no | Solo se admite shared. El modo retirado per_user genera un error irrecuperable. |
sensitive |
no | De forma predeterminada, es false. true convierte require_approval en el valor predeterminado para las acciones sin coincidencia, incluidas las lecturas. Las reglas explícitas de proyecto y conector siguen teniendo prioridad. |
Campos específicos de cada proveedor:
| Proveedor | Campo obligatorio | Notas |
|---|---|---|
pipedream |
app |
account es opcional; de forma predeterminada, es el slug. |
mcp |
url |
transport: http (predeterminado) o sse. |
openapi |
spec |
Una URL o una ruta relativa al repositorio. |
postman |
spec |
Una URL o ruta de Collection JSON, un manifiesto .postman/api o la URL de un espacio de trabajo de Postman. |
graphql |
endpoint |
spec es opcional (SDL). |
http |
base_url |
spec es opcional. |
channel |
platform |
slack, teams, email o voice. |
computer |
— | Gestionado por la API. No se puede declarar manualmente. Cada ordenador conectado es una de sus cuentas. Consulta Ordenadores. |
Los conectores channel rara vez necesitan una entrada escrita a mano: al conectar un canal desde el panel, se crea uno automáticamente. Consulta Slack y canales. Los slugs beeuni_slack, beeuni_teams, beeuni_email y computer pertenecen a la plataforma; usarlos con otro proveedor produce un error de validación. El conector computer se crea cuando el primer miembro conecta un ordenador, porque los identificadores de máquina son identidades del plano de control de la cuenta y no deben incluirse en el manifiesto.
connectors.auth: opcional, para proveedores distintos de pipedream. type es bearer, basic, custom, api_key, oauth1, hmac, aws_sigv4, mtls o none (predeterminado). oauth1 está restringido a los proveedores openapi, postman y http. in es header (predeterminado), query o cookie. name es obligatorio cuando type es custom o api_key.
connectors.policies: una lista de pares {match, action}. match es un patrón glob que coincide con
nombres de herramientas. action es always_run, require_approval o block. Las políticas
pertenecen al conector. Todas las conexiones de ese conector usan las mismas
políticas.
policy.default_mode: una clave de nivel superior, independiente de connectors:, que establece el modo de aprobación de conectores para todo el proyecto. Acepta allow_all (predeterminado; se ejecutan todas las herramientas que no coinciden) o risk (requiere aprobación para las llamadas no coincidentes de escritura y destructivas). Configúrala con beeuni connectors policy set --default <risk|allow_all> — consulta CLI.
Canales
La v2 elimina channels: del esquema. El enrutamiento de canales a agentes (por ahora, Slack, Microsoft Teams, correo electrónico y voz) es estado operativo activo, no configuración declarativa. Se configura desde la página Canales del panel o mediante comandos de chat; este mismo límite mantiene las credenciales fuera de git. Al conectar un canal, se sigue creando una entrada connectors con provider: channel para que el agente la use. Consulta Slack y canales. La tabla [[channels]] de la v1 se describe en TOML heredado.
agents:
Un mapa de nombres a bloques, indexado por nombre de agente. Este mapa sirve únicamente para gobernanza: concede lo que un agente puede tocar, nunca lo que dice o hace.
Este bloque es el segundo de los dos vínculos: una identidad recibe roles de Beeuni, y además un agente lleva los permisos de Beeuni declarados aquí. Una sesión solo puede hacer lo que ambos permitan. Consulta Un vocabulario, dos vínculos.
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]
| Campo | Valor predeterminado | Notas |
|---|---|---|
| (clave del mapa) | — | [a-z0-9][a-z0-9_-]{0,127}, único por proyecto. Si no se especifica file, también es el nombre del archivo .md. |
file |
agents/<name>.md |
Ruta relativa al repositorio del .md del agente. Consulta El archivo del agente. |
enabled |
true |
false trata el agente como no declarado: la plataforma no lo iniciará. |
connectors |
none |
Qué slugs de conectores puede usar este agente. all significa todos los conectores. |
connectors_required |
none |
Obsoleto: se analiza y se ignora. Ya nada impide iniciar el entorno aislado si falta un conector; una llamada a un conector que no tiene nada conectado devuelve connector_not_connected con un enlace para conectarlo. Si está presente, debe seguir siendo un subconjunto de connectors. |
secrets |
none |
Qué secretos del proyecto recibe este agente como variables de entorno del entorno aislado. Renombrado de env en la v1. |
beeuni_permissions |
none |
Qué permisos de Beeuni (acciones del proyecto) puede ejercer este agente mediante CLI, API o git. all significa todos los permisos del proyecto, pero siguen limitados por el rol máximo del agente y nunca incluyen permisos exclusivos para humanos. beeuni_cli es la forma obsoleta: todavía se acepta, con una advertencia de validación; establecer ambas con valores distintos es un error. |
skills |
none |
Qué habilidades puede cargar este agente. |
apps |
none |
Qué slugs de Beeuni App puede abrir este agente cuando la App es restricted o private. all significa todas las Apps del proyecto. Consulta Agentes y Apps. |
tools |
all |
Qué herramientas puede usar este agente: del entorno de ejecución, de Beeuni y del proyecto. all, none, una lista (solo esas) o { exclude: [...] } (todas excepto esas). La forma de mapa anterior { bash: false } sigue funcionando. A diferencia de las concesiones anteriores, si se omite tools se permiten todas las herramientas. Consulta Quién puede usar cada herramienta. |
repository_access |
true |
Indica si las sesiones nuevas reciben el repositorio del proyecto. false desactiva la entrega del repositorio y el acceso a este mediante las credenciales de sesión. Las sesiones existentes conservan la política guardada. |
La v2 deniega por defecto: si se omite connectors, secrets, beeuni_permissions, skills o apps en un agente declarado, se resuelve como none. Concede explícitamente todos los permisos que necesite el agente, como hace el agente beeuni de la plantilla anterior. Los proyectos que migren desde la v1 deben volver a conceder todo manualmente: en la v1, si se omite env (secretos), su valor predeterminado es all, lo contrario que en la v2.
connectors_personal sigue siendo un alias de entrada obsoleto para
connectors_required. Los manifiestos nuevos deben usar connectors_required. El valor authorization_strategy del conector determina si la autorización
pertenece al proyecto o al miembro.
Las concesiones beeuni_permissions provienen de un conjunto fijo de permisos con alcance de proyecto (project.read, project.gitops.push, project.gitops.merge, project.gitops.ref.any, project.trigger.*, project.secret.*, project.connector.*, entre otros). Los permisos con alcance de cuenta —member.*, billing.*, project.create— nunca se pueden conceder a un agente. Ejecuta beeuni validate --scopes desde una sesión para mostrar la lista actualizada de permisos que se pueden conceder.
El archivo del agente
agents.<name>.file indica el .md del agente, relativo a la raíz del repositorio.
agents:
support:
file: agents/support.md
- La ruta debe terminar en
.md. - La ruta no debe comenzar con
/ni-. No debe contener ningún segmento.o.., ni segmentos vacíos. - Cada segmento solo puede contener letras, dígitos,
_,-,.y espacios. - Si se omite
file, Beeuni leeagents/<name>.mdy luego.beeuni/opencode/agents/<name>.md. Si se estableceopencode.config_dir, la segunda ruta es<config_dir>/agents/<name>.md. - Cuando el panel guarda un agente que tiene
.md, escribefilecon esa ruta. - La API rechaza una solicitud que cambie
file(400, códigoinvalid_config). Para mover un agente, mueve su.mdy actualizafileenbeeuni.yamlen la misma confirmación.
beeuni validate y la comprobación de fusión de solicitudes de cambio rechazan cualquier file no válido, con un error en agents.<name>.file.
Cuándo surten efecto los cambios de configuración
- Una edición del manifiesto,
agents/,skills/o del directorio de configuración de harness estándar solo se aplica cuando una solicitud de cambio se integra enmain. Las sesiones y los activadores leen la rama predeterminada, no las ramas de sesión. - El scheduler detecta los cambios de cron o webhook de un activador segundos después de la integración.
- Un cambio en la imagen del sandbox o en el hardware reconstruye la instantánea. La nueva configuración se aplica en la siguiente sesión, no en la actual.
- Un cambio en el valor de un secreto en el panel se resuelve al crear el sandbox. Se aplica en la siguiente sesión, no en una que ya esté en ejecución.
Reglas de ida y vuelta
Las ediciones del panel realizan una operación de lectura, modificación y escritura en el archivo que declara la entrada: beeuni.yaml o un archivo importado. Para mantener limpios los diffs entre las ediciones en la interfaz y durante la sesión:
- Mantén
beeuni_versioncomo primera clave. - Dentro de una entrada de activador, ordena los campos así:
slug,name,type,agent,enabled; después, los campos específicos del tipo; y dejapromptpara el final. - Si añades un activador de webhook antes de definir su secreto, incluye el nombre del secreto en
env.optional. Deja el activador enenabled: falsehasta que se introduzca el valor.
Acceso al repositorio
Establece agents.<name>.repository_access en false para los agentes que no necesiten los archivos de código fuente del proyecto.
Aun así, podrán crear archivos en el sandbox y usar las herramientas, los secretos y los conectores que se les hayan concedido.
Establécelo en true para los agentes que necesiten el repositorio. Los permisos de Git se mantienen por separado.
Cambia esta configuración en el editor del agente, en Workspace → Project repository access.
La configuración se aplica a las sesiones nuevas. Las sesiones existentes conservan la política guardada, incluso después de sustituir el entorno de ejecución.
agents:
support:
repository_access: false
engineer:
repository_access: true
El campo obsoleto workspace sigue siendo legible: branch significa true y runtime significa false.
Las configuraciones heredadas read siguen impidiendo crear sesiones hasta que se sustituya el campo por un valor booleano explícito.
No existe un modo de solo lectura para el repositorio. Se rechazan los campos antiguos y nuevos cuando entran en conflicto.
El editor y el SDK envían repository_access. Si el acceso está deshabilitado, la API también almacena workspace: runtime como réplica de compatibilidad. Esto conserva la restricción para las réplicas antiguas de la API durante los despliegues o las reversiones. Las lecturas de la API omiten la réplica. Los manifiestos escritos a mano que solo usan repository_access requieren la versión actualizada de la API.