Sub-agents are just wrong

Boris Tane
Hi, I'm Boris. Polylane finds issues in production and opens the pull request that fixes them. This is how we deleted 17 agents and got better at it.

About me

Boris Tane
Boris Tane
Baselime2021
Cloudflare2024
Polylane2026
Before Polylane I was at Cloudflare, leading the Workers observability team. Before that I founded Baselime, an observability startup Cloudflare acquired.

About Polylane

Polylane finds issues in production
and opens the pull request that fixes them.
It watches logs, metrics and traces from every cloud resource on every connected provider, and alerts from your observability and error tracking tools.

How Polylane works

The Polylane topology: every cloud resource in the context graph, with issue and change hotspots
Every resource on every connected cloud, and how they connect: the context graph. Red rings are issue hotspots, dashed rings are change hotspots. Each resource has baselines across multiple horizons; values that break the baseline become issues.

How it works

DetectionSomething breaks its baseline
→
TriageReal, or noise?
→
InvestigationFind the root cause
→
RemediationPull request or escalate
VerificationDid the fix hold?
Four jobs for every issue. Detect it, confirm it's real, find the root cause, then fix it with a pull request, escalate to an engineer, or write it up and stop. Then verify: once the fix ships, the resource is watched against its baseline again, and if it still breaks, it's detected again. That closes the loop. Most issues stop at triage.

Our first architecture

Orchestrator fans out to fifteen hypothesis agents, then vote and summarise
A triage agent, a coordinator, up to fifteen hypothesis agents and a coding agent: up to 18 agents for one issue. Each hypothesis agent tries to prove or disprove one hypothesis, from a different starting point: logs first, codebase first. Then they vote, another agent summarises, and the summary goes back to the orchestrator as a message.

The problem

Every handoff loses context.

Who sees what

Each agent only sees a slice: briefs and summaries
Read the notes beside each box. The orchestrator, later, has history and two summaries, no evidence. The coding agent has the plan, nothing else. So agents kept redoing each other's work, and the pull requests fixed symptoms instead of root causes.

Evaluation

Every agent passed its evals.
The system didn't.
Each stage evaluated on its own passed. The end result was poor, because the failures lived in the handoffs.

Debugging

One run, dozens of traces.

Why we built it

Models couldn't do the whole job.
And our harness wasn't that good.
We iterated for months, per agent, per prompt, per handoff. The results never matched the effort.

Current architecture

One agent.
We deleted all of them, the workflows between them and the gates in front of the pull request.

One agent

One agent from triage to pull request
The same agent collects the evidence, tests the hypotheses, reaches one verdict, and clones, edits and validates in the sandbox before opening the pull request. One trace. No summaries.

What made it possible

We built our own harness.
None of this works with an off-the-shelf loop. One agent running for hundreds of turns only works because we own the harness: tools shaped for how the agent uses them, compaction that keeps what matters, and deliberate context management across the whole run.

Hours from detecting an issue to opening its pull request

Over the month around the cutover, the median went from 2.2 hours to 35 minutes and the p90 from nine days to under two hours. The pipeline sat for hours in a chain of workflows, each waiting on the last. Axis not to scale.
Buff doge and cheems One agent
35 min median
18 agents
2.2h median

Share of detected issues that ended in a pull request

0.6% under the sub-agents, 4.2% under the single agent, and rising. A pipeline has to survive every handoff: triage promotes, the coordinator produces hypotheses, the fan-out reaches a verdict. Each handoff is a place to fail.

Model spend per pull request

$111 to about $18 in the first nine days. Every run starts on the stronger model, so a dismissed issue costs more than before. Not all of it is the architecture: we're iterating on everything. Don't @ me.
Bell curve One agent Actually, you need an orchestrator with 15 hypothesis sub-agents and confidence-weighted voting One agent
Don't build sub-agents.
The agent that gathers the evidence should be the agent that acts on it. Per-agent evals pass while the system fails. A wrong decision across a dozen traces takes an afternoon to explain; in one trace it takes a scroll.

Thanks for having me!

Boris Tane