Durable browser
Restart the agent, keep the session
The desktop application owns Chromium and its profile. Closing one OpenCode session does not intentionally close the browser or discard its local state.
OpenCode browser MCP
Hronaut owns a separate visible Chromium browser. OpenCode connects over loopback MCP, while tabs, sign-ins, cookies, storage, windows, and named workspaces remain available between agent sessions.
Hronaut is an independent project and is not affiliated with or endorsed by the OpenCode team.
Local MCP endpoint
http://127.0.0.1:47812/mcpStart Hronaut once. OpenCode can disconnect, restart, or switch projects without owning the browser process. The endpoint listens on loopback rather than exposing a hosted browser.
The ownership difference
Persistent sessions are not unique to Hronaut. Choose it when you want a separate desktop browser with durable state, visible human control, and named profiles that remain available as coding-agent clients change.
Durable browser
The desktop application owns Chromium and its profile. Closing one OpenCode session does not intentionally close the browser or discard its local state.
Human control
Watch browser actions, pause MCP before a sensitive step, sign in yourself, then resume the agent inside the same browser session.
Workspace isolation
Ask OpenCode to create a named Hronaut workspace. Agent workspaces use separate persistent browser profiles and do not expose the human Default workspace through MCP.
Local boundary
Hronaut is a local Electron/Chromium application with a loopback MCP endpoint. It is not a hosted browser, proxy, CAPTCHA service, or multi-browser CI runner.
Copy the matching schema
OpenCode currently documents separate stable and V2 configuration shapes. Use the example that matches your installed OpenCode version. If Hronaut authentication is enabled, copy the generated token-aware configuration from Hronaut Home instead.
OpenCode stable
mcp.hronaut{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"hronaut": {
"type": "remote",
"url": "http://127.0.0.1:47812/mcp",
"enabled": true,
"oauth": false
}
}
}
OpenCode V2
mcp.servers.hronaut{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servers": {
"hronaut": {
"type": "remote",
"url": "http://127.0.0.1:47812/mcp",
"oauth": false
}
}
}
}
V2 connects configured servers unless disabled is true. OpenCode V2 MCP documentation ↗
Save globally in ~/.config/opencode/opencode.json, or place the same configuration in opencode.json at one project root. Hronaut uses a remote MCP entry because OpenCode connects to the already-running local Streamable HTTP server; “remote” here describes the transport shape, not an internet-hosted service.
Verify before using a login
Start Hronaut, restart or refresh OpenCode, then run opencode mcp list. Hronaut should appear connected.
Run opencode mcp debug hronaut, confirm Hronaut Home reports MCP online, and make sure the configured port matches the current endpoint.
Ask: “Create a Hronaut workspace named first-check, open https://example.com inside it, and tell me the page title and workspace ID. Do not use my Default workspace.”
A visible first-check workspace opens Example Domain, and OpenCode reports its stable workspace ID.
OpenCode documents opencode mcp list as the command for listing configured MCP servers and their connection status. OpenCode MCP CLI reference ↗
Security boundary
A new Hronaut profile starts without MCP authentication for simple local setup. In that mode, another process running as your operating-system user could connect to the browser. Before using valuable signed-in sessions, enable Require MCP authentication in Hronaut, copy the regenerated OpenCode setup from Hronaut Home, and keep its owner-only token file out of chat, screenshots, issues, and source control.
Pause MCP before entering passwords, security keys, payment details, or other human-only information. A persistent authenticated browser carries the authority of every site signed in inside that profile.
Choose deliberately
Choose Hronaut for a separate visible browser that should outlive one OpenCode task. If you want trusted code to drive selected tabs in an existing everyday Chromium browser, OpenCode's Browser Control uses an extension and local relay. If you need ephemeral multi-browser CI, use a Playwright-managed workflow instead.