Chrome Bridge
The Chrome Bridge enables claude --chrome to work inside devcontainers. Claude Code’s Chrome integration uses Chrome’s native messaging protocol to communicate with the browser extension, which does not work from inside a container because Chrome runs on the host.
Architecture
[Devcontainer] [Host]
Claude Code --chrome Chrome + Extension
| (Unix socket) ^ (native messaging)
human chrome-bridge human daemon
| TCP (:19286) ^ (SocketRelay)
└──────────── TCP tunnel ───────────────────┘
How it works
human daemon starton the host starts the daemon (:19285), chrome proxy (:19286), and a SocketRelay that listens on a Unix socket in/tmp/claude-mcp-browser-bridge-<username>/human chrome-bridgein the container creates a Unix socket at the same path that Claude Code uses to discover the MCP browser bridge- When Claude Code connects to the socket, the bridge tunnels traffic over TCP to the daemon’s chrome proxy
- The daemon pairs the connection with a Chrome native messaging connection via the SocketRelay
Host setup
Start the daemon on your host machine:
human daemon start
This starts both the main daemon and the chrome proxy. The output shows the environment variables to export in the container.
Container setup
export HUMAN_CHROME_ADDR=<host-ip>:19286
export HUMAN_DAEMON_TOKEN=<token>
human chrome-bridge
The bridge runs as a background process by default. Use --foreground to run in the foreground.
Environment variables
| Variable | Description |
|---|---|
HUMAN_CHROME_ADDR |
Host address and port for the chrome proxy (e.g. 192.168.1.5:19286) |
HUMAN_DAEMON_TOKEN |
Authentication token (from human daemon token or human daemon start output) |
Flags
| Flag | Description |
|---|---|
--foreground |
Run in foreground instead of daemonizing |
Files
| Path | Description |
|---|---|
~/.human/chrome-bridge.log |
Bridge log file |
/tmp/claude-mcp-browser-bridge-<username>/<pid>.sock |
Unix socket created by the bridge |