Case studies
Banking

A Hallucinated Answer Is the Bank's Official Position

The agent can answer, but has no route to a customer's money.

CreateOS for Safe Banking Agents
On this page
Zero

Unauthorized actions, enforced in-kernel. Not zero observed. Zero possible.

100%

Of interactions and actions logged and replayable.

30% → 60%

Containment lift, deflecting 1.5 million contacts a year.

$7.5M-$10M

Annual savings against a $25 million contact-center base.

Challenge

The objection was never that the technology did not work. A customer-facing agent in banking is a different category of risk: an onboarding agent processes a document, a monitoring agent flags a transaction, but a conversational agent speaks in the bank's voice and can act on the account. Three exposures follow, and the risk function could articulate all three.

  • A hallucinated answer is the bank's official position. Ask whether a fee applies and the customer reasonably treats the reply as the bank's word. That is unfair-and-deceptive-practices exposure, and it does not matter that a model produced it.
  • A session that crosses wires leaks a customer's data. In a shared-runtime chatbot, isolation between two conversations is a property of the application code. Application code has bugs. The control the risk function wanted was structural.
  • An action outside policy moves real money. This is the one that ended both prior evaluations.
  • Every vendor answered the same way. The agent is instructed not to, the prompt constrains it, the model is fine-tuned, there is a policy layer. Every one of those is a request made of a model, not a control.
  • An agent asked nicely is an agent that can still do it. A jailbroken, manipulated, or simply confused agent that is asked not to execute an unauthorized transfer is an agent that can execute one.
  • The answer does not live in the prompt. Every vendor in the market owns the conversation and rents the runtime, so none of them could answer the question. It lives in the layer underneath, which they did not control.

Solution

CreateOS owns both. We build the agents and we own the infrastructure they run on, which is what let us convert each of the risk function's three exposures from a request made of a model into a control enforced by the machine.

  • Unauthorized action: impossible in the kernel. The only agent permitted to touch core banking runs with egress allowlisted in the kernel. It reaches the sanctioned core-banking APIs the bank approved and nothing else. There is no path to any other system, so a hallucinating or manipulated agent cannot execute an unauthorized transfer. Not told not to. Cannot.
  • Cross-customer leakage: impossible by construction. Every session runs in its own micro-VM with its own guest kernel, destroyed when the conversation ends. The isolation is a property of the hardware boundary, not of the application code above it.
  • Hallucination: designed out by separation of duties. The answering agent works strictly from the bank's grounded content and cannot act. The acting agent cannot compose an answer. Compromising one does not compose into a compromise of the bank.
  • Irreversible actions carry a second gate. Explicit customer confirmation, and where the bank chooses, a named human.
  • The kill switch is the VM lifecycle. A misbehaving agent or problematic intent is suspended instantly, with no waiting for a deployment.
  • Everything is written as it happens. Every interaction, answer, and action goes to the audit log, serving as both the compliance record and the bank's dispute defence.
  • Proven in the order the risk function asked for. Read-only on real traffic first, so grounded accuracy and session isolation were demonstrated before the agent could move a dollar. Transactional intents followed one at a time, each egress-gated and confirmation-gated.

Who can speak, and who can act

  1. 01

    The answering agent

    Reads The bank's own grounded content, and nothing else

    Held An answer to the customer. No route to core banking.

  2. 02

    The session it runs in

    Reads One conversation, in its own micro-VM with its own guest kernel

    Held Nothing to another session. Destroyed when the chat ends.

  3. 03

    The acting agent

    Reads A request handed over, never the customer directly

    Held Core-banking actions on kernel-allowlisted paths only

  4. 04

    An irreversible action

    Reads The customer's explicit confirmation, and a named human where the bank chooses

    Emits The action, with every step written as it happens

Every vendor answered the same way: the agent is instructed not to. An agent asked nicely is an agent that can still do it. The split here is not a policy the model follows, it is two different machines with two different reachable sets.

The control plane and storage run inside the bank's own infrastructure and region, so conversation content never leaves the boundary. CreateOS is SOC 2 Type II and ISO 27001 certified, which mattered because card and payment intents were in scope from the start.

Outcome Derived

The programme went live, which is the outcome that matters and the one a dashboard will not show.

  • Zero unauthorized actions. Not zero observed. Zero possible, because the path does not exist.
  • Zero cross-customer data leakage. A structural property of the deployment, not a metric the bank has to watch.
  • Grounded answers only, 100% logged and replayable. No ungrounded generation on factual account or product questions, which removes the unfair-and-deceptive-practices exposure at its source rather than monitoring for it afterwards.
  • $7.5M to $10M a year that had been worth nothing twice. Containment 30% to 60%, deflecting 1.5 million contacts a year, with handle time on assisted contacts down 20%. The case existed before CreateOS and the risk function could veto it, and did.
  • Safety is the gate the cost case passes through. Not a feature alongside it. In a customer-facing banking deployment the buyer who can say no is not the one who wants the savings, so answering the CRO's question is what unlocked the CFO's.

What the risk function signed off on

MetricBeforeAfter
Unauthorized actionModel is instructed not toNetwork path does not exist (eBPF, in-kernel)
Cross-customer isolationApplication-layer, code-dependentPer-session Firecracker micro-VM, own guest kernel
Hallucinated answersPrompt and fine-tuningGrounded content only; answering agent cannot act
Data residencyVendor cloudSelf-hosted in the bank's region and boundary
Kill switchRedeployVM lifecycle, instant suspension
Audit trailPartial100% of interactions and actions, replayable
CertificationVariesSOC 2 Type II, ISO 27001
Projected. Modeled on stated assumptions and published sources, not measured from a delivered deployment.

Highlights

  • Zero unauthorized actions, enforced in-kernel. Not zero observed. Zero possible.
  • Zero cross-customer data leakage, enforced by per-session isolation.
  • 100% of interactions and actions logged and replayable.
  • Containment 30% → 60%, deflecting 1.5 million contacts a year; handle time on assisted contacts down 20%.
  • $7.5M to $10M a year against a $25 million base, unlocked because the program went live.

Give Us One Stuck Pilot.

We'll have it in governed production before your next board meeting.