You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
AGENTS_PAUSED stops only dev-lead: pr-review, the persona runner and the other model-calling workflows keep running through a fleet pause #2249
AGENTS_PAUSED=true is documented and used as the switch that pauses the agent fleet, and the budget breaker ("Budget breaker writer", #2153) is being built to set it automatically when the model provider refuses work. But only one agent honours it.
A search of the workflows on main for the variable as a run condition finds it in dev-lead-reusable.yml only (three jobs). pr-review.yml mentions it in a message, and the engine-token liveness monitor reads it to stay quiet, but pr-review, the persona runner (qa-lead, architect and the other personas) and the remaining model-calling workflows do not stop when it is set.
So a pause, whether a human sets it or the breaker does, stops dev-lead and nothing else. During a quota outage the other agents keep starting runs that fail on the same refusal, which is the waste the pause exists to prevent, and a maintainer who sets the switch believes the fleet is stopped when it is not.
Scope
List every workflow in this repository and in the reusable workflows it publishes that starts a model call (dev-lead, pr-review, persona runner, initiative planner, feature ideation, idea triage, any other). For each, state whether it honours AGENTS_PAUSED today.
Make each one skip its model-calling jobs when vars.AGENTS_PAUSED == 'true', in the same way dev-lead does (read in the calling repository's context, so an organisation-level variable pauses every repository), with one log line saying the run was skipped because the fleet is paused and, when present, the pause source and until time.
Workflows that must keep running while paused (the breaker itself, the poller, monitors, anything that does not call a model) are listed explicitly as exempt, with the reason.
Document the full list in AGENTS.md under the pause section.
Acceptance criteria
A static test enumerates the model-calling workflows and fails if one neither gates on AGENTS_PAUSED nor appears in the documented exempt list, so a new agent cannot be added without a decision.
For each newly gated workflow, a test that the model-calling job is skipped when the variable is true and runs when it is unset or false.
No change to behaviour when the variable is unset.
Rollout notes: which channel tags have to move for each reusable before the gate is live in consumer repositories.
Out of scope
The breaker's own logic, and changing what the variable is called or where it lives.
Thanks for the thorough write-up. The gap between the documented pause switch and what actually stops is clear, and the scope and acceptance criteria are well laid out. One question to confirm the scope: should the static test's exempt list cover only workflows that make no model call (the breaker, poller and monitors), or also model-calling workflows you want to keep running during a pause, such as an emergency or manual-dispatch path?
Precision on the evidence, after checking how the variable reaches the scripts on main:
As a job condition (vars.AGENTS_PAUSED != 'true') it appears only in dev-lead-reusable.yml, on three jobs.
scripts/validate-engines.sh does have a pause branch: when the environment variable AGENTS_PAUSED is true it marks every engine unavailable and skips the probes. But the only workflow that passes vars.AGENTS_PAUSED into the environment is engine-token-liveness.yml. pr-review.yml mentions the variable once, in a message; it never sets it for its steps. So in pr-review and the persona workflows that branch is unreachable.
The cheapest correct fix for the workflows that already run validate-engines.sh may be to pass the variable through, rather than add a job condition; scope item 2 leaves that choice open.
Activity
github-actions commentedon Oct 11, 2026
Thanks for the thorough write-up. The gap between the documented pause switch and what actually stops is clear, and the scope and acceptance criteria are well laid out. One question to confirm the scope: should the static test's exempt list cover only workflows that make no model call (the breaker, poller and monitors), or also model-calling workflows you want to keep running during a pause, such as an emergency or manual-dispatch path?
don-petry commentedon Oct 11, 2026
Precision on the evidence, after checking how the variable reaches the scripts on
main:vars.AGENTS_PAUSED != 'true') it appears only indev-lead-reusable.yml, on three jobs.scripts/validate-engines.shdoes have a pause branch: when the environment variableAGENTS_PAUSEDistrueit marks every engine unavailable and skips the probes. But the only workflow that passesvars.AGENTS_PAUSEDinto the environment isengine-token-liveness.yml.pr-review.ymlmentions the variable once, in a message; it never sets it for its steps. So in pr-review and the persona workflows that branch is unreachable.pr-review.yml; on the current code that is not so, and it should be read with this issue.The cheapest correct fix for the workflows that already run
validate-engines.shmay be to pass the variable through, rather than add a job condition; scope item 2 leaves that choice open.fix(reviews): close the coverage gaps in the fleet-pause check and bl…
fix(reviews): remove an exponential regex and secret-looking names fr…
ci(lint): give the bats job 20 minutes
fix(reviews): the pause notice no longer claims the health scans ran
fix(fleet-pause): make every model-calling workflow honour AGENTS_PAU…