Skip to content

Codex Desktop automation_update schema disagrees with backend (cwds vs projectId) #32873

Open

Description

@Audacity88

What version of the Codex App are you using (From “About Codex” dialog)?

Codex Desktop 26.707.62119 (build 5211).

Bundled/session CLI observed from the affected environment: codex-cli 0.142.5.

What subscription do you have?

API key.

What platform is your computer?

Darwin 25.5.0 arm64 arm

What issue are you seeing?

A local Codex Desktop thread exposes codex_app.automation_update, but the tool's model-visible input schema and its Desktop/backend validator disagree.

The exposed schema accepts cwds for a cron automation and does not expose a projectId field. Updating an existing local automation with the documented fields fails with:

automation_update received invalid arguments: projectId: Invalid input: expected string, received undefined; arguments: Unrecognized key: "cwds".

Trying to supply the existing automation's project ID does not provide a workaround because the exposed tool schema rejects that field:

automation_update received invalid arguments: arguments: Unrecognized key: "projectId".

The same mismatch occurs for both immediate update and reviewable suggested_update calls. The automation definitions remain present and active on disk, but there is no supported callable payload that can update them.

What steps can reproduce the bug?

  1. Open a local project thread in Codex Desktop.
  2. Ensure an existing local cron automation is present.
  3. Inspect or load the exposed codex_app.automation_update tool schema.
  4. Call automation_update in update mode with the existing automation ID, its full preserved fields, and:
    {
      "executionEnvironment": "local",
      "cwds": ["/Users/me/Development"]
    }
  5. Observe that the backend requires projectId and rejects cwds.
  6. Retry with projectId copied from the existing automation's stored project target.
  7. Observe that the exposed tool validator rejects projectId as an unrecognized key.
  8. Restart Codex Desktop, reopen the local task, and repeat. The mismatch persists.
  9. Repeat with suggested_update; the same validation mismatch occurs.

No automation TOML files were edited during this reproduction.

What is the expected behavior?

The model-visible tool schema and the Desktop/backend validator should accept the same automation target fields.

For an existing automation, one of these should work:

  • the tool accepts cwds and resolves the project target internally;
  • the tool exposes and accepts the required projectId; or
  • the update operation resolves the existing project target from the automation ID without requiring it again.

Restarting Desktop should not leave the thread with an impossible tool contract where every valid-looking target payload is rejected.

Additional information

This appears distinct from:

Here, the tool is exposed and reaches argument validation, but the model-visible schema and backend-required schema are mutually incompatible.

The issue prevents safe updates to existing automations. Directly editing automation TOML files would bypass Desktop validation and reload semantics, so it is not a suitable supported workaround.

Activity

  1. added
    bugSomething isn't working
    appIssues related to the Codex desktop app
    tool-callsIssues related to tool calling
    on Jul 13, 2026
  2. wrn4pdzj4v-blip commented on Aug 4, 2026

    @wrn4pdzj4v-blip

    Reproduced a closely related current failure on Codex Desktop for macOS 26.721.81911 (build 5973).

    The exposed automation_update schema now accepts projectId, but it exposes no cwd/cwds/replace-cwd field. Updating existing local cron automations against the only saved project succeeds and preserves all other fields, yet app-managed read-back still retains a stale second project path:

    cwds = ["/Users/me/Project", "/Users/me/RetiredProject"]
    

    Reproduction:

    1. Save exactly one local project, /Users/me/Project.
    2. Start with an existing local automation whose stored definition retains both the canonical and retired paths.
    3. Call the supported automation_update operation with the existing automation ID, current full fields, and the canonical saved projectId.
    4. View the updated automation through the supported app API and inspect the app-managed definition.
    5. The update succeeds, but both cwd entries remain. There is no supported input field to replace/remove the stale cwd.

    Project-local and user Codex configuration contain only the canonical project; local-environment configuration also has no scheduled-task cwd replacement surface. Direct TOML editing was intentionally not used because it would bypass Desktop validation/reload semantics.

    Expected: selecting/updating an automation against a saved project replaces the stored cwd set with that project, or the supported API exposes an explicit replacement field such as cwds/replaceCwds.

    Impact: scheduled automations cannot be safely activated after a project-root migration because the retired root remains an execution target even though the app has only the canonical project saved.

  3. omarpinarecords commented on Nov 9, 2026

    @omarpinarecords

    Related current-build evidence on macOS, ChatGPT desktop 26.1103.60933 (build 25894), November 9, 2026.

    The current tool exposes projectId, but no supported per-task cwds/ordered-folder override. A genuinely local controller task (native hostId: local) successfully called automation_update(mode: "view"); it returned a rendered card, not structured saved fields.

    Read-only inspection of the installed update path and saved definitions established a preservation problem before any write:

    • The update path derives compatibility directories from the selected project's ordered rootPaths.
    • The derived array is assigned as the automation's cwds.
    • Six existing automations have owner-approved individual folder lists that differ from that common project array.
    • Four differ only in supplementary-folder order. One would replace a retained supplementary entry with another project folder; one would add a supplementary folder.
    • The current native input contract has no field to preserve those individual lists during a project-binding change.

    All six operations were stopped before pause/save. No live update or destructive reproduction was attempted; these are source-path/preimage comparison findings, not a claim that a mutation occurred. All 69 saved definitions still matched the baseline.

    This differs from the older comment where stale paths remained after a successful save: on this build, automatic project-derived replacement prevents exact preservation. The shared gap is lack of an explicit supported folder-preservation/replacement contract.

    Expected: preserve existing task folder bindings by default when unrelated fields change, and expose an explicit, reviewable ordered folder replacement when requested. At minimum, provide a preflight diff and reject unapproved membership/order changes rather than silently deriving a different list.

    The related dot-host eligibility boundary is tracked at #54940. Its existing Dots feedback report ID is 6a26fa86c878415080045c6059043ba7; that receipt predates this newly isolated folder-preservation finding, so it is not claimed as a separate submission of this finding.

    No direct automation TOML/database writes, internal RPCs, host overrides, project-folder changes, permission expansion, or UI safety bypass were used. Private paths, project/task names and identifiers, documents and logs are omitted. Is there a supported current API/UI route that preserves exact per-task ordered folder lists while changing the project binding?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appautomationsbugSomething isn't workingtool-callsIssues related to tool calling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions