diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index 22b1298f7..49ced077c 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "1a83731ea1098d3aa33baf0ca0cec84ee41521db", - "syncedAt": "2026-04-10T21:04:24.653Z" + "sha": "31a0b7bd42a5beeaa5b4ded634a546d0531bf3e3", + "syncedAt": "2026-04-10T21:19:46.331Z" } diff --git a/docs/plugins/codex-harness.md b/docs/plugins/codex-harness.md index bc47fc2a1..30feae1eb 100644 --- a/docs/plugins/codex-harness.md +++ b/docs/plugins/codex-harness.md @@ -255,6 +255,106 @@ fallback catalog: } ``` +## App-server connection and policy + +By default, the plugin starts Codex locally with: + +```bash +codex app-server --listen stdio:// +``` + +You can keep that default and only tune Codex native policy: + +```json5 +{ + plugins: { + entries: { + codex: { + enabled: true, + config: { + appServer: { + approvalPolicy: "on-request", + sandbox: "workspace-write", + serviceTier: "priority", + }, + }, + }, + }, + }, +} +``` + +For an already-running app-server, use WebSocket transport: + +```json5 +{ + plugins: { + entries: { + codex: { + enabled: true, + config: { + appServer: { + transport: "websocket", + url: "ws://127.0.0.1:39175", + authToken: "${CODEX_APP_SERVER_TOKEN}", + requestTimeoutMs: 60000, + }, + }, + }, + }, + }, +} +``` + +Supported `appServer` fields: + +| Field | Default | Meaning | +| ------------------- | ---------------------------------------- | ------------------------------------------------------------------------ | +| `transport` | `"stdio"` | `"stdio"` spawns Codex; `"websocket"` connects to `url`. | +| `command` | `"codex"` | Executable for stdio transport. | +| `args` | `["app-server", "--listen", "stdio://"]` | Arguments for stdio transport. | +| `url` | unset | WebSocket app-server URL. | +| `authToken` | unset | Bearer token for WebSocket transport. | +| `headers` | `{}` | Extra WebSocket headers. | +| `requestTimeoutMs` | `60000` | Timeout for app-server control-plane calls. | +| `approvalPolicy` | `"never"` | Native Codex approval policy sent to thread start/resume/turn. | +| `sandbox` | `"workspace-write"` | Native Codex sandbox mode sent to thread start/resume. | +| `approvalsReviewer` | `"user"` | Use `"guardian_subagent"` to let Codex guardian review native approvals. | +| `serviceTier` | unset | Optional Codex service tier, for example `"priority"`. | + +The older environment variables still work as fallbacks for local testing when +the matching config field is unset: + +- `OPENCLAW_CODEX_APP_SERVER_BIN` +- `OPENCLAW_CODEX_APP_SERVER_ARGS` +- `OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY` +- `OPENCLAW_CODEX_APP_SERVER_SANDBOX` +- `OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` + +Config is preferred for repeatable deployments. + +## Codex command + +The bundled plugin registers `/codex` as an authorized slash command. It is +generic and works on any channel that supports OpenClaw text commands. + +Common forms: + +- `/codex status` shows live app-server connectivity, models, account, rate limits, MCP servers, and skills. +- `/codex models` lists live Codex app-server models. +- `/codex threads [filter]` lists recent Codex threads. +- `/codex resume ` attaches the current OpenClaw session to an existing Codex thread. +- `/codex compact` asks Codex app-server to compact the attached thread. +- `/codex review` starts Codex native review for the attached thread. +- `/codex account` shows account and rate-limit status. +- `/codex mcp` lists Codex app-server MCP server status. +- `/codex skills` lists Codex app-server skills. + +`/codex resume` writes the same sidecar binding file that the harness uses for +normal turns. On the next message, OpenClaw resumes that Codex thread, passes the +currently selected OpenClaw `codex/*` model into app-server, and keeps extended +history enabled. + ## Tools, media, and compaction The Codex harness changes the low-level embedded agent executor only. @@ -286,6 +386,9 @@ reports version `0.118.0` or newer. **Model discovery is slow:** lower `plugins.entries.codex.config.discovery.timeoutMs` or disable discovery. +**WebSocket transport fails immediately:** check `appServer.url`, `authToken`, +and that the remote app-server speaks the same Codex app-server protocol version. + **A non-Codex model uses PI:** that is expected. The Codex harness only claims `codex/*` model refs. diff --git a/docs/tools/slash-commands.md b/docs/tools/slash-commands.md index b7bd0a192..d77b0cd6c 100644 --- a/docs/tools/slash-commands.md +++ b/docs/tools/slash-commands.md @@ -152,6 +152,7 @@ Bundled plugins can add more slash commands. Current bundled commands in this re - `/phone status|arm [duration]|disarm` temporarily arms high-risk phone node commands. - `/voice status|list [limit]|set ` manages Talk voice config. On Discord, the native command name is `/talkvoice`. - `/card ...` sends LINE rich card presets. See [LINE](/channels/line). +- `/codex status|models|threads|resume|compact|review|account|mcp|skills` inspects and controls the bundled Codex app-server harness. See [Codex Harness](/plugins/codex-harness). - QQBot-only commands: - `/bot-ping` - `/bot-version`