Vibe Engines
YouTube

Vibe Engines is free, interactive AI engineering & system design — runs in your browser. Pick a learning path

AI System Design

Design an Agentic Browser Security Gateway

Step 1 / 9

Learn AI system design by building the enterprise perimeter that lets a whole fleet of agentic browsers run without letting them leak the company.

The whole design, in writing

Every step of the build above, written out: the problem each piece solves, the option that was taken and the ones that were not, the numbers, and how it fails in production.

The big idea

A perimeter for a fleet, not a leash on one agent

An agentic browser can read a page, fill a form, click "send," move money. That's useful — and it's a data-exfiltration and unauthorized-action risk running on thousands of employee machines at once. The standard advice is "block them," but people run them anyway, so a blanket ban just creates shadow usage you can't see. How does an enterprise contain a whole fleet of agentic browsers?

Agentic Browser Fleetmany, across the org
New in this step: Agentic Browser Fleet.

We'll build the fleet perimeter: one gateway every agentic action flows through, a central policy engine, taint tracking so untrusted web content can't silently drive a sensitive action, an action allowlist with risk classification, human-approval breakpoints for irreversible actions, and full fleet audit. This is the org-level containment layer — not the per-agent injection defense a single computer-use agent already ships.

What the new pieces do

Agentic Browser Fleetclient
The employees running agentic browsers that click, type, and act on the web and internal apps on their behalf. Blocking them outright doesn't work — people run them anyway — so the goal is to contain the whole fleet, not ban it.

Step 1 · The baseline

Agentic browsers act on the web, ungoverned

The reality on the ground: employees install agentic browsers that read pages and take actions directly, each configured (or not) by whoever set it up. IT's official stance is "don't," but a meaningful fraction run one anyway. What's the actual enterprise risk?

Agentic Browser FleetWeb / SaaS
New in this step: Web / SaaS. · swipe to pan the diagram

Thousands of employees run agentic browsers that act on the web and internal apps, with no central control. What's the core risk?

  1. Distributing responsibility to thousands of individuals is exactly how a company loses control of its data. One agent that reads a malicious page and obeys it can exfiltrate customer data or take a destructive action — and with no central perimeter, nobody sees it happen or can stop the pattern across the fleet.

  2. Exactly: agentic browsers act with the employee's authority across web and internal apps, so an injected instruction from a page can drive real, damaging actions. Without a perimeter there's no consistent policy, no way to stop tainted data from driving sensitive actions, and no visibility — and a ban only pushes it into the shadows where it's worse.

  3. Resource use is trivial next to the real problem: autonomous agents taking real actions with employee authority, driven partly by untrusted web content, with no central containment or visibility.

Agentic browsers act with the employee's full authority across web and internal apps, so an injected instruction from a page can drive real exfiltration or destructive actions — and with no central policy, no data-flow control, and no fleet visibility, the enterprise can neither prevent nor even see it. Banning them just converts visible usage into shadow usage.

Why this piece earns its place

The reason this risk goes unmeasured is that an agentic browser acts inside the employee’s own session. Every downstream system — the SaaS audit log, the identity provider, the DLP console — records a person’s name on an action a model chose. There is no actor=agent dimension to query, so before a perimeter exists you cannot answer the first question a security team asks, which is how much of this is already happening. The absence of alerts reads as absence of usage. It also breaks incident response: when data leaves the company, scoping the breach means separating what a human did deliberately from what an agent did because a page told it to, and after the fact those are the same log line. So the first deliverable of a gateway is attribution, not enforcement. A mode that only labels and records agentic actions, blocking nothing, is already worth shipping on its own — it is what lets you write the policy and the allowlist below from observed traffic instead of guessing, and guessing is how you end up with rules that block real work on day one.

What the new pieces do

Web / SaaSdata
The external web pages and internal SaaS the agents operate — the source of both the task and, dangerously, of untrusted content that can carry injected instructions.

Step 2 · The perimeter

Route the fleet through one gateway

First move: agentic-browser actions don't touch the web and internal apps directly — they flow through a Security Gateway that mediates on the fleet's behalf. Why is a single perimeter the prerequisite for containing a fleet?

Agentic Browser Fleetacts via the gatewaySecurity Gatewaythe fleet perimeter
New in this step: Security Gateway.

Why funnel all agentic-browser actions through one gateway instead of securing each agent locally?

  1. Speed isn't the goal. The perimeter exists to be the one place org-wide policy, data-taint rules, action gating, and approval can be enforced and observed — consistently, for every agent, regardless of how each was configured.

  2. Per-employee settings are exactly the problem — inconsistent, unauditable, and only as good as the least careful person. The gateway centralizes enforcement so security doesn't depend on each agent's local config.

  3. Right: the gateway is the enforcement and observation point for the whole fleet. Funneling every action through one perimeter is what makes consistent, org-wide containment possible — a single place to enforce policy and see everything, instead of thousands of independently-configured agents.

Every agentic-browser action flows through the gateway, which mediates on the fleet's behalf. This single perimeter is the one place org-wide policy, taint tracking, action gating, and approval can be enforced and observed consistently — turning thousands of independent agents into one governable, visible fleet.

Why this piece earns its place

Start with what the gateway keys its state on, because everything downstream inherits that choice. A session has to span an agent’s whole task and bind to the human it acts for, not to the device or the browser instance — key it to a machine and a shared laptop merges two people’s work under one set of labels, and a held action arrives with nobody to route it to. Give that session a defined lifetime too: when the task ends, its taint labels and any pending approvals end with it, or a stale hold blocks unrelated work tomorrow and the fastest fix anyone finds under pressure is to clear state for the whole fleet. The second property worth saying out loud is that this is the cheapest piece to build early and the most expensive to retrofit. Put the seam in the action channel now and policy, gating and approval arrive later as configuration. Let agents reach systems directly first and every integration has to be unpicked one at a time while people already depend on it — and that unpicking lands on whoever asks for the control, never on whoever skipped it.

What the new pieces do

Security Gatewaygateway
The single perimeter every agentic-browser action flows through. It applies central policy, tracks data taint, gates actions, and routes high-risk ones for approval — so containment is enforced org-wide, not configured agent-by-agent.

Step 3 · One policy

Enforce a central, org-wide policy

The gateway needs to know what the fleet is allowed to do. Where does that come from — each agent's local config, or one central place? And why does it matter for a fleet?

Security Gatewaythe fleet perimeterPolicy Engineone org-wide policy
New in this step: Policy Engine.

Where should the rules for what agents may do come from?

  1. Local config means thousands of different, unauditable policies — as strong as the least careful employee. A fleet can't be contained if every agent decides its own rules; a single lax config is a hole in the whole perimeter.

  2. Right: one policy, centrally managed, applied uniformly. Which sites agents may act on, which actions are allowed, which data classes they may touch — decided once for the organization and enforced at the perimeter, so security doesn't vary agent-to-agent and can be updated fleet-wide in one place.

  3. Asking the model to decide policy is exactly what an injected page tries to subvert. Policy is an organizational decision enforced before the model's judgment is trusted, not delegated to the agent being contained.

A central Policy Engine defines one org-wide policy — permitted sites, actions, and data classes — enforced identically for every agent at the gateway. Security no longer varies agent-to-agent or depends on the least careful employee's config, and the whole fleet's rules can be updated in one place.

Why this piece earns its place

Centralizing policy centralizes the blast radius with it. One bad rule now stops the whole fleet at once, and the people it stops are doing their jobs, so this needs the discipline any config-as-code system needs: policy is versioned, changes roll out staged, and a change can run in shadow — logging what it would have blocked — before it blocks anything. Stamp the deciding policy version onto every decision. Without that, a record read six months later says an action was refused and nothing about the rule that refused it, and nobody can tell a deliberate tightening from a mistake. The second thing policy needs is an exception path. Deny-by-default on day one stops work that was fine last week, and if the only route around it is a ticket that takes a week, people go back to the ungoverned browser this design exists to pull them away from. Exceptions need an owner and an expiry, or they quietly become the policy. Evaluation itself should be cached at the gateway — and then a short cache lifetime is the price of a revocation that actually lands.

What the new pieces do

Policy Engineservice
The central source of what the whole fleet may do — which sites, which actions, which data — so security isn't left to each agent's local config or each employee's discretion.

Step 4 · The key mechanism

Track taint from untrusted content

Here's the mechanism that makes fleet containment actually work against injection. An agent reads a web page (untrusted) and later takes an action (sensitive). How do you stop the page's content from driving the action — without banning the agent from reading pages at all?

Security Gatewaythe fleet perimeterTaint Trackerdata provenance
New in this step: Taint Tracker.

An agent reads an untrusted page, then attempts a sensitive action. How do you prevent the page from driving it?

  1. You can't reliably detect every injected instruction in arbitrary web content — and blocking pages breaks the agent's job of reading the web. The problem isn't reading untrusted content; it's letting that content flow into a dangerous action.

  2. That defeats the entire purpose of an agentic browser. The goal is to let it read the web safely, not to blind it. Containment has to allow reading while controlling what the read data can go on to do.

  3. Right: this is data-provenance / taint tracking, the core containment mechanism. The agent can read anything, but every value derived from untrusted content is labeled tainted and tracked. Policy then forbids tainted data from reaching a sensitive sink — so "email this to X" is fine if X came from a trusted source, and blocked if X was injected by the page. You control the data flow, not the reading.

The Taint Tracker marks every value derived from untrusted web content as tainted and follows it through the workflow. Policy then forbids a tainted value from driving a sensitive action — so the agent can read the whole web freely, but content injected by a page can never cross into an exfiltration or a destructive action. You control the data flow, not the reading.

Why this piece earns its place

The hard part is not marking the data, it is stopping the mark from spreading to everything. The agent’s context mixes your instructions with page text, so the moment it summarizes a page the summary is tainted too, and a naive implementation taints the entire session on the first read and then refuses every action for the rest of the task. What makes taint usable is declassification: a narrow, explicit path by which a value stops being tainted at all — a human endorses it, or it matches a strict shape like an internal record id that leaves an attacker no room to write anything. Design that path with more care than the rule that blocks, because it is where an attacker will aim. Keep it distinct from a sink exemption, which permits one flow to one approved destination and changes nothing about the value itself: there the label stays on, and it has to, or a value laundered through one blessed destination comes back clean everywhere else. Then watch the asymmetry in your feedback. Over-tainting is loud: someone is blocked, files a ticket, and you hear about it that afternoon. Under-tainting is silent, because a leak that succeeds produces no signal at all. Every operational pressure pushes toward loosening and nothing pushes back, so loosening has to be a reviewed change with a name on it, not a knob someone turns during an outage.

What the new pieces do

Taint Trackerservice
Marks every value the agent derives from untrusted web content as tainted and follows it through the workflow, so policy can forbid a tainted value from ever driving a sensitive action.

Step 5 · Bounding actions

Allowlist and classify every action

Taint controls what data can drive an action; now bound the actions themselves. The agent attempts to click, submit, delete, send. How should the gateway decide what's permitted?

Security Gatewaythe fleet perimeterAction Gateallowlist + risk
New in this step: Action Gate.

How should the gateway handle the actions an agent attempts to take?

  1. Correct: an allowlist plus risk classification. Most actions the fleet takes are routine and can run automatically; the small number that are sensitive or irreversible (bulk delete, fund transfer, mass send) are classified as high-risk and routed to the approval path. This bounds what agents can do while keeping the common case frictionless.

  2. Reviewing after the fact doesn't bound anything — an irreversible action is already done by the time you read the log. High-risk actions need a decision before they execute, which requires classifying and gating them at the perimeter.

  3. The agent deciding its own actions are safe is exactly what an injection subverts. Action permissions are a policy decision enforced by the gateway, not a judgment delegated to the agent being contained.

The Action Gate checks every attempted action against an allowlist and classifies its risk. Routine actions pass automatically; sensitive or irreversible ones are flagged for the approval path. This bounds what any agent can do while keeping the frequent, low-risk actions frictionless — containment without grinding the fleet to a halt.

Why this piece earns its place

An allowlist needs a unit, and a click is not one. The same submit is trivial or a fund transfer depending on what it hits, so the gate has to key on the verb, the target resource and the scope — and none of those can be recovered from a mouse event on a rendered page. That is what forces the integration down to the structured action the agent requests rather than the pixels it moves: if an agent cannot declare what it is about to do in a form the gate can read, the gate is guessing. Split the knobs accordingly. Which verbs exist and how risky each one is belongs in central policy; the scope belongs in the request, because deleting one record and deleting the quarter are the same verb and only the request knows which. The operational trap is the half-finished task. A refusal that lands after a side effect is already written leaves the workflow in a state nobody designed, so the gate sits in front of the effect, and the agent needs a defined behaviour on refusal — stop and report, not retry by another route.

What the new pieces do

Action Gateservice
Checks every action the agent attempts against an allowlist and classifies its risk — routine actions pass, sensitive or irreversible ones are flagged for the approval path.

Step 6 · The human checkpoint

Approval breakpoints and fleet audit

A high-risk or tainted action reaches the last line. What happens to it, and how do you keep the whole fleet visible without drowning humans in approvals?

Action Gateallowlist + riskApproval + Audithuman breakpoint · fleet log
New in this step: Approval + Audit.

How should the perimeter handle a flagged high-risk action, and record fleet activity?

  1. Auto-approving high-risk actions removes the entire point of flagging them, and logging nothing leaves you blind to incidents. The whole design exists to catch the consequential actions and to see what the fleet did.

  2. Approving every action creates instant approval fatigue — humans rubber-stamp to keep working, and the checkpoint becomes theater. The point of risk classification was precisely so that only the small consequential minority needs a human.

  3. Right: human-approval breakpoints for the consequential minority (with enough context to decide well), automatic execution for the routine majority (so no approval fatigue), and an immutable fleet-wide log of everything for visibility and investigation. That balance is what makes the perimeter both safe and usable at scale — and the audit trail is how a security team finally sees the agentic-browser activity that was invisible before.

Only high-risk and tainted actions are held for a human decision with full context; routine actions run automatically, so approval fatigue never sets in. Every action and decision across the fleet is appended to an immutable audit trail — giving the security team the fleet-wide visibility that ungoverned agentic browsers never provided, and making any incident reconstructable.

Why this piece earns its place

The approval screen is itself an attack surface, and this is the part teams get wrong. If it shows the agent’s own description of what it is about to do, then the page that injected the instruction also wrote the sentence the human reads, and the checkpoint has been defeated politely. Show the raw target and the provenance instead — this value is tainted, it came from that page — and let the approver look at the thing rather than a summary of it. Give the queue a timeout and a default, and make the default refuse: a request that expires into an execution is worse than having no checkpoint, because everyone believes there is one. The queue needs a named owner and a response time too, or it becomes the slow path people learn to route around. What the record has to add beyond the decision itself is causality — one correlation id tying an action back to the page that was read and the labels that value carried — and, for a held action, what the approver was actually shown at the moment they said yes. Without that second half, a misled approval and a deliberate one are the same entry afterwards — which is the first thing an investigation has to tell apart. And treat the log as sensitive: it holds excerpts of everything the fleet touched, which makes it the richest single target in the design.

What the new pieces do

Approval + Auditcontrol
Holds high-risk and tainted actions for a human decision with full context, and appends every action and decision across the whole fleet to an immutable record for visibility and investigation.

The payoff

A fleet you can let run

Put it together: thousands of agentic browsers can do their useful work across web and internal apps — and the company keeps one policy, controls where untrusted data can flow, bounds every action, holds the dangerous ones for a human, and sees it all.

Agentic Browser FleetWeb / SaaSSecurity GatewayPolicy EngineTaint TrackerAction GateApproval + Audit
The finished design, end to end. · swipe to pan the diagram

That's the agentic-browser security gateway. A fleet perimeter with central policy, taint tracking, action gating, approval breakpoints, and audit — the org-level containment that a single agent's own injection defenses can't provide across thousands of endpoints.

Everything you assembled, in order

  • Agentic browsers can't be banned effectively — the goal is fleet containment, so every action flows through one gateway perimeter.
  • A central Policy Engine defines one org-wide policy, enforced identically for every agent — security no longer depends on each employee's local config.
  • Taint tracking marks data from untrusted web content and forbids it from driving a sensitive action — controlling the data flow, not banning reading.
  • An action allowlist with risk classification passes routine actions automatically and flags the sensitive, irreversible ones.
  • Human-approval breakpoints catch only the consequential minority (no approval fatigue), and an immutable fleet-wide audit trail finally makes the activity visible.

Where an interviewer pokes next

Getting the boxes right is the easy half. These are the questions that separate a candidate who drew the diagram from one who has run the thing. Answer each one out loud before you open it.

  1. How is this different from the Computer-Use Agent system design's safety features?

    The computer-use-agent design covers ONE agent's safety: how a single agent defends against prompt injection in what it reads, and a per-agent safety gate on its own actions. This design operates one level up, at the FLEET: an enterprise running thousands of agentic browsers on employee machines needs consistent org-wide policy, data-flow (taint) control that spans a whole workflow, centralized approval routing, and fleet-wide visibility — none of which a per-agent defense provides. A single well-defended agent is necessary but not sufficient; the perimeter is what makes the aggregate governable, auditable, and consistent regardless of how each individual agent is configured.

  2. Why is taint tracking better than just scanning each page for injected instructions?

    Per-page scanning tries to DETECT malice in arbitrary web content, which is unreliable (attackers craft around detectors) and breaks the agent's core job if you block flagged pages. Taint tracking sidesteps detection entirely: it doesn't care whether a page is "malicious," it just tracks that a value CAME FROM untrusted content and refuses to let untrusted-origin data reach a sensitive sink. So the agent can read anything — even a page full of injected instructions — and the injection simply can't drive a dangerous action, because the tainted data is forbidden from crossing into that action. Provenance is a property you can enforce; "is this text an attack?" is a judgment you can't reliably make.

  3. Doesn't routing every action through a central gateway hurt the agent's responsiveness?

    The gateway's per-action work — a policy check, a taint-label lookup, an allowlist match — is cheap relative to the browser action itself (a page load, a form submission, an API call), so for the routine majority the added latency is negligible. Only the flagged high-risk minority incurs real delay, and that delay (waiting for a human) is the intended behavior for a consequential action, not a performance bug. As with the other gateway designs, the priority is that the perimeter FAIL CLOSED — if it can't evaluate policy or taint for an action, it holds or refuses the action rather than letting it through unchecked, because an ungoverned action is exactly the risk it exists to prevent.

  4. How does the gateway actually intercept a browser action running on an employee's machine?

    Typically through a managed browser or an enterprise browser extension/agent runtime that is configured to route the agentic actions (navigations, form submissions, tool/API calls the agent makes) through the gateway rather than executing them directly — the same way enterprises already route traffic through a secure web gateway or CASB. The agentic-browser vendor integration, or a managed-browser policy, points the action channel at the gateway. This is also why "ban them" fails and "contain them" works: you provide a sanctioned, gateway-routed way to run agentic browsers that's better-supported than the shadow alternative, so usage flows to the governed path.

  5. What stops an employee from just using an un-managed agentic browser to bypass the gateway?

    Nothing technical fully prevents a determined bypass on an unmanaged device — which is why this is a combination of a technical perimeter AND the usual enterprise controls: managed devices and browsers where the gateway route is enforced, network-level egress controls that limit where unmanaged agents can reach, and policy/DLP on the sensitive systems themselves so that even an ungoverned agent hits authentication and data-loss-prevention at the resource. The gateway's job is to make the SANCTIONED path the easy, well-supported one and to contain everything that flows through it; defense-in-depth on identity, device management, and the target systems handles the residual bypass risk — the same layered posture as any enterprise data-exfiltration control.

Check yourself — the answers, and why

Seven steps in, these are the calls you should be able to make cold. Pick one, then read why.

  1. An agentic-browser security gateway is a fleet perimeter because it…

    It operates at the fleet level — consistent containment and visibility across all agents — not the per-agent safety a single computer-use agent already has.

  2. Taint tracking contains injection by…

    Provenance is enforceable where detection isn't: the agent reads freely, but untrusted-origin data can't cross into a dangerous sink.

  3. Fleet policy should live…

    A fleet is only as strong as its weakest config — policy has to be central and uniform, not per-endpoint.

  4. Human-approval breakpoints should apply to…

    Approving everything causes rubber-stamping; logging only catches incidents after the damage. Gate the consequential few before they execute.

  5. Compared to banning agentic browsers, a containment gateway…

    A ban creates shadow usage you can't see; a well-supported governed path pulls usage into a place you can actually contain and audit.

How you’d open this design in an interview

Before any boxes: agree what it must do, pin the qualities that shape everything, then build — naming each trade-off as you make it. The walkthrough above is that exact order.

What it must do

Agree on these before drawing a single box.

  • Contain the fleet: route every agentic-browser action through one gateway perimeter, not agent-by-agent.
  • One policy: define which sites, actions and data classes the whole fleet may touch, centrally.
  • Track taint: mark data derived from untrusted web content and forbid it from driving a sensitive action.
  • Gate actions: allowlist every attempted action and classify its risk.
  • Approve + audit: hold high-risk/tainted actions for a human, and log every action across the fleet.

The qualities that shape everything

Each one names the mechanism that buys it.

Consistent containment across thousands of agents
One Security Gateway every action flows through — the single place policy, taint tracking, action gating and audit are enforced and observed.
Security doesn’t depend on the least careful employee
A central Policy Engine defines one org-wide policy (permitted sites, actions, data classes) enforced identically for every agent.
Injection can’t drive a dangerous action
The Taint Tracker marks untrusted-web-derived data as tainted and policy forbids a tainted value from reaching a sensitive sink.
Routine actions stay frictionless, dangerous ones are caught
The Action Gate checks each attempted action against an allowlist and classifies its risk.
No approval fatigue, and full fleet visibility
Only high-risk/tainted actions are held for a human; every action and decision is appended to an immutable fleet audit trail.

The trade-offs you say out loud

Senior signal isn’t the boxes — it’s naming what you gave up and why it was the right price.

Contain the fleet over ban agentic browsers

A ban just converts visible usage into shadow usage you can’t see. A sanctioned, governed path pulls usage into a place you can actually contain and audit.

One central perimeter over securing each agent locally

Per-employee settings are inconsistent, unauditable, and only as strong as the least careful person. A single perimeter enforces policy uniformly across every agent.

Taint tracking (provenance) over scanning each page for injected instructions

You can’t reliably detect every injection, and blocking flagged pages breaks the agent’s job. Tracking where data came from is enforceable where detection isn’t.

Allowlist + risk classification over allow-everything with an after-the-fact log review

Reviewing a log doesn’t bound anything — an irreversible action is already done. High-risk actions need a decision before they execute.

Human approval for the consequential minority over a human approving every action

Approving everything causes rubber-stamping and the checkpoint becomes theater. Reserve scarce human attention for the actions that actually warrant it.

The answer, out loud

What a strong answer to “Design an Agentic Browser Security Gateway” sounds like, first question to last trade-off. It is about 7 minutes of talking; the whiteboard and the interviewer fill the rest of the 45. Read it aloud once, then close the page and give it yourself.

  1. 0–3 min

    Contain the fleet, don’t ban it

    I’d start by saying what this isn’t. It isn’t the safety story for one agent — a single computer-use agent already has its own injection defense and its own safety gate. The problem here is an enterprise where a meaningful fraction of employees run agentic browsers that read pages and take actions with their own authority, and IT’s official stance is don’t. That stance doesn’t survive contact with the org chart. People run them anyway, so the only thing the ban actually decides is whether the company watches this happen or finds out about it afterwards from somebody else. So I’d frame the requirement as containment rather than prohibition — let the fleet do its work, and bound what any agent in it can do with company data.

  2. 3–8 min

    One perimeter, because containment needs a choke point

    The first thing I’d draw is the gateway. Every agentic action flows through it instead of the agent touching the web and internal apps directly. The reason I’d reach for one perimeter over hardening each agent locally is that per-employee settings are inconsistent, unauditable, and only as strong as the least careful person. A single choke point gives me one place to enforce policy, follow data, gate actions and see everything. It’s also the prerequisite for the rest of the design: taint only means something if one component watches a whole sequence of actions rather than one request at a time.

    Built in step 2: Route the fleet through one gateway
  3. 8–13 min

    Policy is an organizational decision

    Then the gateway needs to know what the fleet may do, and I’d put that in a central policy engine — which sites, which actions, which data classes, decided once for the organization and enforced identically for every agent. Two alternatives I’d name and reject. Local config per agent means thousands of different, unauditable policies, and one lax setup is a hole in the whole perimeter. And letting the model judge what seems appropriate for each request is exactly what an injected page is trying to subvert — you don’t delegate policy to the thing you’re containing.

    Built in step 3: Enforce a central, org-wide policy
  4. 13–20 min

    Taint tracking is the mechanism that actually works

    The mechanism I’d spend most of my time on is taint tracking. An agent reads an untrusted page and later takes a sensitive action, and I need to stop the page from driving the action without blinding the agent. The obvious move is to scan pages for injected instructions and block the bad ones, and I’d argue against it on two grounds: detection has to be right on every page forever, and every page it does stop is a page the agent was hired to read. So instead of judging content, I’d track provenance. Mark every value derived from untrusted web content as tainted, follow it through the workflow, and let policy forbid a tainted value from driving a sensitive action. The agent still reads the whole web freely — what came from a page simply can’t cross into an exfiltration or a destructive action. I’m controlling the data flow, not the reading. I’d be straight about the edge of it too, because an interviewer will push here: this bounds what a page can make the agent do, and it says nothing at all about an agent simply being wrong on a task somebody legitimately gave it. It’s containment of untrusted input, not a correctness guarantee, and I’d rather name that line myself than have a perimeter trusted for more than it does.

    Built in step 4: Track taint from untrusted content
  5. 20–26 min

    Bound the actions, not just the data

    Taint bounds what data can drive an action; next I’d bound the actions themselves with an action gate. Every attempted action is checked against an allowlist and classified for risk. The routine majority passes automatically, and the sensitive or irreversible ones — a bulk delete, a fund transfer, a mass send — get flagged. The alternative of allowing everything and reviewing a log afterwards doesn’t bound anything, because by the time you read the log the irreversible action has already happened. The decision has to come before execution, and that’s what classifying at the perimeter buys.

    Built in step 5: Allowlist and classify every action
  6. 26–33 min

    A human on the few, a record of everything

    The last line is the human checkpoint. I’d hold only the high-risk and tainted actions for a person, with enough context to decide well, and let everything routine run automatically. Asking a human to approve every action sounds safer and isn’t — people rubber-stamp to keep working and the checkpoint becomes theater, which is precisely what the risk classification was for. Then every action and every decision across the fleet is appended to an immutable audit trail. That’s the part a security team has never had: this activity was invisible before, and now an incident is reconstructable.

    Built in step 6: Approval breakpoints and fleet audit
  7. 33–38 min

    The trade-off, and what I’d do with more time

    To close: one gateway, one central policy, taint tracking on anything derived from untrusted content, an allowlist with risk classification, a human on the consequential minority, and a full fleet audit trail. The trade-off running through all of it is friction against containment — every flow I mark tainted and every action I hold for a human buys safety and costs somebody their afternoon, and that cost is exactly what pushes usage back toward the ungoverned browser. With more time I’d go after the authority the agent is borrowing. Everything here bounds what an agent does at the perimeter, but underneath it the agent is still working inside the employee’s own session with exactly the reach that person has, so any gap in the perimeter has the blast radius of a full human account. I’d want the agent carrying its own scoped identity — narrower than the person it works for, and revocable on its own — so a misbehaving agent can be cut off without locking its owner out of their job.

What this teaches

Learn AI system design by building the enterprise perimeter that lets a whole fleet of agentic browsers run without letting them leak the company. Not the per-agent safety of a single computer-use agent (that design already covers injection defense and a safety gate) — this is the fleet-level containment layer: one gateway all agentic-browser traffic flows through, a central org-wide policy engine, taint tracking so data read from an untrusted web page can't silently drive a sensitive action, an action allowlist with risk classification, human-approval breakpoints for irreversible actions, and full fleet audit.

Key takeaways

  • Agentic browsers can't be banned effectively — the goal is fleet containment, so every action flows through one gateway perimeter.
  • A central Policy Engine defines one org-wide policy, enforced identically for every agent — security no longer depends on each employee's local config.
  • Taint tracking marks data from untrusted web content and forbids it from driving a sensitive action — controlling the data flow, not banning reading.
  • An action allowlist with risk classification passes routine actions automatically and flags the sensitive, irreversible ones.
  • Human-approval breakpoints catch only the consequential minority (no approval fatigue), and an immutable fleet-wide audit trail finally makes the activity visible.

Concepts covered

  • A perimeter for a fleet, not a leash on one agent
  • Agentic browsers act on the web, ungoverned
  • Route the fleet through one gateway
  • Enforce a central, org-wide policy
  • Track taint from untrusted content
  • Allowlist and classify every action
  • Approval breakpoints and fleet audit
RUN IT YOURSELF

The injection that a rewording walks through

A tiny agent reads web pages and calls tools, and one page it reads tells it to exfiltrate. The same seven injections — two on the blocklist, one cut across two retrieved spans, one that names the address before the verb, three merely reworded — run past a content detector and past taint tracking, and the file prints how many tool calls each one let through. Change SCAN_JOINED to True, hit Run, and watch the detector finally catch the split payload — and watch the bottom row show what that cost the agent.

HOW TO READ THE CODE — 5 IDEAS
  1. Every value carries the trust label of the span it came from, recorded when the agent reads, not reconstructed later from the wording (step 4).
  2. The detector stops 3 of 7 and the taint gate stops 7 of 7 — and the four it misses differ from the three it catches only in phrasing: wire funds is on the list, wire the pending invoices is not, and both move the same money.
  3. Put every phrasing in the table on the blocklist and the split row still executes: neither retrieved span holds the whole instruction, only the concatenation the model reads does. A per-span list reaches it exactly one way — by blocking send the customer, a fragment that is not the attack and that ordinary prose contains.
  4. Taint is not "block everything": all seven page-directed browser.read calls still run, because reading the web is not a sensitive sink (step 5). The agent is contained, not blinded.
  5. The honest cost is the last legitimate row — a task the user really asked for, refused because the recipient was read off an untrusted page. That refusal is stated in advance, which the detector’s misses never are (steps 2 and 6).
CPython · WebAssembly
built so a tainted instruction from a web page is stopped at the perimeter, not obeyed by one agent among thousands — make the calls, let a page hijack an action, and watch the gateway hold the line.
Finished this one? 0 / 65 AI System Designs done
NextDesign a Conversational AI Closest AI system design to this one

Explore the topic

See this alongside everything else on the same subject — handbooks, system designs, challenges and tools, in one place.

More AI System Designs