# Why I built my own browser for AI coding agents in 2026

> Source: <https://dev.to/hronom/why-i-built-my-own-browser-for-ai-coding-agents-in-2026-m3i>
> Published: 2026-10-24 16:55:13+00:00

At my day job we needed manual testing for our platform: acting like a real user under different conditions, such as a slow network, different screen sizes, and signed-in flows. It is 2026, so the obvious idea was to let an AI agent walk through the site and check it instead of a person.

We looked at the existing tools. There are many, and none of them fit what we needed. So, oddly enough for 2026, I ended up writing my own app: a separate, visible browser that an AI agent drives. That became [Hronaut](https://hronaut.dev/).

This post covers what the existing tools were missing, how the browser is built, and what I learned along the way.

## 
  
  
  What existing tools were missing

We wanted a browser where the agent checks the site like a real user, while a human stays in control. That gave us a list of requirements:

- 
**Visible.** A person sees what the agent is doing and can step in.
- 
**The browser outlives the agent.** If the agent session drops or restarts, the tabs and sign-ins stay.
- 
**Isolated.** Each task gets its own profile, and nothing touches the developer's personal browser.
- 
**A human signs in.** The agent should never know passwords, but it should be able to continue in a signed-in session.
- 
**Local.** Test localhost and internal staging without moving anything to the cloud.
- 
**Any agent.** Claude Code, Codex, Cursor, anything that speaks MCP.

Each existing option covered some of these, never all at once. Playwright MCP is a great automation tool, but its browser is designed for a robot, not for working next to a human. Chrome extensions hand the agent your real browser with all your personal accounts. Cloud browsers are great for scale, but they can't simply reach a local dev server.

On our platform, this got very concrete. With Playwright MCP, the browser closed together with the agent session, so after every restart we signed in again and reopened the pages under test. When the agent ran in a browser nobody was watching, the only way to know what it had done was to read the logs afterwards. Sometimes it reported "done" while it was actually stuck on the login page or looking at an empty page. Trying a Chrome extension meant handing the agent my real work browser, with my email and personal accounts, and I wasn't willing to do that. And a cloud browser couldn't open localhost or our internal staging environment at all.

## 
  
  
  Design principles

1. 
**The browser is always visible.** The agent works in a normal Chromium window. You watch it live instead of reading a report afterwards.
2. 
**The human outranks the agent.** One click pauses it; you can take over and hand control back. When the agent needs a person (to sign in, pass a check, or confirm an action), Hronaut sends a notification and marks the tab.
3. 
**The browser doesn't depend on the agent session.** The agent disconnects, the browser keeps running. The agent comes back and picks up the same tabs.
4. 
**One task, one workspace.** Its own cookies, storage, and sign-ins. Several agents can work in parallel without getting in each other's way.
5. 
**Passwords are not for the agent.** A human signs in, and everything the agent reads from the page goes through a filter that hides passwords, API keys, session identifiers, and signed URLs.
6. 
**Bring your own agent and model.** Hronaut is only the browser, and it runs on your machine, not in the cloud.

## 
  
  
  How it works

Hronaut is an Electron desktop app for Windows, macOS, and Linux. Inside it runs an MCP server (Streamable HTTP transport) that listens only on `127.0.0.1` (port 47812 by default). The agent connects to it like any other MCP server and gets tools to open a tab, navigate, click, type, read the page, and take a screenshot.

A few decisions I'm happy with:

- 
**Workspaces with a stable ID.** The agent creates a workspace and gets a private resume key. After a disconnect or restart it returns to its own workspace and can't see anyone else's.
- 
**A copy instead of access to the original.** A person signs in once, and the agent works in a copy with those cookies and localStorage. The original stays untouched, even when the agent has no direct access to it.
- 
**Exclusive write access.** Only one client writes to a workspace at a time; anyone can read. Two agents won't click the same button at once.
- 
**Observer workspaces.** A clean, signed-out profile tied to one site, where the agent can only look. Handy for checking what a page looks like to a stranger.
- 
**Page quality checks.** The agent can ask whether the page has real content or is an empty shell, a login wall, a soft 404, or someone else's domain. Fewer false "done" reports.
- 
**Token auth on by default.** The MCP endpoint requires a token, stored in a file only the owner can read. Setup instructions in the app read the token from that file, so it never lands in an agent's config or in the chat.

## 
  
  
  Try it

1. Download Hronaut for your OS from the [releases page](https://github.com/hronaut/hronaut/releases/latest) and start it.
2. Connect your agent:
  - Claude Code: run `/plugin marketplace add hronaut/hronaut` , then`/plugin install hronaut@hronaut` . The plugin reads the token from Hronaut's token file on each connect.
  - Codex and other clients: copy the ready-made setup from the Home page inside Hronaut; it already includes the token setting.
3. Check the connection with `/mcp` in your agent, then ask: "Create a Hronaut workspace called first-check, open[https://example.com](https://example.com) in it, and tell me the page title."

## 
  
  
  Limitations

- 
**Paid after the trial.** The first 10 days are free with no card, counted from the agent's first call; after that it needs a subscription. If free Playwright MCP covers your automated tests without sign-ins, you probably don't need Hronaut.
- 
**Not open source.** The code is readable on[GitHub](https://github.com/hronaut/hronaut) , but under its own license.
- 
**Local only.** The agent has to run on the same machine. For hundreds of browsers on servers you need a cloud service.
- 
**Bring your own agent and model.** Hronaut doesn't write tests by itself.
- 
**Builds aren't code-signed yet.** Windows SmartScreen or macOS Gatekeeper may warn on install. Hashes and GitHub build attestations are published so you can verify the download.

## 
  
  
  Wrapping up

My main takeaway: an AI agent in a browser needs more than access to pages. It needs a person nearby who can see what's happening and step in. That's what Hronaut is for.

How do you give your agent a browser? Do you trust it with your own Chrome, keep a separate profile, or not let it in at all? I'd love to hear your stories and criticism in the comments, and I'll answer questions about how Hronaut works myself.

*Disclosure: I'm the developer of Hronaut. This article was written with the help of AI.*
