Durable browser
Restart Codex, keep the session
The desktop application owns Chromium and its profile. Closing one Codex task does not intentionally close the browser or discard its local state.
Codex browser MCP
Hronaut owns a separate visible Chromium browser. Codex connects over loopback MCP, while tabs, sign-ins, cookies, storage, windows, and named workspaces remain available between tasks, repositories, and Codex clients.
Hronaut is an independent project and is not affiliated with or endorsed by OpenAI.
Local MCP endpoint
http://127.0.0.1:47812/mcpStart Hronaut once. Codex can disconnect, restart, switch repositories, or move between its desktop, CLI, and IDE clients without owning the browser process. The endpoint listens on loopback rather than exposing a hosted browser.
The ownership difference
Codex supports Streamable HTTP MCP servers and shares MCP configuration between its desktop app, CLI, and IDE extension on the same host. Choose Hronaut when the browser should remain a separate visible application with durable local state, human controls, and isolated agent workspaces. See how task, MCP transport, and browser lifetimes differ →
Durable browser
The desktop application owns Chromium and its profile. Closing one Codex task 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 Codex inside the same browser session.
Workspace isolation
Ask Codex 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.
One user-level command
Codex stores MCP configuration in ~/.codex/config.toml by default. Its desktop app, CLI, and IDE extension share that configuration on the same Codex host.
Authentication disabled
codex mcp add hronaut --url http://127.0.0.1:47812/mcp
This adds a Streamable HTTP server to the default user-level Codex configuration. Official Codex MCP documentation ↗
Authentication enabled
Enable Require MCP authentication, then copy the generated Codex setup from Hronaut Home. It supplies --bearer-token-env-var HRONAUT_MCP_TOKEN, which Codex stores as bearer_token_env_var rather than writing the bearer token into config.toml.
Keep the token out of chat, screenshots, shell history, issues, and source control. If the environment variable is unavailable to the Codex host, the authenticated connection cannot initialize.
Verify before using a login
Start Hronaut, then run codex mcp list. Hronaut should show the same Streamable HTTP endpoint displayed on Hronaut Home.
Open Codex and use /mcp to see active MCP servers. Confirm Hronaut is enabled and connected before asking it to touch a signed-in page.
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 Codex reports its stable workspace ID.
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. Before using valuable signed-in sessions, enable Require MCP authentication and copy the exact token-aware setup from Hronaut Home.
Websites can contain prompt injection, and a persistent authenticated browser carries the authority of every site signed in inside that profile. Keep sensitive work isolated, review surprising requests, and use Hronaut's pause and interaction-lock controls before entering passwords, security keys, payment details, or other human-only information.
Choose deliberately
Choose Hronaut for a separate visible browser that should outlive one Codex task. If repeatable ephemeral testing is the primary goal, use a test-runner-owned browser. If Codex must inspect the exact tabs already open in everyday Chrome, use a tool designed to connect to that profile instead.