Build1 publisher2 min readPublished Updated
A kill test sorts agent orchestrators from agent coordinators
Kill an orchestrator and the fleet stops; kill a coordinator and every agent keeps typing. Foremerge's maintainer submitted the tool to a list of orchestrators anyway, because no list exists for the other layer.
The Engineer · Build desk

What happened
- The maintainer of Foremerge submitted the tool to a list called awesome-agent-orchestrators, calling it the closest existing list and the wrong noun, since the other thing has no list at all.
- Kill an orchestrator, the post says, and sessions die, queued work never starts, and nothing is spawned or resumed until it comes back, because it sits in the control path.
- Kill a coordinator and every agent keeps typing; what is lost is the shared picture, not the work, because it sits beside the control path.
- An agent publishes an intent with a scope such as symbol:PaymentService=replace, and a second agent declaring extend gets a HIGH destructive_vs_additive finding back in the same call.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- decision Past two or three agents somebody owns the run loop, and the choice is which failure mode you accept: an outage that stops the fleet, or a stale shared picture while the fleet keeps editing.
- cost The coordinator demands prompt discipline. The work lands in your agent instructions, because each agent has to declare a checkable scope before it touches code.
- constraint A session manager can only reason about processes it spawned. The second tool, the colleague's checkout and Tuesday's resumed session sit outside every check it is able to run.
- precedent With no catalogue for the coordinator layer, tools that cannot start a process get shelved beside session managers and judged on features they were never built to have, starting with the screen that shows which sessions are alive.
Rule FM-C001 fires when two published intents claim the same semantic scope and the two operations disagree in kind. In the 0.4.0 output the post captured, source_operation is extend, target_operation is replace, both marked as not inferred, and detected_before_code is true [13]. The rules are deterministic, and the finding comes back in the same call that published the second intent [12]. The second agent hears about the collision in one request, before it has edited a line [1].
The scope grammar is what makes that checkable. The declaration is symbol:PaymentService=replace, and according to the post a file path would not do the job, because paths miss API, schema, configuration and cross-language collisions [10]. The operation sits in the flag itself [11].
The cost sits here. Every agent has to publish an intent before it edits, in a form precise enough to compare [9]. The rules only compare declarations, so two agents can collide on PaymentService and produce no finding at all if one of them skipped the call [2]. Foremerge cannot start an agent or stop one [2]. Adoption depends on every agent volunteering its plan first.
What it can do at the end is refuse to bless the change set. The post prints two strings: BLOCKING_CONFLICT, reporting one unresolved HIGH intent conflict to resolve before acceptance, and CHECK_FAILED, reporting that the ChangeSet is UNVERIFIED because no verification check was run against it [15]. Both are overridable by a human with a recorded reason [16]. Of that evidentiary authority the maintainer wrote: "it can make you look, it cannot make you stop." [17]
The other half of the argument is visibility. An orchestrator knows the sessions it spawned and nothing else [18]. The working day the post describes has Claude Code in one window, Codex in another, Cursor open on the same repository, a colleague, and something started on Tuesday and picked up on Thursday [19]. The list has five sources of edits, and if your session manager spawned the Claude Code window, four sit outside it [3].
In my view you adopt the orchestrator first and the coordinator later, once edits start arriving from processes you did not spawn. The post puts the point where the run loop becomes its own job at two or three agents [6], and it credits Claude Code with coordinating its own subagents inside one session well [21]. Below that, neither layer is worth running. "If you only ever run one coding agent, you do not need either of these," the post opens [20].
What to watch
- Whether awesome-agent-orchestrators, or anyone else, opens a separate category for the coordinator layer.
- Whether session managers such as claude-squad, dmux, amux or agent-deck begin accepting declarations from sessions they did not spawn.
- Whether Foremerge's rule set beyond FM-C001 covers API, schema and cross-language scopes as well as it covers symbols.