Fresh local 0.142.0-alpha.1 sessions no longer receive codex_app thread-management tools
Summary
Fresh local Codex sessions on 0.142.0-alpha.1 no longer receive the codex_app thread-management tools that were present on the same machine in 0.140.x, which breaks any workflow that needs thread creation or thread handoff. One visible symptom is LazyCodex omo:teammode, but the underlying issue appears to be a Codex app-server / dynamic-tools regression rather than a LazyCodex configuration problem.
Environment
- Host: Windows local Codex Desktop / CLI session
- Affected version:
0.142.0-alpha.1 - Last known good on the same machine:
0.140.0-alpha.2,0.140.0-alpha.19 - Current config points
CODEX_CLI_PATHat: C:\Users\88697\AppData\Local\OpenAI\Codex\bin\5d35d2790d1d3d7b\codex.exe- Symptom date range:
- good sessions observed on
2026-06-16 - degraded / missing tool surface observed on
2026-06-19and2026-06-20
Repository Decision
This should be filed against openai/codex, not code-yeongyu/lazycodex.
Reason:
- LazyCodex
teammodeexplicitly depends on host-providedcodex_app.*tools such ascreate_thread,read_thread,send_message_to_thread,set_thread_title, andset_thread_archived. - The current local Codex session exposes connector/runtime namespaces only and does not expose those
codex_appthread tools. - The open-source Codex app-server and session code owns
dynamicToolsinjection and persistence for thread startup.
Reproduction
- Use a local Codex Desktop / CLI environment on
0.142.0-alpha.1. - Start a fresh local session or thread.
- Inspect the initial dynamic tool surface recorded in the rollout session metadata under
~/.codex/sessions/.../rollout-*.jsonl. - Compare that tool surface with a fresh local session from
0.140.xon the same machine. - Attempt a workflow that requires thread creation, for example any feature that calls
codex_app.create_thread.
Expected Behavior
Fresh local sessions should receive the same thread-management codex_app surface that older local sessions on the same machine received, including at least:
codex_app.create_threadcodex_app.read_threadcodex_app.send_message_to_threadcodex_app.set_thread_titlecodex_app.set_thread_archived
Related helpers such as list_threads, fork_thread, handoff_thread, and read_thread_terminal should also remain available if they are still intended to be part of the local thread surface.
Actual Behavior
On 0.142.0-alpha.1, fresh local sessions on the affected machine show one of these degraded states:
- no
codex_appdynamic tools at all, or - only a single
codex_app.automation_updatedynamic tool
As a result, thread-creating workflows fail because the session can establish higher-level team state but cannot create member threads.
Evidence
1. Same-machine historical session comparison
Observed in local rollout metadata:
2026-06-16,0.140.0-alpha.2dynamic_tools_count = 12codex_app_count = 12- included:
codex_app.automation_updatecodex_app.read_thread_terminalcodex_app.load_workspace_dependenciescodex_app.fork_threadcodex_app.handoff_threadcodex_app.create_threadcodex_app.list_threadscodex_app.read_threadcodex_app.send_message_to_threadcodex_app.set_thread_pinnedcodex_app.set_thread_archivedcodex_app.set_thread_title
2026-06-19,0.142.0-alpha.1dynamic_tools_count = 1- only
codex_app.automation_update
2026-06-20,0.142.0-alpha.1dynamic_tools_count = 0codex_app_count = 0
This is the strongest signal that the regression is version- or runtime-surface-related, not a teammode script error.
2. Current app cache exposes connector runtime namespaces but not thread tools
Current local Codex app cache shows connector/runtime namespaces such as:
codex_apps__context7codex_apps__githubcodex_apps__gmailcodex_apps__google_calendarcodex_apps__google_drivecodex_apps__linearcodex_apps__microsoft_outlook_emailcodex_apps__notioncodex_apps__slackcodex_apps__vercel
But the current cache contains zero matches for the thread-management codex_app tools required by the affected workflow.
3. LazyCodex is only depending on the host surface
LazyCodex omo:teammode documents a hard requirement on:
codex_app.create_threadcodex_app.read_threadcodex_app.send_message_to_threadcodex_app.set_thread_titlecodex_app.set_thread_archived
It does not implement those tools itself; it assumes the host Codex environment provides them.
4. Open-source Codex code owns dynamic tool injection and persistence
Relevant source areas in openai/codex:
codex-rs/app-server/README.md- documents experimental
dynamicToolsonthread/start codex-rs/app-server-protocol/src/protocol/v2/thread.rs- defines
ThreadStartParams.dynamic_tools codex-rs/core/src/session/mod.rs- states dynamic tools are defined at thread start and persisted in rollout session metadata
- restores them from conversation history if needed
codex-rs/protocol/src/protocol.rs- reads
SessionMeta.dynamic_tools
There is also logic in core/src/session/mod.rs that keeps older resumed/forked threads on a legacy tool surface. That is relevant context, but it does not explain this report because the affected 0.142.0-alpha.1 sessions were fresh local sessions, not just older resumed threads.
Related Issues
#26907reports remote-started threads missingcodex_appthread-management tools. This issue appears broader because the failure is reproducible on fresh local sessions too.#25990reports older resumed Desktop threads staying on a legacy subagent/tool surface. This issue appears broader because new local0.142.0-alpha.1sessions also lose the thread-management tool set.#26233discusses a missing pinning tool. This issue is not about one missing tool; it is about the collapse of the local thread-management surface.
Root Cause
Inference from the evidence:
- local thread startup in
0.142.0-alpha.1is no longer being initialized with the expectedcodex_appthread-management dynamic tools, or - a gating / allowlist / capability change now strips those tools from fresh local sessions while still leaving connector-runtime namespaces available
The 2026-06-19 transition state where only codex_app.automation_update remained suggests a partial rollout, filtering bug, or schema mismatch rather than a user configuration mistake.
Proposed Fix
Investigate the local thread-start path for 0.142.0-alpha.1, specifically:
- where
dynamicToolsare injected for fresh local sessions - whether the app-server capability surface for local sessions changed between
0.140.xand0.142.0-alpha.1 - whether local sessions are incorrectly taking a legacy / reduced tool path intended only for older resumed threads
- whether a filter now excludes
codex_app.create_threadand the rest of the thread-management family from the local surface
If the new behavior is intentional, the product should expose a clear capability error instead of silently presenting a surface where thread orchestration features appear installed but cannot function.
Verification Plan
- Start a fresh local thread on a fixed build.
- Confirm rollout session metadata includes the full thread-management
codex_appset again. - Confirm
tool_searchor direct tool exposure can discover and invokecreate_thread,read_thread,send_message_to_thread,set_thread_title, andset_thread_archived. - Re-test a thread-creating workflow such as LazyCodex
omo:teammode. - Confirm the behavior on:
- fresh local threads
- remote-started threads
- resumed older threads
---
This issue or PR was generated by LazyCodex.
Tag: lazycodex-generated
12 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I reviewed #29128 and do not think this is an exact duplicate.
#29128 is about inconsistent exposure of
codex_app.automation_updateacross local Desktop threads. This issue is broader: fresh local0.142.0-alpha.1sessions on Windows can lose the local thread-management surface entirely, includingcodex_app.create_thread,read_thread,send_message_to_thread,set_thread_title, andset_thread_archived, with a same-machine history showing12 -> 1 -> 0codex_apptools across recent sessions.So the overlap is real around dynamic tool injection/regression in local Desktop threads, but the user-visible failure here is not just missing automation tooling. It is that fresh local sessions can no longer create/manage Codex threads at all, which breaks thread orchestration workflows such as LazyCodex teammode.
If maintainers prefer consolidation, the critical detail to preserve is that this report includes fresh local session regression evidence and the broader collapse of thread-management tools beyond
automation_update.I pushed a draft diagnostic patch for this on my fork:
tinycute00/doctor-thread-tools-surfaceWhat the patch does:
codex doctorrow that inspects recent local interactive thread rolloutscodex_appthread-management tools are missing fromSessionMeta.dynamic_toolsLocal verification completed:
cargo fmt --allcargo metadata --format-version 1 --no-depsLocal verification blocked:
just test -p codex-clicould not run in this Windows environment because the host is missing MSVC / Windows SDK import libs needed for linking (kernel32.lib,ntdll.lib,userenv.lib,ws2_32.lib,dbghelp.lib)I also tried to open the upstream PR directly from this environment, but both the GitHub CLI and GitHub connector were denied on PR creation for
openai/codex.The upstream PR is ready on my fork, but GitHub is blocking PR creation from this account at the repository policy layer.
Evidence from
GET /repos/openai/codexin this environment:pull_request_creation_policy: collaborators_onlypermissions.pull: truepermissions.push: falseSo the branch is pushed and reviewable, but a non-collaborator account cannot submit the PR itself for this repo.
Ready-to-open compare link:
https://github.com/openai/codex/compare/main...Tinycute00:tinycute00/doctor-thread-tools-surface?expand=1
If a collaborator wants a slash-free head ref, I also pushed the same commit here:
https://github.com/openai/codex/compare/main...Tinycute00:doctor-thread-tools-surface-simple?expand=1
Dynamic tool injection needs a durable capability receipt. In
SessionMeta, record tool surface source, app-server version, dynamic tool group, injection reason, and missing-tool diagnostics for required groups likecodex_app.thread_management.Then
codex doctorcan compare recent sessions by version and show "expected 12 thread tools, got 0" without relying on user screenshots. Regression fixtures should cover healthy, degraded, no-app-server, and stale cached-tool surfaces.---
_Generated with ax._
Additional macOS recurrence on 2026-06-21, from a current Codex Desktop side-conversation / manager-workflow context. I cannot tell from inside the affected session whether the creation path was local-vs-remote, but the visible symptom is the same dynamic-tool surface collapse: the
codex_appthread-management tools are not discoverable/injected at all, so visible-thread orchestration degrades to sidecars.Environment observed on the affected Mac:
26.616.51431, build4212codex-cli 0.140.026.5.1arm64 (Darwin 25.5.0)Fresh reproduction signal from the affected session:
list_threads read_thread create_thread fork_thread send_message_to_thread set_thread_title set_thread_pinned set_thread_archived handoff_thread Codex thread managementcodex_app.create_thread,codex_app.list_threads,codex_app.read_thread,codex_app.send_message_to_thread,codex_app.set_thread_title,codex_app.set_thread_pinned,codex_app.set_thread_archived,codex_app.fork_thread, orcodex_app.handoff_threadtools were exposed.User-visible impact:
Recurring local history on this same machine also has the same failure shape:
codex_appthread tools and fell back tomulti_agent_v1.spawn_agentsidecars.This does not look like the
No handler registeredvariant from #28080, because here the tools are missing from discovery/injection rather than exposed and then failing at call time. It is also adjacent to #28204 (create_threadreturns onlypendingWorktreeId), but this occurrence happens earlier: there is nocreate_threadtool to call.Expected behavior:
codex_appthread-management group should be injected consistently into fresh/side/manager sessions.local,remote,side conversation, feature flag, version mismatch, etc.) instead of silently returning only unrelated “thread” search hits.This is recurring often enough that agents are now carrying explicit fallback policy for it, which is a strong signal that the product surface is unreliable rather than a one-off workflow issue.
Additional macOS recurrence on 2026-07-10, specifically from a Codex Desktop side conversation where the user explicitly requested creation of a visible manager thread.
Environment:
26.707.31428, build5059codex-cli 0.144.0-alpha.4codex-cli 0.144.1~/.codex/config.toml:features.goals = true,features.multi_agent = trueReproduction:
create_thread,list_threads,read_thread,set_thread_title, and related tools.Observed tool-surface receipt:
ALL_TOOLScontained 439 tools.tool_searchlist_threadsread_threadcreate_threadfork_threadsend_message_to_threadset_thread_titleset_thread_pinnedset_thread_archivedhandoff_threadcreate_goalset_goalthreadreturned only unrelated Gmail, GitHub review-thread, and Vercel toolbar-thread tools.tool_search/search-tools capability was exposed, so the documented lazy-discovery recovery path could not be attempted.Local product evidence confirms that this is an injection/capability-surface failure, not absence of implementation:
app.asarcontains real definitions forcreate_thread,list_threads,read_thread,fork_thread,send_message_to_thread,set_thread_title,set_thread_pinned, andset_thread_archived.tool_search,thread-store/src/local/create_thread.rs, and app-server thread-start/create-thread paths.This is the missing injection variant, not the
No handler registeredvariant: there was no thread-management tool available to call.Secondary side-conversation symptom:
exec_commandto fail withNo such file or directoryuntil an explicit existing cwd such as/tmpwas supplied. This may indicate stale parent-to-side-conversation environment inheritance, although I am not claiming it is causal.Expected:
codex_appthread-management tool group, or at leasttool_searchcapable of discovering it.Impact:
multi_agent_v1, which is not equivalent and may be explicitly disallowed by the side-conversation boundary.Additional macOS reproduction on Codex Desktop build 26.707.31428 (5059) with bundled runtime 0.144.0-alpha.4 / installed CLI 0.144.1.
This appears to be a distinct failure mode inside the same dynamic-tool exposure path:
session_meta.payload.dynamic_toolscontains the full 15-toolcodex_appnamespace, including:create_threadlist_threadsfork_threadsend_message_to_threadset_thread_titleload_workspace_dependenciesALL_TOOLS) contains none of those exact tools.undefinedfor both naming forms tested:tools.codex_app__create_threadtools.mcp__codex_app__create_threadtools.codex_app__load_workspace_dependenciestools.mcp__codex_app__load_workspace_dependencies@openai/artifact-toolruntime becauseload_workspace_dependenciesis likewise non-callable.The affected rollout identifies
originator: "Codex Desktop",source: "vscode", andthread_source: "subagent". Historical local rollouts show an intermittent pattern on the same build/date: some user/subagent threads record all 15 dynamic tools, while others record zero. In this reproduction, however, the metadata records all 15 while the live callable registry exposes zero, so persistence/injection into session metadata succeeded but registration into the model-call tool runtime did not.Expected: every tool declared in
session_meta.dynamic_toolsshould either be callable/discoverable in the live turn or produce an explicit capability error explaining why it was filtered. It should not silently exist only in persisted metadata.Suggested verification:
session_meta.dynamic_toolsagainst the live deferred registry by exact name.codex_apptool has a callable runtime handler.create_threadandload_workspace_dependencies, since the regression breaks thread orchestration and bundled spreadsheet/document runtimes.Regression confirmation from a second macOS host/session family.
This is not a missing local cache/configuration or an intentional capability change: the same workflows worked on prior Codex Desktop versions, and this issue already has same-machine evidence of a previously healthy
codex_appsurface. On macOS Desktop26.707.31428(build5059, bundled0.144.0-alpha.4) the failure is now intermittent by fresh side/subagent task.New control run:
codex_appleaf tools insession_meta.dynamic_tools.codex_app__*entries.typeof tools.codex_app__create_thread === "function".tools.codex_app__load_workspace_dependencies({})succeeded and returned bundled runtime26.709.11516.thread_dynamic_toolsSQLite rows were empty while the 15 runtime tools were callable; SQLite persistence is therefore not the runtime registration source and cache/DB cleanup is not a safe workaround.Paired with the failing side-conversation reproduction in comment #4940243343 (same metadata contains all 15 but
ALL_TOOLS/direct references expose none), this narrows the regression to the Desktop/app-server handoff after dynamic specs are persisted but before the per-turn callable/deferred registry is built.Please treat this as a version regression across the
0.140.x -> 0.142+/ Desktop app-server evolution, with an intermittent current-build manifestation rather than a feature request. Suggested fix/test invariant: for every dynamic-tool leaf persisted at thread start, construct the canonical handler and expose it through the deferred registry, or return an explicit capability error. Add a matrix covering user, side/subagent, resumed, and automation thread sources, and log thread ID plus dynamic-spec/registered-handler counts on mismatch.Additional Windows reproduction / spreadsheet-runtime blocker observed on 2026-07-12.
Environment:
codex-cli 0.144.1task26.707.3748.01.2026.190.026.630.12135codex features list:workspace_dependencies stable trueLive tool-surface receipt:
ALL_TOOLS.length === 248[]codex_appleaf-tool matches:[]load_workspace_dependenciesis therefore not callable in the taskThe Spreadsheets skill is exposed and selected, but its contract requires
load_workspace_dependenciesbefore importing XLSX files and explicitly forbids path guessing, global/repo-local dependencies, installation hacks, or alternate libraries. The result is a hard blocker: the task cannot inspect two XLSX attachments even though the skill is installed and the feature reports enabled.A prior task on the same machine also ran
codex doctor --summary; it produced no output for more than one minute and was interrupted.Important scope distinction: this occurrence is a standalone CLI-launched task, not a Desktop-bundled process. If the loader is intentionally Desktop-only, the remaining product bug is capability routing: the Spreadsheets skill should not be exposed as executable in a host where its mandatory loader cannot be registered, or it should emit an explicit supported-host message.
Expected invariant: wherever the Spreadsheets skill is callable and
workspace_dependenciesis enabled,load_workspace_dependenciesmust be discoverable/callable; otherwise the skill should be gated with an actionable capability error.No manual package search, alternate XLSX library, or runtime-path workaround was attempted.
Additional macOS reproduction from a standalone scheduled automation on 2026-07-15/16.
Environment:
26.707.72221, build5307com.openai.codex0.144.1Observed:
codex_appnamespace is reduced to onlyset_thread_archived.list_projects,create_thread,list_threads,read_thread,send_message_to_thread, andset_thread_title.excluded_tool_namespacesordirect_only_tool_namespacesconfiguration is present.Read-only inspection of the packaged Desktop resources shows that these native task tools are still bundled. The standalone automation startup path requests renderer-built dynamic tools with a fixed 5-second response window. If the primary window is unavailable or the response is late, that path resolves to an empty dynamic-tool list; the subsequent fallback supplies only
set_thread_archived. No corresponding exception appears in the Desktop logs, which makes the failure silent.This seems to be an automation-specific instance of the dynamic-tool exposure regression reported here. It is also related to #31584, where
codex_app.list_projectsremains advertised but blocks until the generated automation thread is opened manually. We have observed both modes: complete provisioning collapse (this report) and advertised tools whose Desktop handlers stall.Expected:
A Desktop
/feedbackID is not attached yet because the affected automation surface cannot invoke the user-side slash command.Follow-up to the earlier report: a later retry of the previously blocked tasks succeeded.
The same Desktop runtime also showed per-task divergence: an affected standalone automation received only
set_thread_archived, while a healthy persistent task had the full native task-tool surface and completed calls normally. Combined with the packaged startup path's five-second renderer response window (late/no response becomes an empty catalog, then the archive-only fallback), this points to a transient renderer provisioning/activation race rather than a permanent permission, MCP migration, or static allowlist problem.The most useful product-side changes would be to keep the native task-tool catalog independent from plugin/MCP catalog assembly, retry or retain a last-known-good native catalog after the five-second miss, and emit an explicit diagnostic whenever the archive-only fallback is used.