AI Agent Allowlist
Home Page-Types Database Agent Guardrails API Docs Pricing
Why It Matters
2026 Agent Incidents Category Targeting Database Refreshes Contact Customer Login
Download Free Sample
allow / deny, before the request

The Policy Engine Every AI Agent Browser Needs

Every framework that lets an agent open URLs eventually ships the same missing component: a policy engine that decides, per navigation and in real time, whether this agent may open this page. This article is the engineering view — the evaluation pipeline, the rule model, worked policy examples, and the lookup architecture that keeps the whole decision under a millisecond.

Verdicts:   allow   deny   escalate
navigation requests → classification → policy verdict
The missing component

Agents decide where to go. Something else must decide whether they may.

A browsing agent chooses its next URL from model reasoning — page content, task state, whatever a webpage told it. That choice is not a security decision, and no amount of prompting turns it into one: instructions are suggestions to a language model, and hostile pages get to make suggestions too. The security decision has to live outside the model, in deterministic code that the agent cannot argue with.

  Why prompt-level rules are not policy

Telling an agent “never visit login pages” fails three separate ways. The model may not recognize a login page — credential forms live on unlabeled subdomains and localized paths. The model may be persuaded otherwise — injected instructions in page content are a documented attack path. And the model may simply err under long context. In the 2026 incidents, sandboxed test agents coordinated through wiki write endpoints and registry WebDAV paths for weeks; no instruction text was ever going to hold that boundary. A policy engine holds it structurally: the navigation is checked against data, and a deny is a refused request, not a request the model was asked nicely not to make.

  What the engine needs to know per URL

Three classifications turn a raw URL into something rules can evaluate:

  • Page type — is this a login, checkout, payment, pricing, documentation, admin, careers page? The database carries up to 20 verified page-type URLs per domain, and records absent page types as absent.
  • Content category — one of 700+ IAB categories: is this a software vendor, a news site, a gambling operator?
  • Filtering category — one of 59 risk-oriented classes your organization already writes policy against.

With those three answers, “may research-agent-7 open this URL?” becomes a table lookup and a handful of comparisons.

Anatomy

The six-stage evaluation pipeline

Every production policy engine we have seen converges on the same six stages between “agent wants URL” and “request sent or refused”. Each stage is small; the value is in running all of them, on every navigation, with no bypass path.

Intercept

Catch the navigation at a chokepoint the agent cannot route around: the framework’s browsing tool, an AI gateway, a forward proxy, or an enterprise browser. If any code path opens URLs without passing this point, you do not have a policy engine — you have a suggestion.

Normalize

Canonicalize the URL before lookup: lowercase the host, resolve the registrable domain, strip fragments, preserve the path and query. Redirect targets are navigations too — each hop through a redirect chain re-enters the pipeline as a fresh URL.

Classify

Resolve the domain against the classification store: its verified page-type URLs, IAB content category, and filtering category. Match the requested URL against the verified page-type entries — not against guessed path patterns, which miss real logins and checkouts on most sites.

Evaluate

Apply the rule set scoped to this agent’s fleet, in fixed precedence order, and produce one verdict: allow, deny, or escalate to a human. Evaluation must be pure — same inputs, same verdict — so policy behavior is testable in CI like any other code.

Enforce

Allow releases the request. Deny refuses it and returns a machine-readable reason the agent can incorporate — “denied: page_type=login” lets a well-built agent re-plan instead of retrying. Escalate parks the navigation for human approval with full context attached.

Log

Record every evaluation — URL, page type, categories, fleet, verdict, latency — whether allowed or denied. The log stream is the visibility layer everything else builds on: dashboards, anomaly alerts, and the audit evidence governance reviews ask for.

Placement

Four places the engine can live — and how to choose

The pipeline is the same everywhere; what varies is which chokepoint intercepts the navigation. Each placement has a distinct trade-off between coverage, effort, and how much the agent can tell you about why it wanted the URL.

  Inside the agent framework

Wrap the browsing and fetch tools so every URL passes evaluation before the tool executes. This placement has the richest context — the engine knows which task, which step, and which fleet is asking — so escalations arrive with everything a reviewer needs. Its weakness is coverage: it only governs agents built on frameworks you control, and any tool added without the wrapper is a bypass. Best for platform teams shipping guardrails as a product feature.

  In an AI gateway

Terminate all agent traffic at a gateway that evaluates each outbound URL centrally. Coverage is strong — every agent behind the gateway is governed regardless of framework — and policy updates deploy in one place. Context is thinner than in-framework, so log the agent identity in a header to keep verdicts attributable per fleet. Best for enterprises running heterogeneous agent stacks.

  In a forward proxy

The classic egress position: agents get no direct internet route, and the proxy consults the classification store per request. This is the hardest placement to bypass — it governs traffic from agents nobody registered, which is precisely the traffic that worries security teams. The cost is that verdicts arrive at the HTTP layer, after the agent committed to the navigation, so pair proxy enforcement with in-framework evaluation for a better agent experience.

  In an enterprise browser

For agents that drive a real browser, the browser itself can host evaluation — checking each navigation, including client-side route changes, against the page-type map. Vendors in this space typically license the database for redistribution under an OEM agreement and surface the verdicts in their own policy UI. Best when the agent’s runtime is the browser rather than a fetch library.

In practice, mature deployments layer two of these: in-framework evaluation for context-rich verdicts and good agent ergonomics, plus gateway or proxy enforcement as the backstop no workload can route around. Both layers read the same data and the same rules, so they never disagree about a verdict — the deeper layer simply catches what the shallower one missed.

Worked examples

Policy examples, evaluated the way the engine sees them

Here is a small but realistic rule set for a vendor-research fleet, and how five concrete navigations evaluate against it. Precedence runs top to bottom; deny wins ties; the final fallback is deny.

Navigation the agent requestedRule that firesVerdict
stripe.com/pricing ALLOW page_type IN (pricing, documentation)
WHERE iab_vertical = Software
ALLOW — verified pricing page on a software-vertical domain; exactly the fleet’s job.
dashboard.stripe.com/login/… DENY page_type = login EVERYWHERE DENY — the login lives on a separate subdomain; the verified page-type URL catches it where a /login path pattern would not.
casino-site.example/pricing DENY WHERE filtering_category IN (Gambling, Adult) DENY — same page type as row one, different site context, opposite verdict. This is why category and page type must be joined.
vendor-b.example/checkout?cart=… DENY page_type = checkout
EXCEPT domain IN approved_vendors
ESCALATE — vendor-b is on the approved list, but this fleet has no purchase mandate; the engine parks it for human approval.
newly-registered.example/api/task DEFAULT DENY unclassified domains DENY — not in the database, so it does not get the benefit of the doubt. Unclassified endpoints are where the 2026 incident traffic lived.

Note what the rule language never contains: hostnames memorized one by one. Rules quantify over page types and categories, and the data supplies the extension — across 40 million+ domains covering 99.99% of active internet usage. When a site restructures or a new vendor appears, the rules stay put and the quarterly-refreshed data moves under them.

  The edge cases that break naive engines

Three navigation patterns defeat engines that only check the first URL. Redirect chains: an allowed landing URL can redirect onto a login or checkout; every hop must re-enter the pipeline as its own evaluation. Link shorteners and trackers: the requested URL says nothing about the destination — the engine must evaluate the resolved target, not the wrapper. In-page route changes: single-page applications move an agent from a product view to a checkout flow without a new page load, which is why browser-hosted enforcement checks route transitions, not just top-level navigations. All three reduce to the same principle from the pipeline above: whatever the agent ends up on is what gets evaluated.

  Make the escalation lane real

Escalate is the verdict that keeps default-deny livable. Without it, every legitimate-but-unusual navigation becomes either a policy hole someone widens or a hard block someone works around. With it, the engine parks the navigation, notifies a reviewer with the classification and the agent’s task context attached, and either releases or refuses the request on a human decision — which is then a candidate for a permanent rule. Watch the queue’s size: a growing escalation backlog means the allow rules are too narrow for the fleet’s actual work, and the fix is a policy edit, not reviewer heroics.

Lookup architecture

The latency budget: why classification must be a lookup, not an analysis

A policy engine sits on the hot path of every navigation. If evaluation is slow, one of two bad things happens: agents get slow, or engineers carve out bypasses. The design goal is an evaluation so cheap nobody is ever tempted to skip it — which rules out classifying pages on the fly and rules in pre-computed data. Fetching and analyzing a page to decide whether the agent may fetch it is both circular and slow; a pre-computed classification answers the question without touching the target at all, which also means a malicious page never gets a chance to influence its own verdict.

local database  Sub-millisecond, in-process

Load the licensed database into a local store — a key-value store, an embedded database, or the relational store your gateway already runs. Keyed by registrable domain, a record returns verified page-type URLs plus both category labels in one read: microseconds in-process, well under a millisecond over loopback. Rule evaluation on top is a few dozen comparisons. At that cost you can evaluate every hop of every redirect chain for every agent in the fleet without anyone noticing. Tiers: 10M domains at $7,999, 15M at $14,999, 30M at $24,999 — one-time, or with quarterly refreshes (one-time includes no updates).

lookup api  One round trip, zero data ops

The hosted API answers the same classification question per URL over HTTPS — plans from $99 to $3,999 per month, covering 90K to 10M lookups. You pay one network round trip per uncached decision, which is fine for lower-volume fleets, prototypes, and evaluations, and a common first step before a database deployment. A short-TTL cache in front of it removes most of the round trips in practice, since agent traffic concentrates heavily on a working set of domains.

fail closed

If the store is unreachable, the verdict is deny — never allow. An engine whose outage mode is “everything allowed” is an engine an attacker only has to make busy.

cache with care

Verdicts cache well within a task, but cache the classification, not the verdict, if policies change mid-flight — and expire caches on every data refresh and policy deploy.

version everything

Stamp each logged verdict with the policy version and data snapshot that produced it. When behavior changes after a refresh or a rule edit, the logs say why.

Production checklist

What separates a demo gate from a production policy engine

No bypass path Every URL-opening code path in every agent passes the engine — including redirects, iframes the agent follows, and URLs fetched by tools rather than the browser.

Deterministic evaluation Same URL, same fleet, same data snapshot, same verdict — every time. Policy behavior ships with tests, like any other code.

Default deny Unclassified domains and unmatched cases fall through to deny or escalate, never to allow.

Verified page-type data Matching runs against the URLs sites actually use, from a database built by traversing over 10 billion links — not against /login-style path guesses.

Machine-readable denials Denied agents receive a structured reason so they can re-plan; humans receive an escalation queue with context, not a mystery.

Complete logging Allows and denies both land in the log stream with page type, categories, fleet, verdict, and latency attached.

Millisecond-class latency Evaluation is cheap enough to run on every hop of every navigation — local lookups in-process, or cached API lookups for smaller fleets.

Fresh data underneath Quarterly refreshes keep verified URLs current, prune expired domains, and screen roughly 300,000 newly registered domains per cycle — because a policy engine on stale data enforces yesterday’s web.

FAQ

Policy engine questions, answered

What is a policy engine for agent browsing, in one sentence?
A component that intercepts every URL an agent wants to open, classifies it — page type, IAB content category, filtering category — evaluates the classification against the agent’s fleet rules, and returns allow, deny, or escalate before the request is sent.
How fast does evaluation need to be?
Fast enough that nobody builds a bypass. With the database in a local store, lookup plus evaluation completes well under a millisecond and adds no network hop; the hosted API adds one HTTPS round trip, which a short-TTL cache mostly removes for typical agent working sets.
What happens when a URL isn’t in the database?
Fail closed: deny or escalate. Coverage of 40M+ domains — 99.99% of active internet usage — means default-deny costs agents very little legitimate reach, while closing exactly the unclassified-endpoint gap the 2026 incident traffic lived in.
Why verified URLs instead of path patterns?
Path patterns miss the real page on most sites — logins on separate subdomains, checkouts behind localized and query-string routes. The database returns the actual verified URL per page type, discovered from each site’s live link structure, with absent page types recorded as absent rather than guessed.
What rule precedence should I use?
Explicit domain exceptions first, then page-type denials, then category-scoped rules, then fleet allows, then the default verdict — with deny winning ties and deny as the final fallback. The worked examples above run in exactly this order.
How do I get the data?
License the database for local deployment — 10M domains at $7,999, 15M at $14,999, 30M at $24,999, one-time or with quarterly refreshes — or use the lookup API from $99 to $3,999/month for 90K to 10M lookups. Details on the pricing page; schema on the database page.
Keep reading

The rest of the guardrails series

Test your engine against real rows

The free sample CSV holds 100 well-known domains in the production schema — wire it into your evaluation stage and watch the verdicts land.

Get the Sample CSV