Codex harness
Runtime harness Codex
Kontrak runtime untuk giliran harness Codex. Untuk penyiapan dan perutean, lihat harness Codex. Untuk bidang konfigurasi, lihat referensi harness Codex.
Ikhtisar
Codex menangani loop model native, pelanjutan utas native, kelanjutan alat native, dan Compaction native. OpenClaw menangani perutean kanal, file sesi, pengiriman pesan yang terlihat, alat dinamis OpenClaw, persetujuan, pengiriman media, dan cermin transkrip di sekitar batas tersebut.
Perutean prompt mengikuti runtime yang dipilih, bukan hanya string penyedia. Giliran Codex native mendapatkan instruksi pengembang app-server Codex; rute kompatibilitas OpenClaw yang eksplisit mempertahankan prompt sistem OpenClaw normal meskipun menggunakan autentikasi atau transpor OpenAI bergaya Codex.
OpenClaw memulai dan melanjutkan utas Codex native dengan kepribadian bawaan
Codex dinonaktifkan (personality: "none") sehingga file kepribadian ruang kerja
dan identitas agen OpenClaw tetap menjadi sumber otoritatif. Selain itu, Codex
native tetap mempertahankan instruksi dasar/model dan pemuatan dokumen proyek
yang ditangani Codex. Proses OpenClaw ringan (misalnya cron) tetap menonaktifkan
pemuatan dokumen proyek.
Instruksi pengembang OpenClaw mencakup aspek runtime OpenClaw: pengiriman kanal
sumber, alat dinamis OpenClaw, delegasi ACP, konteks adaptor, dan file profil
ruang kerja agen yang aktif. Katalog keterampilan dan penunjuk
MEMORY.md yang dirutekan melalui alat diproyeksikan sebagai instruksi
pengembang kolaborasi yang cakupannya terbatas pada giliran. Ketika alat memori
tidak tersedia, konten BOOTSTRAP.md yang aktif dan MEMORY.md
lengkap beralih menggunakan konteks input giliran biasa.
Sebagian besar alat dinamis OpenClaw menggunakan namespace
openclaw yang dapat dicari. Alat yang ditandai catalogMode: "direct-only"
menggunakan openclaw_direct, yang dipertahankan Codex agar terlihat langsung
oleh model sebagai DirectModelOnly, alih-alih mengeksposnya ke eksekusi
Code Mode bertingkat.
Pengikatan utas dan perubahan model
Ketika sesi OpenClaw dilampirkan ke utas Codex yang sudah ada, giliran berikutnya
mengirim ulang model yang saat ini dipilih, kebijakan persetujuan, sandbox,
peninjau persetujuan, dan tingkat layanan ke app-server. Beralih dari
openai/gpt-5.5 ke openai/gpt-5.2 mempertahankan pengikatan utas, tetapi
meminta Codex untuk melanjutkan dengan model yang baru dipilih.
Pengikatan yang diawasi merupakan pengecualian. Pemilih model OpenClaw tetap terkunci, dan pelanjutan tidak menyertakan penggantian model maupun penyedia sehingga Codex memulihkan model dan penyedia tersimpan milik utas kanonis. Kontrol Codex native terpisah dapat mengubah pasangan tersimpan tersebut, dan snapshot awal dapat menghasilkan peringatan normal Codex tentang perbedaan model; model OpenClaw luar dan rantai fallback tidak pernah menggantikan salah satunya.
Pengawasan dan kelanjutan yang aman
Pengawasan Codex adalah kemampuan opsional dari plugin codex yang
sama. Kemampuan ini menemukan utas native melalui koneksi terpisah dan hanya
memproyeksikan sesi yang belum diarsipkan ke katalog Gateway. Tanpa pengaturan
koneksi appServer yang eksplisit, koneksi tersebut menggunakan stdio
home pengguna terkelola, sementara harness biasa tetap tercakup pada agen.
Pembacaan daftar dan metadata bersifat pasif: tindakan tersebut tidak
melanjutkan utas, membuat OpenClaw berlangganan peristiwa langsungnya, atau
menjawab permintaan persetujuannya.
Untuk sesi tersimpan atau tidak aktif pada komputer Gateway, Lanjutkan sebagai
cabang membuat Chat normal yang modelnya terkunci dan mencerminkan riwayat
pengguna serta asisten yang dibatasi hingga giliran tersimpan terminal terakhir
dari sumber. Giliran Chat normal pertama memasang penangan persetujuan yang
sebenarnya dan menggunakan fork native sementara untuk menyematkan snapshot
tanpa penggantian model atau penyedia. Codex App Server menggunakan konfigurasi
native saat ini dan mengembalikan pasangan yang dipilih; server tersebut
mengeluarkan peringatan normalnya jika model itu berbeda dari model terakhir
yang tercatat pada sumber. Pada koneksi pengawasan yang sama, OpenClaw memulai
utas harness Codex sumber-appServer kanonis di bawah cwd dan kebijakan
runtime-nya dengan model dan penyedia yang dikembalikan secara persis untuk
permulaan awal tersebut, menyuntikkan riwayat terlihat yang dibatasi, lalu
mengarsipkan fork sementara. Sumber tidak pernah dilanjutkan. Utas kanonis
memiliki seluruh permukaan alat harness OpenClaw; penalaran, pemanggilan alat,
dan hasil alat dari sumber tidak dikloning ke dalamnya. Cakupan koneksi privat
bertahan selama status pengikatan tertunda dan diterapkan, sehingga setiap
giliran berikutnya tetap berada pada koneksi tersebut dengan konfigurasi
autentikasi dan penyedia native. Pengawasan yang dinonaktifkan atau penyimpangan
pengikatan/koneksi akan gagal secara tertutup, bukan beralih ke harness home
agen biasa.
Sumber CLI, VS Code, Atlas, atau ChatGPT asli tetap memenuhi syarat untuk kedua
katalog. Cabang kanonis merupakan utas Codex native, tetapi jenis sumbernya
adalah appServer; klien native dapat memfilter jenis sumber tersebut,
sehingga kemunculannya di Codex Desktop tidak dijamin.
Sumber aktif tidak dapat memulai cabang baru atau diarsipkan; Chat yang sudah
diawasi tetap dapat dibuka. notLoaded berarti aktivitas tidak diketahui,
bukan tidak aktif; OpenClaw mengizinkan pengarsipan untuk baris lokal
idle atau notLoaded hanya setelah konfirmasi eksplisit
bahwa tidak ada runner lain dan pembacaan status lokal-proses yang baru. Codex
menserialkan mutasi utas dalam satu proses App Server, tetapi tidak menyediakan
runner eksklusif lintas proses maupun lease pemilik persetujuan, sehingga
pembacaan tersebut tidak dapat membuktikan bahwa proses lain tidak sedang
menggunakan utas. OpenClaw memblokir pemilik pengikatan yang diketahui aktif
untuk target yang tepat atau setiap turunan hasil spawn yang belum diarsipkan
dan dikembalikan oleh kueri turunan berpaginasi milik Codex. Kesalahan enumerasi,
siklus, dan habisnya batas keamanan akan gagal secara tertutup. Pengarsipan
native masih dapat berpacu dengan giliran baru dalam proses lain, sehingga
konfirmasi mencakup klien yang tidak diketahui dan jeda antara pembacaan status
dan pengarsipan. Chat diawasi yang modelnya terkunci tidak dapat dihapus selama
masih melindungi pengikatan native.
Katalog Node berpasangan tetap hanya berupa metadata pada rilis awal. Batas pemanggilan Node saat ini menggunakan pola permintaan/respons dan tidak dapat membawa peristiwa giliran berumur panjang, permintaan persetujuan, atau keluaran streaming yang diperlukan oleh pengikatan harness Codex nyata. Oleh karena itu, Lanjutkan dan Arsipkan jarak jauh tetap tidak tersedia meskipun baris sedang tidak aktif.
Lihat pengawasan Codex untuk penyiapan operator dan perilaku Control UI yang terlihat.
Balasan terlihat dan Heartbeat
Giliran chat langsung/sumber melalui harness Codex secara default mengirimkan
balasan akhir asisten secara otomatis untuk permukaan WebChat internal, sesuai
dengan kontrak harness Pi: agen membalas secara normal dan OpenClaw mengirimkan
teks akhir ke percakapan sumber. Atur messages.visibleReplies: "message_tool" agar teks akhir asisten
tetap privat kecuali agen memanggil message(action="send").
Giliran Heartbeat Codex secara default mendapatkan heartbeat_respond dalam
katalog alat OpenClaw yang dapat dicari agar agen dapat mencatat apakah pemicuan
harus tetap senyap atau mengirimkan notifikasi. Panduan inisiatif Heartbeat
dikirim sebagai instruksi pengembang mode kolaborasi Codex yang cakupannya
terbatas pada giliran Heartbeat; giliran chat biasa tetap dalam mode Codex
Default. Ketika HEARTBEAT.md tidak kosong, instruksi Heartbeat mengarahkan
Codex ke file tersebut, bukan menyisipkan kontennya secara langsung.
Batas hook
| Lapisan | Pemilik | Tujuan |
|---|---|---|
| Hook plugin OpenClaw | OpenClaw | Kompatibilitas produk/plugin di seluruh harness OpenClaw dan Codex. |
| Middleware ekstensi app-server Codex | Plugin bawaan OpenClaw | Perilaku adaptor per giliran di sekitar alat dinamis OpenClaw. |
| Hook native Codex | Codex | Siklus hidup Codex tingkat rendah dan kebijakan alat native dari konfigurasi Codex. |
OpenClaw tidak menggunakan file hooks.json Codex tingkat proyek atau
global untuk merutekan perilaku plugin. Untuk jembatan alat dan izin native,
OpenClaw menyuntikkan konfigurasi Codex per utas untuk PreToolUse,
PostToolUse, PermissionRequest, dan Stop.
Ketika persetujuan app-server Codex diaktifkan (approvalPolicy bukan
"never"), konfigurasi hook native bawaan yang disuntikkan tidak
menyertakan PermissionRequest agar peninjau app-server Codex dan jembatan
persetujuan OpenClaw menangani eskalasi nyata setelah peninjauan. Tambahkan
permission_request ke nativeHookRelay.events untuk tetap memaksa relay
kompatibilitas. Hook Codex lainnya seperti SessionStart dan
UserPromptSubmit tetap menjadi kontrol tingkat Codex; hook tersebut tidak
diekspos sebagai hook plugin OpenClaw dalam kontrak v1.
Untuk alat dinamis OpenClaw, OpenClaw menjalankan alat setelah Codex meminta pemanggilan, sehingga perilaku plugin dan middleware berjalan dalam adaptor harness. Untuk alat native Codex, Codex memiliki catatan alat kanonis; OpenClaw dapat mencerminkan peristiwa yang dipilih, tetapi tidak dapat menulis ulang utas native kecuali Codex mengekspos kemampuan tersebut melalui app-server atau callback hook native.
Peristiwa PreToolUse mode laporan app-server Codex menunda persetujuan
plugin hingga persetujuan app-server yang sesuai. Jika hook OpenClaw
before_tool_call mengembalikan requireApproval sementara payload native
menetapkan openclaw_approval_mode: "report", relay hook native mencatat persyaratan persetujuan
plugin dan tidak mengembalikan keputusan native. Ketika Codex kemudian
mengirimkan permintaan persetujuan app-server untuk penggunaan alat yang sama,
OpenClaw membuka prompt persetujuan plugin dan memetakan keputusan kembali ke
Codex. Peristiwa Codex PermissionRequest merupakan jalur persetujuan terpisah
dan masih dapat dirutekan melalui persetujuan OpenClaw ketika dikonfigurasi
untuk jembatan tersebut.
Notifikasi item app-server Codex juga menyediakan observasi
after_tool_call asinkron untuk penyelesaian alat native yang belum dicakup
oleh relay native PostToolUse. Ini hanya untuk telemetri/kompatibilitas;
observasi tersebut tidak dapat memblokir, menunda, atau mengubah pemanggilan
alat native.
Proyeksi Compaction dan siklus hidup LLM berasal dari notifikasi app-server
Codex dan status adaptor OpenClaw, bukan dari perintah hook native Codex.
before_compaction, after_compaction, llm_input, dan
llm_output merupakan observasi tingkat adaptor, bukan tangkapan
byte-demi-byte dari permintaan internal atau payload Compaction Codex.
Notifikasi app-server native Codex hook/started dan hook/completed
diproyeksikan sebagai peristiwa agen codex_app_server.hook untuk lintasan dan
debugging. Notifikasi tersebut tidak memanggil hook plugin OpenClaw.
Kontrak dukungan V1
Didukung dalam runtime Codex v1:
| Permukaan | Dukungan | Alasan |
|---|---|---|
| Perulangan model OpenAI melalui Codex | Didukung | App-server Codex menangani giliran OpenAI, pelanjutan thread native, dan kelanjutan alat native. |
| Perutean dan pengiriman kanal OpenClaw | Didukung | Telegram, Discord, Slack, WhatsApp, iMessage, dan kanal lainnya tetap berada di luar runtime model. |
| Alat dinamis OpenClaw | Didukung | Codex meminta OpenClaw menjalankan alat-alat ini, sehingga OpenClaw tetap berada dalam jalur eksekusi. |
| Plugin prompt dan konteks | Didukung | OpenClaw memproyeksikan prompt/konteks khusus OpenClaw ke dalam giliran Codex sembari membiarkan prompt dasar, model, dan dokumen proyek terkonfigurasi yang dikelola Codex tetap berada di jalur native Codex. OpenClaw menonaktifkan kepribadian bawaan Codex untuk thread native agar berkas kepribadian ruang kerja agen tetap menjadi acuan utama. Instruksi pengembang native Codex hanya menerima panduan perintah yang secara eksplisit dicakup dalam codex_app_server; petunjuk perintah global lama tetap tersedia untuk permukaan prompt non-Codex. |
| Siklus hidup mesin konteks | Didukung | Perakitan, penyerapan, dan pemeliharaan setelah giliran dijalankan di sekitar giliran Codex. Mesin konteks tidak menggantikan Compaction native Codex. |
| Hook alat dinamis | Didukung | before_tool_call, after_tool_call, dan middleware hasil alat dijalankan di sekitar alat dinamis yang dikelola OpenClaw. |
| Hook siklus hidup | Didukung sebagai observasi adaptor | llm_input, llm_output, agent_end, before_compaction, dan after_compaction dipicu dengan payload mode Codex yang apa adanya. |
| Gerbang revisi jawaban akhir | Didukung melalui relai hook native | Stop Codex direlai ke before_agent_finalize; revise meminta Codex melakukan satu lintasan model lagi sebelum finalisasi. |
| Blokir atau observasi shell, patch, dan MCP native | Didukung melalui relai hook native | PreToolUse dan PostToolUse Codex direlai untuk permukaan alat native yang telah dikomit, termasuk payload MCP pada app-server Codex 0.142.0 atau yang lebih baru. Pemblokiran didukung; penulisan ulang argumen tidak didukung. |
| Kebijakan izin native | Didukung melalui persetujuan app-server Codex dan relai hook native kompatibilitas | Permintaan persetujuan app-server Codex dirutekan melalui OpenClaw setelah peninjauan Codex. Relai hook native PermissionRequest bersifat ikut serta untuk mode persetujuan native karena Codex memancarkannya sebelum peninjauan guardian. |
| Perekaman trajektori app-server | Didukung | OpenClaw merekam permintaan yang dikirimkannya ke app-server dan notifikasi app-server yang diterimanya. |
Tidak didukung dalam runtime Codex v1:
| Permukaan | Batasan V1 | Jalur mendatang |
|---|---|---|
| Mutasi argumen alat native | Hook pra-alat native Codex dapat memblokir, tetapi OpenClaw tidak menulis ulang argumen alat native Codex. | Memerlukan dukungan hook/skema Codex untuk input alat pengganti. |
| Riwayat transkrip native Codex yang dapat diedit | Codex mengelola riwayat thread native kanonis. OpenClaw mengelola cerminannya dan dapat memproyeksikan konteks mendatang, tetapi tidak boleh memutasi internal yang tidak didukung. | Tambahkan API app-server Codex eksplisit jika pembedahan thread native diperlukan. |
tool_result_persist untuk catatan alat native Codex |
Hook tersebut mentransformasi penulisan transkrip yang dikelola OpenClaw, bukan catatan alat native Codex. | Catatan yang ditransformasi dapat dicerminkan, tetapi penulisan ulang kanonis memerlukan dukungan Codex. |
| Metadata Compaction native yang kaya | OpenClaw dapat meminta Compaction native, tetapi tidak menerima daftar stabil yang dipertahankan/dihapus, delta token, ringkasan penyelesaian, atau payload ringkasan. | Memerlukan peristiwa Compaction Codex yang lebih kaya. |
| Intervensi Compaction | OpenClaw tidak mengizinkan plugin atau mesin konteks memveto, menulis ulang, atau menggantikan Compaction native Codex. | Tambahkan hook pra/pasca-Compaction Codex jika plugin perlu memveto atau menulis ulang Compaction native. |
| Perekaman permintaan API model bita demi bita | OpenClaw dapat merekam permintaan dan notifikasi app-server, tetapi inti Codex menyusun permintaan API OpenAI final secara internal. | Memerlukan peristiwa pelacakan permintaan model atau API debug Codex. |
Izin native dan elisitasi MCP
Untuk PermissionRequest, OpenClaw hanya mengembalikan keputusan izinkan atau
tolak yang eksplisit ketika kebijakan memutuskan. Hasil tanpa keputusan bukanlah
izin: Codex memperlakukannya sebagai tidak adanya keputusan hook dan meneruskannya
ke jalur guardian atau persetujuan penggunanya sendiri.
Mode persetujuan app-server Codex secara default menghilangkan hook native ini.
Hal ini berlaku kecuali permission_request secara eksplisit disertakan dalam
nativeHookRelay.events atau runtime kompatibilitas memasangnya.
Ketika operator memilih allow-always untuk permintaan izin native Codex,
OpenClaw mengingat sidik jari input penyedia/sesi/alat/cwd yang persis tersebut
selama jangka waktu sesi yang terbatas. Keputusan yang diingat sengaja hanya
berlaku untuk kecocokan persis: perubahan perintah, argumen, payload alat, atau
cwd membuat persetujuan baru.
Elisitasi persetujuan alat MCP Codex dirutekan melalui alur persetujuan plugin
OpenClaw ketika Codex menandai _meta.codex_approval_kind sebagai "mcp_tool_call".
request_user_input Codex mendaftarkan pertanyaan gateway yang netral terhadap
penyedia untuk sesi asal. UI Kontrol merender kartu pertanyaan gateway, dan satu
pilihan non-rahasia menggunakan tombol kanal bertipe ketika kanal mendukungnya.
Ketukan tombol, jawaban UI Kontrol, dan balasan teks biasa berikutnya dalam
antrean semuanya menyelesaikan catatan gateway yang sama sebelum OpenClaw
mengembalikan jawaban app-server. Penyelesaian otomatis Codex dan pembatalan
percobaan membatasi waktu tunggu dan membatalkan catatan. Pertanyaan rahasia
sepenuhnya tetap berada di jalur balasan teks yang disertai peringatan. Permintaan
elisitasi MCP lainnya gagal secara tertutup.
Untuk alur persetujuan plugin umum yang membawa prompt ini, lihat Permintaan izin Plugin.
Pengarahan antrean
Pengarahan antrean proses aktif dipetakan ke app-server Codex turn/steer. Dengan
messages.queue.mode: "steer" default, OpenClaw mengelompokkan pesan obrolan mode pengarahan
selama jendela hening yang dikonfigurasi dan mengirimkannya sebagai satu permintaan
turn/steer berdasarkan urutan kedatangan.
Giliran review Codex dan Compaction manual dapat menolak pengarahan pada giliran yang sama. Dalam
kasus tersebut, OpenClaw menunggu proses aktif selesai sebelum memulai
prompt. Gunakan /queue followup atau /queue collect ketika pesan secara default
harus masuk antrean, bukan diarahkan. Lihat Antrean pengarahan.
Pengunggahan umpan balik Codex
Saat /diagnostics [note] disetujui untuk suatu sesi pada harness Codex
native, OpenClaw juga memanggil app-server Codex feedback/upload untuk thread
Codex yang relevan, termasuk log untuk setiap thread yang tercantum dan subthread Codex
yang dibuat jika tersedia.
Pengunggahan tersebut melewati jalur umpan balik normal Codex menuju server OpenAI. Jika
umpan balik Codex dinonaktifkan di app-server tersebut, perintah mengembalikan
galat app-server. Balasan diagnostik yang selesai mencantumkan channel,
id sesi OpenClaw, id thread Codex, dan perintah lokal codex resume <thread-id>
untuk thread yang dikirim.
Jika Anda menolak atau mengabaikan persetujuan, OpenClaw tidak mencetak id Codex tersebut dan tidak mengirimkan umpan balik Codex. Pengunggahan ini tidak menggantikan ekspor diagnostik Gateway lokal. Lihat Ekspor diagnostik untuk perilaku persetujuan, privasi, bundel lokal, dan obrolan grup.
Gunakan /codex diagnostics [note] hanya ketika Anda menginginkan pengunggahan umpan balik Codex
untuk thread yang sedang terhubung tanpa bundel diagnostik Gateway
lengkap.
Compaction dan cermin transkrip
Saat model yang dipilih menggunakan harness Codex, Compaction thread native
merupakan tanggung jawab app-server Codex. OpenClaw tidak menjalankan Compaction pra-pemeriksaan untuk
giliran Codex, mengganti Compaction Codex dengan Compaction mesin konteks, atau
beralih ke peringkasan OpenClaw maupun OpenAI publik ketika Compaction native tidak dapat
dimulai. OpenClaw menyimpan cermin transkrip untuk riwayat channel, pencarian,
/new, /reset, serta peralihan model atau harness pada masa mendatang.
Permintaan Compaction eksplisit, seperti /compact atau operasi Compaction manual
yang diminta Plugin, memulai Compaction Codex native dengan thread/compact/start.
OpenClaw mempertahankan permintaan dan sewa klien bersama tetap terbuka hingga Codex memancarkan
item penyelesaian contextCompaction yang sesuai, lalu melaporkan giliran
Compaction sebagai selesai. Jika giliran terminal tersebut melampaui batas waktu Compaction
yang dikonfigurasi, OpenClaw meminta interupsi giliran native. Sewa dan pembatas
Compaction per thread tetap dipertahankan hingga Codex melaporkan status terminal atau mengonfirmasi
RPC interupsi. Jika Codex tidak mengonfirmasi dalam masa tenggang interupsi,
OpenClaw menghentikan koneksi sebelum melepaskan pembatas. Koneksi
jarak jauh juga melepaskan pengikatan thread yang sesuai agar pekerjaan berikutnya tidak dapat
bertumpang-tindih dengan giliran jarak jauh yang belum dikonfirmasi. Giliran lain pada koneksi yang dihentikan akan gagal
dan dapat dicoba ulang pada klien baru. Penutupan klien, pembatalan permintaan, atau
giliran Compaction yang gagal mengembalikan operasi yang gagal. Compaction otomatis akibat tekanan
konteks merupakan tugas Codex; OpenClaw hanya memulai Compaction native untuk pemicu yang diminta
secara manual.
Saat mesin konteks meminta proyeksi bootstrap thread Codex, OpenClaw memproyeksikan nama dan id panggilan alat, bentuk input, serta konten hasil alat yang telah disunting ke dalam thread Codex baru. OpenClaw tidak menyalin nilai argumen panggilan alat mentah ke dalam proyeksi tersebut.
Cermin tersebut mencakup prompt pengguna, teks akhir asisten, serta catatan penalaran atau rencana Codex yang ringan ketika app-server memancarkannya. OpenClaw mencatat awal Compaction native dan status terminalnya, tetapi tidak menampilkan ringkasan Compaction yang dapat dibaca manusia atau daftar yang dapat diaudit mengenai entri mana yang dipertahankan Codex setelah Compaction.
Karena Codex memiliki thread native kanonis, tool_result_persist tidak
menulis ulang catatan hasil alat native Codex. Ini hanya berlaku ketika OpenClaw
menulis hasil alat transkrip sesi milik OpenClaw.
Media dan pengiriman
OpenClaw tetap menangani pengiriman media dan pemilihan penyedia media. Gambar,
video, musik, PDF, TTS, dan pemahaman media menggunakan pengaturan penyedia/model
yang sesuai, seperti agents.defaults.imageGenerationModel,
videoGenerationModel, pdfModel, dan messages.tts.
Teks, gambar, video, musik, TTS, persetujuan, dan keluaran alat perpesanan tetap
melewati jalur pengiriman normal OpenClaw; pembuatan media tidak memerlukan
runtime lama. Saat Codex memancarkan item pembuatan gambar native dengan
savedPath, OpenClaw meneruskan berkas persis tersebut melalui jalur media balasan
normal, meskipun giliran Codex tidak memiliki teks asisten.