Architecture and instrumentation

Agent Engineering

Agent systems are commonly assembled framework first, which settles the architecture for a year or more before memory, retrieval, guardrails and the loop have been designed.

A production agent has six layers: the surface other systems call, the orchestration and runtime that carries a task, memory, retrieval, the tool surface, and the model underneath. Two concerns cut across all six, namely observability with evaluation, and governance with security. Agent failures are predominantly state-management failures rather than prompt failures, so a stack chosen framework first commits to an architecture before the layers that decide its behaviour exist. This engagement designs those layers against your data and your constraints, then builds the system on a specification that is not bound to any single framework.

Your productthe thing users actually asked forWHERE WE WORKContext and memorycontext, memory, search, graphMulti-agent systemsloop, agentic, codeEvals and guardrailseval, safety, red teamingModel and runtimeswappable, and rarely the reason a system fails
  1. Your product: the thing users actually asked for
  2. Context and memory: context, memory, search, graph
  3. Multi-agent systems: loop, agentic, code
  4. Evals and guardrails: eval, safety, red teaming
  5. Model and runtime: swappable, and rarely the reason a system fails
The layers sit between your product and whichever model runs underneath it.

Portable

One specification compiles to eight frameworks, so the choice stays reversible.

Evidence

Every recommendation traces to a measurement you can rerun.

Handover

The architecture, the instrumentation and the reasoning are yours to keep.

Where it applies

A system being built from the ground up, or one where the framework was chosen before the layers underneath it were designed.

What we design

The six layers and the two rails that cut across them, against your data, retention and access limits.

What you keep

A specification that compiles to eight frameworks, the pipelines it generates, and the instrumentation behind them.

Fit

Where this fits

Architecture decisions that outlast the model you picked, often under security or audit review.

Platform teams

Coding agents rolled out, architecture still inconsistent

Engineering leaders

Agent spend that needs a measurement behind it

Product teams

Systems that demo well and drift under traffic

Large codebases

Repositories that exceed any single context window

Scope

Where agent engineering goes wrong, and how we address each

The layers below decide how an agent behaves under traffic. Each is designed against your data and constraints rather than assembled from defaults, and every component is open source we maintain and you keep.

The six layers

Observability with evaluation, and governance with security, cut across all six rather than sitting among them.

  1. 01Surfacewhat other systems call
  2. 02Orchestrationthe loop that carries a task
  3. 03Memorywhat survives a call
  4. 04Knowledgeretrieval scored on use
  5. 05Toolsthe callable surface
  6. 06Modelassignment per role
The problemHow we address it
Framework chosen before the architectureThe agent is declared once in SuperSpec and compiled to framework-native code across DSPy, OpenAI Agents SDK, Claude Agent SDK, CrewAI, Google ADK, Pydantic AI, DeepAgents and Microsoft. The specification is the asset and the framework is a build target, so the decision stays reversible.
State failures treated as prompt failuresContext assembly, memory and retrieval are designed as one layer with explicit ranking and summarization, so what reaches each call is a decision rather than an accumulation.
Memory assembled ad hoc on a vector storeA memory layer designed against your retention, access and compliance limits, with ranking and summarization tuned and the window budget derived from measurement.
Retrieval added late, scored in isolationA knowledge layer scored on what the agent actually reads, across ChromaDB, Qdrant, Milvus, Weaviate, LanceDB or SurrealDB depending on what you already run.
Guardrails wrapped on at runtimeGuardrails and assertions are declared in the specification and compiled into the generated pipeline, so they exist in the code that runs rather than in a layer someone can bypass.

Process

How we work

01

Design against your data

We map the task shapes, the data available, and the retention, access and compliance limits that narrow the options. The loop, the memory model and the orchestration follow from that rather than from a framework preference.

02

Declare the system

The agent, its tools, its memory and its guardrails are written as one SuperSpec specification, which compiles to framework-native code on any of the eight supported runtimes.

03

Build and instrument

Pipelines generated in the framework you run, with traces, tool calls and decisions recorded from the first commit so evaluation never needs a retrofit.

04

Optimize and hand over

GEPA and the DSPy optimizers tune the system against a scored task set, the release decision is recorded, and the specification, the pipelines and the runner stay with your team.

Deliverables

What you receive

Scope is set from your requirements rather than from a fixed package. Whatever is agreed at the outset is designed against your data, built on a specification you own, instrumented so it can be measured, and handed over on open source your team keeps.

Stack scorecard

Every layer scored, each finding tied to the change that fixes it

Instrumentation plan

Traces, tool calls and decisions captured in a form evaluation can read

Orchestration design

Roles, handoffs and recovery behaviour, with the reasoning attached

Memory decision

Persistence, retention and access, with the reasoning attached

Scope

Engagement Options

Twelve disciplines, grouped into three columns you can scope and buy independently. Protocol surfaces sit under Agent Experience, improvement against an established baseline under Agent Optimization, and evaluation under Agent Quality. Scope and cost are quoted against your systems once we have seen them.

Typical starting point

Context & Memory

What the agent knows

Typically 4 to 8 weeks

Architecture and build

Context assembly, persistent memory, and the retrieval and search underneath.

  • Context and memory engineering
  • Retrieval, search and graph design
  • Persistence and retention policy
  • Implementation into your stack
  • Written decision record

Multi-Agent Systems

How the work is divided

Typically 6 to 8 weeks

Design and orchestration

Roles, handoffs, loops and recovery when several agents share the work.

  • Loop and agentic engineering
  • Harness engineering and control flow
  • Recursive routing for large codebases
  • Failure and recovery behaviour
  • Observability across the system

Observability & Instrumentation

How the system becomes measurable

Typically 4 to 6 weeks

Instrumentation and control surfaces

Making the system evaluatable by design: traces, tool-call records and permission surfaces a later evaluation can compute over.

  • Trace and event instrumentation, OpenTelemetry compatible
  • Tool-call and decision capture per role
  • Permission and policy surfaces made explicit
  • Cost and token attribution per task
  • Replayable sessions for later evaluation

Questions

Questions

Discuss Agent Engineering

Send us what you are building and the constraints around it. We come back with scope.

London and San Francisco. Remote or on site.

Agent Optimization