Skip to content

Remote Control created-thread card loses source host and opens child task on controller-local host #36969

Open

Description

@clairernovotny

Summary

A task running on an enrolled Remote Control host can create a child task in a project local to that host. The creation succeeds and the child runs normally, but the created-thread card shown on the controller loses the source host and routes the child thread ID to the controller's local app-server.

This is not task loss or an Iris execution failure. Cross-host task listing later resolves the same thread ID to the Iris Remote Control environment, and an explicit read through that host succeeds.

Environment

  • Controller: macOS 27.0 (26A5388g)
  • Codex Desktop: 26.727.51351, build 6119
  • Codex runtime: 150.0.7871.182
  • Producer: Iris, native Windows, enrolled through Remote Control
  • Affected child thread: 019fce28-1fc8-77a0-8872-6a28efd8c28c

Reproduction

  1. Open a Codex task running on a Remote Control host.

  2. From that task, invoke create_thread for a project local to the remote host.

  3. Observe the successful result from the producer:

    {
      "threadId": "019fce28-1fc8-77a0-8872-6a28efd8c28c",
      "hostId": "local"
    }

    Here, local correctly means local to Iris.

  4. On the Mac controller, click the resulting created-thread card.

  5. The child fails to load / is looked up on the controller-local app-server.

  6. List tasks across connected hosts.

  7. The same thread is returned with an owner equivalent to:

    remote-control:<iris-environment-id>
    
  8. Reading the thread through that resolved host succeeds. The child executed and persisted normally on Iris.

Actual behavior

The producer-relative host alias local crosses the Remote Control boundary without being rebased to the controller-visible Iris host. The created-thread card then navigates using only the bare thread ID and treats it as controller-local.

Expected behavior

A child task created on a Remote Control host should open immediately from the controller.

Codex should either:

  • translate producer-relative local to the producer's controller-visible remote-control:<environment-id> identity and preserve it through the card/navigation path; or
  • resolve the globally unique thread ID across connected hosts, using the source task's host as the primary context, before navigation.

Another host's literal local must never be interpreted as controller-local.

Diagnostic evidence

Inspection of the installed Desktop bundle indicates two compounding seams:

  1. The create_thread adapter appends its process-relative destination host to the result. No producer-to-controller rebase occurs when the producer is a Remote Control Desktop instance.
  2. The created-thread directive/card schema retains threadId or clientThreadId, but not hostId. Card navigation then uses a local route based only on the thread ID.

By contrast, the later cross-host list/read path enumerates connected app-server managers and resolves the canonical Remote Control host, which explains why the same task becomes readable after discovery/hydration.

The relevant Desktop adapter/card implementation does not appear to be present in the public repository. The public app-server code exposes Remote Control environmentId, but controller host association is a Desktop-layer concern.

Suggested regression test

From a controller:

  1. Execute create_thread on a Remote Control host using a project local to that host.
  2. Return the result to the controller.
  3. Before any later catalog synchronization, click the created-thread card.
  4. Assert that the returned/associated host is the canonical Remote Control environment and that the child opens successfully.
  5. Assert that the producer's local alias is never routed to the controller-local app-server.

Related issues

Activity

  1. added
    bugSomething isn't working
    appIssues related to the Codex desktop app
    app-serverIssues involving app server protocol or interfaces
    on Aug 4, 2026
  2. aweeden commented on Aug 16, 2026

    @aweeden

    Additional reproduction on macOS (observed 2026-08-16):

    • Controller: MacBook Pro running Codex Desktop.
    • Remote Control host: Intel Mac mini running an existing repository-backed Codex task.
    • From the MacBook, while interacting with that task executing on the Mac mini, the task was asked to create a fresh child task for work already present on the Mac mini.
    • The desired repository was not exposed by list_projects as a selectable registered remote project.
    • The available projectless create_thread route had no explicit destination-host selector and returned the producer-relative hostId: "local". From the controller, the result did not preserve a clear Mac-mini host identity and the workflow appeared to fail / route ambiguously.
    • Sending the same request through Codex Desktop directly on the Mac mini worked.

    This is confusing because the parent task is visibly executing on the remote Mac mini, so a user reasonably expects a child commissioned by that task either to remain on the same host or to offer an explicit host/project selector. The controller should not reinterpret another host's local, and the created-task card/result should retain the canonical remote host identity.

    This also overlaps #32775's missing explicit destination-host route. The Intel architecture appears incidental; this looks like Desktop host identity/routing rather than a CPU-specific failure. No private repository names, paths, or source material are included here.

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 appapp-serverIssues involving app server protocol or interfacesbugSomething isn't workingremote

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions