AI Coding Agents for Software Teams: Where Humans Still Matter

Coding agents have moved from demo to daily use faster than most teams have built opinions about them. The interesting questions are no longer about capability. They are about accountability: which parts of the delivery pipeline can safely be handed over, what evidence you need back, and where a human has to stay in the path. This article sets out a working answer, from a team that ships client code this way.

calendar_monthtimer 9 min readlanguage Lees dit artikel in het Nederlands
An agent pipeline: planner, coder and reviewer, ending at a pull request that a human merges

What agents are genuinely good at

Stripped of hype, current agents are strong at bounded, well-described work in a codebase they can read: reproducing a described defect, making a mechanical change consistently across many files, writing the missing test, following conventions that are documented in the repository, and summarising what they did.

They are correspondingly weak at anything requiring context that is not written down. Business rules that live in someone's head, the reason a strange workaround exists, a client relationship that makes one approach politically impossible. An agent will produce a confident answer to those too, which is exactly the risk.

One job per agent beats one agent doing everything

A single agent asked to "fix this ticket" makes its plan, its implementation and its assessment of its own work in one continuous stream, which means the review is performed by the party with the strongest incentive to declare success. Splitting the work into stages with different responsibilities gives you checkpoints a human can inspect.

A staged pipeline

  1. Planner, read-onlyReads the repositories and writes the intended approach onto the ticket. It cannot change code. You can tell in thirty seconds whether it understood the problem, before any code exists.
  2. Coder, multi-repoImplements one coherent change across every repository the project links, running only the commands it has been allowed to run, and opens a pull request per repository it touched.
  3. Reviewer, runs the appInstalls and boots the application in an isolated sandbox, runs the test suite, and where it matters drives a browser. Failures go back to the coder rather than to you.
  4. Doc review, cheap and constantCompares documentation against the diff and comments when they have drifted. It comments, it does not block.
  5. Human, decidesReads the pull request and the record of checks, and presses merge. Or does not.

The planner stage earns its keep more than people expect. Most agent failures are not bad code, they are correct code for the wrong problem, and a plan on the ticket catches that for the price of a cheap model call. Suporta's planner works exactly this way, read-only by design.

Why an agent should not press merge

This is the one constraint worth being inflexible about, and the reasons are practical rather than philosophical.

  • Accountability does not transfer. Your contract with the client says you are responsible for the code you ship. "The agent approved it" is not a defence anyone will accept, including your own insurer.
  • Green tests are not the same as correct. A passing suite proves the things you already thought to check still work. Most expensive defects are in the space nobody wrote a test for.
  • Self-approval is not review. If the thing that wrote the change also decides it is good, there is no second opinion anywhere in the process.
  • The blast radius is asymmetric. A missed review costs a code review. An unreviewed merge to a client's production system costs the relationship.

The cost of keeping a human at the merge is one code review per change, which you were doing anyway. The cost of removing them is unbounded, and payable at the worst possible moment.

What the review agent should hand you

An approval with no evidence is just an opinion. A useful reviewer states what it did, so a human can decide how much of the change still needs their attention.

What you want to seeWhy it matters
Which test suites ran, and their resultTells you whether "approved" means anything
Whether the application actually bootedA change that compiles but does not start is common and cheap to catch
Which flows were checked in a browser, if anyDistinguishes a real check from a static read of the diff
Failures that already existed on mainStops a pre-existing broken test being blamed on this change
What it deliberately did not checkThe most valuable line in the whole comment

It also matters that the reviewer approves under its own identity rather than as the author, so nothing in your history shows a change approving itself. That is a small implementation detail with a large audit consequence.

The guardrails worth setting before you start

Autonomy is only safe in proportion to the controls around it. Every item here should be a setting you own, not a promise from a vendor.

  1. A switch per agent. Turn any stage off for the whole organisation, and have that switch respected regardless of who or what started the run.
  2. A model per agent. A capable model for planning, a cheap one for documentation review. Cost and quality are not the same dial for every stage.
  3. A monthly budget. A ceiling in your own currency with a warning before it and a hard stop at it. See controlling AI development costs per client.
  4. Explicit command permissions. An agent should run the commands you approved and nothing else.
  5. Scoped write access. Reading the whole codebase is useful. Writing to all of it is not necessary.
  6. A needs-a-human queue. Everything ambiguous ends up in one place instead of stalling silently.

Where to start, realistically

The instinct is to point agents at the hardest ticket to see what happens. That produces a good story and a bad decision. Start where checking the output is cheap.

  • Well-described defects with reproduction steps, in a codebase with tests. The archetype of a checkable task.
  • Mechanical changes across many files: a renamed field, a deprecated call, a version bump with consequences.
  • Test coverage for code that already exists. Low risk, visible benefit.
  • Documentation drift. Cheap, constant, and nobody enjoys doing it.

Hold back on anything touching money, authentication, permissions or data migration until you have seen enough runs to know the failure modes. Those are the areas where a plausible-looking wrong answer is most expensive.

What actually changes for the team

Not headcount. The work shifts rather than disappears: less time typing implementations of well-understood changes, more time specifying problems precisely and reviewing changes carefully. Ticket quality becomes the bottleneck, which is why the intake step matters so much — see turning client emails into developer-ready tickets.

Two habits are worth protecting deliberately. Junior developers still need to write code that an agent could have written, because that is how judgement is built. And reviews must stay real: an agent-authored pull request that gets a rubber stamp is strictly worse than no agent at all, because the appearance of review has been added to an unreviewed change.

See the full agent pipeline

Planner, coder, reviewer, doc review and two optional agents, each with its own model, its own switch and a hard stop at your monthly budget.

Explore AI agents arrow_forward
AI cost controls: model per agent, own provider key, monthly cap with warning, and cost booked to client and project
AI agents8 min read

How to Control AI Development Costs per Client

AI spend is not expensive because of the rates. It is expensive because it is usually invisible until the monthly invoice, and by then it belongs to nobody in particular.

Read article arrow_forward

Put your ticket queue to work

Fourteen days, every feature unlocked, no credit card. Bring your own model, or point it at the Claude Code you already pay for.