Delivery Factory · Part 1 · Architecture
The orchestrator that never reads code.
A ticket goes in, a pull request comes out, and fifteen steps run in between. The component that runs all fifteen knows almost nothing about any of them. That is the design. Repo: agentic-core, agentic-eds, agentic-jira, agentic-github, agentic-figma, agentic-playwright
Built as Plugins
Six Claude Code plugins. agentic-core drives the route. One platform plugin knows how to build on the project. Four provider plugins each talk to one tool: Jira, GitHub, Figma, Playwright.
The problem
One agent that carries everything
The easy design for a long delivery route is one agent that walks every step itself.
Heavier every step
- Every file it reads stays in its context.
- Step fifteen pays for everything steps one to fourteen read.
- It drifts into re-doing a step's work, because the material is right there.
- When something breaks, nobody can say which step decided what.
Same weight every step
- Each step runs as its own isolated agent and dies.
- The orchestrator's context grows by one verdict per step.
- It cannot re-do a step's work. It never sees the work.
- Every decision has an owner: the step that returned it.
If your pipeline produced a wrong PR today, could you name the step that caused it?
Five lines
The only thing that crosses back
Every step, and every operation on a tool, ends with the same block. The orchestrator reads nothing else.
## Result verdict: pass | warn | fail | question summary: <one sentence, 200 chars max> artifacts: - <relative path written or updated> next_action: <short phrase, or "none">
pass and warn continue
A warning is recorded and the run goes on. Warn is never terminal.
fail ends the run
The orchestrator prints the step and its summary. It never retries a step.
question stops for a human
This is why the previous post's rule works. The orchestrator does not need to understand a problem to stop for it. It only needs to read one word.
The block is written by a script that refuses a field the verdict does not allow, and checked by another before the orchestrator branches on it. A run ends in exactly one of three states: delivered, blocked or failed.
One ticket
How the plugins talk
The plugins never call each other as programs. Everything goes through the Claude session, which invokes skills by name. Data moves through files and the closing block.
- You type
/agentic-core:run-route ABC-123. - The core reads the project config. It names which plugin plays which role.
- The core finds the platform plugin and reads its list of fifteen stages.
- The core starts the first stage,
intake, as an isolated agent. - That stage looks up which plugin is the tracker, and which skill fetches an item.
- It calls the Jira plugin's
fetch-itemby name. One script talks to Jira and returns the item. - The stage writes the ticket to a file and ends with its own five lines.
- The core reads those five lines, and nothing else. Then the next stage.
The less the orchestrator knows, the longer the route it can run.
What it doesn't solve
A confident pass on the wrong thing
An orchestrator that reads only verdicts trusts them. Isolation does not make a step right.
The gap
A step can return
passon work that answers the wrong question. The orchestrator will not notice, by design. That has to be caught somewhere else.Where it gets caught
In checkpoints that run a script before any model, and in verification against the ticket and the design. Those are the next stretches of the run.
Next
What the first stage does with the ticket.