policy block changes that. It lists the evidence a task must have before it is published. reviewers defines named reviewers the agent can ask for a second opinion.
Policy
.bellows.yaml (excerpt)
required is the only value. Any other value, an unknown key or a repeated key is an error. Leave a key out to require nothing. You can set one or both.
gates: required needs an environment block; without one the file is refused. Declare at least one gate there too, or the requirement has nothing to check.
What counts as evidence
- Gates: a full, unfiltered pass that passed. Runs the agent made with a
filterdo not count, and neither do runs on a tree that has since changed. - Review: the latest review of the task must be clean. A review that is unfinished, failed or cancelled does not approve. One that found blockers rejects.
- Evidence is tied to the exact revision of the work. If the agent edits anything after a clean review, the review is stale and must be asked for again.
Policy comes from the base branch
Bellows reads.bellows.yaml, including policy and reviewers, from the tip of the task’s base branch, or the default branch if none is set. It reads it through GitHub, never from the agent’s working tree. A task can edit the file in its own branch, but that edit changes nothing for that task. It takes effect only after it is merged into the base branch.
So an agent can’t weaken its own requirements. To change policy, merge a change to .bellows.yaml first.
When policy blocks
Nothing is pushed. The task fails with the badge evidence required, and the reason is one of these:Reviewers
A reviewer is a separate agent run with its own instructions and time budget. It reads a frozen copy of the tree and reports findings and a verdict (clean or blockers). It can’t publish anything and is told to change nothing. The main agent calls it by name.
.bellows.yaml
You can declare up to 8 reviewers. The format is a list that starts each item with
- name:. Indent with spaces, as in the rest of the file.
A reviewer grants a time budget and the connections you name. It is not a tool allowlist.
How reviews reach the policy
Withreview: required, the agent asks for a review by reviewer name before it finishes. The latest review decides. If the agent changes the tree after a clean verdict, it must ask again. A review that finds blockers must be answered with a fix and a new review.
Declaring reviewers without policy: review: required makes reviews available, but optional.
Common errors
“policy requires gates but no environment declares any”
“policy requires gates but no environment declares any”
Add an
environment block with an image and your gates, or drop gates: required.My policy change has no effect on the task
My policy change has no effect on the task
Policy is read from the base branch. Merge the change first, then start a new task.
“reviewer ... has no instructions”
“reviewer ... has no instructions”
Every reviewer needs a non-empty
instructions line.