Repository navigation
V2 cross-provider sub-agent loses NEW_TASK body in encrypted_content #92
Description
Current status
This remains an upstream-tracking issue, not an unfixed ordinary OpenCodex routing bug.
OpenCodex now has an experimental mitigation:
- PR fix(agents): add opt-in encrypted v2 recovery #1540 added an opt-in encrypted V2 task recovery path for eligible native Codex
NEW_TASKmessages before dispatch to a routed provider. - Recovery is deliberately disabled by default and has strict credential, loopback, cache, timeout, and fail-closed boundaries.
- PR fix(agents): reroute recovered tasks through healthy fallback #1556 fixed fallback routing after a recovered task becomes readable, so a healthy routed fallback can be selected after recovery.
Those changes make some native-parent -> routed-child V2 workflows usable, but they do not change the underlying wire contract. The original task can still arrive only as backend ciphertext, and a routed provider cannot decrypt that ciphertext itself.
PR #1540 explicitly treats recovery as a compatibility path rather than a protocol fix. The upstream plaintext/task-delivery limitation therefore remains the close condition for this issue.
Summary
With multiAgentMode: "v2", a native Codex parent can select a routed child model, but the child task may be delivered only through encrypted_content. A third-party routed provider cannot read backend ciphertext and therefore cannot execute the task without an additional compatibility mechanism.
The original reproduction used:
- parent: native
gpt-5.6-sol - child: routed
xai/grok-4.5 fork_turns: "none"- V2 collaboration mode
The child model override was applied correctly, but the NEW_TASK payload was not available as plaintext.
Current expected behavior
OpenCodex should preserve the following contract:
- Native V2 passthrough remains unchanged.
- Routed V2 tasks that are already readable continue normally.
- An unreadable encrypted task fails closed unless the user has explicitly enabled an eligible recovery path.
- Experimental recovery must never silently weaken credential-destination, loopback, cancellation, privacy, or cache boundaries.
- Recovery failure must preserve the clear
unreadable_encrypted_agent_taskclass rather than sending ciphertext to the routed model as if it were usable input.
User-visible mitigation
For heterogeneous native-parent -> routed-child delegation, users currently have two practical choices:
- use V1/plaintext-compatible collaboration behavior; or
- explicitly enable the experimental V2 recovery path introduced by fix(agents): add opt-in encrypted v2 recovery #1540, accepting its documented quota, latency, backend-coupling, and fidelity limitations.
The Dashboard compatibility UX is tracked separately in #1533.
Why this stays open
The experimental recovery path is not proof that the transport problem is solved. It performs a bounded compatibility recovery around an upstream ciphertext contract.
Close this issue only when the upstream Codex collaboration surface provides a supported task-delivery contract that routed children can consume directly, or when the upstream limitation otherwise ceases to apply.
Related
- [UX] Explain native-to-routed V2 compatibility and recovery state for preferred sub-agents #1533 - Dashboard warning/recovery-state UX for routed preferred sub-agents
- fix(agents): add opt-in encrypted v2 recovery #1540 - merged opt-in encrypted V2 recovery
- fix(agents): reroute recovered tasks through healthy fallback #1556 - merged routed fallback re-selection after recovery
Activity
lidge-jun commentedon Jul 11, 2026
already issued by bug in upstream
will be patched soon upstream and here both
im keep pushing it!
Wibias commentedon Jul 11, 2026
Shouldnt this be fixed by #94 @webmastertorch or am I confusing something here? Just woke up though, lol.
Wibias commentedon Jul 11, 2026
@webmastertorch Can u test v2.7.8 please
lidge-jun commentedon Jul 11, 2026
@Wibias spawning errors in every routers fuck oai lol
Wibias commentedon Jul 11, 2026
yea just encountered something similar by using fable before and changing into gpt-sol as fable became rate-limited.. On it.. @lidge-jun lol
Edit:
Existing history produced under Claude Fable 5
↓
Switch thread to GPT-5.6 Sol
↓
Sol has a smaller context window
950,000 → 353,400
↓
Codex decides the oversized history must be compacted first
↓
Codex creates a compaction context using the previous model
anthropic/claude-fable-5
↓
Fable quota is exhausted
↓
Anthropic returns 429
↓
Pre-sampling compaction fails
↓
The actual Sol request is never sent
edit-2: welp, thats actually an codex problem itself, yikes.
Wibias commentedon Jul 11, 2026
Spinned up an issue on codex github.. Lets see.. openai/codex#32453
lidge-jun commentedon Jul 11, 2026
@Wibias use v1 at gui everything is stable
Wibias commentedon Jul 11, 2026
@lidge-jun Yea, i guess for now.
lidge-jun commentedon Jul 18, 2026
Status update after a fresh root-cause pass on current
dev:NEW_TASKwith empty plaintext + a pure Fernetencrypted_contentblock (rewritten: 0,parsedContent: "Message Type: NEW_TASK\nPayload:\n"). The model override applies; the task body is lost.tests/multi-agent-compat.test.ts.devcommit b6281b7): README ×3 and the sub-agent-surface guide ×3 no longer claim cross-model v2 spawns unconditionally stick; they name this limitation and point at v1 as the reliable heterogeneous-provider surface.SpawnAgentArgs.messagebe retained as plaintext (or duplicated beside the ciphertext) when the child's resolved model isn't served by the encrypting backend. Draft is ready and will be filed separately.Note for readers of the earlier comments: the compaction/429 reports mixed in here are a separate issue (upstream #32453-family), not this encryption path. Keeping this open to track the upstream fix.
docs(sub-agents): state v2 native-to-routed NEW_TASK encryption limit…
lidge-jun commentedon Jul 22, 2026
Status summary for anyone landing here: this remains reproducible and open intentionally. Root cause is on the upstream Codex CLI client side — the NEW_TASK body is sent as
encrypted_contentthat a cross-provider child cannot decrypt, so no proxy-side transformation can recover it. The documented reliable workaround is to use V1 sub-agent mode for heterogeneous (cross-provider) subagents.We're keeping this open to track the upstream fix.
lidge-jun commentedon Jul 23, 2026
Periodic status check (2026-07-24): unchanged, still upstream-blocked.
devnow fails fast before routed dispatch when the current task is unreadable (hardening rebuilt in PR fix(v2): harden unreadable routed agent tasks #336's branch), and the docs consistently point to V1 sub-agent mode as the reliable heterogeneous-provider surface.Keeping open for upstream tracking.
Wibias commentedon Jul 26, 2026
Cross-link
Related to (but not the same as) #418 / #290.
#418 is custom-parent → custom-child V2 delegation failing at the parent
spawn_agentargument / collaboration-lifecycle stage (missing field message, no child-created). This issue (#92) is native → routed V2 where the child is spawned but theNEW_TASKbody is Fernet ciphertext.Same V2 surface; different failure mode. Keeping this issue focused on the upstream encrypted-content limitation.
42 remaining items
docs(fr): repair sub-agent guide prose and document the Models toggle
feat(agents): keep ChatGPT-native models on v1 when the catalog is in v2
docs(fr): repair sub-agent guide prose and document the Models toggle
Wibias commentedon Aug 16, 2026
Triage hierarchy
Treat this issue as the parent tracker for the upstream encrypted V2 task transport limitation.
#1533 is a mitigation/UX slice. It should not be treated as resolving the underlying encrypted-task protocol limitation tracked here.
feat(agents): keep ChatGPT-native models on v1 when catalog is v2 (#1728
feat(agents): treat a v1 pin as an eligible leaf subagent
lidge-jun commentedon Aug 16, 2026
Wave 0 triage note: this stays labelled
upstream-trackingand is excluded from the ocx release-blocker count. It is tracked against the upstream defect, not as work blocking an OpenCodex release. No action requested here; the label and this note only make the blocker statistics honest.lidge-jun commentedon Aug 18, 2026
Closing the local tracker. The protocol defect is upstream (openai/codex#32031, still open) and cannot be fixed from the proxy side. The mitigations this repository can offer are already on
dev: opt-in routed-V2 recovery via #1540/#1556, fail-closed so a lost NEW_TASK body surfaces instead of silently degrading. Further recovery work (e.g. the #1794 operator surface) can proceed as its own feature without this tracker. Reopen if the upstream fix ships and the relay still drops the body.docs(sub-agents): state v2 native-to-routed NEW_TASK encryption limit…
docs(devlog): triage every open bug issue and PR against dev
fix(agents): preserve recovery tool maps
fix(agents): preserve recovery tool maps
feat(agents): keep ChatGPT-native models on v1 when catalog is v2 (li…
feat(agents): treat a v1 pin as an eligible leaf subagent