6 min read

A practical model for building agentic software that separates execution, orchestration, and system-level supervision.

agentic systemsorchestrationsupervisionalignmentai engineering

The core problem is not output

The hardest part of agentic software is usually not getting more output. It is keeping intent, quality, and direction aligned as output accelerates.

Once you accept that, the architecture question changes. You stop asking, “How do I get more agents to do more work?” and start asking, “What kind of system lets a human steer an increasingly capable workforce without drowning in its output?”

That second question leads to layering.

By “agentic software,” I mean systems where multiple AI workers are doing real operational work such as coding, research, QA, triage, synthesis, or coordination rather than only answering one prompt at a time. The moment those workers can run in parallel, hand work to one another, and generate more output than one person can directly supervise, the problem stops being prompting and starts becoming systems design.

Where this model came from

I arrived at this model while building in environments where the team was small, the problems were ambiguous, and agents were valuable only if they could do real work. That meant the challenge was never just “can the model produce something useful?” It was whether research, coding, QA, analysis, and follow-up could be delegated without losing direction, quality, or accountability.

In practice, the bottleneck kept moving away from raw generation and toward coordination:

  • who should do what
  • what context they actually need
  • when outputs should be gated
  • how drift should be noticed early
  • how the human operator stays near the decisions that are still cheap to change

That is the real origin of the layered model. It is less a prompt pattern than an operating model for delegated software work.

The model

flowchart TD
    T["Tactical Layer\nFocused workers\ncode, research, execution"] --> S["Strategic Layer\nOrchestrator\nrouting, gating, coordination"]
    S --> H["Supervision Layer\nSystem-level steering\nframing, learning, redesign"]
    O["Human Operator\nhigh-consequence judgment"] -. steers .-> H

The simplest useful version has three layers:

  • Tactical layer
    • agents doing narrow, local work such as coding, research, synthesis, or QA
  • Strategic layer
    • an orchestration layer deciding what gets worked on, in what order, by whom, and with what context
  • Supervision layer
    • a slower layer that improves the system itself, not just the current task queue

The operator should spend as much time as possible near the supervision layer, not trapped inside tactical detail.

Here is a concrete example:

  • a tactical worker writes or tests a feature
  • the strategic layer decides which worker should handle the next task, what context it needs, and whether the output is good enough to move forward
  • the supervision layer notices that the same category of drift keeps recurring and changes the orchestration rules or framing so the whole system improves next time

That is the difference between a productive task loop and a system that actually compounds.

A concrete scenario

One place this framing became especially useful was autonomous QA. If a system can read a QA plan, navigate a product, inspect the UI, and write a useful report, you immediately run into a layered problem:

  • a tactical worker can execute one test flow
  • an orchestrator can decide which flows to run next, what evidence to capture, and when to stop or retry
  • a supervision layer can notice recurring failure patterns, weak prompts, missing acceptance criteria, or gaps in the QA plan itself

Without that third layer, you do not really have a durable QA system. You have a fast loop that still drifts silently.

Why one flat agent loop stops working

Single-agent workflows fail in one of two ways.

The first failure mode is under-leverage: one human stays in a tight 1:1 loop with one agent and becomes the throughput bottleneck.

The second failure mode is late feedback: work gets parallelized, but the human only re-enters at the end during review. By then, drift has already propagated downstream.

Both failures come from the same mistake: collapsing execution, coordination, and system improvement into one context.

What each layer is actually responsible for

Tactical layer

This layer should stay narrow. Tactical workers are best when they have:

  • clear scope
  • local context
  • explicit deliverables
  • fast feedback

Trying to make a tactical worker also carry broad planning or meta-system responsibility usually makes both worse.

Strategic layer

This is the orchestrator layer. Its job is to:

  • route work
  • manage priorities
  • detect dependency collisions
  • gate outputs before they propagate
  • compress many local threads into a smaller number of actionable decisions for the operator

This layer is where coordination becomes architecture instead of ad hoc multitasking.

Supervision layer

The supervision layer is not there to micromanage tasks. It asks slower questions:

  • Is the system learning?
  • Are the coordination rules improving?
  • Where is drift recurring?
  • What should change about the way work itself is structured?

In practice, that usually includes things like:

  • changing routing rules or escalation thresholds
  • tightening eval criteria or acceptance checks
  • rewriting the framing given to orchestrators or workers
  • deciding which tasks should remain human-gated
  • feeding repeated failure patterns back into the operating model

This is the layer that compounds. Productive agents matter. A healthy operating system for those agents matters more.

Why the layers should stay separate

The key design rule is simple: do not force one layer to carry another layer’s job unless you absolutely have to.

An implementation worker overloaded with strategic context gets slower and fuzzier. An orchestrator dragged into execution stops orchestrating. A supervision layer fused to the live queue stops improving the system because the urgent always beats the important.

Separation is not bureaucracy. It is what protects judgment from noise.

The real control surface

flowchart LR
    E["Execution output"] --> G["Strategic layer filters and routes"]
    G --> D["Operator sees decisions while they are still cheap to change"]
    D --> U["Human update"]
    U --> F["Supervision layer updates framing or rules"]
    F --> G

The human operator should not mainly be reviewing finished artifacts. The operator should sit at the layer where direction is still cheap to change.

That is the real “cockpit” idea: being close enough to influence direction early, without being buried in all execution detail yourself.

Why this matters beyond AI tooling

This is not just a prompt-engineering trick. It is a way of thinking about software organizations in an AI-native environment.

As models improve, the number of domains where useful work can be delegated expands. That makes system design more important, not less. Better models increase the penalty for bad coordination because they accelerate both good work and bad drift.

The competitive edge is not raw agent count. It is the speed at which you can keep a growing system aligned while it learns and executes.

Bottom line

The mental shift is this:

You are not just using agents. You are designing the organization that lets agents remain useful as they scale.

That means the job is not only direct execution. It is building the layers that compress, coordinate, and improve work on your behalf so the system gets more aligned as it gets more capable.

Brandon John-Freso - 2026

Source: /Users/brandonjf/dev/brandon-thought-catalog/references/sources/dev-web-strategy-builder-pro-docs-strategy-working-thesis-sources-layered-agentic-systems.md

all writing -