<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mahad Ansar</title>
    <description>The latest articles on DEV Community by Mahad Ansar (@mahadansar).</description>
    <link>https://dev.to/mahadansar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4078593%2Fbfe6541c-8ffa-458e-810a-f56769dcb130.jpg</url>
      <title>DEV Community: Mahad Ansar</title>
      <link>https://dev.to/mahadansar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mahadansar"/>
    <language>en</language>
    <item>
      <title>What I Changed After My Multi-Agent Coding Orchestrator Kept Choosing Zero Workers</title>
      <dc:creator>Mahad Ansar</dc:creator>
      <pubDate>Sat, 22 Aug 2026 15:13:29 +0000</pubDate>
      <link>https://dev.to/mahadansar/what-i-changed-after-my-multi-agent-coding-orchestrator-kept-choosing-zero-workers-3mhm</link>
      <guid>https://dev.to/mahadansar/what-i-changed-after-my-multi-agent-coding-orchestrator-kept-choosing-zero-workers-3mhm</guid>
      <description>&lt;p&gt;Last week, I wrote about a result I was not expecting.&lt;/p&gt;

&lt;p&gt;I had built a multi-agent coding orchestrator, deliberately created workloads that should have favored parallelism, and then watched the supervisor choose &lt;strong&gt;zero workers in all six free-choice scale runs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When I forced delegation, the workers still did not beat the supervisor working alone on the workloads I measured.&lt;/p&gt;

&lt;p&gt;At the time, my main takeaway was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The optimal number of workers can be zero.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I still believe that.&lt;/p&gt;

&lt;p&gt;But after continuing to build and actually use the system, I realized there was another problem hiding behind the same symptom.&lt;/p&gt;

&lt;p&gt;Sometimes "zero workers" meant:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The supervisor saw the orchestration tools and decided delegation was not worth it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Other times it meant:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The supervisor never discovered the orchestrator in the first place.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are completely different failures.&lt;/p&gt;

&lt;p&gt;That distinction changed the project more than another round of benchmarking would have.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two very different kinds of zero workers
&lt;/h2&gt;

&lt;p&gt;In the benchmarks from my previous article, discovery was never in question.&lt;/p&gt;

&lt;p&gt;The prompts explicitly told the supervisor that &lt;code&gt;delegate_task&lt;/code&gt; and &lt;code&gt;delegate_tasks&lt;/code&gt; existed.&lt;/p&gt;

&lt;p&gt;So when it chose zero workers, that was a routing decision.&lt;/p&gt;

&lt;p&gt;It had the option to delegate.&lt;/p&gt;

&lt;p&gt;It chose not to.&lt;/p&gt;

&lt;p&gt;And on the workloads I measured, forcing it to delegate did not produce evidence that the decision was wrong.&lt;/p&gt;

&lt;p&gt;But normal usage is different.&lt;/p&gt;

&lt;p&gt;I do not want to start every Codex session with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use sol-luna-orchestrator.
Use three workers.
Run them in parallel.
Give one High effort and two Medium.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I have to manually design the worker topology every time, I have not really built an orchestrator.&lt;/p&gt;

&lt;p&gt;The goal is to install the tool once, open a normal Codex session, describe the engineering task, and let the parent decide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task
  |
  v
Discover orchestration guidance
  |
  v
Is delegation worth it?
  |
  +--&amp;gt; No  -&amp;gt; work solo
  |
  +--&amp;gt; Yes -&amp;gt; one bounded task
  |          dependent tasks in sequence
  |          or independent tasks in parallel
  |
  v
Review evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In fresh sessions, that was not consistently happening.&lt;/p&gt;

&lt;p&gt;The original discovery hint installed by the CLI effectively said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Consider the orchestrator when delegation might help.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem with "consider" is that the parent first has to know there is something to consider.&lt;/p&gt;

&lt;p&gt;If it never looks at the MCP server, it never sees the detailed routing guidance.&lt;/p&gt;

&lt;p&gt;So this was not a delegation-policy problem.&lt;/p&gt;

&lt;p&gt;It was a discovery problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovery has to happen before the routing decision
&lt;/h2&gt;

&lt;p&gt;I changed the onboarding behavior.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sol-luna-orchestrator init&lt;/code&gt; now installs a small managed instruction that tells a fresh Codex session to &lt;strong&gt;discover the configured orchestrator first&lt;/strong&gt;, and then use the actual guidance to choose between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;working solo&lt;/li&gt;
&lt;li&gt;delegating one task&lt;/li&gt;
&lt;li&gt;running dependent tasks sequentially&lt;/li&gt;
&lt;li&gt;running independent tasks in parallel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is what the hint does &lt;strong&gt;not&lt;/strong&gt; say.&lt;/p&gt;

&lt;p&gt;It does not say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You must delegate.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Zero workers remains explicitly valid.&lt;/p&gt;

&lt;p&gt;That order matters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bad:

Should I delegate?
    |
    v
Maybe I should look for a tool?


Current:

Discover the orchestration policy
    |
    v
Understand the available execution modes
    |
    v
Now decide whether delegation makes sense
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I wanted discovery to be stronger without turning it into forced fan-out.&lt;/p&gt;

&lt;p&gt;Those are two separate decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I tried it on a real task
&lt;/h2&gt;

&lt;p&gt;After releasing v0.8.0, I wanted to test this outside the benchmark harness.&lt;/p&gt;

&lt;p&gt;So I opened a fresh Codex session in another repository.&lt;/p&gt;

&lt;p&gt;The repository was my GitHub profile README.&lt;/p&gt;

&lt;p&gt;It had become outdated, especially around the open-source work I had done on Sol-Luna, and I wanted the agent to research my current public work and rewrite the profile into a concise landing page.&lt;/p&gt;

&lt;p&gt;The important part was the prompt.&lt;/p&gt;

&lt;p&gt;I did &lt;strong&gt;not&lt;/strong&gt; mention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sol-Luna&lt;/li&gt;
&lt;li&gt;MCP&lt;/li&gt;
&lt;li&gt;delegation&lt;/li&gt;
&lt;li&gt;workers&lt;/li&gt;
&lt;li&gt;Luna&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delegate_task&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delegate_tasks&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I simply asked it to inspect the repository, research the relevant public work from primary sources, verify claims, update the README, check the links, and leave the changes uncommitted.&lt;/p&gt;

&lt;p&gt;The parent discovered the orchestration guidance on its own.&lt;/p&gt;

&lt;p&gt;Then it made a fairly reasonable split.&lt;/p&gt;

&lt;p&gt;The broad public-source investigation was one substantial, bounded research task, so it delegated that to a Luna worker at High effort.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxiw1n57gb27fp6r76310.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxiw1n57gb27fp6r76310.png" alt="Fresh Codex session: the parent discovered the orchestration guidance and chose one bounded research worker without being told to delegate." width="800" height="575"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fresh Codex session: the parent discovered the orchestration guidance and chose one bounded research worker without being told to delegate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The worker was explicitly read-only.&lt;/p&gt;

&lt;p&gt;The parent kept the actual editorial decisions, synthesis, README editing, source checking, and final review.&lt;/p&gt;

&lt;p&gt;Later, when I asked it to refine the README it had just written, it explicitly chose &lt;strong&gt;zero workers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Its reasoning was basically that the remaining change involved one short, tightly coupled file and was already understood.&lt;/p&gt;

&lt;p&gt;So within one real workflow I got both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Broad independent research
        |
        v
1 bounded worker


Tightly coupled final refinement
        |
        v
0 workers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is much closer to what I wanted when I started this project.&lt;/p&gt;

&lt;p&gt;Not "multi-agent all the time."&lt;/p&gt;

&lt;p&gt;Adaptive execution.&lt;/p&gt;

&lt;p&gt;I am not claiming this run proved delegation was faster or cheaper.&lt;/p&gt;

&lt;p&gt;There was no solo control.&lt;/p&gt;

&lt;p&gt;It was not a benchmark.&lt;/p&gt;

&lt;p&gt;What it demonstrated was narrower: a fresh session discovered the orchestrator without being prompted toward it, used a worker where it saw a clean seam, and later declined to use one where it did not.&lt;/p&gt;

&lt;p&gt;That is a much more useful acceptance test than simply checking whether the tool call technically works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The next problem was context
&lt;/h2&gt;

&lt;p&gt;Once workers actually start receiving useful tasks, another obvious question appears:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much of the supervisor's context should they get?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The naive answer is "all of it."&lt;/p&gt;

&lt;p&gt;I increasingly think that is the wrong answer.&lt;/p&gt;

&lt;p&gt;The parent may know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the full conversation&lt;/li&gt;
&lt;li&gt;architectural history&lt;/li&gt;
&lt;li&gt;rejected approaches&lt;/li&gt;
&lt;li&gt;unrelated files&lt;/li&gt;
&lt;li&gt;debugging attempts&lt;/li&gt;
&lt;li&gt;user preferences&lt;/li&gt;
&lt;li&gt;prior decisions&lt;/li&gt;
&lt;li&gt;broader product context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A worker handling one bounded task usually does not need all of that.&lt;/p&gt;

&lt;p&gt;But giving it too little context creates another problem: it has to rediscover information the parent already knows.&lt;/p&gt;

&lt;p&gt;So I added structured &lt;strong&gt;Context Capsules&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A worker can receive selected fields such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;relevant context
interfaces
dependencies
invariants
upstream decisions
known pitfalls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is not context maximization.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;context allocation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Give the worker the smallest useful view of the problem.&lt;/p&gt;

&lt;p&gt;That turned out to apply in the other direction too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The supervisor does not need every byte back either
&lt;/h2&gt;

&lt;p&gt;Delegated tasks return evidence.&lt;/p&gt;

&lt;p&gt;Originally, successful verification could send a lot of routine command output back into the parent's context.&lt;/p&gt;

&lt;p&gt;But once a check passed, most of that output was rarely useful.&lt;/p&gt;

&lt;p&gt;What the parent normally needs is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what changed&lt;/li&gt;
&lt;li&gt;what was verified&lt;/li&gt;
&lt;li&gt;whether verification passed&lt;/li&gt;
&lt;li&gt;whether scope was violated&lt;/li&gt;
&lt;li&gt;whether the worker's claims matched observed changes&lt;/li&gt;
&lt;li&gt;any discrepancy or failure that needs attention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So v0.7.0 added &lt;strong&gt;Compact Evidence Packets&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Successful verification stdout/stderr can be removed from the structured result while failures remain intact.&lt;/p&gt;

&lt;p&gt;That gave me a more general rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Good multi-agent systems need to optimize context in both directions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The worker should not receive the entire supervisor history.&lt;/p&gt;

&lt;p&gt;The supervisor should not receive every routine byte the worker produced.&lt;/p&gt;

&lt;p&gt;The useful information is somewhere in the middle.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worker's PASS is still just a claim
&lt;/h2&gt;

&lt;p&gt;This is probably the design principle I care about most in the project now.&lt;/p&gt;

&lt;p&gt;Suppose a worker returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PASS

Changed:
- src/auth.ts
- src/auth.test.ts

Tests passed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That looks reassuring.&lt;/p&gt;

&lt;p&gt;But it is still generated text.&lt;/p&gt;

&lt;p&gt;So Sol-Luna treats the worker's report as a &lt;strong&gt;claim&lt;/strong&gt;, not the final truth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhufon1rdlh3cv57yxci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvhufon1rdlh3cv57yxci.png" alt="A worker-reported PASS is treated as evidence to inspect, not as the final conclusion." width="799" height="193"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A worker-reported PASS is treated as evidence to inspect, not as the final conclusion.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The orchestrator can independently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;observe which files actually changed&lt;/li&gt;
&lt;li&gt;compare observed edits with claimed edits&lt;/li&gt;
&lt;li&gt;check declared file scope&lt;/li&gt;
&lt;li&gt;detect integration conflicts&lt;/li&gt;
&lt;li&gt;re-run allowlisted verification commands&lt;/li&gt;
&lt;li&gt;report discrepancies back to the parent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then the parent still owns the final review.&lt;/p&gt;

&lt;p&gt;The trust chain becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Worker does the task
      |
      v
Worker reports what happened
      |
      v
Orchestrator independently observes and verifies
      |
      v
Parent reviews the evidence
      |
      v
Decision
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is intentionally different from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Worker says PASS
      |
      v
Ship it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The real-world README run even found a small flaw in this logic.&lt;/p&gt;

&lt;p&gt;The research worker had an explicitly read-only contract.&lt;/p&gt;

&lt;p&gt;It correctly changed zero files.&lt;/p&gt;

&lt;p&gt;But the orchestrator still emitted a generic warning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Worker claimed PASS but no file changes were recorded.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For an implementation task, that warning can be useful.&lt;/p&gt;

&lt;p&gt;For an investigation that was explicitly forbidden from editing anything, zero changed files is exactly what should happen.&lt;/p&gt;

&lt;p&gt;So that run produced a new backlog item: classify zero-change results from the &lt;strong&gt;task contract's intent&lt;/strong&gt;, not from the result alone.&lt;/p&gt;

&lt;p&gt;That is the kind of bug I wanted real usage to expose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parallel agents eventually turn into normal concurrency engineering
&lt;/h2&gt;

&lt;p&gt;There was another lesson from building the worker path that had very little to do with language models.&lt;/p&gt;

&lt;p&gt;Parallel workers use isolated Git worktrees.&lt;/p&gt;

&lt;p&gt;At one point, batches would occasionally fail even though the worker itself had done nothing wrong.&lt;/p&gt;

&lt;p&gt;The problem was &lt;code&gt;git worktree add&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Multiple processes were modifying shared metadata under &lt;code&gt;.git/worktrees&lt;/code&gt; concurrently.&lt;/p&gt;

&lt;p&gt;The failure was rare. I reproduced it at roughly once per thousand worktree creations.&lt;/p&gt;

&lt;p&gt;That made it annoying enough to be real and infrequent enough to hide during casual testing.&lt;/p&gt;

&lt;p&gt;The fix was not better prompting.&lt;/p&gt;

&lt;p&gt;It was synchronization.&lt;/p&gt;

&lt;p&gt;Operations that mutate the shared worktree metadata are now serialized.&lt;/p&gt;

&lt;p&gt;Worker execution remains parallel.&lt;/p&gt;

&lt;p&gt;That experience was a useful reminder that once you build enough infrastructure around AI agents, a lot of the difficult bugs become very ordinary software-engineering bugs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;race conditions&lt;/li&gt;
&lt;li&gt;shared state&lt;/li&gt;
&lt;li&gt;cleanup&lt;/li&gt;
&lt;li&gt;cancellation&lt;/li&gt;
&lt;li&gt;process trees&lt;/li&gt;
&lt;li&gt;conflicting writes&lt;/li&gt;
&lt;li&gt;malformed logs&lt;/li&gt;
&lt;li&gt;stale configuration&lt;/li&gt;
&lt;li&gt;backwards compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model is only one part of the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  If workers run in parallel, I also need to know what they are doing
&lt;/h2&gt;

&lt;p&gt;Another problem became obvious during longer delegations.&lt;/p&gt;

&lt;p&gt;From the normal Codex interface, a worker could be running for a while and the parent could appear to be doing nothing.&lt;/p&gt;

&lt;p&gt;So I added:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sol-luna-orchestrator activity &lt;span class="nt"&gt;--watch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It shows things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;execution mode&lt;/li&gt;
&lt;li&gt;active and total workers&lt;/li&gt;
&lt;li&gt;model and reasoning effort&lt;/li&gt;
&lt;li&gt;elapsed duration&lt;/li&gt;
&lt;li&gt;verification state&lt;/li&gt;
&lt;li&gt;changed-file counts&lt;/li&gt;
&lt;li&gt;failures&lt;/li&gt;
&lt;li&gt;concurrency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Initially this sounds like a straightforward observability feature.&lt;/p&gt;

&lt;p&gt;Then the privacy question appears:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What exactly should an activity log contain?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdyhuvuggh6pnkdmfcslz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdyhuvuggh6pnkdmfcslz.png" alt="Earlier activity output exposed far more of the delegated task than was necessary." width="799" height="140"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Earlier activity output exposed far more of the delegated task than was necessary.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjzbmkj1t74bmwq7m7yq2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjzbmkj1t74bmwq7m7yq2.png" alt="The redesigned view keeps the operational signal: worker, effort, state, duration, and verification status." width="697" height="210"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The redesigned view keeps the operational signal: worker, effort, state, duration, and verification status.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A useful activity feed does not need the worker's entire objective, prompt, context, source code, or successful command output.&lt;/p&gt;

&lt;p&gt;So the current event stream deliberately excludes those.&lt;/p&gt;

&lt;p&gt;Task IDs are opaque rather than derived from task descriptions.&lt;/p&gt;

&lt;p&gt;A parent can optionally provide a short activity label, but that is documented as locally revealing because it is persisted.&lt;/p&gt;

&lt;p&gt;There is also a separate diagnostic log with more detail, and that file is explicitly treated as sensitive.&lt;/p&gt;

&lt;p&gt;Nothing is remotely transmitted by Sol-Luna.&lt;/p&gt;

&lt;p&gt;Both files are local.&lt;/p&gt;

&lt;p&gt;The broader lesson for me was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Agent observability becomes a privacy-design problem almost immediately.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;"Log everything" is not a good default when prompts and source code may be involved.&lt;/p&gt;
&lt;h2&gt;
  
  
  I also had to correct my own architecture description
&lt;/h2&gt;

&lt;p&gt;The earlier version of the project described GPT-5.6 Sol as the supervisor.&lt;/p&gt;

&lt;p&gt;That was how I personally used it, but it was not actually an architectural requirement.&lt;/p&gt;

&lt;p&gt;The parent is now explicitly &lt;strong&gt;model-agnostic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Any compatible Codex parent with access to the MCP can supervise.&lt;/p&gt;

&lt;p&gt;The worker side remains GPT-5.6 Luna.&lt;/p&gt;

&lt;p&gt;That correction also forced me to clean up another argument I had been making around cost.&lt;/p&gt;

&lt;p&gt;I had been thinking in terms of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;expensive parent
      +
cheaper workers
      =
possible savings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that only makes sense when the parent model the user selected is actually priced above the worker under the current pricing schedule.&lt;/p&gt;

&lt;p&gt;It is not a universal property of the architecture.&lt;/p&gt;

&lt;p&gt;Raw token counts are not cost either.&lt;/p&gt;

&lt;p&gt;A system can use more raw tokens but fewer credits, or the reverse, depending on the models involved.&lt;/p&gt;

&lt;p&gt;So the project now makes the narrower claim:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delegation has a coordination cost. Worker economics depend on the models you actually selected. No realized cost saving has been measured.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I would rather weaken a claim than keep one the implementation or data no longer supports.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the project looks like now
&lt;/h2&gt;

&lt;p&gt;The basic philosophy is still simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not every task should be delegated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the machinery around that idea has grown quite a bit.&lt;/p&gt;

&lt;p&gt;The parent can now choose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 workers       -&amp;gt; solo
1 worker        -&amp;gt; one bounded task
N sequential    -&amp;gt; dependent/shared work
N parallel      -&amp;gt; independent/disjoint work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each worker gets its own reasoning effort.&lt;/p&gt;

&lt;p&gt;Parallel workers use isolated worktrees.&lt;/p&gt;

&lt;p&gt;Tasks have declared scopes.&lt;/p&gt;

&lt;p&gt;Verification is independently re-run.&lt;/p&gt;

&lt;p&gt;Claimed and observed changes are compared.&lt;/p&gt;

&lt;p&gt;Workers receive structured context instead of a full conversation dump.&lt;/p&gt;

&lt;p&gt;Successful evidence can be compacted before returning to the parent.&lt;/p&gt;

&lt;p&gt;Fresh sessions can discover the orchestration policy without the user naming the tool.&lt;/p&gt;

&lt;p&gt;Single and batch delegations are observable through the CLI.&lt;/p&gt;

&lt;p&gt;And importantly, the parent still owns the final judgment.&lt;/p&gt;

&lt;p&gt;v0.8.0 is now live on npm.&lt;/p&gt;

&lt;p&gt;At the time I am writing this, npm is showing &lt;strong&gt;659 downloads in the last seven days&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I am deliberately calling those downloads, not users. Package downloads can include CI, reinstalls, automated activity, and other things that do not map one-to-one to humans.&lt;/p&gt;

&lt;p&gt;Still, for something I originally built because I wanted it for my own Codex workflow, seeing other people pull the package has been pretty cool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to build next
&lt;/h2&gt;

&lt;p&gt;I do not think the next step is "add more workers."&lt;/p&gt;

&lt;p&gt;The roadmap currently goes in a different direction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Worker continuation
&lt;/h3&gt;

&lt;p&gt;If a worker already investigated or implemented something, the parent should be able to continue that worker's thread instead of starting from zero every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bounded repair
&lt;/h3&gt;

&lt;p&gt;If verification finds a narrow problem, the same worker should be able to receive the evidence and make a bounded correction.&lt;/p&gt;

&lt;p&gt;Not an infinite autonomous loop.&lt;/p&gt;

&lt;p&gt;A controlled one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reasoned retries and effort escalation
&lt;/h3&gt;

&lt;p&gt;A timeout, a misunderstood requirement, an implementation failure, and an environment problem should not all trigger the same retry behavior.&lt;/p&gt;

&lt;p&gt;The system should classify the failure before deciding what to do next.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adaptive worker routing
&lt;/h3&gt;

&lt;p&gt;Eventually I want the supervisor to choose not just effort and worker count, but among a user-authorized pool of worker capabilities.&lt;/p&gt;

&lt;p&gt;But I deliberately put this later in the roadmap.&lt;/p&gt;

&lt;p&gt;Routing a failed task to a more expensive model before continuation and bounded repair exist would mostly be a sophisticated way to spend more money on the same failure.&lt;/p&gt;

&lt;p&gt;The recovery loop needs to become smarter first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing I changed my mind about
&lt;/h2&gt;

&lt;p&gt;When I started building Sol-Luna, the interesting problem looked like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do I run several coding agents at once?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I do not think that is the interesting problem anymore.&lt;/p&gt;

&lt;p&gt;Running several agents is relatively easy.&lt;/p&gt;

&lt;p&gt;The harder questions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the supervisor even discover the orchestration policy?&lt;/li&gt;
&lt;li&gt;Should this task be delegated?&lt;/li&gt;
&lt;li&gt;Where is the clean task boundary?&lt;/li&gt;
&lt;li&gt;What context does the worker actually need?&lt;/li&gt;
&lt;li&gt;What evidence does the parent actually need back?&lt;/li&gt;
&lt;li&gt;Can the worker's claims be independently checked?&lt;/li&gt;
&lt;li&gt;What happens when verification fails?&lt;/li&gt;
&lt;li&gt;How much information should observability persist?&lt;/li&gt;
&lt;li&gt;When is the coordination overhead simply not worth it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fresh-session README task was a tiny example, but I liked what happened.&lt;/p&gt;

&lt;p&gt;One part of the work had a clean research seam.&lt;/p&gt;

&lt;p&gt;The supervisor used a worker.&lt;/p&gt;

&lt;p&gt;The next part was tightly coupled and already understood.&lt;/p&gt;

&lt;p&gt;The supervisor used zero workers.&lt;/p&gt;

&lt;p&gt;No swarm.&lt;/p&gt;

&lt;p&gt;No fixed workflow.&lt;/p&gt;

&lt;p&gt;No rule saying more agents must be better.&lt;/p&gt;

&lt;p&gt;Just two different execution decisions for two different pieces of work.&lt;/p&gt;

&lt;p&gt;That is increasingly what I think orchestration should mean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The project is open source on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mahadansar/sol-luna-orchestrator&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Install it from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; sol-luna-orchestrator
sol-luna-orchestrator init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open a fresh Codex session and work normally.&lt;/p&gt;

&lt;p&gt;You should not need to choose a worker count or manually call the orchestration tools.&lt;/p&gt;

&lt;p&gt;And if the parent decides the right worker count is zero, that may be exactly what you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;My first experiment taught me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;More agents are not automatically better.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The work since then taught me something slightly broader:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Delegation itself is the easy part. Making delegation worth its complexity is the real engineering problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think that is the direction I want to keep pushing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>devtools</category>
    </item>
    <item>
      <title>I Built a Multi-Agent Coding Orchestrator. It Kept Choosing Zero Workers.</title>
      <dc:creator>Mahad Ansar</dc:creator>
      <pubDate>Sat, 15 Aug 2026 07:47:40 +0000</pubDate>
      <link>https://dev.to/mahadansar/i-built-a-multi-agent-coding-orchestrator-it-kept-choosing-zero-workers-4bc3</link>
      <guid>https://dev.to/mahadansar/i-built-a-multi-agent-coding-orchestrator-it-kept-choosing-zero-workers-4bc3</guid>
      <description>&lt;p&gt;I expected more AI agents to make coding faster.&lt;/p&gt;

&lt;p&gt;They didn’t.&lt;/p&gt;

&lt;p&gt;That was not the result I was looking for, but it ended up being the most interesting result of the project.&lt;/p&gt;

&lt;p&gt;Over the past few weeks, I have been building &lt;strong&gt;Sol-Luna Orchestrator&lt;/strong&gt;, an open-source orchestration layer for OpenAI Codex.&lt;/p&gt;

&lt;p&gt;The idea started with a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if one strong AI could decide when it actually needed help from other AI agents?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of automatically splitting every coding task across multiple workers, I wanted the supervisor to look at the work first and decide whether delegation was actually worth the coordination cost.&lt;/p&gt;

&lt;p&gt;That distinction ended up mattering much more than I expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic idea
&lt;/h2&gt;

&lt;p&gt;Sol-Luna has two roles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-5.6 Sol&lt;/strong&gt; acts as the supervisor. It owns the overall task, decomposition, verification, and final review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-5.6 Luna&lt;/strong&gt; instances act as bounded workers when Sol decides delegation is useful.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task
  |
  v
Sol Supervisor
  |
Should I delegate?
   /          \
 No            Yes
 |              |
Sol          Split into
handles       bounded tasks
the work          |
              Choose worker
                 effort
                  |
           Luna  Luna  Luna
                  |
               Results
                  |
            Sol verifies
             and reviews
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;There are really &lt;strong&gt;two separate adaptive decisions&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Adaptive delegation
&lt;/h3&gt;

&lt;p&gt;Sol decides whether to delegate at all.&lt;/p&gt;

&lt;p&gt;The optimal worker count is allowed to be zero.&lt;/p&gt;

&lt;p&gt;Small tasks, tightly coupled work, or tasks where coordination looks more expensive than simply doing the work can stay entirely with Sol.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Adaptive worker effort
&lt;/h3&gt;

&lt;p&gt;If Sol does delegate, it separately decides how much reasoning effort each Luna worker needs.&lt;/p&gt;

&lt;p&gt;A worker can receive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Medium&lt;/li&gt;
&lt;li&gt;High&lt;/li&gt;
&lt;li&gt;XHigh&lt;/li&gt;
&lt;li&gt;Max&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A mechanical change does not necessarily need the same reasoning budget as a difficult debugging problem.&lt;/p&gt;

&lt;p&gt;So the goal was never simply to spawn more agents.&lt;/p&gt;

&lt;p&gt;The goal was to let the strongest model decide how the work should be executed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making delegation safer
&lt;/h2&gt;

&lt;p&gt;Once multiple coding agents start working at the same time, practical problems appear pretty quickly.&lt;/p&gt;

&lt;p&gt;Workers can edit overlapping files. A worker can move outside its declared task scope. Verification can disagree with what the worker reports. Parallel Git operations can interfere with each other.&lt;/p&gt;

&lt;p&gt;Sol-Luna adds controls around those problems.&lt;/p&gt;

&lt;p&gt;Parallel workers run in isolated Git worktrees. Tasks declare their intended file scope, and scope violations are checked after execution. Verification is independently rerun instead of trusting a worker’s own PASS result. Sol remains responsible for reviewing the final output.&lt;/p&gt;

&lt;p&gt;Workers also cannot recursively invoke the orchestrator and create their own worker trees.&lt;/p&gt;

&lt;p&gt;That gave me a functioning orchestration system.&lt;/p&gt;

&lt;p&gt;But I still had a more basic question.&lt;/p&gt;

&lt;h2&gt;
  
  
  When does parallelism actually become faster?
&lt;/h2&gt;

&lt;p&gt;My earlier benchmarks had already shown that parallel Luna workers could beat &lt;strong&gt;sequential&lt;/strong&gt; Luna delegation.&lt;/p&gt;

&lt;p&gt;But one Sol working alone was still faster.&lt;/p&gt;

&lt;p&gt;For small tasks, that made sense. Delegation itself has overhead.&lt;/p&gt;

&lt;p&gt;So I assumed there must be a break-even point.&lt;/p&gt;

&lt;p&gt;Make the task large enough. Give workers genuinely independent modules. Eventually multiple agents working at the same time should catch up and win.&lt;/p&gt;

&lt;p&gt;That became the next experiment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking for the crossover
&lt;/h2&gt;

&lt;p&gt;I created progressively larger deterministic engineering fixtures.&lt;/p&gt;

&lt;p&gt;The important part was that the parallel workloads were deliberately designed with independent streams of work.&lt;/p&gt;

&lt;p&gt;I did not want to give parallel agents an artificially coupled task and then conclude that parallelism was bad.&lt;/p&gt;

&lt;p&gt;The larger benchmark included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a four-module independent workload&lt;/li&gt;
&lt;li&gt;a six-module independent workload&lt;/li&gt;
&lt;li&gt;a coupled control where decomposition was intentionally inappropriate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The six-module fixture contained roughly &lt;strong&gt;530 lines of specification and 85 deterministic assertions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each module could be worked on independently, so six workers could theoretically make progress at the same time.&lt;/p&gt;

&lt;p&gt;This was deliberately much larger than the earlier fixtures, but it still fit comfortably inside a single Sol session.&lt;/p&gt;

&lt;p&gt;That limitation matters.&lt;/p&gt;

&lt;p&gt;I was testing whether clean parallelism alone was enough to create a crossover. I was not trying to simulate a huge production repository or a task running for several hours.&lt;/p&gt;

&lt;p&gt;For each fixture, I compared three modes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sol working alone
&lt;/h3&gt;

&lt;p&gt;Delegation was disabled.&lt;/p&gt;

&lt;h3&gt;
  
  
  Free choice
&lt;/h3&gt;

&lt;p&gt;Delegation was available, but Sol was free to decide whether to use it.&lt;/p&gt;

&lt;p&gt;This is closest to how I actually want the orchestrator to behave.&lt;/p&gt;

&lt;h3&gt;
  
  
  Forced parallel delegation
&lt;/h3&gt;

&lt;p&gt;Sol was required to delegate the independent work so I could measure what happened when the worker path was definitely used.&lt;/p&gt;

&lt;p&gt;The scale benchmark completed &lt;strong&gt;19 out of 19 runs successfully&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then came the interesting part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sol kept choosing zero workers
&lt;/h2&gt;

&lt;p&gt;Across all six free-choice runs, Sol declined to delegate.&lt;/p&gt;

&lt;p&gt;Every time.&lt;/p&gt;

&lt;p&gt;At first, that can sound like an orchestration system refusing to do its job.&lt;/p&gt;

&lt;p&gt;But then I compared those decisions with the forced-delegation results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Four independent modules
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Median&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sol working alone&lt;/td&gt;
&lt;td&gt;171.5s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free choice, Sol chose 0 workers&lt;/td&gt;
&lt;td&gt;120s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forced parallel, 4 workers&lt;/td&gt;
&lt;td&gt;250s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The free-choice runs used &lt;strong&gt;zero Luna workers&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Six independent modules
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Median&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sol working alone&lt;/td&gt;
&lt;td&gt;189.5s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free choice, Sol chose 0 workers&lt;/td&gt;
&lt;td&gt;186.5s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forced parallel, 6 workers&lt;/td&gt;
&lt;td&gt;394.5s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Again, Sol chose &lt;strong&gt;zero workers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The interesting result was not simply that parallel workers lost.&lt;/p&gt;

&lt;p&gt;The supervisor had been given the option to use them, declined to do so, and none of the measured workloads gave me evidence that this was the wrong call.&lt;/p&gt;

&lt;p&gt;Going from four independent streams to six also did not move forced parallel execution closer to the solo baseline.&lt;/p&gt;

&lt;p&gt;It moved further away.&lt;/p&gt;

&lt;p&gt;Forced parallel was roughly &lt;strong&gt;46% slower&lt;/strong&gt; than solo at four streams and roughly &lt;strong&gt;108% slower&lt;/strong&gt; at six.&lt;/p&gt;

&lt;p&gt;So the benchmark did not find the crossover I expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  More agents were not free
&lt;/h2&gt;

&lt;p&gt;Token usage told a similar story.&lt;/p&gt;

&lt;p&gt;On the independent workloads, forced parallel execution used approximately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5.1x&lt;/strong&gt; the known tokens of solo execution at four streams&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4.8x&lt;/strong&gt; the known tokens of solo execution at six streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was no token crossover either.&lt;/p&gt;

&lt;p&gt;That does not make the workers useless.&lt;/p&gt;

&lt;p&gt;Parallel workers can still provide useful properties such as isolated workspaces, bounded tasks, separate context, independent verification, and explicit ownership of different pieces of work.&lt;/p&gt;

&lt;p&gt;And when delegation is already required, the earlier benchmark showed that parallel workers can beat sequential delegation.&lt;/p&gt;

&lt;p&gt;But for raw speed on the workloads I measured, forcing delegation was clearly not winning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where was the time going?
&lt;/h2&gt;

&lt;p&gt;One possibility was that the orchestration machinery itself was expensive.&lt;/p&gt;

&lt;p&gt;Maybe Git worktrees or integration were eating all the time.&lt;/p&gt;

&lt;p&gt;They were not.&lt;/p&gt;

&lt;p&gt;Measured median phases looked roughly like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Median&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Supervisor work before batch&lt;/td&gt;
&lt;td&gt;37.1s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worktree setup&lt;/td&gt;
&lt;td&gt;0.8s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slowest worker&lt;/td&gt;
&lt;td&gt;187.1s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;0.4s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supervisor review&lt;/td&gt;
&lt;td&gt;32.4s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The mechanical Git orchestration was tiny.&lt;/p&gt;

&lt;p&gt;Worktree setup plus integration was around &lt;strong&gt;1.2 seconds&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most of the fixed overhead came from useful supervisor work: decomposing the task, writing bounded worker contracts, and reviewing the results afterward.&lt;/p&gt;

&lt;p&gt;But another effect became much more visible in the six-worker runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The slowest worker matters
&lt;/h2&gt;

&lt;p&gt;Parallel completion time depends heavily on the worker that finishes last.&lt;/p&gt;

&lt;p&gt;In one six-worker run, five workers finished within about 95 seconds.&lt;/p&gt;

&lt;p&gt;One worker took &lt;strong&gt;333 seconds&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The observed max-to-median worker-duration ratios in the two six-worker runs were around &lt;strong&gt;3.5x&lt;/strong&gt; and &lt;strong&gt;2.7x&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So in these runs, finishing five tasks quickly did not help enough because the batch still had to wait for the final worker.&lt;/p&gt;

&lt;p&gt;I also calculated a simple counterfactual using the measured timings.&lt;/p&gt;

&lt;p&gt;If every worker in the six-stream runs had completed around that run’s median worker duration, parallel execution would have landed around &lt;strong&gt;176 seconds&lt;/strong&gt;, compared with the 189.5-second solo median.&lt;/p&gt;

&lt;p&gt;That counterfactual would have crossed the solo median.&lt;/p&gt;

&lt;p&gt;But no observed run actually did.&lt;/p&gt;

&lt;p&gt;The 176-second number is arithmetic on measured timings, not a benchmark result.&lt;/p&gt;

&lt;p&gt;And with only two repetitions of the six-worker cell, I do not have enough data to characterize the full distribution of worker durations.&lt;/p&gt;

&lt;p&gt;So the careful conclusion is that the slow-worker tail looks like a strong candidate for an important parallel-latency constraint.&lt;/p&gt;

&lt;p&gt;It is not proven to be the only one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result changed how I think about orchestration
&lt;/h2&gt;

&lt;p&gt;When I started this project, I thought a successful orchestrator would mainly be good at distributing work.&lt;/p&gt;

&lt;p&gt;I now think that definition is incomplete.&lt;/p&gt;

&lt;p&gt;A good orchestrator should also be good at &lt;strong&gt;not distributing work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Across the workloads I measured, Sol chose zero workers in every free-choice run. Forced delegation was slower on the corresponding fixtures.&lt;/p&gt;

&lt;p&gt;That does not prove that the free-choice policy itself caused the faster timings. These are stochastic model runs, and separate runs can behave differently.&lt;/p&gt;

&lt;p&gt;But none of the measured workloads provided evidence that declining delegation was the wrong decision.&lt;/p&gt;

&lt;p&gt;That leads to what is probably my favorite idea from the project so far:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The optimal number of workers can be zero.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;More agents are a tool, not an objective.&lt;/p&gt;

&lt;p&gt;Good orchestration is not about maximizing agent count.&lt;/p&gt;

&lt;p&gt;Sometimes the strongest agent should simply do the work itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  This does not mean one agent always wins
&lt;/h2&gt;

&lt;p&gt;I want to be careful about what these results actually show.&lt;/p&gt;

&lt;p&gt;They do &lt;strong&gt;not&lt;/strong&gt; prove that one strong agent is universally better than multiple agents.&lt;/p&gt;

&lt;p&gt;Every workload I tested still fit comfortably inside one Sol session.&lt;/p&gt;

&lt;p&gt;A much larger production repository may behave differently.&lt;/p&gt;

&lt;p&gt;A task running for hours may behave differently.&lt;/p&gt;

&lt;p&gt;Work that requires several highly specialized contexts may behave differently.&lt;/p&gt;

&lt;p&gt;And a workload large enough to push beyond what one supervisor can comfortably keep in context may be exactly where delegation starts to become much more valuable.&lt;/p&gt;

&lt;p&gt;That remains an open question.&lt;/p&gt;

&lt;p&gt;At what point does keeping everything inside one strong agent become more expensive than coordinating several workers?&lt;/p&gt;

&lt;p&gt;I do not have that answer yet.&lt;/p&gt;

&lt;p&gt;And I think that is more interesting than simply adding eight or ten agents to another synthetic fixture until I find a benchmark where parallelism wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The negative result is staying public
&lt;/h2&gt;

&lt;p&gt;One temptation with developer-tool benchmarks is to keep changing the experiment until your tool wins.&lt;/p&gt;

&lt;p&gt;I did not want to do that.&lt;/p&gt;

&lt;p&gt;My original prediction was that larger independent workloads would eventually produce a latency crossover.&lt;/p&gt;

&lt;p&gt;The benchmark falsified that prediction in the regime I tested.&lt;/p&gt;

&lt;p&gt;So the methodology, benchmark harness, raw records, and results are staying public.&lt;/p&gt;

&lt;p&gt;If someone wants to try the same setup on a genuinely large real-world workload, I would genuinely like to see what happens.&lt;/p&gt;

&lt;p&gt;That is one of the benefits of making the whole thing open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sol-Luna Orchestrator&lt;/strong&gt; is open source:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mahadansar/sol-luna-orchestrator" rel="noopener noreferrer"&gt;https://github.com/mahadansar/sol-luna-orchestrator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install it with:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g sol-luna-orchestrator
sol-luna-orchestrator init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The repository includes the architecture, security model, benchmark fixtures, raw results, and documentation around the delegation policy.&lt;/p&gt;

&lt;p&gt;For now, I am deliberately holding off on major new features.&lt;/p&gt;

&lt;p&gt;I would rather see how people actually use it, what larger real-world workloads expose, and whether the assumptions behind the project continue to hold before deciding what is worth building next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;I started this experiment asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many agents should work on a coding task?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I ended up with a question I like much more:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should a strong agent delegate at all?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the workloads I have measured so far, the answer was often:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It shouldn’t.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And I think knowing that is part of orchestration too.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
