Bug: Invalid Value: 'input.call_id'. Function call output requires call_id.
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of the Codex App are you using (From “About Codex” dialog)?
Version 26.901.51231
What subscription do you have?
Using Azure OAI where I hit this issue - also using a pro licence where the issue doesn't occur
What platform is your computer?
Macos
What issue are you seeing?
Sending a prompt from one Codex task to another can cause the destination task to fail with:
Invalid Value: 'input.call_id'. Function call output requires call_id.
After this occurs, every subsequent prompt in the destination task fails with the same error. Creating a new task and submitting the same prompt normally succeeds.
What steps can reproduce the bug?
Steps to reproduce
- Create or open two Codex tasks: Task A and Task B.
- In Task A, ask Codex to continue work in Task B.
- Task A invokes the built-in
send_message_to_threadtool. - Open or inspect Task B.
- Task B fails before executing the requested work.
- Send any additional prompt directly to Task B.
Actual result
Task B returns the following error for the delegated prompt and all subsequent prompts:
Invalid Value: 'input.call_id'. Function call output requires call_id.
Retrying inside Task B does not recover it. A newly created task works.
What is the expected behavior?
Expected result
The delegated prompt should appear in Task B as a normal incoming delegation/message and start a valid turn.
A failed delegation should not persist malformed tool state that prevents every subsequent turn from running.
Additional information
Suspected cause
The destination transcript appears to receive the cross-task delegation as a function_call_output without the originating function call or its call_id.
The invalid item is then retained in conversation history and replayed with every subsequent request.
Suggested remediation
- Store cross-task deliveries as delegation/user-input events, rather than orphaned function-call outputs.
- Preserve the original
call_idand corresponding call when function-output semantics are required. - Validate incoming transcript items before persisting them.
- Roll back or quarantine malformed items when request validation fails.
- Add recovery logic for tasks that already contain orphaned function outputs.
- Add a regression test covering Task A sending a message to an idle Task B.
Impact
The destination task becomes unusable and its working context is effectively stranded. Users must create a replacement task and manually transfer relevant context.
Workaround
Create a new task and submit the prompt directly rather than using cross-task messaging.
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 by locating the built-in send_message_to_thread entry point and the code that persists or replays destination task transcript items. Reproduce the failure with an idle Task B, then trace validation and recovery for the orphaned function-call output. Done means delegated messages create a valid turn, malformed state does not poison later prompts, and a regression test covers Task A sending to Task B.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- backend-api-design
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100