openai / openai/codex

Desktop subagent sends progress to historical unrelated task and parent confuses relayed task identity

Open
#42,935 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

app bug model-behavior subagent
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

Summary

A Codex Desktop subagent sent progress messages to an unrelated existing user task instead of its recorded parent. That task woke and relayed messages back, and the parent subsequently confused the unrelated task's ID with the worker's identity.

This is a confirmed agent/tool-selection error and a potential product guardrail/identity-context issue, not a demonstrated backend misdelivery: the outbound call explicitly contained the wrong destination ID.

Environment

macOS, Codex Desktop. Affected worker session metadata records codex-cli 0.153.0-alpha.5 and a thread_spawn source with a parent_thread_id and agent_path /root/stock_session_policy. A current separate bundled binary query returned 0.142.5; this discrepancy is recorded rather than assuming identical runtime versions.

Observed sequence

  • A parent task had a real spawned worker and also referenced an older task for historical context.
  • Worker metadata identifies the current parent correctly.
  • Worker nevertheless called mcp__codex_app__send_message_to_thread with the older task's ID.
  • The first confirmed call was 2026-09-05 03:54:36 UTC (Sep 4 23:54:36 America/New_York). Another was 04:18:13 UTC, delivered at 04:18:17 UTC.
  • Fourteen wrong-destination calls were found in the worker transcript; twelve received messages were found in the unrelated task from 04:18 UTC onward.
  • The unrelated task woke, acknowledged/relayed worker messages, and parent-visible messages then carried that unrelated task as source_thread_id.
  • The parent treated this source ID as worker identity and polled the wrong task. Collaboration status and task status appeared contradictory because they referred to different entities.
  • Work was interrupted after the user noticed the unrelated task activity.

Expected

Subagent-to-parent progress should use its actual parent relationship / collaboration channel. A historical task reference should not become a dispatch destination. Cross-task sending by a subagent should require explicit task-specific authorization or an identity check, and relayed messages should not be mistaken for worker completion receipts.

Investigation requested

Please investigate identity preservation across long/compacted multi-agent sessions and whether desktop cross-task send tools need a guardrail for spawned agents. Distinguish model selection of an incorrect ID from actual transport routing. The parent agent also failed to validate identities and should have caught the unrelated task title/checkouts earlier.

Impact and limits

Unrelated-task wakeups, message contamination, repeated status polling, and delayed implementation. In the inspected destination interval, observed actions were task reads/listing and message relays; no repository write command was found there. This is not a comprehensive whole-machine side-effect audit.

This public report deliberately omits task UUIDs, private repository paths, strategy details, and raw transcripts. Exact local evidence is preserved privately; no session upload has been performed. Reproduction is transcript-backed, not yet reduced to a minimal deterministic test.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the thread_spawn metadata (parent_thread_id and agent_path) and the mcp__codex_app__send_message_to_thread calls in the preserved worker transcript; compare the selected destination with the recorded parent. Done should distinguish model-selected wrong IDs from transport routing and define a guardrail or identity check that prevents unrelated-task relays from being treated as worker identity.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, rust
Domain
ai-infra-agents, desktop-dev
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.