.bellows.yaml sits at the root of your repository. It has four top-level keys, all optional. Any other top-level key is an error.
Each key may appear once. All limits are collected in Limits.
Where the file is read from
Bellows reads the file when a run starts. It does not read it from the agent’s working tree.- It reads the file through GitHub at the tip of the task’s base branch. If the task has no base branch, it uses the repository’s default branch.
- The file is read at one commit, and the whole plan is validated before anything launches. The run uses exactly that revision.
- Each new run reads the file again. A change to
.bellows.yamlapplies to tasks started after it is merged into the base branch. - If the file is missing, the run has no gates, no services, no policy and no reviewers. Without an
environmentblock no gates run, so nothing checks the agent’s work. - A file over 65,536 bytes is refused.
File format rules
The parser reads a small, strict subset of YAML. It refuses what it does not understand instead of guessing, because a silently skipped gate is a check that never ran.Errors
A bad file fails the task before the agent starts, with a configuration error. The message is shown on the failed run.
Fix the file on the base branch (or the default branch), then retry the task.
environment
The runner image and what runs in it..bellows.yaml
An
environment block without image is an error: environment declares no image. environment takes no inline value, and a second environment block is an error.
Guides: Configure your repo, Environment variables and secrets.
cache
Each item is an environment variable name. Bellows sets that variable, in the runner and in gates, to a directory that outlives the container, so package caches survive between runs of the same repo.gates
Each gate starts with- name:. Other keys are indented under it.
A gate’s
timeout is capped by the platform’s run time budget. The agent cannot start a gate with timeout above 10 while it works; see Gates.
Errors you may see: gate "x" has no command, gate "x" is declared twice, more than 16 gates, unknown gate field "k" — only name, command, timeout, on_demand and filter are read, on_demand must be "true".
services
Sidecar containers that start with the task. Guide: Services..bellows.yaml
Plan-level rules, checked across all services:
- At most 10 services.
- Two services cannot declare the same port. They share one network namespace.
services:takes a list, not an inline value, soservices: []is an error. Leave the block out instead.unhardenedis refused. Every service runs hardened, so declareuserinstead.- Other keys are errors:
unknown service key "k" — supported: name, image, ports, environment, user.
\n, \", \xNN, \uNNNN). Single quotes know one escape, ''.
policy
The evidence a task must carry before Bellows publishes it. Guide: Policy and reviewers..bellows.yaml (excerpt)
Any other value, an unknown key or a repeated key is an error.
policy takes keys, not an inline value. gates: required without an environment block is refused with policy requires gates but no environment declares any. Policy is read from the base branch only.
reviewers
Named reviewer profiles the agent can call as a separate run. Guide: Policy and reviewers..bellows.yaml
At most 8 reviewers. Errors include
reviewer "x" has no instructions, reviewer "x" is declared twice, more than 8 reviewers, and reviewer name "X" must be lowercase letters, digits and hyphens.
Complete example
Every key in one file. Comments sit on their own lines..bellows.yaml