openclaw/docs/plugins/codex-harness-reference/dynamic-tools.md
Vincent Koc 9753ab2522
docs(plugins): split the Codex harness reference by reader job (#142803)
docs/plugins/codex-harness-reference.md was 68,643 characters. It is now a
short index plus nine child pages, one per reader job:

- codex-harness-reference/supervision
- codex-harness-reference/app-server-transport
- codex-harness-reference/approval-and-sandbox
- codex-harness-reference/auth
- codex-harness-reference/dynamic-tools
- codex-harness-reference/timeouts
- codex-harness-reference/model-discovery
- codex-harness-reference/restricted-turns
- codex-harness-reference/workspace-bootstrap-files

The index keeps the frontmatter, the intro, "Plugin config surface", and
"Related", and adds a "Where each section moved" map. Child naming, index
shape, and the "Where each section moved" wording follow the earlier
docs/plugins/codex-harness split.

Anchors: all 14 ids published by the single-page version still resolve on the
index. "plugin-config-surface" and "related" stay real headings there; the
other 12 are authored <a id="..."> stubs beside the link that now owns the
section. Ids were enumerated with parseDocsDocument before and after: 14/14
resolve, with 0 duplicate authored/canonical ID collisions.

Losslessness: 974 non-blank source lines, 0 missing after the move. Fences
17 to 17 with an identical fence-by-fence digest over info string and body.
Table rows 54 to 54, identical row for row. All 18 original links retained,
39 navigation links added. Words 7,528 to 8,032, the delta being new
frontmatter, lead sentences, and the section map. No prose was rewritten.

Nav and zh-CN glossary entries were added for the nine children.

Closes audit findings: r3-0561
2026-09-09 12:10:00 +08:00

3.3 KiB

summary read_when title sidebarTitle
How OpenClaw dynamic tools are exposed to Codex app-server turns
You need to know which OpenClaw tools Codex can call
You are changing dynamic tool loading or exclusions
You are debugging the Codex tool payload
Codex dynamic tools Dynamic tools

Which OpenClaw dynamic tools reach a Codex turn, and how they are loaded. Part of the Codex harness reference; Where each section moved lists every section.

Dynamic tools

Codex dynamic tools default to searchable loading, exposed under the openclaw namespace with deferLoading: true. OpenClaw normally does not expose dynamic tools that duplicate Codex-native workspace operations or Codex's own tool-search surface:

  • read
  • write
  • edit
  • apply_patch
  • exec
  • process
  • tool_call
  • tool_describe
  • tool_search
  • tool_search_code

progress_card is not filtered with those native workspace tools. It remains available through the OpenClaw dynamic-tool bridge as the durable session status surface.

When a finite runtime allowlist disables native Code Mode, OpenClaw sends an empty execution-environment selection. In that direct, unsandboxed case, OpenClaw keeps its policy-filtered exec and process tools as the shell fallback. Runtime allowlists and codexDynamicToolsExclude still apply.

Most remaining OpenClaw integration tools, such as messaging, media, cron, browser, nodes, gateway, heartbeat_respond, and web_search, are available through Codex tool search under that namespace. This keeps the initial model context smaller. A small set of tools stay directly callable regardless of codexDynamicToolsLoading, because Codex tool search can be unavailable or resolve a connector-only universe: agents_list, sessions_spawn, and sessions_yield. Developer instructions still steer normal Codex subagents toward native spawn_agent for Codex-native subagent work, while sessions_spawn remains available for explicit OpenClaw or ACP delegation. Message-tool-only source replies also stay direct, since that is a turn-control contract.

Codex Code Mode projects generic OpenClaw dynamic-tool results as text. Parse a JSON result before reading fields. Nested dynamic calls are serialized by the Codex runtime, so Promise.all does not submit them concurrently; use a bounded sequential launch loop when starting collector children.

Tools marked catalogMode: "direct-only", including the OpenClaw computer tool and regular-agent openclaw delegation, are grouped under openclaw_direct. OpenClaw adds that namespace to Codex's features.code_mode.direct_only_tool_namespaces list without replacing operator-supplied entries. Codex therefore exposes those tools as DirectModelOnly in normal and code-mode-only threads instead of routing them through nested Code Mode tools.* calls. This preserves image-bearing results, which nested Code Mode otherwise flattens to text. It also keeps delegated human approval on the direct model call: a yielded script cell must not let the model finish its turn while that approval is still waiting.

Set codexDynamicToolsLoading: "direct" only when connecting to a custom Codex app-server that cannot search deferred dynamic tools or when debugging the full tool payload.