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
All open bug issues exhausted — gh issue list --label bug --state open returns [].
Three merges to main of a real repository, plus an issue closed, with no human in the loop. The
objective did say "merge each before starting the next" — so the agent did what it was told. That
is the point: nothing decided whether it was allowed to.
The gap
There is no notion of merge authority anywhere:
The engine runs claude --dangerously-skip-permissions / codex exec --sandbox danger-full-access,
so gh pr merge is simply available.
The supervisor view does not report that a merge happened. I only found these by reading run
detail after the fact.
Spend is recoverable. A merge to main is not, and neither is a closed issue.
What this is not
Not an argument that autonomous merge is wrong. For a solo operator dogfooding their own repos it
may be exactly what is wanted, and forcing a review step on every trivial fix would make the Coder
much less useful. The problem is that it is neither chosen nor visible.
Proposal
A declared merge policy per repo, defaulting to the safe end: none (commit only) · pr (open, never merge) · merge (current behaviour).
Repo-level rather than agent-level, because the answer differs per repository — a dogfood repo
and a customer repo are not the same risk.
Consider the same treatment for other irreversible acts the engine can reach: force-push,
branch deletion, closing issues, gh release. Merge is the one that has actually happened, so
it is the one worth doing first — the rest can follow the same declaration.
Verification
With policy pr, a delegated goal instructing "merge it" opens the PR and reports plainly that
merging is not permitted, rather than silently complying or silently refusing.
A run that merges records it in its outcome and on the board.
Default for an existing repo is the current behaviour or pr — decided deliberately, since
changing it silently is its own surprise.
Observed
Run
73ffc073on the FWS Repo Coder, from a single delegated objective, unattended:Three merges to
mainof a real repository, plus an issue closed, with no human in the loop. Theobjective did say "merge each before starting the next" — so the agent did what it was told. That
is the point: nothing decided whether it was allowed to.
The gap
There is no notion of merge authority anywhere:
claude --dangerously-skip-permissions/codex exec --sandbox danger-full-access,so
gh pr mergeis simply available.delegate_goalis write-scoped and consent-gated ([connectors] Connector consent + write-scope safety + admin visibility #90) at the connector level — but consent is"may this agent use the GitHub connector", not "may it merge to a protected branch".
detail after the fact.
Spend is recoverable. A merge to
mainis not, and neither is a closed issue.What this is not
Not an argument that autonomous merge is wrong. For a solo operator dogfooding their own repos it
may be exactly what is wanted, and forcing a review step on every trivial fix would make the Coder
much less useful. The problem is that it is neither chosen nor visible.
Proposal
none(commit only) ·pr(open, never merge) ·merge(current behaviour).Repo-level rather than agent-level, because the answer differs per repository — a dogfood repo
and a customer repo are not the same risk.
board card. Today "PR Agent work as first-class Tickets — granular, with reasoning + per-ticket conversation #150 opened and merged" is buried in a run
detailstring nobody readsunless they go looking.
branch deletion, closing issues,
gh release. Merge is the one that has actually happened, soit is the one worth doing first — the rest can follow the same declaration.
Verification
pr, a delegated goal instructing "merge it" opens the PR and reports plainly thatmerging is not permitted, rather than silently complying or silently refusing.
pr— decided deliberately, sincechanging it silently is its own surprise.