Codex Desktop omits codex_app project/thread tools with a custom Responses provider
What version of the Codex App are you using (From “About Codex” dialog)?
ChatGPT/Codex Desktop 26.730.61639 (build 6234)
Bundled runtime: codex-cli 0.147.0-alpha.1.2
What subscription do you have?
Custom OpenAI-compatible provider authenticated through env_key; no OpenAI login is active (codex login status reports Not logged in).
What platform is your computer?
Darwin 25.6.0 arm64 arm
macOS 26.6 (build 25G72)
What issue are you seeing?
Fresh local Codex Desktop tasks using a custom Responses API provider do not receive the first-party codex_app project/thread-management tools.
The task exposes only these codex_app tools:
codex_app__automation_update
codex_app__load_workspace_dependencies
codex_app__navigate_to_codex_page
codex_app__read_thread_terminal
The project/thread-management group is absent, including:
codex_app__list_projects
codex_app__list_threads
codex_app__read_thread
codex_app__create_thread
codex_app__send_message_to_thread
codex_app__fork_thread
codex_app__set_thread_title
codex_app__set_thread_archived
There is also no usable tool_search path for discovering these tools. This is not a call-time failure: the functions are missing from the task's tool manifest, so the assistant cannot invoke them at all.
The failure persists after fully quitting and restarting the Desktop app and creating a brand-new task. It is specific to the custom-provider path: on the same machine and Desktop app, switching to the built-in OpenAI provider with a ChatGPT account makes the project/thread-management tools available again. The missing capabilities are first-party Desktop task APIs, not APIs served by the custom model provider.
Sanitized provider configuration:
model = "gpt-5.6-sol"
model_provider = "company_proxy"
[model_providers.company_proxy]
name = "Company OpenAI-compatible proxy"
env_key = "CUSTOM_PROVIDER_API_KEY"
base_url = "https://<company-openai-compatible-proxy>/<redacted>/v1"
wire_api = "responses"
The provider successfully handles normal model responses and other tools. The problem is limited to exposure of the Desktop project/thread-management tool group.
What steps can reproduce the bug?
- Configure a non-OpenAI, OpenAI-compatible Responses provider using
model_providers.<id>,env_key, andwire_api = "responses". - Select
gpt-5.6-soland the custom provider at the top level of~/.codex/config.toml. - Fully quit and reopen the ChatGPT/Codex Desktop app.
- Create a brand-new local Codex task.
- Ask:
``text``
List my saved Codex projects and their latest threads. Use the Codex app
project and thread-management tools.
- Inspect the available tool surface or attempt to use
codex_app__list_projects,codex_app__list_threads, orcodex_app__read_thread.
Actual result: none of those functions are present. Only the four non-thread-management codex_app tools listed above are exposed.
Control comparison:
- Use the same Desktop app and machine with the built-in OpenAI provider and a ChatGPT account.
- Create a fresh task and repeat the prompt.
Control result: the codex_app project/thread-management tools are available. The provider/auth combination is the observed difference.
Original affected task session ID: 019fd146-6c22-71b2-91c6-cf7c92702e7c
What is the expected behavior?
Codex Desktop should expose its first-party project/thread-management tools independently of which compatible model provider generates the assistant response.
At minimum, a fresh Desktop task should receive list_projects, list_threads, read_thread, create_thread, and send_message_to_thread when the host supports those operations. If the active provider is intentionally incompatible, the app should show a clear provider-capability diagnostic instead of silently omitting the tools while installed skills and app guidance still reference them.
Additional information
This resembles several existing reports, but this reproduction combines the current Desktop build, a custom Responses provider, and the first-party project/thread-management tool group:
- #33585 — GPT-5.6-Sol lost access to create_thread tool after update — same deferred-tool/no-
tool_searchsymptom, closed after an OpenAI-backend fix. - #31750 — Browser & Computer Use plugins silently unusable with a custom model_provider — custom providers do not receive dynamic tool discovery.
- #30233 — Codex app thread-management tools not exposed despite thread creation being available — same missing first-party thread-management surface.
2 Comments
Independent reproduction with DeepSeek (2026-08-05)
Same build and symptom reproduced with the DeepSeek official custom provider (
deepseek-v4-flash,wire_api = "responses", API-key auth, no OpenAI login). Session rollout019fd492-b9b3-7163-abae-0b910f1f8c58shows the thread tools ARE registered indynamic_tools, but only in the deferred group:deferLoading: true:automation_update,fork_thread,handoff_thread,get_handoff_status,list_projects,create_thread,list_threads,read_thread,wait_threads,send_message_to_thread,set_thread_pinned,set_thread_archived,set_thread_titlenavigate_to_codex_page,read_thread_terminal,load_workspace_dependenciesThe captured Responses request to DeepSeek includes
{"type":"tool_search",...}plus those three direct tools, but not the deferred thread tools.deepseek-v4-flashdoes not invoketool_search, so the deferred group is unreachable — same behavior documented in https://github.com/CCanxue/codex-deepseek-subagent-fix for v1 multi-agent tools.So the practical gap here is not "the app never registered the tools" — it registered them and then hid them behind a discovery mechanism the custom model won't call. This matches the related #36382/#31750 family.
Suggested fix direction (any one would unblock):
codex_appthread tools when the active provider/model cannot usetool_search; expose them directly.thread_toolsas provider-independent instead of tied to the StatsiguserID-gated feature flag (local Sentry scope shows gate2395575782cannot evaluate without auserID).namespace_tools = false/ flatten escape requested in #36942 so custom-provider sessions can opt into plain function tools.Full lab write-up: https://github.com/k421o/codex-deepseek-labs/issues/4
As of version Version 26.820.60940 on MacOS the tools seem to be available again.
Descriptions are concise paraphrases, not the internal manifest text.
Core execution
functions.exec— Runs JavaScript that can coordinate nested tools.functions.wait— Waits for a previously yielded execution to produce more output.functions.request_user_input— Presents structured questions to the user; Plan mode only.Shell and files
exec_command— Runs a shell command in a managed terminal.write_stdin— Sends input to or polls an active terminal session.apply_patch— Creates or edits files using a patch.view_image— Loads a local image for visual inspection.Planning and goals
update_plan— Creates or updates a step-by-step task plan.create_goal— Starts an explicitly requested tracked goal.get_goal— Reads the active goal’s status and usage.update_goal— Marks an active goal complete or blocked.MCP resources
list_mcp_resources— Lists static resources exposed by MCP servers.list_mcp_resource_templates— Lists parameterized MCP resource templates.read_mcp_resource— Reads a selected MCP resource.Codex tasks and projects
list_projects— Lists available local, remote, and ChatGPT projects.list_threads— Lists recent and pinned Codex tasks.list_archived_threads— Lists archived tasks.read_thread— Reads another task’s recent status and messages.create_thread— Creates a separate user-owned task.fork_thread— Forks an existing task and its history.send_message_to_thread— Sends a follow-up prompt to another task.wait_threads— Waits for one or more tasks to finish or require attention.handoff_thread— Moves a task and its Git state between environments or hosts.get_handoff_status— Checks a task-handoff operation.navigate_to_codex_page— Opens a selected task in the main Codex window.set_thread_title— Renames a task.set_thread_pinned— Pins or unpins a task.set_thread_archived— Archives or restores a task.Codex workspace and UI
load_workspace_dependencies— Locates bundled runtimes and document-processing libraries.open_in_codex— Opens a file, terminal, browser tab, or code review in a Codex panel.read_thread_terminal— Reads this task’s current terminal output.Automations
automation_update— Creates, views, updates, pauses, or deletes scheduled automations and heartbeats.Internal agent coordination
spawn_agent— Starts a sub-agent on a delegated subtask.followup_task— Assigns another turn to an existing agent.send_message— Sends information to a running agent without starting a new turn.wait_agent— Waits for an agent to finish or report progress.interrupt_agent— Stops or redirects an agent.list_agents— Lists agents and their current states.