Native subagent reports to unrelated fork via cross-thread messaging instead of its recorded parent
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
Summary
A native subagent spawned by thread A sent a progress report to thread B, a user-created fork of A with a different active task. B then responded to that unrelated report.
The sender explicitly supplied B's ID to mcp__codex_app__send_message_to_thread. This is not evidence that the transport delivered to the wrong requested ID. It is an observed parent-routing/tool-selection failure, with a possible tool-discovery or runtime contribution that remains unconfirmed.
Environment
- Codex Desktop on macOS.
- Affected fork's session metadata records bundled CLI
0.154.0-alpha.6.2. - Native collaboration subagents; implementation worker spawned with
fork_turns: "all". - Code-mode tool orchestration via
functions.exec; Codex app thread-management tools also available. - Custom orchestration guidance is present. The currently inspected guidance explicitly distinguishes native subagent reporting from cross-task messaging; its exact incident-time contents have not been established.
- Exact Desktop About version and effective worker model are not established by this report.
Observed sequence (2026-09-14, UTC)
Thread IDs and business content are replaced with A/B/W below.
- 05:07:06: B is created as a fork of A. Session metadata records
forked_from_id: A. B is subsequently used for a different task. - 06:36:58: While handling that different task, B attempts
collaboration.interrupt_agentfor an agent from A's inherited history. It getslive agent path /root/<historical-worker> not found. This suggests confusion between inherited history and live team membership, not proof that the fork owns A's agents. - 07:06:38: A spawns native worker W. W's session metadata records:
{ "source": { "subagent": { "thread_spawn": { "parent_thread_id": "A", "depth": 1, "agent_path": "/root/renewal_model_integration", "agent_role": "worker" } } } } - 07:06:51: W searches
ALL_TOOLSforsend_message|collaboration|agent. Its runtime instructions explicitly say collaboration tools are direct calls and are absent fromfunctions.exec'stools.*namespace. They also state that its final response is delivered to its parent. - 07:17:45: W calls
mcp__codex_app__list_threads({limit:50}). - 07:17:54: W explicitly calls:
await tools.mcp__codex_app__send_message_to_thread({ threadId: "B", // not recorded parent A prompt: "<implementation progress report>" }); - B records an incoming
codex_delegationwithsource_thread_id: Wand the implementation report. B replies to that report at 07:18:02, despite its active subject being unrelated.
These observations come from read-only inspection of the parent, fork, and worker rollout records. No synthetic reproduction has been attempted.
Expected behavior
- A native worker should report to its immediate spawning coordinator through native messaging or its final response.
- Parent identity should be unambiguous and should not require discovery through the user-facing task list.
- If native progress messaging is unavailable, the worker should fall back to its native final response, not infer a destination from related/forked chats.
- A fork should not treat inherited agent references as current live team ownership.
- Cross-task messages from native workers should require an explicitly assigned destination/purpose, or otherwise have a guardrail against accidental unrelated-thread sends.
Impact
An unrelated task is resumed and its context contaminated by a worker update. The intended coordinator may miss the update. This creates a risk of scope confusion; this report does not establish unauthorized external writes or business-data corruption resulting from the misplaced message.
Uncertainty / investigation request
The immediate wrong-ID selection is confirmed. The logs inspected do not prove that native collaboration messaging was actually unavailable to W; absence from ALL_TOOLS is not proof of absence from direct tool declarations. Please investigate whether this is model/tool-selection behavior alone or whether worker tool exposure, parent-identity presentation, or fork-context handling contributes.
Useful regression coverage would include a native worker whose parent has a user-created sibling fork, a missing/ambiguous progress-message capability, and a fork containing historical subagent references.
Privacy
No raw conversations, business data, account identifiers, private paths, credentials, or original thread IDs are included. A/B/W are placeholders. This report deliberately separates confirmed routing behavior from unverified runtime hypotheses.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the parent, fork, and worker rollout records, including session metadata and the ALL_TOOLS inspection, then trace the native collaboration and mcp__codex_app__send_message_to_thread entry points. No source files or tests are named in the report. Done means establishing whether parent identity, tool exposure, or fork handling contributes and adding regression coverage for a sibling fork, missing or ambiguous messaging, and historical subagent references.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- ai-infra-agents
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100