Agentic Engineering

AI agent autonomy levels, and how we work

Agents write most of our code. People set the goal, design the checks, and decide. This page shows which level of autonomy we work at, the tools we use today, and how a change gets reviewed.

The autonomy ladder

Six levels describe how much you hand to the AI. Each one answers one question: who approves what? Higher is not better. It means the checks around the AI matter more.

  1. L5

    Dark factory

    You set guardrails and agents run on their own. We do not work here.

  2. L4

    Agent team Where we work

    Agents run whole flows of work. You audit the results and the checks, not every change.

  3. L3

    Delegated agent Where we work

    An agent takes a whole task. You own the change.

  4. L2

    Conversational

    You work through a chat with the AI. You approve each change it proposes.

  5. L1

    Assistive

    The AI suggests. You decide everything.

  6. L0

    No AI

    You do all the work yourself.

We work at L3 or L4, depending on the client.

Why it depends: in Steve Haupt's ladder, teams often reach L3 on their own, while L4 takes decisions beyond the team. Which level fits depends on the client. We never claim L5.

Credit: the level names on this page are adapted from Steve Haupt's AISoLA 2026 talk (opens in a new tab), which builds on ASDLC and Swarmia. The idea of numbered autonomy levels for AI coding goes back to at least 2023 (Sourcegraph (opens in a new tab)), and the dark factory label was popularised by Dan Shapiro (opens in a new tab) in January 2026. Haupt calls his ladder a working tool, not validated. The level descriptions on this page are our own words.

Our setup, as of November 2026

This is what we use today. It changes, so we date it.

  • Claude Code writes most of our code.
  • By default, a model from another family reviews that code. Today that means Codex on Claude-written work, with GLM 5.3 (run through melious) as the standing second reviewer.
  • Some changes are written by Codex. Then a model from another family reviews those too.
  • Kimi K3.1 (run through ollama) reviews only when Daniel asks, once per change.

The aim is simple: the model that wrote a change does not grade its own work. See who checks the AI for how a review runs and what it found.

Before we build

We start with a plan, not with code. Building starts after these steps:

  1. A written plan. What we build, why, how, and how we will test it.
  2. Architecture decisions, for anything new that connects several parts. When a new piece has to work with a backend, a new sign-in flow and AI access, we decide how the parts fit together before we build. We write each decision down with its reasons, and the plan review challenges it. The fit between parts is usually the costliest thing to change later. A small change inside one part needs no such step.
  3. A plan review. Reviewers read the plan, round after round, until none of them finds a blocking problem.
  4. A red team, for risky work. Risky means user data, logins or permissions, money, deletion, a schema change or our servers. One reviewer is told to attack the plan, not check it: how it fails, how it could be misused, how it could lose data, and whether we can roll it back. Example: the plan for a background job that caches user data. The red team found 3 bugs and 1 risk, and we fixed all four before building.
  5. Requirements, sometimes. When a change is more complicated, we write down what it must do as concrete scenarios: given this, when that happens, then this. Anyone can check a scenario against the product. A small fix does not need them.
  6. A test plan, with CI and automated testing. We automate tests and run them in CI as far as we can. On real iOS and Android devices we still test by hand.
  7. Evals, for tasks where an AI agent does the work. We write them before we build: a set of tasks, a way to grade the answers and the result we accept. See how we write evals.

Then building starts.

In plain English

  • Red team: a reviewer who plays the attacker and tries to break the plan before anyone builds it.
  • CI (continuous integration): a computer automatically runs our automated checks on changes to the code, so a problem shows up early.
  • Automated testing: small programs that check the product does what it should, so nobody has to click through everything by hand each time.
  • Manual testing on real devices: some problems only show up on a real phone.
  • Eval: a repeatable test of what an AI model produces.

Review by risk

How much review a change gets depends on what it can break. We call this risk-tiered review with escalation. These are the defaults:

  • A small change that touches only wording, tests, docs or presentation: one reviewer. Example: a README rewrite in our open-source Croftweaver toolkit, pull request #355 (opens in a new tab). Codex alone reviewed it in three rounds. It raised one bug in round 1 and the same bug in round 3. The code answered it both times.
  • Ordinary code: two reviewers from different providers. Example: the footer link to the Croftweaver home page on every page. Codex and GLM 5.3 reviewed it in three rounds and found nothing to fix.
  • Deployment, security, data or privacy text: a deeper pass. Example: our privacy statement. Three reviewers read it in each of three rounds, and every round found something to fix.

Fallbacks exist. When the second reviewer's service has no balance, Codex alone reviews the change, and the trail says so. That is a thinner review than the default. A tool can fail, so a failed review never counts as a review. The review trails live in our private repository.

In the loop and on the loop

You may have heard "human in the loop". There are two ways to be in it.

  • In the loop: a person approves each step.
  • On the loop: a person sets the goal and the checks, and steps in by exception.

At L2 you are in the loop. At L3 and L4 you are on it: you own the change or audit the result, and you step in where the risk calls for it.

We are not alone in this split. Anthropic's own Code Review for Claude Code (opens in a new tab) ranks bugs by severity and does not approve pull requests. That stays a human decision.

Three ways to build with AI

Vibe coding, AI-assisted work and agentic engineering are not the same thing. The difference is who drives each step.

  • Vibe coding: you describe what you want and accept what the AI produces, with little review of the code.
  • AI-assisted: a person drives each step and the AI suggests.
  • Agentic engineering: agents take whole tasks, and the engineer sets the goal and checks the result.
Three ways to build with AI, side by side.
What differs Vibe coding AI-assisted Agentic engineering (how we build)
Who drives each stepYou prompt and accept the result.A person drives each step.The agent takes a whole task. The engineer sets the goal.
What the AI doesWrites the code.Suggests.Takes whole tasks inside checks that engineers design.
Who checks the resultOften a quick look to see that it runs.The person, as they go.Tests and review gates first, then an engineer where the risk calls for it.
Where it fitsPrototypes and experiments.Work where one person wants to approve every change.Production software with tests, review and clear ownership.

The three definitions follow Snowman Labs (opens in a new tab). The rows are our own summary. For the full comparison with vibe coding, see agentic engineering.

Who checks the AI's work?, our delivery process, and a production-readiness audit if you want an independent look at an AI-built app.

Start a Project