One orchestrator, many workers

November 2, 2026 by Paul Ionescu

A conductor leading a string orchestra in rehearsal

In three weeks, more than two hundred pull requests moved across eleven repositories, each one through the same gates, from ticket to verified deployment. Coding agents did the work. People made the decisions that matter.

The platform belongs to a client in the built environment. It runs on seven .NET services, a shared library suite, an infrastructure repository, an Angular front end and a test-automation suite. Each of those eleven repositories has its own build, its own contract surface and its own history.

Most features touch more than one of them. A single new permission changes the service that owns it, the two services that enforce it and the interface that shows it.

Agents write code quickly. What slows a cross-service feature down is everything around the code: which service owns the change, what the contract between two services looks like, which one ships first, who reviews what, and how anyone knows it works on a live environment rather than in a chat window that says it does.

So the question was never whether an agent can write a feature. It was whether agents can carry one from a ticket to a verified deployment, every time, with a person involved at a few fixed points.

What we built

The setup has two levels of sessions. One orchestrator covers the whole workspace: it plans the work, breaks it down and reviews the result, and it never writes service code. One worker runs per repository: it implements, and it never sees the overall plan. A single file per repository is the bridge between the two.

Five supporting pieces keep that core honest:

  • A rulebook the tool loads into every session.
  • A message format the sessions use to talk to each other.
  • Hooks that enforce the rules that must never be broken.
  • A memory that turns repeated observations into rules.
  • A fixed model assignment, so the large model handles judgement and the small one handles everything that needs none.

The life of one feature

Every feature follows the same path, and people step in at two points only: approving the plan, then merging, publishing and deploying.

People step in twice; agents carry everything between. One cross-service feature in eleven steps across three lanes: the orchestrator triages, reads then designs, and writes the plan and questions; people approve the plan; the orchestrator dispatches one TASK.md per repository; workers build test-first, run an adversarial check and open a pull request with DONE and fixed evidence fields; the orchestrator gates the diff against the contract; people merge, publish and deploy; the orchestrator verifies live, hands over to QA and archives

Work moves down the page and across lanes: the orchestrator plans and gates, the workers build and prove, and people decide only at the two highlighted points.

Triage. A feature arrives as a work item. The orchestrator, a Claude Code session opened at the workspace root, sorts it into one of three tiers: an edit it may make on its own (a version bump, a documentation fix), a single-service change, or a cross-service change. The tier decides how much process follows. A task can move up a tier when it turns out larger than it looked. It never moves down.

Reading before designing. The orchestrator goes through the architecture document, the contract documentation of every service involved, the work item with its full comment thread, and the git history of the code it is about to change. A board column saying "to do" does not prove the work is actually missing. Only then does it design the change: which services are affected, which contracts move, and in what order.

One approval. The design becomes a plan file plus a short list of questions, at most four per round and at most two rounds. For cross-service work, a plan-checker agent reads the plan backwards from the goal and lists everything that would stop it getting there. Then a person reads the plan and says go.

Dispatch by file. The orchestrator writes one TASK.md into each target repository: why the feature exists, what changes here and what does not, the contract in both directions, dependencies on sibling work, the evidence expected at the end, and the branch name. Then it stops, and one worker session opens per repository.

Build and prove. Each worker reads its TASK.md, plans, implements test-first, and runs the build and the full test suite. Then comes one adversarial check: a separate agent, in its own git worktree, briefed only to find bugs in this implementation. Every finding is a claim until the worker reproduces it. The worker opens a pull request, writes its report into the plan file, and sends a DONE message with a fixed list of evidence fields.

The gate. The orchestrator compares the diff against the contract line by line, runs convention scans and a read-only reviewer agent, and for contract changes adds an independent verifier in its own worktree. It reports the verdict and asks how to proceed. Merging, publishing and deploying stay human actions; the orchestrator arms the merge when told to and confirms afterwards that it happened.

Live verification. After the deploy, scripted probes check the feature on the live environment, returning PASS or FAIL per operation and cleaning up the test records they create. The orchestrator then writes the QA handover, records what it learned, and archives the plan.

Under the hood

For the engineers reading, here are the mechanics.

Three layers of instructions. The orchestrator's CLAUDE.md stays under two thousand words, with no project names and no dates: it covers tiers, phases, gates and boundaries. Project facts (repository host, work tracker, package feed, deploy paths, naming conventions) live in a separate bindings file. Domain rules such as gRPC conventions, cross-service database views, Entity Framework pitfalls and GraphQL schema duties are short files that load only when a task touches that area, with longer reference text kept apart. Every worker guide is a byte-identical copy of one template; rules specific to a repository live in that repository. Rulings go into a dated ledger, so the rulebook stays undated and the history stays searchable.

A message format between sessions. Orchestrator and workers talk over the tool's session messaging, in a fixed shape. Every message opens with the repository and the round. Every worker decision is numbered (QUESTION#3, DEVIATION#4), and every answer cites the number. A DONE missing a required field goes back. No message can change a task's scope; only an explicit answer from the orchestrator can, and that answer is written into the plan file.

Hooks for the rules that must not be broken. The main one is a pre-write hook that refuses to overwrite an existing TASK.md, because a worker may be in the middle of it. Each enforced rule is listed next to the script that enforces it. If the text and the script ever disagree, that is a bug.

Models by task class. This is where the cost goes, so it is written down.

Task class Model Effort
Locating code, reading inventories Smallest Low
Cross-repository sweeps, mechanical checks Mid-size Not fixed
Pull-request reviewer, verifier Mid-size Medium
Plan checker, adversarial check (once each) Largest High
Contract design, decomposition, integration decisions Main session Not fixed

Every agent call names its model.

Memory that moves up. Each session keeps a file-based memory where observations and incidents land first. An observation that repeats becomes a rule file. A rule that must never be broken becomes a hook. Contract shapes are the one exception: they are never copied into memory or rules, because they live only in the service documentation the workers maintain.

Evidence over claims. A deploy is confirmed from the pipeline's run record, not from a message. A published package is checked on the feed, not inferred from a green build. Live checks refresh the schema first, wait for the service to report healthy, and only then probe. A stale deploy shows up as transport errors on every new field, which makes it easy to spot.

What we learned

A review finding is a claim. Grading a test suite by mutating the code costs a lot relative to what it finds on a small pull request. So the adversarial check got a single brief, find bugs in this implementation, and an eight-minute budget. A reviewer with that mandate will also readily invent inputs the upstream API never sends, and each such finding costs a fix and a CI run. The rule now: the worker reproduces every finding before touching code.

  • Reproduced on an input a real user or system can produce: a bug.
  • Reproduced only on a constructed input: deferred.
  • Not reproducible: refuted, with evidence attached, and one re-check at most.

Two agents in one working tree is a race. One verifier deliberately breaks the code to prove the tests catch the failure. Sharing a checkout with a reviewer, it would hand that reviewer an intentional breakage to report as a real defect. Any agent that edits files now gets its own git worktree, and every read-only agent is told it is read-only each time it starts.

The board is not the record. A work item's description can be overridden by its newest comment, and that comment by a later, unannounced edit to a wiki page. Reading the whole thread, then the revision history, is now a fixed step before anything is dispatched. Running git log on the code a task says is missing belongs to the same step.

Date every ruling. Rules change, sometimes several times in a month, and the reason should always be recoverable. Every ruling carries a date, a source and the file it lives in, while the rulebook itself stays undated. Superseded rulings are marked, never deleted.

Put the human at fixed points. The places where a person sits in the loop were decided early and have not moved:

  • One plan approval.
  • Questions in batches of four, as options with free text, never left in a file to be discovered later.
  • Merging, publishing, and releasing to acceptance or production stay human actions the orchestrator does not offer to take.
  • Every action on a live environment is announced in the conversation before it runs.

The fewer and clearer those decisions are, the more of the work the sessions can carry between them.

What's next

The structure has held. The open questions now are cost and recall.

On cost, token spend is being measured per round, and more of the mechanical reads are moving to the smallest model. On recall, the test is whether file-based memory still finds the right ruling after a year of entries, or whether it will need an index. And more rules keep becoming hooks: the second time the model needs reminding of a rule, the question changes from how to remind it to how to make the tool refuse.

The next structural step is supervision. Workers that start, report and pause under the orchestrator instead of under a person, with the human points kept exactly where they are: approve the plan, arm the merge, release.

If you run agents across more than one repository and have found that the code is the easy part, we would be glad to compare notes.

More Insights

We write about what we build, how we think, and the decisions that shape real digital products.

Article Image
From broker documents to matching-ready data
Paul IonescuOctober 9, 2026

How we turn broker documents of any layout into schema-shaped, matching-ready data, and let reviewers teach the system new document types in minutes, with no model training.

Article Image
Reshape Digital at London Tech Week
Beniamin TitocJune 18, 2025

From healthcare to venture capital, we met with industry leaders across London Tech Week to explore AI, innovation, and the future of digital transformation. See what we learned, and where we’re heading next.

Article Image
Reshape Digital at the London AI Summit
Paul IonescuJune 18, 2025

At the London AI Summit, we explored the enterprise future of generative AI, from data governance to fast-impact use cases in HR and customer service. Get our key takeaways from the front lines of AI adoption.

Article Image
PoC for AI-Powered Drone Solution for Smarter Energy Grid Inspection | Insights – Reshape Digital 
Filip GagiuMay 27, 2025

At the Energy Expo Cleantech Hackathon in Bucharest, Reshape Digital unveiled an AI-powered autonomous drone platform that redefines power grid inspection. The innovative solution earned a Special Mention for its impact on energy and sustainability.

Article Image
Tokenizing Renewable Energy for a More Accessible Green Future | Insights – Reshape Digital 
Filip GagiuMay 27, 2025

GreenVestX is a blockchain-based platform introduced at the Energy Expo Hackathon, designed to democratize renewable energy investments through tokenization. It empowers individuals to co-own and benefit from green energy.

Article Image
The Role of Vector Database in Modern Data Management | Insights – Reshape Digital 
Filip GagiuMay 27, 2024

It’s 2024 and vector databases are stepping out of the shadows and into the spotlight, marking a significant technological breakthrough. But what exactly is a Vector Database and why would anyone need it?

Article Image
Three Years of Reshape Digital | Insights – Reshape Digital 
Paul IonescuJune 5, 2023

Paul Ionescu reflects on the three-year journey of Reshape Digital, from its humble beginnings with the first project, Lunsjkompaniet, to overcoming challenges like the pandemic and expanding into a thriving community of twenty colleagues.

Article Image
How to develop a .NET Core 3.1 API secured with Identity Server 4 — Part 2 | Insights – Reshape Digital 
Paul IonescuOctober 15, 2020

Creating the API with Swagger integration and securing it using the Identity Server built in Part 1. Learn to configure authentication, authorization, and token-based access for your endpoints with real-world examples.

Article Image
How to develop a .NET Core 3.1 API secured with Identity Server 4 — Part 1 | Insights – Reshape Digital 
Paul IonescuSeptember 16, 2020

Dive into developing a .NET Core 3.1 API with Swagger, secured by Identity Server 4. This first part focuses on setting up the Identity Server project, including configuration and operational stores with SQL Server.

Article Image
7 Essential things to think about when building an API | Insights – Reshape Digital 
Paul IonescuMarch 25, 2020

Security, architecture, testing, logging, documenting, versioning, caching, these seven components are critical for building a sustainable and scalable API. Here’s what you should consider from the very beginning.

Article Image
Have you ever wondered how to make your Angular application extensible? | Insights – Reshape Digital 
Paul IonescuMarch 25, 2020

Learn how to build a plugin-based Angular architecture where external modules can be loaded dynamically at runtime, enabling feature decoupling, faster deployments, and even third-party extensibility.