What a $900M Bank Error Teaches Us About AI Agents - John Feminella, Two Sigma

Read the talk

What a $900M Bank Error Teaches Us About AI Agents

A registry, risk scoring, runtime guardrails, shared evaluations and runtime protections form a combined control system.Open full source frame
A registry, risk scoring, runtime guardrails, shared evaluations and runtime protections form a combined control system.

John Feminella uses Citibank’s mistaken Revlon payment to explain five composable controls for autonomous agents: make them visible, review them by risk, enforce purpose-based access, share evaluation infrastructure, and reserve human attention for consequential decisions.

From a talk by John Feminella

At a glance

Ideas worth remembering

  • A warning and multiple approvers can still miss the consequential distinction: Citi intended an interest payment, while the software sent principal too. Controls must help distinguish intended actions from dangerous ones.

  • Make registration a low-friction part of building agents. Ownership, declared tools and endpoints support both governance and reuse; a heavy universal gate can push work out of sight.

  • Review agents by risk and enforce access by purpose. In managed environments, registry policies become restrictions on endpoints, hosts and resources rather than instructions the model is expected to remember.

  • Share the common evaluation machinery while leaving teams responsible for agent-specific expectations. A model change is a dependency change whose effects need evaluation.

  • Use deterministic rules for settled cases, independent classifiers for remaining routine decisions, human review for consequential ambiguity and outright denial for clearly dangerous calls.

The warning was correct. The payment was wrong.

On August 11, 2020, Citibank was supposed to distribute about $8 million in accrued interest to Revlon’s lenders. Instead, it sent about $900 million—the outstanding principal of the loan. A warning appeared, and three approvers accepted the transaction. John Feminella, who introduces himself as working on AI architecture and engineering at Two Sigma, starts here because the failure happened inside a process with controls, not in their absence. His views in the talk are his own, not Two Sigma’s.

Revlon’s 2016 term loan was divided among more than 300 lenders, including hedge funds, credit funds, collateralized loan obligations and banks. Citi served as the administrative agent: Revlon paid Citi, and Citi distributed payments to the lenders. The planned transaction combined an interest payment with changes to the loan arrangements. Some principal would roll into a new facility through an exchange of paper; the remaining principal would stay put. Only interest was supposed to leave the bank as cash.

The processing software, FLEXCUBE, made that seemingly simple requirement awkward. In Feminella’s account, the easiest way to calculate the correct interest payments was to record the transaction as though Revlon were paying off the entire loan. The principal portion then had to be redirected into an internal wash account—an account owned by the bank—so that it was booked without actually leaving the bank’s perimeter. The software’s representation of a full payoff depended on a separate routing configuration to produce an interest-only cash payment.

Which configuration separated those two outcomes? The fields labeled FRONT, FUND and PRINCIPAL needed the wash-account number and their associated checkboxes selected. The required boxes were not checked. FLEXCUBE warned that money was about to leave the bank, but money was supposed to leave: that was the point of paying the interest. The three approvers accepted the warning, and the principal went to the lenders instead of the wash account. The crucial distinction was between an expected interest outflow and an unintended principal outflow; a general warning about money leaving did not make that distinction useful to the reviewers.

The FLEXCUBE screen highlights FRONT, FUND and PRINCIPAL settings in the wash-account routing example.Open full source frame
The FLEXCUBE screen highlights FRONT, FUND and PRINCIPAL settings in the wash-account routing example.

The recipients received what they would have been owed on a full repayment, although Revlon had not intended to repay the loan. That mattered because its troubled debt was trading below face value. Feminella illustrates the incentive with debt worth sixty cents on the dollar suddenly repaid in full. Lenders resisting repayment to Citi argued that they had simply received money they were owed, albeit earlier than expected. He connects the incident to clauses subsequently added to commercial loan agreements to address mistaken payments.

The agent-safety question follows directly: how do you give a system real autonomy over consequential software without relying on warnings that people can reasonably misunderstand? Adding a procedure and multiple approvals had not ensured that the actual cash movement matched the intended transaction. Agents will encounter the same gap between what a workflow appears to mean and what its tools actually do.

0:122:13
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:12 · section reference included

Give agents useful access without trusting instructions alone

An agent’s behavior cannot be known completely in advance. Feminella’s useful comparison is with human workers: people also make unpredictable decisions and mistakes, yet organizations still let them communicate, use tools and act independently. Boundaries, visibility and supporting systems make that autonomy workable. The design goal is to make useful activity safer, rather than treating safety and useful activity as opposite ends of a single slider.

Three tempting approaches fall short for different reasons:

  • Lock down everything. A sandbox with no access to real systems limits exposure, but also removes much of the agent’s practical value.
  • Allow everything. Broad freedom provides capability with weak isolation, which Feminella considers unsuitable for highly regulated enterprises.
  • Put policy in the prompt. A policy document can tell an agent what it should do, but that instruction does not guarantee enforcement when it calls a tool.

The alternative is a set of composable controls, each doing a particular job. Shared capabilities matter as much as restrictions: a control should help teams build and operate agents without forcing every experiment to wait for a new approval process. The five controls that follow address visibility, review, access, evaluation and runtime decisions.

5:135:43
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

5:13 · section reference included

1. Register agents without creating a queue for every idea

The first problem is proliferation. Large teams run many agents; individuals run notebook experiments, chatbots, web tools and combinations of MCP servers. Across that variety, basic operational questions become hard to answer: who owns an agent, which tools can it use, what is its purpose, and what should it never do?

An agent registry records declared tools and metadata, connects agents to a product catalog and supports human and programmatic discovery.Open full source frame
An agent registry records declared tools and metadata, connects agents to a product catalog and supports human and programmatic discovery.

Missing answers hurt reuse as well as governance. A team cannot choose an existing capability it cannot discover, so it may build another solution to the same problem. Requiring every agent to complete a heavy registration-and-approval process before anything runs creates another failure: a small notebook experiment waits behind high-risk work. People either abandon the experiment or move it onto a less visible, less governed path.

An agent registry makes those facts discoverable without making registration itself an onerous review. It records declared tools, intended endpoints, the product the agent belongs to and its owner. Humans, programs and other agents can use the registry to discover what is available and retrieve the information needed for later decisions. “You can’t govern what you can’t see” also means you cannot reliably reuse it.

Registration happens automatically when a team uses one of the firm’s approved agent-building frameworks; manual registration remains available. That integration is the important operational choice. Visibility becomes a normal byproduct of building an agent through the supported path, rather than extra paperwork that authors have an incentive to avoid.

7:348:04
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

7:34 · section reference included

2. Spend review attention where the risk is

Once the agents are visible, their differences become obvious. An agent summarizing Jira or Linear tickets does not pose the same operational risk as an agent deploying changes to a running production system. Sending both through the same review process can leave a trivial summarizer waiting weeks—or, in Feminella’s example, two months—for the same sign-offs as the deployer.

An illustrative summarizer waits through four committee reviews, showing the cost of reviewing every agent identically.Open full source frame
An illustrative summarizer waits through four committee reviews, showing the cost of reviewing every agent identically.

The cost is more than slower experimentation. Reviewers spend a limited pool of attention on low-risk requests while high-risk requests compete for that same attention. A process intended to protect production can become less useful at doing so when everything is treated as equally deserving of scrutiny. Slow queues also recreate the incentive to work around the process.

Risk-based review uses what an agent declares up front—its tools, endpoints and applied controls—to distinguish these cases. Purpose-built enterprise agents make that assessment more tractable: a ticket summarizer has a known job, whereas an open-ended coding agent such as Claude Code does not know what the next user will ask it to do. The proposed control scores agents so human review goes to the appropriate places. Feminella does not specify the scoring formula or thresholds, so this is an architectural approach rather than a reproducible risk rubric.

9:3410:04
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

9:34 · section reference included

3. Turn declared purpose into enforced tool access

An agent can act in several capacities: call an internal API, search the web or use permissions attached to a role account. Those capabilities create different exposures. Reading a public webpage and acting through a privileged account should not be treated as interchangeable forms of tool use. The useful access question is how finely permissions must be divided for the agent to do its job without receiving unrelated powers.

A short, universal allowlist avoids making those distinctions, but can leave agents unable to search or call the APIs their work requires without asking someone first. Teams then give up or find a way around the restriction. Purpose-based access instead asks authors to declare the tools their particular agent needs. Feminella’s example is modest: an author may need four tools out of five hundred available, not blanket permission to use the entire collection.

What changes when two agents request the same tool? A research summarizer can use a web tool to retrieve research because that access fits its declared purpose. A release deployer has no corresponding reason to use that tool in the example, so it does not receive access by default. The comparison makes permission depend on the relationship between a tool and a job, rather than treating a tool as universally safe or universally forbidden.

The same tool receives different permissions for a research summarizer and a release deployer, according to their purposes.Open full source frame
The same tool receives different permissions for a research summarizer and a release deployer, according to their purposes.

The managed runtime turns that declaration into a restriction the agent cannot satisfy merely by promising to behave. At initialization, the environment looks up the agent’s applicable policies in the registry. Those policies become enforceable statements about reachable endpoints, hosts and other resources. The registry therefore supplies information to the runtime; the runtime applies the access limits.

Within this model, registration and conformance to the applicable risk score allow teams to operate through the governed path without opening an IT ticket for every access change. That low-friction path is conditional on using the managed environment and fitting the policy. It is how the architecture aims to keep enforcement strong without turning routine development into repeated negotiations with another team.

11:4312:13
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

11:43 · section reference included

4. Share evaluation infrastructure, keep agent-specific tests

The next inconsistency appears in evaluation. Some teams build elaborate evaluation stacks; others build nothing. A model is a runtime dependency of the application, and changing it can change both the agent’s outputs and their quality. Without evaluations, a team lacks a way to judge those effects. Feminella treats this as analogous to shipping software without unit tests.

A shared evaluation framework provides common processing, integration and trace ingestion while agent authors retain agent-specific logic.Open full source frame
A shared evaluation framework provides common processing, integration and trace ingestion while agent authors retain agent-specific logic.

Centralizing every evaluation decision would recreate the review bottleneck. If a complete suite and committee sign-off are required for every prompt tweak or one-line change, iteration slows even when the change does not warrant that amount of human attention. The shared element should be the evaluation capability, rather than a queue through which every development decision must pass.

The firm supplies the common parts of running evaluations, avoiding separate teams rebuilding many of the same features. Agent authors still write what is true about their own agents: the task-specific expectations against which behavior should be checked. Shared infrastructure removes duplicated machinery; it does not remove the need to define what a good result means for the particular job.

14:4315:13
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

14:43 · section reference included

5. Route consequential decisions to humans

Human-in-the-loop approval becomes a different system at production scale. Parallel agents can generate requests faster than a person can review them. Repeatedly accepting routine requests trains the reviewer to click yes by reflex, so the presence of an approval step stops guaranteeing meaningful scrutiny. The bank example has already shown why counting approvers is not enough.

A classifier routes tool calls to allow, human judgment or blocking according to their consequences.Open full source frame
A classifier routes tool calls to allow, human judgment or blocking according to their consequences.

A separate failure can remove the approval requirement altogether. Feminella recounts an incident in which an AI research-lab director asked an email agent to suggest deletions and wait for permission. In his account, the inbox was large enough to trigger context compaction, which dropped the instruction to wait. The agent then deleted hundreds of emails and did not stop when instructed from a phone. The anecdote illustrates a context-held instruction being lost; it does not establish the reliability of any particular classifier or runtime control.

The proposed alternative separates routine permission decisions from the cases where human judgment matters:

  • Explicit rules: Use deterministic fast paths when an applicable rule already settles the request.
  • Routine calls without a settling rule: Let independent, conservative classifiers make the decision instead of repeatedly asking a person for the same predictable answer.
  • Unclear or potentially dangerous calls: Escalate requests where ambiguity or consequences make human judgment useful.
  • Clearly dangerous calls: Deny them outright rather than treating every prohibited action as another opportunity to click approve.

The independence matters: the agent doing the work is not the only mechanism deciding whether its action should proceed. Classification belongs in the governed runtime, where it can affect execution, rather than existing only as advice elsewhere. These controls address two distinct problems—the volume of routine approvals and the fragility of an approval instruction stored in conversation context.

How does a request reach a human instead of becoming another automatic yes? The routing below shows the two decision stages: an applicable explicit rule takes the fast path; otherwise a classifier separates routine calls, requests needing judgment and clearly dangerous calls. The branches preserve human attention for a decision that could change the outcome. The talk supplies this routing logic, but no classifier accuracy results or error rates with which to quantify its protection.

Rules first; classification when rules do not settle the call

Agent action requestA runtime tool call needs a permission decision.
Applicable explicit rule?decision — Use a deterministic fast path where a rule settles the request.
Independent conservative classifierdecision — Assess calls that an explicit rule does not settle.
Permitoutcome — Routine permitted actions proceed without another human approval.
Human reviewoutcome — Review unclear, ambiguous or potentially dangerous requests.
Denyoutcome — Clearly dangerous actions do not proceed.
Arrows show decision routing, not a sequence of approvals. Human review is one branch, alongside permission and denial.
Read the diagram as text
  • Agent action request. A runtime tool call needs a permission decision.
  • Applicable explicit rule?. decision — Use a deterministic fast path where a rule settles the request.
  • Independent conservative classifier. decision — Assess calls that an explicit rule does not settle.
  • Permit. outcome — Routine permitted actions proceed without another human approval.
  • Human review. outcome — Review unclear, ambiguous or potentially dangerous requests.
  • Deny. outcome — Clearly dangerous actions do not proceed.
  • Agent action request → Applicable explicit rule?: Check explicit rules.
  • Applicable explicit rule? → Permit: Rule permits.
  • Applicable explicit rule? → Deny: Rule prohibits.
  • Applicable explicit rule? → Independent conservative classifier: No rule settles the request.
  • Independent conservative classifier → Permit: Routine permitted call.
  • Independent conservative classifier → Human review: Unclear or potentially dangerous.
  • Independent conservative classifier → Deny: Clearly dangerous.
3:133:44
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

16:17 · section reference included

Controls that let agents go faster

The five controls do different jobs and connect at specific points. The registry makes agents visible and supplies policy information. Risk scoring directs review attention. Managed environments enforce what agents may reach. Shared evaluations and metrics help teams judge behavior without rebuilding the common infrastructure. Runtime rules and classifiers govern individual calls. This is a set of cooperating capabilities, not five consecutive sign-offs that every action must collect.

Brakes let cars go fast and stop safely—the speaker’s analogy for controls that enable useful agent autonomy.Open full source frame
Brakes let cars go fast and stop safely—the speaker’s analogy for controls that enable useful agent autonomy.

Feminella closes with a question: why do cars have brakes? Stopping is only part of the answer. Brakes let a driver go fast while retaining a way to stop safely. Agent controls should serve the same purpose. The ambition is real autonomy with enforceable limits and useful intervention—not an agent that can do nothing, or a person approving everything until approval no longer means anything.

9:0413:43
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

17:47 · section reference included

Resources

Read the complete timestamped transcript
  1. 0:12

    Uh, my name's John Feminella. I work on AI architecture and engineering at Two Sigma, which is a hedge fund here in New York. Before I get too far into things, I have a legal disclaimer slide that I have to show you that says two things. One, I promise not to sell or market or offer you any securities at any point in this talk. And two, everything in this is my own opinion and not the opinion of Two Sigma. All right. Thanks for indulging me. If I don't say those magic words, the 5G microchips implanted in me will explode.

  2. 0:44

    So that slide is a good example, actually, of how our industry is regulated, and as a regulated company with lots of controls, I think one thing that's always interesting is to explore what happens when controls fail because that gives you a good idea about why the controls were there in the first place. And so I'd like to tell you a story about that by showing you another legal slide. After August twenty twenty, a very interesting contract clause suddenly started showing up in a bunch of commercial loan agreements. And this clause essentially tries to

  3. 1:13

    prevent a certain scenario from happening, and it's complicated, but I'll explain it like this. Let's say that you're a lemonade stand business, and you borrow money from a lender to capitalize your lemonade stand. And the bank that's overseeing that transaction, that's in the middle between the borrower and the lender, sends the lender all of the money that you owe in a catastrophic mistake. You'd probably be mad and want the money back, but the lender might also say, "No, thanks. You paid us back, and we're all good,

  4. 1:43

    so we'd rather keep the money." Something like this happened in August twenty twenty. Revlon, the cosmetics company, had borrowed money under a big twenty sixteen term loan, and that loan was split up into a bunch of pieces across three hundred plus lenders, hedge funds, credit funds, CLOs, other banks. And in the middle is Citibank, the administrative agent. Being the agent in this kind of transaction means that you're performing the plumbing that connects the borrowers with the lenders and managing the life cycle of the loan.

  5. 2:13

    So in this transaction, Revlon pays Citi, and then Citi pays the lenders. And Citi's not lending its own money, it's just in the middle, moving people's money around. So here's the plan for August eleventh, twenty twenty. Revlon would pay about eight million bucks of accrued interest to both groups, and the lender's principal would roll into this new facility. That's an exchange of paper, not cash. So the remaining lender's principal would stay put, and the idea here is that only interest should be going out. Principal should not be moving at all.

  6. 2:44

    And the bank had a piece of internal processing software called FLEXCUBE. Isn't that a fun enterprise software name? So in FLEXCUBE, the easiest way to do this kind of transaction is to pretend to record it like Revlon were paying off the entire loan, and that triggers the correct interest payment calculations to everyone. You can probably guess what's about to happen next. So you're supposed to send the principal portion to an internal wash account that you own as the bank, so that it's booked and

  7. 3:13

    recorded correctly, but it never leaves the bank's perimeter. So keep your eye on that wash account. What was supposed to happen is that the boxes labeled, uh, FRONT and FUND and PRINCIPAL should all include the wash account number and should all have a checkbox checked next to them. So unfortunately, it turned out that was what needed to happen, but for various arcane reasons, uh, the boxes were not checked, and although FLEXCUBE pops up a warning notification that says, "Uh-oh, money's about to leave the bank. Are you sure you wanna do this?"

  8. 3:44

    That was correct. Money was supposed to leave the bank because they were making the interest payments. So the three approvers who were supposed to approve that looked at it and said, "Yep, that's the right thing that's supposed to happen." And although that warning notification popped up, the human operators carrying out the transaction overwrote that. Remember, Revlon was making that interest payment. So the principal never went to the wash account, and instead, FLEXCUBE sent the entire outstanding principal of the loan to all of the three hundred lenders, about nine hundred million dollars instead of eight million

  9. 4:13

    dollars. So every lender got the amount that they would have been owed if Revlon had paid the loan in full, but Revlon didn't wanna pay off the loan. It wanted to hold onto its money. That was a great deal for the lenders because remember, Revlon was in trouble at the time, so its loans weren't trading at face value. And getting all your money back on a deal that you thought was only worth sixty cents on the dollar is a great deal for you. So they didn't wanna give the money back, e-even after Citi called them and said, "Please, that was a mistake. Give us the money back." And their argument was, "We shouldn't have to give the money back because you paid us in

  10. 4:43

    full, and that's how loans work. You eventually pay them back, and just because you paid it back at a different time than you were supposed to doesn't mean that we should have to give it back now." And so to prevent that from happening, uh, commercial loan agreements everywhere started includ- including a clause like that one. So what does a payment error at a bank have to do with AI agents? Well, the bank had this procedure, it had these controls, and everybody did what they thought the right thing to do was. And that's the problem I wanna talk about for the rest of this talk. Every day, we're giving real agents real autonomy over

  11. 5:13

    systems like FLEXCUBE, and how do we prevent accidents like that one from either from happening without locking everything down or just hoping we'll get lucky that they won't happen? So here's the crux of the issue. You can't really know in advance what an agent will do, right? They're these non-deterministic systems. Uh, and that sounds scary until you remember that humans are also non-deterministic systems, and they're gonna make mistakes too. And so most firms don't choose to say, "Well, in order to reduce the risk of humans making a mistake, we're gonna, like, lock them in rooms and prevent them from talking to each other, and they're all

  12. 5:43

    gonna double-check everybody else's work," right? We allow them a certain amount of autonomy along with a certain amount of controls. So we give them boundaries, visibility, and we equip them with systems and controls that let them do their jobs effectively. So in this sort of model, safety and innovation are not opposite ends of a spectrum that you must trade off on. There are things that you can have at the same time, so I think you can have your cake and eat it too. And when we were thinking about what controls we wanted to apply to agents, we also looked at some approaches that didn't work for us. We don't want to

  13. 6:13

    sandbox or lock down everything 'cause a sandbox with no real access to systems is not... is safe, but it's not very interesting or useful. If you let agents go wild and do whatever they want, that's, uh, you know, maybe powerful and freeing from a cognitive perspective, but the isolation is very weak there, and they're-- that approach is generally not suitable for highly regulated enterprises. And then if you just have policy documents that agents look at or that are part of your, um, specification for the prompt, that's also not very enforceable at

  14. 6:43

    runtime. You can't guarantee that that will be part of the enforcement controls. So what did work for us was thinking about what mix of controls would get us both safety and innovation at the same time. So how do we provide boundaries and stop problems, but don't hinder folks from operating correctly? So we have a number of these controls, but today I'll talk about five of them. And when I say controls here, what I mean are the guardrails and shared capabilities that let teams move in ways that don't hinder what they're trying to do.

  15. 7:13

    And we want to-- we don't wanna reach some chasm that we need to cross to, to let people get their work done before... And, and then make everyone wait while we build a bridge to get there. So these controls are composable. Each one does one job, and then together they let us run agents with real autonomy at an appropriate level of safety.

  16. 7:34

    So the first problem is that agents were showing up everywhere. We have big teams with lots of agents running. We have small teams with a few. We have individual people running stuff in a uncontrolled way, and these come in every shape. Could be random chatbots, it could be MCP servers glued together in this Frankenstein hodgepodge. It could be cool notebook experiments. Could be really useful web tools for folks. But it's hard to answer when you look at that a few simple questions like, "Who owns this? What tools does it have access

  17. 8:04

    to? What should it be doing? What should it not be doing?" And if you can't answer those kinds of questions, if you can't govern them, then you can't really also reuse that. So you're tempted to build multiple solutions to the same problem if you don't know about what exists already, and then the firm can't also govern those in any kind of legible way. So one thing that firms sometimes do here is add some kind of gate. Like, don't let anything run until everything is registered and approved and has gone through this very onerous process. And that sounds safe, but if you

  18. 8:34

    look at what it does to the work, every idea, even some simple notebook experiment, is gonna wait in line behind something that's really risky. And we don't, um, you know, we don't wanna subject everybody who's given the diversity of agents to exactly the same process. So most people are gonna give up or they'll just get pushed to some shadow IT less governed path that is, um, less visible, and then we don't get to see anything at all. So that's what motivated the first control, is an agent registry. You can't govern what you can't see, so the agent registry

  19. 9:04

    makes agents legible and it registers, retrieves, and discovers the key facts about agents that we want to know for any agent. Um, so those are things like which tools it declares, what endpoints it's gonna talk to, which product does it belong to, who owns it. And humans, other programs, other agents can then use the agent registry to decide what's available at the firm, whether that's useful for them, and to go use that as a source of truth for other questions. So this doesn't require extra effort on your part, it just

  20. 9:34

    happens when you use one of the firm's approved agent-building frameworks. It's automatically registered, all that information is recorded there for you, and if you wanna do a manual registration, you can certainly do that. So the second problem we have is that now that we've got all these agents doing all these things, we quickly notice that what they're doing is really different, and that means our agents carry really different risks, right? So a thing that summarizes Jira or Linear tickets is really different than a production deployment

  21. 10:04

    agent that can touch a running system. And if we can use the same-- If we try to use the same review process to cover all of these agents, then every agent is waiting in the same queue for weeks for human review. And if people are gonna rout-route around slow processes, then we wind up in the same situation that we had before. So again, you might be tempted to say the answer is something like really detailed, heavy manual review by all of these different constituencies. And again, that feels safe, but now we've got a trivial summarizer waiting two months for the

  22. 10:34

    same sign-offs as an agent that is touching production systems. And, and most of the good agent ideas, most of the ones that have value right away, start out as small experiments, and you don't want those people to wait in the same line as the stuff that's touching production right away. So the reviewers are drowning in these, like, low-risk requests, and the high-risk ones have to share that attention pool. So we don't wanna trade away that speed if we can help it. So again, because not every agent needs the same review, and because most agents are purpose-built rather than

  23. 11:03

    open-ended. And when I say open-ended here, you can imagine coding agents like Pi or Claude Code. When you open them and you start typing, uh, Claude Code or Pi doesn't know what you're about to ask. It doesn't, it doesn't circumscribe its purpose in any particular way. But most of the agents that are deployed in enterprises do have very specific purposes. When you're engaging with that agent, it's to do something specific that's well known and well understood. So they have a very specific reason for existing and a very circumscribed purpose. And you can tell these agents apart from each

  24. 11:33

    other by looking at what they declare upfront, their tools, um, the endpoints they access, the controls that, that are applied to them, et cetera.

  25. 11:43

    So the third problem is that if you know about your agents and what they're doing, you'll quickly notice that many agents don't talk to each other. Or sorry, they don't talk to just one thing or in just one capacity. The more open-ended the agent is, the more it looks like a Claude Code or Pi, the more it can do a variety and a diversity of different things. Call an internal API, run a tool like a web search, that sort of thing. And each one of those is a different... opening a different door to a different kind of risk. And if you give an

  26. 12:13

    agent an entitlement for a role account, then it can do a lot more damage than something that's just going to read a public webpage, for example. So the question is not, can this agent do X, but what's the granularity that we need to solve for, for the agent to act successfully? And again, one tempting answer is to kind of be heavy-handed here or to give every agent the same short allowlist of stuff that's safe to do and then block everything else. Uh, that's safe, but it's also useless. An agent that can't

  27. 12:43

    s-- uh, that can't search or can't call an API or can't do any of those things without asking somebody first can't really do the work that it was intended for. And then teams either give up on those agents, or they find a way around the wall, and both outcomes are costly. So a wide kind of blanket block on everything trades away the innovation that we want to preserve and avoids making a real decision about risk. Um, and as author John Shedd wrote, "A ship in harbor is safe, but that is not what ships are for." So the fix here is to

  28. 13:13

    let agents declare their purpose up front and say what tools they're going to use or what tools they need access to. Um, so in the second column here, we might say that a research summarizer is going to be allowed to use a web tool to access research, but for a release deployer agent, we're not going to allow them to do that because they have no reason to use that tool. And so if they try to ask for it, they won't get it by default. Um, so we don't need to make this kind of

  29. 13:43

    decision for every tool. The agents just have to say which tools they want, right? And, and you're, as the agent author, you're in the best position to say, "I need these four things out of the five hundred that are available." So the way we need to enforce that is that when agents run in our managed environments, they look at the registry that we talked about before to look up what policies apply to it at initialization time. And that policy gets translated into enforceable statements like which endpoints are you allowed

  30. 14:13

    to access, which hosts are you allowed to access, uh, what other types of resources are available or not available to you. And in this way, nobody's writing a ticket every time they need to change the access. Nobody's going to talk to IT or some other group outside of your team. As long as you conform to the risk score that we talked about before and you're in the agent registry, you're, you're governed, you're approved. So this is how we keep the cost to teams really low for deploying, building, running agents. And the

  31. 14:43

    same control architecture works in a variety of settings. The next thing we noticed was that teams were building a ton of different ways to evaluate agents, and every stack looks different, and some teams don't build anything at all. Sometimes you build like this really detailed stack for how your models work. Sometimes, uh, it's sometimes just nothing. And I think in general, we'd be upset if teams were not writing unit tests, right? And we consider evals to be kind of the same thing. If models are changing, that's like a runtime dependency that your application has,

  32. 15:13

    and if your agent is gonna change models, it doesn't know without the evals what's going to happen to its, to its outputs and to the quality of those outputs. So again, one tempting answer here is let's have some kind of central evaluation methodology that waits for a full eval suite and a committee sign-off. But now every like prompt tweak, every one-line change is gonna sit in that same queue. So we don't wanna put more decisions on more reviewers for things like that. We-- or we don't

  33. 15:43

    wanna trade away that iteration. So again, you wouldn't ship software without unit tests, so agents need evaluations for the same reason. And we want to provide the stuff at the level of the firm that's going to be the same for everybody. So team A writing evals, team B writing evals. They're both going to have many of the same features. So we want to have one shared approach to how we do evals and have the shared approach be something that's run by the firm and available to everybody for doing their evals. So that covers all the common parts of evals, and all you've gotta do

  34. 16:13

    is just write what's true about your agent.

  35. 16:17

    Uh, and finally, maybe you've had the experience of being asked to approve lots and lots of individual agent actions when there's a human in the loop. So that's fine at a small scale, but once you're operating agents in parallel or in production, this becomes completely onerous, and review requests come in faster than anybody can be expected to approve them. And after the first few times it is happening, you succumb to review fatigue where you just see yes, yes, yes, yes, yes, and eventually you click yes on something that's, you know, activating a nu-nuclear bomb, right? So you don't want

  36. 16:47

    to click yes by reflex, but that's going to happen inevitably. And one recent example of this is, uh, earlier this year, a director at an AI research lab told her OpenClaw agent to suggest emails to delete from her inbox and then wait for her approval. But her inbox was so large that eventually the agent compacted its context and lost the part that said, "Wait for my approval." And then it deleted hundreds of emails and didn't stop when she told it to stop on her phone. So again, you might be tempted here to make a human approve every action, but that's not the right way to do it.

  37. 17:17

    A better approach is to let these independent conservative classifiers make decisions about routine calls and then send a person only the requests that are most important, the ones that are most likely to make a difference. If you're saying yes ninety-nine point nine nine nine nine nine percent of the time, then that's probably just a rule that the agent should follow, not a request you need to ask the human for permission for. And the stuff that's unclear or ambiguous or potentially dangerous, yes, surface that to a human, or if it's definitely just dangerous, deny it

  38. 17:47

    outright. So this is a way to not have to do all the review work all the time. So we wanna take the same approach for both explicit, uh, when explicit rules apply. We want deterministic fast paths. When explicit rules don't apply and there's some ambiguity, we want a classifier to do that work instead. So putting those five pieces back together, you create a registry so that a-- every agent's visible from the day it's created. You score each agent, so human review goes in the right spot. You run agents on guardrails

  39. 18:17

    so that they only touch what they need. You share evals and metrics, so everybody's reaching the same bar without having to reinvent the wheel. And then finally, you govern your runtime to make sure that classification happens there and not somewhere else. So each of these controls works together. So I'll leave you with one question. Why do cars have brakes? It's not just so that you can stop. It's so that you can go fast and stop safely. So controls for our agents works the same way. Thank you very much. I'm John Feminella, and I hope you had a good

  40. 18:47

    time.