I stopped calling an agent production ready when it completed the happy path.

After working across more than five agent frameworks, tracing thousands of runs, and deploying systems into real GTM operations, my standard became much harder: can people understand the system, bound its authority, recover its work, and trust it when the business is messy?

A model that receives instructions, calls a tool, observes the result, and returns an answer proves that the idea works. It does not prove that the surrounding system is ready for real users, files, APIs, money, or reputational risk.

My definition of production readiness begins after the first successful run.

The standard I now use

A production agent is not simply a better prompt loop. I expect to see several distinct layers:

  1. a runtime with stop rules, budgets, and timeouts;
  2. typed tool contracts and capability boundaries;
  3. durable state with an explicit memory policy;
  4. workflows with named stages and review states;
  5. traces that let an operator reconstruct a run;
  6. executable validation and escalation rules;
  7. deployment controls for prompts, tools, secrets, approvals, and rollback.

The relationship looks like this:

Request

Agent runtime → stop rule, budget, timeout

Typed tools → capability class → human approval
  ↓                              ↓
Task state                    controlled execution
  ↓                              ↓
Trace and evaluation ledger ← action receipt

Review and release → deploy, retry, rework, or rollback

The point is not to install every layer on day one. The point is to name which layer owns each failure mode before the agent receives higher risk tools.

This standard came from watching systems operate over long runs, delegate work between agents, touch business data, and stop for human decisions. The difficult failures rarely appeared in the first tool call. They appeared after context accumulated, an integration returned an unexpected shape, ownership became ambiguous, or an employee needed to understand why the machine had made a decision.

What working inside the business changed

The first version is normally optimized for proof:

  • one script;
  • one provider;
  • one happy path;
  • one or two tools;
  • local logs;
  • manual inspection when something fails.

That is a good way to start. The problem begins when the demo quietly becomes infrastructure.

Someone adds another tool, then a write action, then memory, an external API, a schedule, and a customer facing task. The agent can now mutate real systems, but the team cannot answer basic operating questions:

  • Which tools can it call?
  • Which actions require approval?
  • What happens when a request is retried?
  • Where are the traces and artifacts?
  • Who can change the instructions?
  • Which environment owns each secret?
  • How is a harmful behavior rolled back?

Working directly with employees sharpened this lesson. A system can be technically correct and still fail because the approval arrives at the wrong moment, the output does not fit an existing process, or nobody knows who owns the exception. The first real bottleneck is rarely model intelligence. It is operational shape.

Layer 1: the runtime owns the loop

The runtime is boring until it breaks. Then it becomes the whole system.

At minimum, it owns the model adapter, instruction contract, tool registry, execution loop, cancellation, timeout, budget, and resume behavior. It also establishes whether work runs locally, inside a sandbox, or in a hosted service.

A transparent runtime is more valuable to me than a clever one. If an engineer cannot point to the place where the run stops, where a tool is registered, or where an exception becomes a retry, the system is already too opaque.

This is why I have worked across multiple frameworks and also built custom loops. Framework choice matters less than retaining control over these seams.

Layer 2: tools need capability classes

Agents become dangerous when every tool looks equally callable.

A file read, database update, email send, and production deploy should not exist in the same authority class. A useful tool contract states:

  • what the tool does;
  • which inputs are valid;
  • whether it reads or writes;
  • whether it touches an external system;
  • whether the action is reversible;
  • whether approval is required;
  • what evidence is recorded before and after execution.

Typed schemas help, but types are not permission systems. The important split is between safe reads, bounded internal work, consequential external writes, and irreversible actions.

In the systems I trust, safe diagnostics can run autonomously. Drafts and intermediate artifacts can be created in controlled workspaces. Publishing, outreach, money movement, account changes, and production mutation remain gated.

That boundary is not bureaucracy. It is what lets the machine move quickly without pretending every action has the same risk. In practice, explicit authority made it easier to expand autonomy because people knew exactly where it ended.

Layer 3: memory is not one thing

A demo can survive on conversation context. A production agent needs a state policy.

Several different assets are often collapsed into the word “memory”:

  • context inside the current run;
  • durable user or project knowledge;
  • workflow state;
  • retrieved organizational knowledge;
  • raw logs and traces;
  • operator notes and reviewed artifacts.

These should not be blended casually. Raw execution history, curated memory, and canonical company knowledge have different owners and different trust levels.

A production system must answer where each type is stored, who can modify it, what is summarized, what stays raw, what is excluded, how interrupted work resumes, and when old state must be ignored.

The Company Brain case study shows one concrete approach: canonical knowledge remains inspectable, operational sources retain ownership, and agents route questions instead of treating every retrieved document as truth.

Layer 4: workflows replace vague chat state

Chat is a useful interface. It is not always a useful operating model.

Production work normally has stages:

  1. gather evidence;
  2. define scope;
  3. draft or act;
  4. validate;
  5. request review;
  6. land, retry, or rework;
  7. record the outcome.

Naming these stages makes suspension, human review, and rework normal rather than exceptional. The system can distinguish waiting from failure, and a human can see exactly where authority changes hands.

The most useful primitives are explicit state transitions, schema bound steps, repeatable task stages, approval gates, rework states, and clear stop conditions.

Layer 5: observability comes before trust

You cannot trust an agent you cannot inspect.

A useful trace records the goal, instructions, relevant context, tool inputs and outputs, latency, cost, retries, failures, validation results, human decisions, artifact paths, and external effects.

This does not require a large observability platform at the beginning. A clear JSONL trace, artifact directory, or run ledger can be enough. The standard is simple: can an operator reconstruct what happened without asking the model to explain itself after the fact?

I traced thousands of agent runs from the beginning because final answers hide the information engineers need. The useful evidence was in delegated tasks, tool calls, intermediate artifacts, state transitions, and the exact boundary where a person intervened. Traces were not a monitoring feature added later. They were how I developed the systems.

Layer 6: evaluation must sit near the action

Guardrails are executable checks plus escalation rules.

Useful validation includes schema checks, regression tasks, permission checks, budget enforcement, refusal behavior, tool argument tests, side effect verification, and review queues for uncertain decisions.

The common mistake is to treat evaluation as something added after launch. If an agent can take a meaningful action, the relevant check belongs near that action boundary.

For example, an article generator should not decide that its own work is approved. It can validate required fields and advance an item to human review. The approval state belongs to a person or a separately governed policy.

Layer 7: deployment creates an organizational system

Deployment is where an agent stops being a developer experiment and becomes part of the organization.

The team needs clear answers for where the agent runs, which secrets it can access, how instructions and tools are versioned, who can change workflows, how releases are approved, how rollback works, and what happens when a provider or external account fails.

The control plane can be a repository, internal application, workflow system, or hosted console. Its implementation can vary. Its responsibility cannot be vague. It must answer: who can change what, and who owns the consequence?

The build order I trust

Do not start by building the entire stack. Start with the smallest agent that exposes the right seams:

  1. Build one local loop with one safe read tool.
  2. Write a trace for every run.
  3. Define the tool schema.
  4. Add an explicit stop condition.
  5. Give the workflow named states.
  6. Require approval before any external write.
  7. Add one validation check for the expected result.
  8. Add memory, retrieval, hosted execution, and broader tool access only when the work proves they are necessary.

The goal is not maximum architecture. It is a small system that can grow without hiding its authority.

What production ready means to me

A working demo proves that a model can call a tool.

A production agent proves that a team can operate the surrounding system. They can understand it, bound it, observe it, test it, deploy it, recover it, and decide where people remain in control. It also proves that the system can meet employees where the work actually happens, rather than asking the business to reorganize itself around a demo.

Build the loop. Add the trace. Type the tool. Name the gate. Then grow the stack only where real work proves it needs to grow.

The enterprise GTM operating system case study documents how these layers came together inside a real organization.