EIOSOpen the workstation

Case studyFinancial services

A governed intelligence layer, built in the field.

A forward-deployed engineering case study. An AML, partner and executive intelligence system, taken from proof of concept to a production-shaped deployment, with every figure traced and every action signed.

  1. 01

    Worlds

    • AML world
    • Partner world
    • Executive world
  2. 02

    Ingestion

    • Pub/Sub
    • Contract validation
    • DuckDB hot state
    • Parquet warm start
  3. 03

    Ontology

    • Metric registry
    • Entity graph
    • Typed tool port
    • Signed Action Intents
  4. 04

    Assistant

    • Agent per workstation
    • Drafter and assembler
    • Quoted regulation text
    • Model Armor screening
  5. 05

    Workstations

    • AML investigator
    • Partner manager
    • Compliance and audit
    • Executive, operations, geospatial

Every answer had to survive an auditor. Most tools could not produce one.

The brief came from a regulated financial institution: investigators clearing alerts, partner managers watching churn, compliance reviewers, data operations and executives, each on a separate tool. The engagement started with the people who would be accountable for an answer, and worked back to the system that could give one.

Client
A regulated financial institution
Scope
AML triage, partner retention, executive briefing, compliance, data operations
Mode
Forward-deployed engineering, proof of concept to a production-shaped deployment
Data
Synthetic client activity with a planted answer key, enriched with real public reference data and five regulatory documents
Runtime
Google Cloud: BigQuery and BigQuery Graph, Gemini through ADK, Agent Search, Model Armor, Cloud Run, Firestore, Cloud KMS
What the field showed, and what was built in response
What the field showedWhat was builtCapability
Alerts outnumber analysts, and shared infrastructure fakes connections between strangers.Network science over devices, payment methods and timing that collapses public hubs before it calls anything a ring.Network science
Leadership could not tell a cause from a coincidence, so every countermeasure was a guess.A fitted causal graph whose edges must survive refutation, and a what-if that says Correlation Only the moment it leaves the history.Causal inference
Money moves through geography, but geography is easy to read as a verdict about people.Map lenses on corridors, shared exits and login countries, published lists as evidence, and a refusal to rank anyone by origin.Financial geospatial
Generic copilots invent numbers and act without authority.One agent per workstation that may cite only what a tool returned in the same turn, and can only propose.Agentic AI
A decision nobody can replay is a liability in front of a regulator.Signed, expiring intents, four-eyes approval and a hash-chained ledger that replays the evidence behind every action.Governed action

Five layers. Each one can only be reached through the one below.

Worlds

Seeded synthetic worlds that plant the truth: laundering rings, churning partners, a causal chain. Evaluations read the answer key. No engine ever does.

Client activity is synthetic and planted; the reference layer is real public data: Overture, FATF, EU, Basel, ICIJ, World Bank, IPinfo. BY DESIGN

Four capabilities, each one you can push on.

Every figure below is drawn from the running engines or from recorded live turns. Try to break them.

Find the ring, not the router.

Accounts are linked through shared devices, payment methods and matched timing. A public gateway touches hundreds of strangers; left in the graph, it fuses them into one false ring. Hubs past degree 100 are collapsed before anything is called a ring.

  • Bipartite graphs over payments, devices and IPs
  • Degree-penalised hub suppression (RL-4)
  • Named GQL traversals on BigQuery Graph

Runs onBigQuery GraphBigQuery

Ring: 23 accounts on one device and one payment method

Device ff23c8Payment method 84b570CR84920PA-HUB-007 · degree 142
Engine output for case CR84920 in the seeded world. Ids are synthetic; degrees and counts are what the graph engine returned.

Money moves through geography. Geography is evidence, never a verdict.

Generated image, not a satellite photograph.

The sixth workstation reads the book through four lenses and three published lists. Its own Gemini agent answers questions and moves the map, but only to objects a tool returned in the same turn.

Replay a recorded turn of the map's agent

Pick a question to replay the agent's answer and its map move.

  • Low-tier corridor
  • Medium
  • High

Flows: geo engine over the seeded book, 6,000 accounts, 1 hub suppressed, as of 2026-10-14. Lists: FATF (June 2026), EU Delegated Regulation 2016/1675 as amended, Basel AML Index 2025. Centroids: Overture Maps. Outlines: Natural Earth.

What an analyst actually works in.

The AML investigator workstation: triage queue, evidence dossier, network graph, entity inspector and SAR composer.
Screenshot of the aml investigator workstation from the production build against the engine gateway. Client data is synthetic.
  1. 1

    Triage

    Rings and alerts ranked by the engine's score, filterable by severity.

  2. 2

    Evidence dossier

    Why the case was raised, every figure with a citation and its geography flagged.

  3. 3

    Network graph

    The ring around CR84920 with public hubs past degree 100 collapsed.

  4. 4

    Entity inspector

    Centrality, 30-day velocity and the counterparties, by volume.

  5. 5

    SAR composer

    A near-final narrative drafted from the same evidence.

  6. 6

    Governed action shelf

    Staged and expired intents; nothing executes without a second approver.

  7. Open the workstation

One ontology between every model and every decision, built on Google Cloud.

Agents and workstations sit above the governed tool port; data, engines and the systems that can change state sit below it. Nothing crosses the middle except through a typed, role-scoped, traced call. Select any component, or trace a request end to end.

WORKSTATIONSAGENTS · GOOGLE ADKGATEWAY + APISONTOLOGY · GOVERNED TOOL PORTDATA SOURCESLOGIC · ENGINESSYSTEMS OF ACTIONAML investigatorPartner managerExecutiveCompliance & auditData operationsGeospatialWorkstation agentDrafter · GeminiAssemblerModel ArmorSessions + briefsNext.js webFastAPI gatewayEvidence replayTelemetryMetric registryEntity graphGoverned tool portMetric auditorAction IntentsSeeded worldsReference layerIP network intelRegulation corpusIngestionAlert triageTypologiesChurn hazardCausal SCMForecast + what-ifBigQuery GraphIntent hubCloud KMS signerFour-eyes approvalWORM ledgerEvidence bundles
  • Workstations

  • Agents · Google ADK

  • Gateway + APIs

  • Ontology · governed tool port

  • Data sources

  • Logic · engines

  • Systems of action

runs on a Google Cloud service

What each Google Cloud service does here

BigQuery Graph
Named GQL traversals behind the map and the rings: account_neighbourhood, exit_ring, country_links. The model never writes a query; it names one from a catalogue.Equal to the local graph double on every named query; median 1.70 s, first query of a process 5.19 s. MEASURED
BigQuery
The warm tier and the reference layer: Overture boundaries from BigQuery public data, FATF, EU and Basel lists, ICIJ counts, World Bank indicators and an IP-network snapshot.4,167,822 IPinfo networks merged to 2,128,989 ranges and loaded in about 83 s; lookups take 14 µs. MEASURED
Vertex AI · Gemini via Google ADK
Each workstation has its own assistant, run every turn as an ADK LoopAgent: a prefetcher, a Gemini drafter and a deterministic assembler, on the global endpoint with hedged calls.Sealed split, run once: 40 of 42 turns pass, 97.8% of figures supported, p95 10.3 s. MEASURED
Agent Search
Regulation retrieval with layout-aware chunks and page spans, so every quoted rule carries its document, page and regulator.
Model Armor
Prompt and response screening, once per turn. A deployed service refuses to start without both templates.
Cloud Run
A public web service and a private API. The web service calls the API with its own ID token so the operator's token passes through untouched.The API builds its engines at start-up in about 54 s; one instance is kept warm. MEASURED
Cloud KMS
ECDSA P-256 signatures on every Action Intent. Signing and public-key reading are separate roles.
Firestore
ADK sessions, approvals and the decision ledger, with transactional appends and jittered retry on one named database.
Pub/Sub
The ingestion path: every event checked against its contract, breaches routed to a dead-letter queue.11 of 11 planted breaches quarantined, no healthy event refused, over 2,818 events in the ingestion replay. MEASURED
Cloud Trace
OpenTelemetry spans for every turn and tool call, with no prompt text kept on spans or in logs. Merged; ships with the next deploy.
Identity Platform, Secret Manager, Artifact Registry, Cloud Build
Operator sign-in, secrets, and images built by a least-privilege pipeline identity and deployed by digest. CI authenticates through Workload Identity Federation.

4 held, 4 held with a caveat, 1 missed.

Every row is a result our own harness produced against what the synthetic worlds planted, not production traffic. The first live run found a bug in our own grader, so the judge was fixed and frozen before the sealed split ran once.

  1. Live agent evaluation, development and validation splits

    Held, with a caveat

    200 pass, 13 fail, 0 inconclusive over 246 turns. 96.8% of figures supported. p95 4.8 s, no timeouts. MEASURED

    figures supported, of 100%

    The gate is not proven: 19.7% of turns ran on fixture data.

  2. Sealed split, run once, three repeats

    Held

    40 pass, 2 fail over 42 turns. 97.8% of figures supported. p95 10.3 s. MEASURED

    figures supported, of 100%

    One wrong tool route and one judge false positive on a hash. 11% of turns ran on fixture data. Not tuned against afterwards.

  3. Data contracts under planted breaches

    Held

    11 of 11 breaches quarantined, 0 healthy events refused, 2,818 events. MEASURED

    11 of 11 planted breaches quarantined

    The breach rate was about eight times the 0.05% circuit-breaker budget, so the board reads DEGRADED.

  4. Causal fit against the planted chain

    Held, with a caveat

    Largest coefficient error 1.5% on the default world, within 4% across forty other seeds. MEASURED

    default world 1.5%forty seeds, within 4%

    largest coefficient error, 0 to 5%

    Refuters cannot see confounding. The adjustment set is a domain input. One seed in forty accepted the null.

  5. Revenue forecast

    Held, with a caveat

    Error 0.74 times that of carrying today's value forward. 90% interval held 87% over 75 origins. MEASURED

    model 0.74carry today forward 1.00

    error against carrying today forward, lower is better

    held 87%promised 90%

    90% interval: share of outcomes inside, 80 to 100%

    Interval slightly under-covers.

  6. What-if shock propagation

    Held

    Under 1 ms on the default world. Attribution sums to 100.00%. MEASURED

    under 1 ms200 ms budget

    propagation time, 0 to 200 ms

    200 ms budget.

  7. Ring-exit detection on the map

    Held

    Precision 1.00 and recall 1.00 on six planted exits, the same on five unseen seeds. MEASURED

    without hub suppression 0.86with it 1.00

    precision, 0.80 to 1.00

    Without hub suppression the VPN country becomes a seventh and precision falls to 0.86.

  8. Churn hazard calibration

    Missed

    Ranks well (AUC 0.974) but overstates: mean hazard 0.43 against 0.21 observed. MEASURED

    observed 0.21model mean 0.43

    hazard, 0 to 0.6

    The order is trustworthy. The probabilities are not, and the workstation says so.

  9. Financial red-team probes

    Held, with a caveat

    15 of 15 passed their string assertions. MEASURED

    15 of 15 probes passed

    Small set, no LLM grader, one run.

Seven rules the system is not allowed to break.

They are checked as tests and, where a probe is safe, against the running system. Two cannot be probed live without writing state or faking an outage, and the operations board says so instead of showing green.

  1. RL-1

    No model computes a metric.

    Every number comes from a deterministic engine. A briefing recomputed twice is identical.

    MEASURED
  2. RL-2

    No autonomous write-back.

    Agents propose. A signed, expiring intent needs a second human.

    TESTED IN CI
  3. RL-3

    Honest uncertainty.

    A claim shows as causal only past a placebo test and a confidence floor. Otherwise it reads Correlation Only.

    MEASURED
  4. RL-4

    Shared-IP hubs are collapsed.

    Nodes past degree 100 cannot make a laundering ring. The largest detected ring is no bigger than the planted one.

    MEASURED
  5. RL-5

    The decision ledger cannot be rewritten.

    Monotonic sequence numbers and a SHA-256 chain on every approval, walked end to end.

    MEASURED
  6. RL-6

    What-if is fast and adds up.

    Shocks propagate well inside 200 ms and attribution closes to 100.0%.

    MEASURED
  7. RL-7

    An outage is stated, never invented.

    Workstations serve a labelled replay. The copilot never replays: its outage is a plain 503.

    NOT MEASURED

What the field taught us.

  1. The first live run blamed the wrong party.

    The grader reported 37.0% faithfulness. A spot check showed the grader was wrong, not the copilot: it misread bullet lists. The fix stayed as a regression test.

    Before
    37.0%
    After
    93.5% MEASURED
  2. The copilot contradicted the screen.

    It answered a churn probability of 0.84 while the screen showed 0.78, because a tool returned the same constants for every partner. Per-entity data removed the disagreement.

    Before
    0.84 against 0.78
    After
    3 of 3 cases agree MEASURED
  3. Too slow to trust.

    Almost a third of turns missed a 60 s deadline. The time was the final drafting call, not hangs. Moving to the ADK assistant with a plain-figures assembler removed the tail. The case sets differ, so read the direction and not the ratio.

    Before
    p95 48.6 s, 18 of 61 turns past 60 s
    After
    p95 4.8 s, 0 timeouts MEASURED
  4. Good ranking is not calibration.

    The churn model orders partners well and overstates every probability. Recalibration against observed outcomes is the remedy, and until then the workstation does not present the figure as a probability.

    Before
    mean hazard 0.43
    After
    0.21 observed MEASURED

Below, four layers of governed data and models.

Worlds, ingestion, the ontology and the assistant. Each can only be reached through the one beneath it.

Every number traced. Every action signed.

Open the workstation

Reviewer accounts are on the sign-in page. Client activity in the workstations is synthetic; the reference layers and regulatory documents are real and public.