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
3.3 KiB
| summary | read_when | title | sidebarTitle | |||
|---|---|---|---|---|---|---|
| How OpenClaw dynamic tools are exposed to Codex app-server turns |
|
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:
readwriteeditapply_patchexecprocesstool_calltool_describetool_searchtool_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.