Desktop exposes automation_update without a handler, leaving automations unmanageable
What version of the Codex App are you using?
Codex Desktop on macOS (current installed build; exact bundle version was not available to the tool session).
What platform is your computer?
macOS, Apple Silicon.
What issue are you seeing?
The Desktop tool catalog exposes codex_app.automation_update, but invoking it fails with:
No handler registered for tool: codex_app.automation_update
The failure is repeatable within the same active thread.
This is more than a failed create operation. Because automation changes are required to go through automation_update, the missing handler leaves no supported way to manage automation state associated with the thread.
Operational consequences include:
- Cannot create a requested five-minute heartbeat automation.
- Cannot pause or resume an existing automation.
- Cannot change its interval.
- Cannot delete it.
- Cannot reliably inspect or repair its thread association.
- A shell fallback such as
gh pr checks --watchcannot wake the conversation when it exits, so the user must manually send another message. - Directly writing an automation TOML file is not a supported fallback and cannot be safely verified through the app.
The most frustrating case is an automation that already exists: the thread can be aware that automation management should be available while being unable to pause, modify, or remove the automation.
What steps can reproduce the bug?
- Open a local project thread in Codex Desktop.
- Ask Codex to create or update a heartbeat automation.
- Observe that
codex_app.automation_updateis present in the exposed tool catalog. - Invoke it with a valid heartbeat create/update payload.
- Observe:
No handler registered for tool: codex_app.automation_update
- Retry the call and observe the same result.
- Attempt to use a supported fallback to manage an existing automation; none is exposed.
What is the expected behavior?
- If
codex_app.automation_updateis exposed, its Desktop-side handler should be registered and callable. - If the handler is unavailable, the tool should not be advertised as callable.
- Desktop should provide a structured recovery path, such as reinitializing the handler or exposing a supported automation-management fallback.
- Existing automations must remain viewable, pausable, editable, and deletable even when one tool bridge fails.
- Background watches should have a supported way to notify or resume the owning thread on completion.
Additional information
Related: #28080 reports other Desktop thread tools intermittently losing handlers. This report focuses specifically on automation management and the absence of any supported recovery path, which can strand already-configured automation state.
Observed on 2026-07-10. No credentials or repository data are required to reproduce.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional environment and workaround evidence:
~/.codex/config.tomlis26.707.31428.~/.codex/automations/*/automation.tomlconfirms that automation state remains present on disk. In this case, the relevant review-cycle heartbeat isPAUSED, runs on a five-minute rule, and retains atarget_thread_id.The on-disk files make the missing handler especially confusing: the state exists and is inspectable, but the supported tool needed to safely manage it is unavailable. Custom tooling may mitigate the immediate problem, but it should not be the required management path.
Additional evidence suggests this may be sensitive to how a turn reaches the Desktop host:
client_idon its recordeduser_message.automation_updatecalls then failed withNo handler registered.client_id.automation_updatein read-onlyviewmode without changing the automation TOML or restarting the thread.This correlates with, but does not conclusively prove, a difference between a relayed/Remote-originated turn and a turn sent directly through Desktop.
The documented Remote model says the connected host supplies the task's local tools, configuration, permissions, and plugins, while the phone sends prompts and approvals. Therefore, even if the failing request arrived through Remote, losing the Desktop automation handler is not expected behavior.
Relationship to #28080:
automation_update.Official documentation covers Scheduled management and Remote host behavior, but does not document dynamic handler registration, this error, source-dependent capability differences, or a recovery procedure.
Related but distinct reproduction: one active Codex task omitted the native
automation_updatecapability from its live tool registry entirely, while another active task on the same connected host exposed it normally.The user asked the affected task to set a heartbeat. Because
automation_updatewas not callable, the task could not create a native heartbeat and fell back to a hidden local monitor process. That fallback cannot provide the same supported task wake/resume behavior.This differs from the original #32294 symptom: the tool was not advertised and then rejected by a missing handler; it was absent from the registry from the outset. It is also related to the reduced capability-profile behavior in #34526, but demonstrates that automation/heartbeat capabilities can be affected, not only task-management tools.
Expected behavior: supported automation capabilities should be injected consistently across tasks and control/resume surfaces. If heartbeats are intentionally unavailable for a task profile, the product should expose that limitation explicitly rather than encouraging an agent to invent a local-process substitute.