Blog
Dispatches from the browser-agent frontier.
Architectural deep-dives, comparisons, and patterns we keep coming back to. Subscribe via RSS.
WebMCP has two sides, and everyone is building one
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.
narrativeWhy we built Dornick: forms aren't the bottleneck, agents are
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.
cornerstoneThe agent VFS pattern: give the LLM a workspace, not a prompt
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.
supportingBrowser-side PDF Q&A without uploading the file
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.
supportingMulti-agent handoffs: rescuing a stalled checkout
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.
narrativeDornick vs CopilotKit vs Stagehand — picking your 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.
technicalBuilding a Chrome extension with per-origin AI 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.
technicalStreaming Claude responses over a 1 KB Node 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.
technicalTurning your page into an MCP server for Claude Desktop
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.
technicalShadow DOM, agent chat, and not fighting your 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.
Ship an agent-driven flow this afternoon.
Install Dornick, paste a config, and your form turns into an agent that fills its own inputs.