Veil decomposes webpages into Behavior Graphs — structured maps of interactive elements, their events, API calls, and semantic purpose. So your AI agent can see, understand, and act on the web.
Current approaches to web automation are built for humans, not language models. LLMs need structure, not pixels.
A single page screenshot costs 50K+ tokens to process. Veil gives the LLM 40 lines of structured, actionable text instead.
Thousands of nested divs, CSS classes, invisible elements, tracking pixels. Veil filters to 50–300 meaningful behavior nodes.
CSS selectors are fragile — one redesign and they're gone. Veil uses semantic IDs like button-log-in that survive changes.
Every webpage passes through Veil's decomposition pipeline. Humans see rendered pixels — LLMs receive structured behavior.
From raw CDP connection to semantic inference — Veil handles the entire web understanding stack so your agent doesn't have to.
Every webpage passes through five stages — from raw accessibility tree to semantically labeled behavior graph. Each stage enriches the graph with deeper understanding.
Works with Claude Desktop, Cursor, Windsurf, or any MCP-compatible host. 9 structured tools out of the box — no CLI needed.
Multi-step workflows that survive across calls. Login flows, form filling, navigation — cookies, localStorage, and DOM state all persist.
Forget opaque node IDs. Veil generates semantic display IDs that LLMs can reason about and reference naturally in tool calls.
button-log-in
textbox-username
link-forgot-password
checkbox-remember-me
MutationWatcher detects DOM changes — AJAX loads, SPA navigations, animations — and patches the graph incrementally. No full rebuilds.
No Playwright. No Puppeteer. Direct Chrome DevTools Protocol for fine-grained control over every browser capability. Zero abstraction overhead.
Veil gives AI agents structured web understanding. Here's what becomes possible.
Give Claude, GPT, or custom agents the ability to browse, understand, and interact with any website. Login to accounts, fill forms, navigate multi-step flows — through structured behavior graphs, not fragile selectors or expensive screenshots.
Write tests against behavior, not implementation. Assert that "the login button submits credentials to the auth API" — not that #btn-3f2a exists. Tests survive complete redesigns because they test what things do, not where they are.
Automatically map which UI elements trigger which API endpoints. Veil extracts request/response shapes, URL patterns like /users/{id}, and status codes — without reading a single line of source code.
Understand how any website works from the outside. What forms submit where, how components are grouped, what frameworks are used. Extract structured data through behavior graphs instead of brittle CSS selectors.
Compare behavior graphs across page versions to detect functional changes. A button that used to call POST /api/v1/login now calls POST /api/v2/auth? Veil catches it — no visual diffing needed.
Discover common interaction patterns across websites — login flows, search behaviors, checkout processes. Behavior graphs normalize different implementations into comparable semantic structures.
Existing tools give AI agents raw DOM or pixels. Veil gives them structured understanding of what a page does — not just what it looks like.
| Capability | Playwright / Puppeteer | browser-use / Stagehand | Veil |
|---|---|---|---|
| What AI receives | Raw DOM (3K+ nodes) | Annotated screenshots | Behavior Graph (50-300 nodes) |
| Token cost per page | ~50K tokens | ~50K tokens (image) | ~800 tokens (compact text) |
| Knows what buttons do | No | No | Yes — event handlers classified |
| Maps UI → API calls | No | No | Yes — stack trace correlation |
| React Fiber traversal | No | No | Yes — finds real handlers |
| Semantic node IDs | CSS selectors | XY coordinates | button-log-in |
| Session persistence | Per-script only | Limited | Background daemon |
| API shape extraction | No | No | {email: string, password: string} |
| Protocol | Abstracted CDP | Playwright wrapper | Raw CDP (zero overhead) |
| MCP native | No | Some | 9 tools, stdio transport |
Compact text format vs equivalent JSON. LLM context windows go further.
Skips Blink rendering (layout, paint). Only runs JS + Accessibility pipeline.
AXTree → Events → Network → Components → Semantics. Each stage adds meaning.
Explicit React Fiber traversal. Vue/Angular detection. Vanilla heuristics for everything else.
"browser-use migrated from Playwright to raw CDP for exactly these reasons — Playwright's Node.js relay adds a network hop on every CDP call, prohibitive when making thousands of calls for event listeners, accessibility tree queries, and network monitoring."
— Project Veil Architecture Decision Record
MCP server for AI hosts, CLI for scripting, TypeScript SDK for embedding. Pick what fits your workflow.
Install the CLI, open a page, and see the behavior graph.