# Dornick > Dornick is the open-source TypeScript SDK for building AI agents that run inside the browser — and the only runtime that speaks both sides of WebMCP. It calls your page's tools, publishes its own back, and ships the polyfill. Virtual filesystem, tool loop, hooks, skills, multi-agent handoffs, MCP. No server runtime required. Dornick lets you drop a script tag (or import the SDK) and turn any web page into a venue for a real AI agent: it sees the live DOM as a virtual filesystem, calls real tools, runs skills, hands off between sub-agents, and renders a Shadow-DOM chat UI — all without a server runtime. ## Sections & hubs - [Features](https://dornick.neullabs.com/features) — the seven primitives that make Dornick an agent, not a chatbot widget - [Use cases](https://dornick.neullabs.com/use-cases) — nine canonical shapes teams ship with Dornick - [Demos](https://dornick.neullabs.com/demos) — five live BYOK demos, run in your browser with your own key - [Compare](https://dornick.neullabs.com/compare) — Dornick head-to-head with CopilotKit, Stagehand, Typeform, Vercel AI SDK, PageAgent, MCP-B - [Providers](https://dornick.neullabs.com/providers) — five LLM providers behind one agent loop - [Blog](https://dornick.neullabs.com/blog) — deep-dives on building in-browser AI agents ## WebMCP Dornick is the only runtime that speaks both sides of the W3C WebMCP standard: it calls the page's `document.modelContext` tools as real agent tools, publishes its own back so outside agents can drive the page, and ships a zero-dependency polyfill so both work today. A polyfilled page is reachable by extensions and page script, but NOT by the browser's own built-in agent — that requires native WebMCP via Chrome's origin trial (149–156). - [WebMCP, both sides](https://dornick.neullabs.com/features/webmcp) — consume, publish, polyfill, and the declarative
layer - [Agent-ready page](https://dornick.neullabs.com/use-cases/agent-ready-page) — make your page callable by agents - [Dornick vs MCP-B](https://dornick.neullabs.com/compare/mcp-b) — the polyfill toolkit vs the in-page agent ## Get started - [Quickstart](https://dornick.neullabs.com/quickstart) — first agent in four steps (add, target, key, attach) - [Install](https://dornick.neullabs.com/install) — script tag, npm, or React in three modes - [How it works](https://dornick.neullabs.com/how-it-works) — seven primitives in 1500 words - [Why Dornick](https://dornick.neullabs.com/why-dornick) — the architectural bet - [Glossary](https://dornick.neullabs.com/glossary) — every Dornick term defined - [FAQ](https://dornick.neullabs.com/faq) — twelve questions, plain answers - [Security](https://dornick.neullabs.com/security) — privacy, BYOK, capability gates - [About](https://dornick.neullabs.com/about) — a Neul Labs open-source project by Dipankar Sarkar - [Contact](https://dornick.neullabs.com/contact) — get in touch with the Neul Labs team ## Features - [Virtual filesystem](https://dornick.neullabs.com/features/vfs) — the signature abstraction - [Hooks](https://dornick.neullabs.com/features/hooks) — 19 lifecycle events - [Skills](https://dornick.neullabs.com/features/skills) — 8 built-in capability bundles - [Multi-agent](https://dornick.neullabs.com/features/multi-agent) — handoffs + triggers - [MCP](https://dornick.neullabs.com/features/mcp) — client + server - [Parsers](https://dornick.neullabs.com/features/parsers) — browser-side file parsing ## Live demos - [Conversational signup](https://dornick.neullabs.com/demos/signup-form) — a 5-field signup form replaced by a chat that asks one question at a time - [In-page copilot](https://dornick.neullabs.com/demos/page-companion) — Dornick mounted on a mock pricing page, reading /page/dom.html live - [Browser-side PDF Q&A](https://dornick.neullabs.com/demos/pdf-qna) — drop a PDF, ask a question; pdf.js parses it in the tab, raw bytes never leave - [Extract a table → CSV](https://dornick.neullabs.com/demos/extract-table) — one-shot primitive that reads a live HTML table and returns typed rows - [Multi-agent checkout rescue](https://dornick.neullabs.com/demos/checkout-rescue) — an exit-intent rescue agent takes over the checkout with a save-the-sale playbook ## Providers - [Anthropic Claude](https://dornick.neullabs.com/providers/anthropic) (default) - [OpenAI](https://dornick.neullabs.com/providers/openai) - [Groq](https://dornick.neullabs.com/providers/groq) - [OpenRouter](https://dornick.neullabs.com/providers/openrouter) - [Ollama (local)](https://dornick.neullabs.com/providers/ollama) ## Use cases - [Make your page agent-ready with WebMCP](https://dornick.neullabs.com/use-cases/agent-ready-page) — Expose your page's real functionality as WebMCP tools so AI agents call functions instead of scraping your DOM — and let Dornick generate most of that surface from config you already wrote. - [Browser extension with per-origin agents](https://dornick.neullabs.com/use-cases/browser-extension) — Manifest V3 reference scaffold. One extension, a different Dornick agent per SaaS — Zendesk, Salesforce, HubSpot, GitHub. Same-origin DOM access, content script injection. - [Checkout rescue with multi-agent handoff](https://dornick.neullabs.com/use-cases/checkout-rescue) — A stalled checkout triggers an exit-intent rescue agent with a different persona, empowered to offer a small discount and instructed to keep the conversation short. The user sees one chat. - [Extract any table → CSV](https://dornick.neullabs.com/use-cases/extract-anywhere) — Point Dornick at any HTML table — your CRM, an admin grid, a wiki, a third-party SaaS — and have it return clean CSV. Universal table extractor via the dornick.extract() primitive. - [In-page copilot for your app](https://dornick.neullabs.com/use-cases/in-page-copilot) — An AI agent that reads your live DOM and answers questions about whatever the user is looking at. No state-plumbing, no useCopilotReadable, no glue code — Dornick reads /page/dom.html natively. - [Expose your page as an MCP server](https://dornick.neullabs.com/use-cases/mcp-server) — Turn Dornick into an MCP server so Claude Desktop, Cursor, or Continue can read your page directly. Your VFS and primitives become resources and tools the external agent can call. - [Client-side PDF Q&A](https://dornick.neullabs.com/use-cases/pdf-qna) — User drags a PDF, asks questions, gets answers — all in the browser. No upload. No server. No 700 MB Docker image for pdf-processing. Compliance and privacy teams love it. - [Drop a resume, auto-fill the application](https://dornick.neullabs.com/use-cases/resume-autofill) — User drops a PDF or DOCX resume. Dornick parses it client-side, runs the resume-intake skill, and fills the application form's name, email, experience, education, and skills fields automatically. - [Script-tag signup forms](https://dornick.neullabs.com/use-cases/script-tag-signup) — Replace a long signup form with a conversational AI agent in 10 seconds. Drop the script tag, mark up your form with data-dornick, and the agent fills the inputs as the user types. ## How Dornick compares - [vs MCP-B](https://dornick.neullabs.com/compare/mcp-b) — MCP-B is the WebMCP plumbing — polyfill, transports, relay, extension — that connects your page to agents elsewhere. Dornick is the agent, in the page. Both speak the standard. - [vs CopilotKit](https://dornick.neullabs.com/compare/copilotkit) — CopilotKit gives you React components for AI copilots; Dornick gives you a browser agent that reads your live DOM. Same neighborhood, different bets. Here's when each wins. - [vs Stagehand](https://dornick.neullabs.com/compare/stagehand) — Stagehand automates a browser from the server with act/extract/observe primitives. Dornick is the same primitives, on the user's browser, with their consent. Different problems. - [vs Vercel AI SDK](https://dornick.neullabs.com/compare/vercel-ai-sdk) — Vercel AI SDK is plumbing for streaming LLM responses in Next.js. Dornick is an agent runtime for your page. They're complementary — many Dornick apps use the Vercel AI SDK underneath for the proxy. - [vs Typeform](https://dornick.neullabs.com/compare/typeform) — Typeform is a hosted form-builder SaaS. Dornick is an in-page agent SDK that drops into your own pages. Comparing them is comparing a SaaS to a runtime — but they solve the same problem. - [vs PageAgent](https://dornick.neullabs.com/compare/pageagent) — PageAgent and Dornick both put an agent on the page. The difference is abstractions: Dornick exposes a VFS, hooks, skills, and multi-agent; PageAgent is leaner but less primitive-rich. ## Articles - [WebMCP has two sides, and everyone is building one](https://dornick.neullabs.com/blog/webmcp-both-sides) — WebMCP is shipping in Chrome and default-on at Shopify. But every implementation so far picks a side — publish tools, or consume them. Here's why both matters, and what it takes. - [Why we built Dornick: forms aren't the bottleneck, agents are](https://dornick.neullabs.com/blog/why-we-built-dornick) — We started with a server-side conversational form filler. We ripped it all out and rebuilt as a browser-first agent SDK. The pivot, the bet, and where AI actually lives on the web. - [The agent VFS pattern: give the LLM a workspace, not a prompt](https://dornick.neullabs.com/blog/agent-vfs-pattern) — Why putting everything in the system prompt is the wrong abstraction for modern agents, and how a virtual filesystem solves the problems prompt-stuffing creates. Architectural deep-dive. - [Browser-side PDF Q&A without uploading the file](https://dornick.neullabs.com/blog/browser-side-pdf-qna) — Why we stopped uploading PDFs to servers for AI processing, what the privacy story looks like when files stay in the browser, and how Dornick's parsers do it in 1 KB of glue + lazy WASM. - [Multi-agent handoffs: rescuing a stalled checkout](https://dornick.neullabs.com/blog/multi-agent-checkout-rescue) — How to build a save-the-sale agent that swaps personas mid-flow on exit intent. The patterns, the triggers, the anti-patterns. Worked example with code. - [Dornick vs CopilotKit vs Stagehand — picking your in-browser agent stack](https://dornick.neullabs.com/blog/in-browser-agent-stack) — An honest decision matrix for three popular in-browser AI agent libraries. Different problems, different trade-offs, different bets — and what to pick by use case. - [Building a Chrome extension with per-origin AI agents](https://dornick.neullabs.com/blog/chrome-extension-per-origin-agents) — One Manifest V3 extension, a different Dornick agent on every SaaS — Zendesk, Salesforce, HubSpot, GitHub. The scaffold, the patterns, what passes Chrome Web Store review, and what doesn't. - [Streaming Claude responses over a 1 KB Node proxy](https://dornick.neullabs.com/blog/streaming-llm-proxy) — Why we ship @dornick/server — a minimal SSE proxy that hides your API key without becoming a backend. The streaming-from-zero pattern, the trade-offs, and when it's actually necessary. - [Turning your page into an MCP server for Claude Desktop](https://dornick.neullabs.com/blog/your-page-as-mcp-server) — Expose your live browser tab as a Model Context Protocol server so Claude Desktop, Cursor, or Continue can read it directly. The pattern, the code, and the surprisingly useful workflows it unlocks. - [Shadow DOM, agent chat, and not fighting your CSS](https://dornick.neullabs.com/blog/llms-shouldnt-fight-css) — Why Dornick renders the chat UI into a Shadow DOM, how it stays style-isolated against arbitrary host CSS, and the surprising number of edge cases that this design solves for free. ## Raw markdown Every blog post is available as raw markdown for AI ingestion at `https://dornick.neullabs.com/raw/.md`. Example: - https://dornick.neullabs.com/raw/webmcp-both-sides.md - https://dornick.neullabs.com/raw/why-we-built-dornick.md - https://dornick.neullabs.com/raw/agent-vfs-pattern.md ## Reference - Open-source repo: https://github.com/neul-labs/dornick - Technical docs: https://docs.neullabs.com/dornick - npm @dornick/core: https://www.npmjs.com/package/@dornick/core - License: MIT - Authored by: Dipankar Sarkar, Neul Labs ## Full content For one-fetch ingestion of all canonical content: https://dornick.neullabs.com/llms-full.txt