Skip to content

Commit bb82d1c

Browse files
lroolleclaude
andcommitted
docs: clarify codex --browser-mcp runs isolated in-container Chromium
- document that the Codex desktop Chrome plugin is host-only (app resources, native messaging manifest, extension host binary) and cannot be mounted into the Linux container - add mcp_servers.node_repl.enabled=false session-override example - fix: guard empty USER_VOLUMES debug output under set -u (bare ${arr[*]} crashes on bash < 4.4) Close #397 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent e9338ad commit bb82d1c

3 files changed

Lines changed: 16 additions & 2 deletions

File tree

deva.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3518,7 +3518,7 @@ mask_secrets_in_args() {
35183518
if [ "$DEBUG_MODE" = true ]; then
35193519
echo "=== DEBUG: Docker command ===" >&2
35203520
echo "Container name: $CONTAINER_NAME" >&2
3521-
echo "USER_VOLUMES (${#USER_VOLUMES[@]}): ${USER_VOLUMES[*]}" >&2
3521+
echo "USER_VOLUMES (${#USER_VOLUMES[@]}): ${USER_VOLUMES[*]-}" >&2
35223522
echo "Ephemeral mode: $EPHEMERAL_MODE" >&2
35233523
echo "" >&2
35243524
if [ "$EPHEMERAL_MODE" = false ]; then

docs/how-it-works.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,15 @@ This is not subtle. The container is the trust boundary, so the agent's internal
149149
## Browser Wiring
150150

151151
- `deva.sh claude -- --chrome` is Claude's host Chrome bridge. deva mounts the host bridge dir and wires the container tmp path Claude expects.
152-
- `deva.sh codex --browser-mcp` is Codex MCP wiring. deva injects a session-only `mcp_servers.playwright` override and uses the rust image profile.
152+
- `deva.sh codex --browser-mcp` is Codex MCP wiring. deva injects a session-only `mcp_servers.playwright` override, uses the rust image profile, and runs an isolated Chromium from inside the container.
153153

154154
Do not treat these as interchangeable. Codex CLI does not consume Claude's `--chrome` bridge, and Claude's native `--chrome` mode does not read Codex MCP config.
155155

156+
The Codex desktop Chrome plugin is also not a mount target for the Linux
157+
container. It depends on host Codex app resources, a host native messaging
158+
manifest, and the installed Chrome extension. Mounting those macOS paths into
159+
the container does not make them executable there.
160+
156161
## Proxy and Network Behavior
157162

158163
- `HTTP_PROXY` and `HTTPS_PROXY` are passed through

docs/troubleshooting.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,18 @@ What deva does:
181181

182182
- switches the default image profile to `rust`, where browser runtime dependencies live
183183
- injects a session-only Codex MCP override for `mcp_servers.playwright`
184+
- uses an isolated in-container Chromium, not the host Chrome profile
184185
- leaves your host `~/.codex/config.toml` untouched
185186

186187
The injected MCP command uses `npx -y`, so the first run may fetch `DEVA_CODEX_BROWSER_MCP_PACKAGE` unless it is already cached in the container.
187188

189+
Do not try to make this work by mounting the Codex desktop Chrome plugin into
190+
the container. On macOS that plugin points at host-only paths such as
191+
`/Applications/Codex.app`, `~/.codex/plugins/cache/openai-bundled/chrome`, the
192+
Chrome native messaging manifest, and a platform-specific extension host
193+
binary. Those are part of the host app and extension bridge, not a portable
194+
Linux container browser runtime.
195+
188196
Check:
189197

190198
```bash
@@ -215,6 +223,7 @@ If Codex also tries to start host-specific or unrelated MCP servers, add session
215223
CODEX_BROWSER_MCP=true
216224
CODEX_CONFIG=features.apps=false
217225
CODEX_CONFIG=features.plugins=false
226+
CODEX_CONFIG=mcp_servers.node_repl.enabled=false
218227
CODEX_CONFIG=mcp_servers.hn-research={url="https://hn.1lm.io/mcp",enabled=false}
219228
```
220229

0 commit comments

Comments
 (0)