Khaled Jamal
← All articles
AI agents2 November 20263 min read

What running a team of AI coding agents taught me

I run a team of AI coding agents on real production work. The first version stalled badly. Here's what broke, and what I'd tell anyone starting now.

By Khaled Jamal, software engineer and founder of Helm

Bifröst's virtual office with animated agents, beside a run log showing passed tests, a stalled job and a lost messageBifröst's virtual office with animated agents, beside a run log showing passed tests, a stalled job and a lost message

In short

The model is rarely the weak part. The system around it is. The worst failures are silent, so build for visibility, ask for proof rather than reports, enforce limits outside the model and keep people on the decisions that are hard to undo.

On this page
  1. 01One agent is a tool. Several agents are a system.
  2. 02What actually broke
  3. 03Stopping was the right call
  4. 04What I'd tell anyone starting now
  5. 05Does this replace engineers?

I build and run Bifröst, my own team of AI coding agents. It works on real software, around the clock. The first version stalled, so I stopped it, measured what had gone wrong and rebuilt it from scratch.

Most writing about AI agents is about what they might do. This is about what happened when I relied on them.

One agent is a tool. Several agents are a system.

A single agent in a terminal is easy to reason about. You watch it, you correct it, you stop it.

Several agents working at once is a different kind of problem. It stops being about prompts and becomes distributed systems: work gets lost, two workers collide, one waits forever on another. None of those failures look dramatic. The dashboard stays green while nothing moves.

If you're planning to run more than one agent, plan for that. The model is rarely the weak part. The system around it usually is.

What actually broke

Three failures did most of the damage in my first version:

  • Agents nobody could really see into. When something went wrong, I couldn't tell what an agent had done or why without digging. If you can't see it, you can't trust it.
  • Messages that vanished. One agent told another something, and it never arrived. Nothing raised an error. The work just quietly went wrong later.
  • Jobs that sat still. Work ended up in places where nothing would ever move it again. It didn't fail, so nothing flagged it. It simply stopped.

The common thread is that all three were silent. A crash gets fixed in an hour. A silent stall can cost you days before you notice.

Stopping was the right call

The hardest decision was to stop the whole thing rather than keep patching it. Every patch made sense on its own, and together they were making the system harder to understand.

So I paused it, went through what had really happened and rebuilt it in phases. Each phase had its tests written first and had to be proven live before the next one started. That's slower per step and much faster overall, because I stopped building on things I only believed were working.

What I'd tell anyone starting now

Ask for evidence, not reports. An agent saying "done, all tests pass" is a claim. It's usually honest and sometimes wrong. Make the proof the output: the real test run, the real response from the live system. This one habit catches more problems than any other.

Give agents walls, not instructions. "Please don't touch production" is a request. A permission the agent doesn't have is a guarantee. Decide what each agent can't do, and enforce it outside the model.

Keep humans on the decisions that matter. Agents are good at implementation. Scope, direction and anything hard to undo should stay with a person. Where you draw that line is the most important design decision you'll make.

Assume context runs out. Long-running agents forget. Anything that has to survive belongs somewhere durable, not in a conversation that might be summarised away.

Review with fresh eyes. An agent reviewing its own work tends to agree with itself. A separate reviewer that never saw the code being written finds far more.

Readiness check

Is your agent setup safe to leave running?

Tick what's true of your setup today, not what you plan to add.

Start ticking

0/9

Be honest: only count what already works today.

Does this replace engineers?

Not from what I've seen. It changes what the job is. I spend less time typing and more time deciding what should exist, checking whether it's right and designing the system that does the work. You need more engineering judgement to run this well, not less, because mistakes now arrive faster and sound more confident.

What it does change is scale. One engineer who runs agents well can now ship what used to take a small team, which is how I can build Helm, run it for 10+ paying businesses and still ship client work.

If you want the longer version of how I work with models and harnesses, I've written it up on my AI engineering page.

Written by Khaled Jamal

Software engineer in Beirut, known online as Dequavious, and founder of Helm. I build SaaS platforms, AI agents, desktop apps and client sites end to end.

Keep reading

Three branded client dashboards stacked above one shared database, each kept apart by its own tenant boundaryThree branded client dashboards stacked above one shared database, each kept apart by its own tenant boundary
SaaS

2 November 2026 · 4 min read

Building a multi-tenant SaaS: a practical guide for founders

How to keep customers apart in one product, what multi-tenancy really demands beyond the database, and when extra infrastructure is worth it. Written by an engineer who runs a multi-tenant platform.

Read article →Decision tool
A Next.js code window with a server-side permission check highlighted, beside a checklist of questions to ask a developerA Next.js code window with a server-side permission check highlighted, beside a checklist of questions to ask a developer
Hiring

2 November 2026 · 3 min read

Hiring a Next.js developer: what to ask before you pay

The questions that separate someone who can ship and maintain a Next.js product from someone who can only make a nice demo, written by a developer who gets asked them.

Read article →Developer scorecard