“Turn timed out after 600000ms” pada provider Codex NanoClaw berarti Responses WebSocket Codex berhenti mengirim event, dan kesalahan pertama yang dilaporkan Codex baru muncul setelah timer giliran tetap NanoClaw selama sepuluh menit sudah terpicu. Codex menunggu lima menit untuk stream idle, diam-diam mencoba lagi untuk pertama kalinya, dan hanya melaporkan percobaan ulang kedua. Kami mereproduksinya pada 1 Oktober 2026 dengan Codex 0.138.0 — versi dalam laporan bug — dan 0.155.1, versi yang saat ini dipin NanoClaw, terhadap endpoint lokal yang menerima koneksi lalu diam.
Ini adalah reproduksi di balik NanoClaw issue #3338, yang masih terbuka tanpa balasan maintainer saat diperiksa. Untuk pilihan provider itu sendiri, lihat biaya dan provider API NanoClaw; jika bot diam di Telegram karena alasan lain, lihat NanoClaw Telegram tidak merespons.
Yang Anda lihat
Pesan kepada bot tidak mendapat jawaban — tanpa kesalahan dan tanpa balasan sebagian — selama sepuluh menit, lalu muncul kesalahan. Pesan yang dikirim selama itu tampaknya menghilang. Dalam log:
# Codex, inside the agent container (from the issue; our 0.155.1 run printed the same reason)
stream error: idle timeout waiting for websocket
stream disconnected - retrying sampling request (1/5 ...)
# NanoClaw, ten minutes after the message
Error: Turn timed out after 600000msYang ditunjukkan reproduksi
| Detik sejak giliran dimulai | Codex 0.138.0 | Codex 0.155.1 (pin NanoClaw) |
|---|---|---|
| ≈1–16 | Permintaan pertama dikirim melalui WebSocket; tidak ada balasan | Permintaan pemanasan, ditutup oleh Codex pada 16 dtk; permintaan sebenarnya menyusul |
| ≈300–316 | Permintaan pertama mengalami timeout; Codex mengirim ulang permintaan giliran — tanpa notifikasi | Timeout idle; percobaan ulang 1 dicatat — tanpa notifikasi |
| 600 | Timer NanoClaw mengakhiri giliran: “Turn timed out after 600000ms” | |
| ≈601–616 | Timeout idle; “retrying sampling request (1/5)” dicatat — masih tanpa notifikasi (sama sekali tidak ada dalam 750 dtk) | Notifikasi error pertama: “Reconnecting... 2/5”, “idle timeout waiting for websocket” — terlambat 15 detik |
Endpoint tersebut adalah pengganti yang menerima WebSocket dan tidak mengirim apa pun; kliennya adalah biner app-server Codex yang sebenarnya, dijalankan dengan panggilan yang sama seperti yang dibuat NanoClaw dan dinilai berdasarkan aturan NanoClaw sendiri — notifikasi kesalahan apa pun atau giliran yang selesai mengakhirinya, jika tidak timer sepuluh menit yang mengakhiri.
Mengapa waktunya sangat tidak selaras
- Codex menunggu 300 detik untuk event berikutnya pada stream Responses sebelum menganggap stream mati, dan mencoba lagi hingga lima kali. Itu adalah default untuk provider OpenAI bawaan pada kedua versi.
- Codex menyembunyikan percobaan ulang WebSocket pertama. Kode percobaannya menyatakannya dalam komentar — “In release builds, hide the first websocket retry notification to reduce noisy transient reconnect messages” — sehingga frontend tidak mendengar apa pun sampai percobaan ulang kedua, sekitar sepuluh menit kemudian.
- NanoClaw memberi giliran Codex tepat 600.000 ms dan mengakhirinya pada notifikasi kesalahan apa pun. Dua jendela idle ditambah pemanasan Codex lebih lama daripada itu, sehingga dengan pengaturan default, timer menang.
Pesan yang dikirim selama diam akan hilang
NanoClaw mengirim tindak lanjut yang tiba selama giliran aktif ke turn/steer Codex. Dalam pengujian, Codex menerimanya ke giliran yang macet dan tidak mengirim apa pun yang baru ke upstream; setelah timeout, melanjutkan thread menunjukkan prompt asli dalam riwayat, tetapi bukan pesan yang diarahkan. Itulah yang membuat bot tampak benar-benar macet: semua yang Anda ketik masuk ke giliran yang tidak akan pernah selesai.
Cara keluar dari kondisi ini
Terverifikasi: setelah timeout, pesan berikutnya melanjutkan thread yang sama pada app-server baru — itulah yang dilakukan NanoClaw — dan dalam pengujian selesai dalam 0.16 detik setelah endpoint merespons. Jadi: tunggu timeout, lalu kirim ulang apa pun yang Anda ketik selama diam. Jika pesan berikutnya juga macet, koneksi upstream masih menjadi masalah — periksa status OpenAI dan, jika container mengakses OpenAI melalui proxy, apakah proxy tersebut meneruskan peningkatan WebSocket (pull request #2672 menjelaskan proxy yang tidak melakukannya; tidak diuji di sini).
Opsi yang memperpendek waktu tunggu, telah diukur tetapi belum dirilis:
| Perubahan | Kesalahan pertama yang dilihat NanoClaw | Konsekuensi |
|---|---|---|
| Codex melalui HTTP/SSE alih-alih WebSockets — PR #3851, terbuka, belum digabungkan | 300 dtk: “Reconnecting... 1/5” | Notifikasi menyatakan Codex akan mencoba lagi, dan memang melakukannya, tetapi NanoClaw mengakhiri giliran saat itu — kegagalan lima menit, bukan sepuluh menit |
Codex stream_idle_timeout_ms = 60.000 pada WebSockets | 136 dtk | NanoClaw menulis sendiri config.toml Codex, jadi ini merupakan perubahan kode, bukan pengaturan yang dapat Anda tambahkan |
Keduanya tetap mengakhiri giliran sebagai kegagalan. Yang ditunjukkan oleh pengukuran adalah bahwa masalahnya berada di sisi NanoClaw — memperlakukan kesalahan yang sedang mencoba lagi sebagai kemajuan, bukan akhir, atau mengukur anggaran giliran sejak event nyata terakhir — tetapi itu adalah inferensi dari pengujian ini, bukan perbaikan yang telah dikonfirmasi maintainer.
Pertanyaan umum
Mengapa agen Codex milik NanoClaw diam selama sepuluh menit lalu mengalami timeout?
Karena tanda masalah pertama yang bersedia dilaporkan Codex muncul setelah NanoClaw sudah menyerah. Saat Responses WebSocket berhenti mengirim event, Codex menunggu timeout idle selama 300 detik lalu mencoba lagi — dan dalam build rilis, sengaja menyembunyikan percobaan ulang WebSocket pertama. Notifikasi kesalahan pertama muncul setelah jendela 300 detik kedua, melewati timer giliran tetap NanoClaw sebesar 600.000 ms. Kami mereproduksinya pada 1 Oktober 2026: Codex 0.138.0 sama sekali tidak mengirim notifikasi dalam 750 detik, sedangkan 0.155.1 — pin NanoClaw saat ini — mengirim notifikasi pertama pada 615.7 detik; aturan NanoClaw mengakhiri giliran pada 600.
Apa yang terjadi pada pesan yang saya kirim saat bot macet?
Pesan tersebut diarahkan ke giliran yang macet dan, dalam pengujian kami, hilang. NanoClaw mengarahkan tindak lanjut yang tiba selama giliran aktif ke turn/steer Codex; Codex menerimanya ke dalam giliran macet yang sama, tidak mengirim apa pun yang baru ke upstream, dan setelah timeout serta resume, teks yang diarahkan itu tidak ada dalam riwayat thread. Kirim ulang apa pun yang Anda ketik selama bot diam setelah bot menjawab lagi.
Bagaimana cara memulihkan diri dari timeout giliran Codex di NanoClaw?
Kirim pesan berikutnya. NanoClaw memulai app-server baru dan melanjutkan thread yang sama; dalam pengujian kami, giliran yang dilanjutkan selesai dalam 0.16 detik setelah endpoint merespons, dengan prompt asli tetap ada dalam riwayat. Jika upstream masih macet, giliran baru akan macet dengan cara yang sama, jadi periksa status OpenAI atau jalur jaringan Anda terlebih dahulu — dan kirim ulang tindak lanjut yang tertelan.
Apakah mengubah Codex ke HTTP alih-alih WebSockets memperbaikinya?
Itu memperpendek waktu diam, dan belum digabungkan. Pull request #3851 (terbuka, dari pelapor isu) menambahkan NANOCLAW_CODEX_TRANSPORT=http, yang mengarahkan Codex melalui HTTP/SSE. Dalam pengujian kami dengan bentuk tersebut, notifikasi kesalahan pertama muncul pada 300 detik, bukan setelah timer — tetapi membawa willRetry true saat Codex sudah mengirim ulang, dan NanoClaw mengakhiri giliran pada setiap notifikasi kesalahan, sehingga giliran akan gagal setelah lima menit, bukan pulih.
Apakah ini timeout Codex secara umum?
Tidak. Codex sendiri terus mencoba lagi; diam selama sepuluh menit berasal dari keselarasan timer giliran NanoClaw dengan percobaan ulang pertama Codex yang tersembunyi. Pada 0.155.1, app-server melaporkan “Reconnecting... 2/5” sekitar detik ke-616 — klien dengan anggaran giliran yang lebih panjang akan melihatnya; NanoClaw tidak pernah melihatnya. Provider default NanoClaw adalah Claude Agent SDK, yang tidak terlibat.
Direproduksi pada 1 Oktober 2026 dengan biner app-server codex native dari npm (@openai/codex 0.138.0 dan 0.155.1, darwin-arm64), dijalankan melalui stdio dengan parameter initialize, thread/start, turn/start, dan turn/steer pada cabang providers NanoClaw (commit 3959d1f055), terhadap pengganti Responses lokal melalui WebSocket dan HTTP/SSE. Default Codex dan percobaan ulang pertama yang tersembunyi dibaca dari codex-rs pada tag rust-v0.138.0 dan rust-v0.155.1. Tidak dijalankan: orchestrator dan container NanoClaw, OneCLI, Telegram, atau endpoint OpenAI yang sebenarnya — pengganti tersebut mereproduksi stream diam, bukan apa pun yang menyebabkan OpenAI diam. Status issue dan pull request dibaca pada hari yang sama.