Skip to content
Was It Causal?

Policy Governance and Safety

Who may change the policy, what it may do, what stops it without a human, and how anyone knows whether it worked, whether the policy is a rules engine, a model, or an agent. The agentic case is the hardest version of the same component.

The decision it encodes

When an agent picks the action, how do we still know whether it worked?

An agent has been running the lifecycle program for a quarter. It picks the audience, the offer, the channel, and the timing, and it has revised all four several times based on what it saw. Revenue is up six percent.

Somebody asks whether the agent did that.

There is no arm it did not touch. There is no version of itself it held still long enough to attribute anything to. The quarter also contained a price change and a seasonal peak. The answer is that nobody knows, and the reason is not that the agent is opaque. It is that a handful of decisions taken before launch made the question unanswerable, and none of them were about the model.

The decision it encodes

When a policy picks the action, how do we still know whether it worked, and who is allowed to change what it may do?

Governance is needed before an agent exists. A deterministic rules engine or an ordinary next-best-action model can overspend a discount budget, exhaust a contact cap, optimize a metric that was never incremental, or ship a version nobody can evaluate, and it does so with the same confidence an agent would. What governs any policy: who can add an action or change the reward; how policy and model versions are recorded; the contact, margin, and budget limits it runs inside; permission enforced beneath it; approval levels by risk; guardrail monitoring and rollback that need no data scientist; segment-level harm checks; an incident record; champion-and-challenger evaluation; and whether the policy may learn between decisions or only between approved releases. The agent is the case where all of that has to be automatic, because the agent is faster than the review.

Almost every governance conversation about autonomous systems is about explainability, and explainability is not the binding constraint. A perfectly interpretable agent whose decisions were never held out from anyone is as unevaluable as an opaque one.

Three things change when the policy is autonomous

The treatment stops being a fixed object. A campaign is a thing you can run against a holdout. An agent is a thing that rewrites itself weekly, so any estimate applies to a version that no longer exists.

It optimizes what you measured, including through routes nobody intended. The reward function is the specification, and it will be met.

It acts faster than anyone reviews it. The window between a decision and a human noticing is where a quarter of damage fits, so the controls have to be automatic or they are decorative.

Each of those breaks a different assumption, and each has a different answer.

The one control that survives all of it

Hold a slice of the population back from the agent entirely, permanently, and enforce it upstream.

That single control is what keeps the top-level question well-posed no matter how much the agent changes. It does not estimate the effect of any particular version. It estimates the effect of having the agent at all, which is the question a board asks and the one that no amount of version churn invalidates.

The persistent holdout in the assignment and experiment registry is where this lives. What the agent adds is urgency: with a human-run program, losing the holdout costs you a year of evidence. With an agent, it costs you the ability to say anything about a system that is making millions of decisions.

A bounded action space, declared in advance

An agent should not be given “marketing.” It should be given a list.

Which offers from this catalog, on which channels, within these frequency caps, at these discount depths, to people already eligible under the audience definitions in force. Everything outside that list is not a judgment call the agent is entitled to make, and the boundary is enforced by the systems around it rather than by instruction.

Consent belongs firmly outside the space. An agent that can be argued into contacting a suppressed person is a compliance incident with a model in the middle of it, and the fix is that the suppression layer refuses the send, not that the prompt was improved.

Guardrails that stop it without a human in the loop

The guardrail metrics from the measurement layer become live controls here rather than things read at a readout: unsubscribes, complaints, support contacts, discount depth, and margin. Each gets a threshold and an automatic action, which is usually reverting to the previous policy version rather than stopping entirely.

The rollback has to be operable by someone who does not understand the model, at three in the morning, without a data scientist. That is a design requirement and it tends to get written down only after the first incident.

Evaluating something that rewrites itself

Two questions get confused constantly, and they need different designs.

Is the agent better than no agent? The persistent holdout answers this, and it keeps answering as the agent changes, because the comparison is against a population the agent never touched.

Is this version better than the last one? Randomize the policy rather than the action. Assign people to policy versions and let each version make its own decisions inside its own arm. This is the only clean way to compare two non-stationary policies, and it costs the ability to ship a change to everyone at once.

Off-policy evaluation from logged probabilities sits between the two. It is a screen that tells you which candidate versions are worth a live test, and it is not a verdict, because it can only reweight actions the old policy sometimes took.

The reward is the real risk

Everything above is procedural. This one is substantive.

An agent optimizes the number it is given. If that number is attributed conversions, the agent will learn to send offers to people who were going to buy anyway, because those are the ones that generate attributed conversions most reliably. It will do this faster and more thoroughly than any human team ever managed, and every dashboard will improve while the business does not.

That is the argument this whole site makes, arriving inside an optimizer and running at machine speed.

Maturity, honestly staged

Stage 1: a bounded action space with consent enforced below the agent. The agent cannot take an action nobody authorized, whatever it is asked to do.

Stage 2: a persistent holdout it cannot observe or select into. The top-level question becomes answerable and stays answerable.

Stage 3: automatic guardrail rollback and versioned decision logs. Damage is bounded by a control rather than by how quickly someone notices.

Stage 4: an incremental reward and policy-level randomization. The agent is optimizing the right quantity and versions can be compared against each other.

The two designs, and what off-policy evaluation is good for Technical

Agent against no agent: a fixed share of the population is excluded at assignment and receives whatever the pre-agent baseline was, including nothing. The estimate is a difference in means over the whole period. It covers every version the agent passed through, which is a feature, since that mixture is what the business ran.

Version against version: assign units to policy versions with the same hashing used for any other experiment, and let each version decide freely inside its arm. The unit has to be the person or account rather than the decision, because assigning individual decisions to versions lets a person experience both and contaminates the contrast.

Off-policy evaluation reweights logged rewards by the ratio of the candidate policy’s action probability to the logging policy’s. It is unbiased only for actions the logging policy could have taken, so a candidate that behaves very differently from what ran is the case where the estimate is least trustworthy. Treat it as a filter on what to test rather than as a replacement for testing it.

Context

Best suited for

Programs handing real decision authority to an autonomous system, where the volume of decisions makes case-by-case human review impossible and the cost of an unnoticed failure is a quarter rather than a campaign.

Data requirements

  • A holdout enforced at assignment, invisible to the agent and stable across retraining
  • Versioned decision logs carrying the action, the alternatives, and the probability each carried
  • Guardrail metrics computed on a cadence fast enough to trigger a rollback rather than a post mortem
  • An incremental objective from the measurement layer, rather than an attributed one from the analytics platform

What changes by context

Lifecycle-led
Decision volume is highest and the blast radius of a bad week is a damaged list, which does not recover. Complaint and unsubscribe rates deserve tighter automatic thresholds here than revenue does.
Product-led
The agent acts inside the product, so its actions change the thing the outcome is measured on. Holding a slice back means holding back a product experience, which is a harder conversation and the same requirement.
B2C subscription
Discount depth is the parameter that needs a hard ceiling. An agent rewarded on retention will find discounting, and it will find it early, because it works and the margin cost shows up in a different report.

When it breaks down

  • Programs with heavy spillover between people, where a person-level holdout is contaminated and geo assignment is the only option.
  • Agents given an attributed or platform-reported objective. Governance cannot repair a reward that points at the wrong quantity.
  • Deployments where the agent also controls eligibility, so it can quietly reshape the population its own holdout is compared against.
  • Organizations unwilling to leave a slice untouched, where the agent may be excellent and there will never be evidence of it.