Concurrent Kiro requests burn through retries on transient 429s #532
Description
Client or integration
Codex App
Area
Provider adapter
English
Summary
Hi. While using Codex Desktop through OpenCodex 2.7.41 with kiro/gpt-5.6-sol, longer tasks are repeatedly interrupted by this error:
exceeded retry limit, last status: 429 Too Many Requests
The underlying Kiro response is a transient throttle rather than hard quota exhaustion:
ThrottlingException: USER_REQUEST_RATE_EXCEEDED: Too many requests, please wait before trying again.
It happens most often when several requests share the same Kiro account. Waiting for a proper cooldown and trying again usually succeeds, but OpenCodex exhausts its retry limit first and stops the whole Codex workflow. I then have to return and manually continue the task.
From the behavior, each request appears to back off independently. While one request is waiting, another can enter, hit the same account-level limit, and consume its own retry budget. A process-wide admission queue and shared cooldown deadline would prevent this burst. A request should also re-check the shared deadline after waking, because another in-flight request may have extended it.
Steps to reproduce
- Run OpenCodex 2.7.41 on Windows and connect Codex Desktop.
- Configure Kiro with
kiro/gpt-5.6-sol. - Start more than one Codex request or tool-call workflow against the same Kiro account.
- Observe a transient
USER_REQUEST_RATE_EXCEEDEDresponse. - One or more workflows exhaust their independent retry budgets and stop with
exceeded retry limit, last status: 429 Too Many Requests. - Wait for the cooldown, continue manually, and observe that the request often succeeds.
Expected behavior
- Treat transient
USER_REQUEST_RATE_EXCEEDEDseparately from hard quota exhaustion. - Honor
Retry-Afterwhen it is present. - Coordinate request admission and cooldown across concurrent Kiro requests in the process.
- Re-check the shared cooldown after each wait.
- Keep retries bounded and show the final upstream error if Kiro does not recover.
I tested a local patch that used a shared admission queue, a shared cooldown deadline, and bounded retries. In a mocked concurrency test, a waiting request respected an extended cooldown instead of slipping through. Parallel Codex tool-call runs also completed normally, and my setup became much more stable. The patch modifies the installed npm package, so it will disappear on the next update; I would appreciate a fix in the project itself.
Environment
- OpenCodex: 2.7.41
- OS: Windows 11
- Provider/model: Kiro /
kiro/gpt-5.6-sol
한국어
요약
안녕하세요. Windows에서 OpenCodex 2.7.41을 통해 Codex Desktop을 사용하고 있으며, 모델은 kiro/gpt-5.6-sol입니다.
작업이 길어질 때 아래 오류로 흐름이 자주 끊깁니다.
exceeded retry limit, last status: 429 Too Many Requests
실제 Kiro 응답은 할당량이 완전히 소진된 경우가 아니라 일시적인 요청 제한입니다.
ThrottlingException: USER_REQUEST_RATE_EXCEEDED: Too many requests, please wait before trying again.
같은 Kiro 계정을 사용하는 요청이 여러 개 겹칠 때 특히 자주 발생합니다. 충분히 기다렸다가 다시 보내면 대부분 성공하지만, OpenCodex가 먼저 재시도 횟수를 모두 소진하고 Codex 작업 전체를 중단합니다. 결국 제가 다시 돌아와 직접 작업을 이어줘야 합니다.
현재 동작을 보면 각 요청이 서로의 상태를 모른 채 개별적으로 대기하고 재시도하는 것 같습니다. 한 요청이 기다리는 동안 다른 요청이 들어오면 같은 계정 단위 제한에 다시 걸리고, 각자 재시도 횟수만 소모하게 됩니다. 프로세스 전체에서 Kiro 요청의 진입을 조율하는 공용 큐와 cooldown 종료 시각을 공유하면 이런 연속 요청을 줄일 수 있을 것 같습니다. 대기를 마친 요청도 그 사이 다른 요청이 cooldown을 연장했을 수 있으므로, 깨어난 뒤 공용 종료 시각을 다시 확인해야 합니다.
재현 방법
- Windows에서 OpenCodex 2.7.41과 Codex Desktop을 연결합니다.
- Kiro 모델로
kiro/gpt-5.6-sol을 설정합니다. - 같은 Kiro 계정을 사용하는 Codex 요청이나 도구 호출 작업을 둘 이상 동시에 실행합니다.
- 일시적인
USER_REQUEST_RATE_EXCEEDED응답이 발생하는지 확인합니다. - 각 요청이 개별 재시도 횟수를 소진하고
exceeded retry limit, last status: 429 Too Many Requests로 중단되는지 확인합니다. - cooldown이 지난 뒤 수동으로 작업을 이어가면 다시 성공하는 경우가 많습니다.
기대 동작
- 일시적인
USER_REQUEST_RATE_EXCEEDED와 실제 할당량 소진을 구분해 처리해야 합니다. Retry-After헤더가 있으면 해당 값을 따라야 합니다.- 동시에 들어오는 Kiro 요청들이 공용 admission queue와 cooldown 값을 공유해야 합니다.
- 대기가 끝난 뒤에는 공용 cooldown이 연장되었는지 다시 확인해야 합니다.
- 재시도 횟수는 제한하되, 끝까지 회복되지 않으면 마지막 upstream 오류를 그대로 보여줘야 합니다.
공용 요청 큐와 cooldown 종료 시각, 제한된 재시도를 적용한 로컬 패치로 테스트해봤습니다. 동시성 모의 테스트에서는 대기 중인 요청이 연장된 cooldown을 무시하고 통과하지 않았고, Codex 도구 호출을 병렬로 실행한 테스트도 정상적으로 끝났습니다. 실제 사용 중 끊기는 빈도도 크게 줄었습니다. 다만 설치된 npm 패키지를 직접 수정한 상태라 다음 업데이트 때 사라지므로, 프로젝트 자체에 정식으로 반영되면 좋겠습니다.
환경
- OpenCodex: 2.7.41
- 운영체제: Windows 11
- 제공자/모델: Kiro /
kiro/gpt-5.6-sol
Checks
- I searched existing issues and documentation.
- I removed secrets, tokens, account details, request credentials, and personal data.
Translated Message
Original language: Korean
Summary
Hello. I am using Codex Desktop through OpenCodex 2.7.41 on Windows, with the model kiro/gpt-5.6-sol.
When tasks take longer, the flow is often interrupted by the following error:
exceeded retry limit, last status: 429 Too Many Requests
The actual Kiro response is a temporary request limit rather than complete exhaustion of the quota:
ThrottlingException: USER_REQUEST_RATE_EXCEEDED: Too many requests, please wait before trying again.
This occurs most frequently when multiple requests overlap with the same Kiro account. Waiting sufficiently and retrying usually succeeds, but OpenCodex exhausts all its retries first, halting the entire Codex workflow. Ultimately, I have to return and manually continue the task.
From the current behavior, it seems that each request is waiting and retrying individually without knowing the status of others. While one request is waiting, if another comes in, it hits the same account-level limit and consumes its own retry budget. A shared admission queue and cooldown expiration time across the entire process could reduce such consecutive requests. A request should also check the shared cooldown again after waking up because another in-flight request might have extended it.
Steps to reproduce
- Connect Codex Desktop with OpenCodex 2.7.41 on Windows.
- Set Kiro with
kiro/gpt-5.6-sol. - Simultaneously execute more than one Codex request or tool call using the same Kiro account.
- Check for a transient
USER_REQUEST_RATE_EXCEEDEDresponse. - Verify if each request exhausts its independent retry budget and stops with
exceeded retry limit, last status: 429 Too Many Requests. - After the cooldown, manually resume the task and often observe that it succeeds.
Expected behavior
- Handle transient
USER_REQUEST_RATE_EXCEEDEDseparately from actual quota exhaustion. - Follow
Retry-Afterwhen present. - Coordinate the admission of requests and cooldowns across concurrent Kiro requests in the process.
- Re-check the shared cooldown after each wait.
- Keep retries limited and show the final upstream error if Kiro does not recover.
I tested a local patch that applied a shared admission queue, a shared cooldown expiration time, and bounded retries. In a mocked concurrency test, a waiting request respected an extended cooldown instead of slipping through. Parallel Codex tool-call runs also completed successfully, and the frequency of interruptions during actual use significantly decreased. However, since I modified the installed npm package, it will disappear with the next update; it would be great if this was formally reflected in the project itself.
Environment
- OpenCodex: 2.7.41
- OS: Windows 11
- Provider/model: Kiro /
kiro/gpt-5.6-sol
Activity
github-actions commentedon Jul 27, 2026
[-]Concurrent Kiro requests burn through retries on transient 429s / 동시 요청에서 일시적 429로 작업이 끊기는 문제[/-][+]Concurrent Kiro requests burn through retries on transient 429s[/+]Ingwannu commentedon Jul 27, 2026
Confirmed on current dev. The current Kiro retry contract explicitly returns HTTP 429 after one adapter call, and there is no process-wide throttle state, so concurrent requests can independently consume client retry budgets.
I am adding bounded coordination only for transient Kiro throttles (
USER_REQUEST_RATE_EXCEEDEDand validRetry-After): a shared cooldown deadline, one post-cooldown probe, followers that wait and re-check an extended deadline, abort-aware waits, and a strict retry cap. Normal parallel requests remain parallel before a throttle; hard quota shapes and unrelated HTTP errors will not be replayed. Concurrent regression tests will pin the shared-gate behavior.Ingwannu commentedon Jul 27, 2026
Fixed on
devin e347916.Root cause: transient Kiro 429s had no adapter-level shared throttle state, so concurrent callers independently spent their retry budgets and could amplify an upstream throttle.
Transient
USER_REQUEST_RATE_EXCEEDEDresponses now use a process-wide shared cooldown with one post-cooldown probe, follower waiting and deadline re-checks, abort-aware release,Retry-Afterhandling, and a strict three-attempt cap. Healthy traffic remains parallel until a throttle is observed. Hard quota responses and ordinary 5xx errors are not replayed; stream-level throttles register the same cooldown for the next client replay.Concurrent, extended-deadline, cancellation, quota, and bounded-retry regressions pass, along with the focused Kiro suite (157 passing) and full repository suite (4,951 passing).