DEV Community

Cover image for Auditable, observable, budgetable: what it takes to run AI agents in production
Nicolai Bohn
Nicolai Bohn

Posted on

Auditable, observable, budgetable: what it takes to run AI agents in production

At GenAI Berlin I opened my talk with two questions for everyone building an agent:

Is your agent ready for production, and for real customers?

Did it improve over the last two weeks, or did it only change?

The second one is the sharper question. Most teams change prompts, models and tools every week. Very few can say whether those changes made the agent better. This post is the written version of the talk: why agents get pulled back, how they fail, and the three properties that let you answer both questions with evidence.

Nicolai Bohn speaking on stage at GenAI Berlin 2026, with the audience in the foreground At GenAI Berlin 2026. Photos: GenAI Berlin

Why agents get pulled back

In May 2026, Gartner predicted that by 2027, 40 % of enterprises will scale back or shut down autonomous AI agents, because governance gaps only show up after production incidents. A year earlier, Gartner had already forecast that over 40 % of agentic AI projects would be canceled by 2027 and named three reasons:

  • escalating costs,
  • unclear business value,
  • inadequate risk controls.

Keep those three in mind. Each one gets an answer by the end of this post.

An agent is a model inside a harness

An agent harness: the orchestration loop, model, instructions, tools and MCP servers, memory and context, sub-agents, and guardrails, each with a typical failure

Everything in the blue box belongs to the harness: the orchestration loop that plans, calls tools and checks results, the model, the instructions, tools and MCP servers, memory and retrieved context, sub-agents, and guardrails with approvals.

Every part can fail in its own way. The model gives a confident, wrong answer. A tool fails silently. Retrieval returns the wrong policy. A handoff between agents gets lost. An approval is skipped. The user only sees the response at the end, and most of these failures never show up there.

Three ways agents fail in production

To make this concrete, picture an insurance assistant that answers coverage questions and files claims. The scenarios below are illustrative, built from patterns we see in real projects.

1. The requirement nobody checked

Sequence diagram: the assistant gets the Premium terms back, never looks up the customer's tier, and confirms coverage of up to 50,000 euros

A customer asks whether a burst pipe is covered. The loop asks the model what to do, the model asks for the policy terms, and the search returns the Premium terms. The loop never calls the CRM tool to check which tier this customer is on. The model writes a fluent answer from the wrong terms: "Yes, up to €50,000." The customer is on Basic, capped at €5,000.

No tool failed. The requirement, answer from the customer's own tier, was simply never checked.

2. A timeout that turns into a confirmation

Sequence diagram: the claims tool times out and the assistant confirms a claim with an invented reference number

This time the first half goes right: the loop checks the policy and gets the correct tier. Then the claims tool times out. The loop hands the timeout to the model as if nothing happened, and the model writes a confirmation with a reference number it made up. The customer waits for a payout that will never come.

One rule in the harness would have stopped it: no confirmation without a claim ID from the claims system.

3. A correct answer at the wrong price

Sequence diagram: the assistant reads the policy clause by clause, about 40 rounds with a growing context

The answer is correct, so every quality test passes. But the assistant reads the policy clause by clause: around 40 rounds for one question, with every result appended to the context, so each round costs more than the last. One filtered search would have done the job. Only the cost per request and the trace reveal the problem, and nothing in the harness set a step limit or a budget.

This is already happening

These failure modes are not hypothetical. In July 2025, an AI coding agent at Replit deleted a production database during a code freeze and first claimed a rollback was impossible. A widely shared story describes two agents looping for 11 days and spending about $47,000. No named company or post-mortem has been published for that one, but the pattern is real.

Bar chart: 105 reported AI incidents and hazards in November 2022 and 702 in September 2026

The bigger picture points the same way. The OECD AI Incidents and Hazards Monitor counted 105 reported incidents and hazards in November 2022, the month ChatGPT launched, and 702 in September 2026. To be fair to the data: relative to all AI news, the incident rate is fairly stable. More AI in production simply means more incidents in absolute terms.

From failure modes to properties

Nicolai Bohn on stage at GenAI Berlin 2026, in front of a slide mapping Gartner's three reasons to auditable, observable and budgetable
At GenAI Berlin 2026, Humboldt Carré. Photo: GenAI Berlin

Each of Gartner's three reasons has an answer, and each answer is a property your agent needs before it goes to real customers.

Three cards: auditable, observable and budgetable, each with the questions it answers

Auditable: a paper trail from requirement to release

A pipeline from stakeholders to requirements, test sets, test runs and release, with every step recorded in an audit log

Requirements come from several stakeholders: the product team, domain experts such as underwriters or claims handlers, regulators and customers. They are written down and versioned. Test sets are linked to each requirement, every agent version runs against them, and the release decision is made on pass rates, with a sign-off.

Every step lands in an audit log: who tested which version, with what result, and who approved the release. That log is your evidence for the release meeting, for an auditor, or for a court. It also answers the second question from the opening, because you can compare pass rates per requirement across versions.

Observable: see what happens under the hood

A passing test checks the output. The path the agent took to get there stays hidden. In the claims example, the final message sounded perfectly fine; only the trace shows the timeout.

Observability for agents means:

  • tracing every step, tool call and handoff, ideally with OpenTelemetry as the open standard,
  • evaluating the trace, beyond the final answer,
  • making agent-to-agent messages visible, so you can see whether handoffs worked,
  • alerting when behavior drifts from what was tested, and catching loops and retry storms early.

Budgetable: know what it costs, and cut it safely

Before release, set a budget per task and experiment with the model, the prompt, step limits and context size, while rerunning the same tests so quality holds. In production, track cost per agent, tool and user flow, set hard caps per session, and feed the cost drivers back into your experiments.

The $47,000 loop is the counterexample: the team could see the bill, but had nothing in place to stop it. And the cost data comes from the same traces you built for observability.

The insurance assistant, fixed

The same insurance assistant with all three properties: tier looked up first, claim confirmed only with an ID, every requirement checked on the trace
Figures are illustrative.

Here is the same assistant with all three properties in place. Three requirements:

  • R1: answer from the customer's own tier,
  • R2: confirm a claim only with an ID,
  • R3: stay under €0.10 per request.

The loop looks up the tier first, so the coverage answer matches. The claim is confirmed only after the claims tool returns an ID. And each requirement is checked on the trace, lined up with the step it verifies. The whole conversation stays within budget: four tool calls, seven cents, and the trace stored in the audit log.

Why the three only work together

Auditable, observable and budgetable connected in a cycle, with every optimization going back through the tests before release

Tests against requirements decide the release. Traces from production show where behavior drifts and where the money goes. And every cost optimization, a smaller model or a shorter prompt, goes back through the tests before it ships.

We're not the only ones arguing for this loop. Anthropic's engineering guide Demystifying evals for AI agents (January 2026) makes the same point: offline evals need to be combined with production monitoring, A/B testing and human review, so problems don't only surface in production.

Back to the two questions

Why projects fail The answer The evidence you can show
Unclear business value Auditable Pass rates per requirement and version, with a sign-off
Inadequate risk controls Observable Every step, tool call and handoff in the trace
Escalating costs Budgetable Cost per request, and a cheaper setup that still passes

Is your agent ready for release? Is it better than two weeks ago? With these three in place, you can answer both, with evidence instead of a gut feeling.

How Rhesis helps

Rhesis is an open-source platform for exactly this, self-hosted or on Rhesis Cloud.

Property In Rhesis
Auditable Test sets generated from requirements, pass rates per version, sign-off, audit log on Enterprise
Observable OpenTelemetry tracing across agents and handoffs, expert reviews on traces
Budgetable Experiments against a baseline, with model overrides per run

If you want to see how this works with a real multi-agent example, read the companion post Test-driven development for AI agents: from red-green to production, or try Rhesis on GitHub.

Thanks to the GenAI Berlin team for having me, and to everyone who stayed for the questions afterwards.

Originally published on rhesis.ai.

Top comments (0)