You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- **Codex remote execution preview:** keep the Gateway and Codex app-server co-located while routing only authenticated unified exec to a remote Codex exec-server, with history-preserving topology changes, filtered child environments, managed-policy checks, and Docker live-proof coverage. (#101282, #101326)
9
10
- **Android chat agent selector:** switch the active agent directly from the live chat screen while keeping chat, Talk mode, and home canvas on the same canonical session. (#80422) Thanks @bcperry.
10
11
- **Gateway host status:** show the connected Gateway's host, network address, OS, runtime, uptime, CPU, memory, and disk details in Control UI Settings. (#100478)
11
12
- **iOS offline chat:** pre-paint recent sessions and canonical transcripts from a protected, bounded per-gateway cache, keep sending disabled offline, and purge cached conversation text when pairing is reset. (#100194)
Copy file name to clipboardExpand all lines: docs/plugins/codex-harness-reference.md
+63-2Lines changed: 63 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -60,7 +60,9 @@ This keeps the app-server version tied to the bundled `codex` plugin instead of
60
60
whichever separate Codex CLI happens to be installed locally. Set
61
61
`appServer.command` only when you intentionally want a different executable.
62
62
63
-
For an already-running app-server, use WebSocket transport:
63
+
Codex marks TCP WebSocket app-server transport as
64
+
[experimental and unsupported](https://github.com/openai/codex/blob/rust-v0.142.5/codex-rs/app-server/README.md#protocol).
65
+
Do not rely on it for production. For an already-running test app-server:
64
66
65
67
```json5
66
68
{
@@ -71,7 +73,7 @@ For an already-running app-server, use WebSocket transport:
71
73
config: {
72
74
appServer: {
73
75
transport:"websocket",
74
-
url:"ws://gateway-host:39175",
76
+
url:"wss://codex.example.com/app-server",
75
77
authToken:"${CODEX_APP_SERVER_TOKEN}",
76
78
requestTimeoutMs:60000,
77
79
},
@@ -106,6 +108,7 @@ For an already-running app-server, use WebSocket transport:
106
108
|`serviceTier`| unset | Optional Codex app-server service tier. `"priority"` enables fast-mode routing, `"flex"` requests flex processing, and `null` clears the override. Legacy `"fast"` is accepted as `"priority"`. |
107
109
|`networkProxy`| disabled | Opt into Codex permissions-profile networking for app-server commands. OpenClaw defines the selected `permissions.<profile>.network` config and selects it with `default_permissions` instead of sending `sandbox`. |
108
110
|`experimental.sandboxExecServer`|`false`| Preview opt-in that registers an OpenClaw sandbox-backed Codex environment with the supported Codex app-server so native Codex execution can run inside the active OpenClaw sandbox. |
111
+
|`experimental.remoteExecution`| unset | Preview single-target authenticated remote execution. Keeps app-server local over stdio and routes native filesystem/process work through one registry-backed exec-server. Requires `remoteWorkspaceRoot`. |
109
112
110
113
`appServer.networkProxy` is explicit because it changes the Codex sandbox
111
114
contract. When enabled, OpenClaw also sets `features.network_proxy.enabled` and
@@ -165,6 +168,64 @@ plugins via `plugin/install` and refreshes inventory. Only connect OpenClaw to
165
168
remote app-servers that are trusted to accept OpenClaw-managed plugin installs
166
169
and app inventory refreshes.
167
170
171
+
## Remote execution environments
172
+
173
+
For remote workspaces, keep the managed app-server beside the Gateway over
Copy file name to clipboardExpand all lines: docs/plugins/codex-harness.md
+136-7Lines changed: 136 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -358,10 +358,12 @@ app-server is too old, or the app-server cannot start.
358
358
359
359
## App-server policy
360
360
361
-
By default, the plugin starts OpenClaw's managed Codex binary locally with
362
-
stdio transport. Set `appServer.command` only to intentionally run a
363
-
different executable. Use WebSocket transport only when an app-server is
364
-
already running elsewhere:
361
+
By default, the plugin starts OpenClaw's managed Codex binary beside the
362
+
Gateway and owns it over stdio. Keep that control-plane topology in
363
+
production. Codex upstream marks TCP WebSocket app-server transport
364
+
[experimental and unsupported](https://github.com/openai/codex/blob/rust-v0.142.5/codex-rs/app-server/README.md#protocol),
365
+
so use it only for development or diagnostics when an app-server is already
366
+
running elsewhere:
365
367
366
368
```json5
367
369
{
@@ -372,7 +374,7 @@ already running elsewhere:
372
374
config: {
373
375
appServer: {
374
376
transport:"websocket",
375
-
url:"ws://gateway-host:39175",
377
+
url:"wss://codex.example.com/app-server",
376
378
authToken:"${CODEX_APP_SERVER_TOKEN}",
377
379
},
378
380
},
@@ -382,6 +384,121 @@ already running elsewhere:
382
384
}
383
385
```
384
386
387
+
### Remote execution environments
388
+
389
+
When Codex must execute on another host, keep the managed app-server with the
390
+
Gateway over stdio and move only filesystem and process execution:
notifications, and user/project native hooks, and clears all hook command
463
+
arrays. Codex-managed command hooks cannot be disabled by thread config, so
464
+
OpenClaw checks `hooks/list` and rejects remote execution when any are active.
465
+
It also rejects legacy managed config layers and managed feature requirements
466
+
that can override the forced execution policy.
467
+
An active OpenClaw `before_tool_call`/trusted-tool policy also fails closed
468
+
because Codex `0.142.x` cannot route those hooks back to the Gateway with a
469
+
Gateway-local cwd. The app-server approval bridge remains available.
470
+
- Remote commands receive only Codex's core executor environment. OpenClaw
471
+
replaces shell-environment customization for remote threads, clears configured
472
+
`set` values, and excludes default `*KEY*`, `*SECRET*`, `*TOKEN*`, and explicit
473
+
`CODEX_EXEC_SERVER_*` names.
474
+
-`appServer.networkProxy`, `appServer.experimental.sandboxExecServer`, and
475
+
Codex Computer Use cannot be combined with remote execution. An active
476
+
OpenClaw sandbox also rejects this mode. Enforce required executor egress at
477
+
the remote environment boundary.
478
+
- Codex `0.142.x` removes its local execution environment when Noise remote
479
+
execution is active. OpenClaw therefore rejects local stdio MCP servers in
480
+
this mode. HTTP MCP remains app-server-local; a stdio MCP may run only when
481
+
its Codex config intentionally sets `environment_id = "remote"`.
482
+
- OpenClaw bounded turns, including model-backed search, review, and media
483
+
understanding, intentionally clear remote routing and run in a temporary
484
+
local workspace.
485
+
- After changing the remote execution topology, send a normal message before
486
+
`/btw` so the main thread can rotate into the current environment.
487
+
- Codex requirements and approval policy are evaluated by the app-server.
488
+
Provision `/etc/codex/requirements.toml` on the Gateway/app-server host; a
489
+
copy on only the executor does not govern the app-server. Requirements that
490
+
pin incompatible execution features make this preview fail closed.
491
+
- App-server initialization does not prove that the matching executor is
492
+
registered. Gate deployment readiness on registry/executor health and use a
493
+
harmless native operation as end-to-end proof.
494
+
- Give the exec-server only narrowly scoped, rotatable credentials. OpenClaw's
495
+
enforced remote shell policy removes those variables from normal child
496
+
environments, reducing accidental disclosure; it is not an isolation
497
+
boundary against same-user code that can inspect the exec-server process.
498
+
Run the exec-server behind an OS, container, or VM boundary that prevents
499
+
workspace commands from reading its process environment, and never store
500
+
registry credentials inside the workspace.
501
+
385
502
Local stdio app-server sessions default to the trusted local operator
386
503
posture: `approvalPolicy: "never"`, `approvalsReviewer: "user"`, and
387
504
`sandbox: "danger-full-access"`. If local Codex requirements disallow that
@@ -639,6 +756,7 @@ Supported `appServer` fields:
639
756
|`serviceTier`| unset | Optional Codex app-server service tier. `"priority"` enables fast-mode routing, `"flex"` requests flex processing, `null` clears the override, and legacy `"fast"` is accepted as `"priority"`. |
640
757
|`networkProxy`| disabled | Opt into Codex permissions-profile networking for app-server commands. OpenClaw defines the selected `permissions.<profile>.network` config and selects it with `default_permissions` instead of sending `sandbox`. |
641
758
|`experimental.sandboxExecServer`|`false`| Preview opt-in that registers an OpenClaw sandbox-backed Codex environment with the supported Codex app-server so native Codex execution can run inside the active OpenClaw sandbox. |
759
+
|`experimental.remoteExecution`| unset | Preview single-target authenticated remote execution. Keeps app-server local over stdio and routes native filesystem/process work through one registry-backed exec-server. Requires `remoteWorkspaceRoot`. |
642
760
643
761
`appServer.networkProxy` is explicit because it changes the Codex sandbox
644
762
contract. When enabled, OpenClaw also sets `features.network_proxy.enabled`
@@ -914,9 +1032,20 @@ headers are valid.
914
1032
`plugins.entries.codex.config.discovery.timeoutMs` or disable discovery.
915
1033
See [Codex harness reference](/plugins/codex-harness-reference#model-discovery).
916
1034
917
-
**WebSocket transport fails immediately:** check `appServer.url`,
1035
+
**Remote execution reaches the app-server but not the executor:** verify Codex
1036
+
app-server `0.142.0` or newer, stdio transport, an HTTPS registry URL, the exact
1037
+
environment id, resolved SecretInputs, and a registered healthy exec-server.
1038
+
`/codex status` proves only the app-server control plane; use a harmless native
1039
+
filesystem or command operation for end-to-end executor proof. A topology or
1040
+
environment identity change forks the prior thread and preserves its history.
1041
+
Remote execution forcibly disables native hook relay commands. An OpenClaw
1042
+
tool policy that requires the relay makes startup fail instead of silently
1043
+
running hooks on the Gateway with the executor cwd.
1044
+
1045
+
**Experimental WebSocket transport fails immediately:** check `appServer.url`,
918
1046
`authToken`, headers, and that the remote app-server speaks the same Codex
919
-
app-server protocol version.
1047
+
app-server protocol version. Do not use TCP WebSocket app-server transport as
1048
+
the production remote-execution topology.
920
1049
921
1050
**Native shell or patch tools are blocked with `Native hook relay
922
1051
unavailable`:** the Codex thread is still trying to use a native hook relay
0 commit comments