Client or integration
Codex CLI (also observed through Codex App with WSL as its backend), version 0.149.0.
Provider or upstream service
Kiro
OpenCodex version
2.29.0
Endpoint or capability
POST /v1/responses — function tools and the parallel_tool_calls request hint
Current behaviour
Codex sends a normal Responses request containing parallel_tool_calls: true. OpenCodex parses this into options.parallelToolCalls === true, then the Kiro adapter rejects the request locally with HTTP 400 before dispatching it upstream:
Kiro does not support parallel tool calls
This happens even though the routed Kiro catalog row advertises supports_parallel_tool_calls: false. That catalog metadata does not reliably suppress the request-level hint in Codex.
Expected behaviour
The Kiro adapter should accept the request and continue translating tools on Kiro's serialized wire. In the Responses contract, parallel_tool_calls: true permits parallel calls; it does not require the upstream transport to implement a corresponding request flag or produce parallel calls.
Kiro's translated request has no parallel-tool-call field, so OpenCodex can safely ignore this hint while retaining serialized Kiro execution.
Minimal redacted request or reproduction
curl -i http://127.0.0.1:10100/v1/responses \
-H 'content-type: application/json' \
-H 'authorization: Bearer <REDACTED>' \
--data '{
"model": "kiro/claude-haiku-4.5",
"input": "test",
"stream": true,
"parallel_tool_calls": true,
"tools": [{
"type": "function",
"name": "bash",
"description": "Run a shell command",
"parameters": {"type": "object"}
}]
}'
The same request shape is emitted by Codex CLI/App 0.149.0 during an ordinary tool-enabled turn.
Actual response or error
HTTP/1.1 400 Bad Request
Kiro does not support parallel tool calls
Upstream documentation
OpenAI Responses API reference for parallel_tool_calls: https://platform.openai.com/docs/api-reference/responses/create#responses_create-parallel_tool_calls
There is no public Kiro wire specification for this exact field. The concrete integration requirement is also supported by Codex commit openai/codex@86b1123, which removes supports_parallel_tool_calls from ModelInfo/the bundled catalog and sets parallel_tool_calls: true for regular and remote-compaction prompts (while preserving the Responses Lite exception).
Suggested mapping or implementation notes
Remove only the Kiro capability validation that throws when options.parallelToolCalls === true. Do not add a parallel field to the Kiro wire. Keep all other Kiro capability checks unchanged.
A focused regression can parse the Codex-shaped request above, assert that parallelToolCalls remains true, build the Kiro request successfully, and verify that the translated tool catalog is still present.
Additional context and attachments
This is not caused by WSL or a bad local catalog path. The Kiro catalog value is correct; the incompatibility is the adapter's overly strict interpretation of a permissive client hint.
Codex 0.148.0 and 0.149.0 source inspection showed ordinary prompts can send parallel_tool_calls: true. The linked later Codex commit makes the direction explicit by removing the model capability metadata entirely.
Related but not duplicate: #1650 concerns forcing parallelToolCalls=false for OpenAI Chat providers.
Checks
Client or integration
Codex CLI (also observed through Codex App with WSL as its backend), version 0.149.0.
Provider or upstream service
Kiro
OpenCodex version
2.29.0
Endpoint or capability
POST /v1/responses— function tools and theparallel_tool_callsrequest hintCurrent behaviour
Codex sends a normal Responses request containing
parallel_tool_calls: true. OpenCodex parses this intooptions.parallelToolCalls === true, then the Kiro adapter rejects the request locally with HTTP 400 before dispatching it upstream:Kiro does not support parallel tool callsThis happens even though the routed Kiro catalog row advertises
supports_parallel_tool_calls: false. That catalog metadata does not reliably suppress the request-level hint in Codex.Expected behaviour
The Kiro adapter should accept the request and continue translating tools on Kiro's serialized wire. In the Responses contract,
parallel_tool_calls: truepermits parallel calls; it does not require the upstream transport to implement a corresponding request flag or produce parallel calls.Kiro's translated request has no parallel-tool-call field, so OpenCodex can safely ignore this hint while retaining serialized Kiro execution.
Minimal redacted request or reproduction
The same request shape is emitted by Codex CLI/App 0.149.0 during an ordinary tool-enabled turn.
Actual response or error
Upstream documentation
OpenAI Responses API reference for
parallel_tool_calls: https://platform.openai.com/docs/api-reference/responses/create#responses_create-parallel_tool_callsThere is no public Kiro wire specification for this exact field. The concrete integration requirement is also supported by Codex commit openai/codex@86b1123, which removes
supports_parallel_tool_callsfromModelInfo/the bundled catalog and setsparallel_tool_calls: truefor regular and remote-compaction prompts (while preserving the Responses Lite exception).Suggested mapping or implementation notes
Remove only the Kiro capability validation that throws when
options.parallelToolCalls === true. Do not add a parallel field to the Kiro wire. Keep all other Kiro capability checks unchanged.A focused regression can parse the Codex-shaped request above, assert that
parallelToolCallsremainstrue, build the Kiro request successfully, and verify that the translated tool catalog is still present.Additional context and attachments
This is not caused by WSL or a bad local catalog path. The Kiro catalog value is correct; the incompatibility is the adapter's overly strict interpretation of a permissive client hint.
Codex 0.148.0 and 0.149.0 source inspection showed ordinary prompts can send
parallel_tool_calls: true. The linked later Codex commit makes the direction explicit by removing the model capability metadata entirely.Related but not duplicate: #1650 concerns forcing
parallelToolCalls=falsefor OpenAI Chat providers.Checks