openai / openai/codex

Bug: Invalid Value: 'input.call_id'. Function call output requires call_id.

Open
#43,944 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app app-server azure bug
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
  1. Create or open two Codex tasks: Task A and Task B.
  2. In Task A, ask Codex to continue work in Task B.
  3. Task A invokes the built-in send_message_to_thread tool.
  4. Open or inspect Task B.
  5. Task B fails before executing the requested work.
  6. 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_id and 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

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 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.