Fundamentals
Siklus agen
Loop agentik adalah eksekusi "nyata" penuh dari sebuah agen: intake → penyusunan konteks → inferensi model → eksekusi alat → balasan streaming → persistensi. Ini adalah jalur otoritatif yang mengubah pesan menjadi tindakan dan balasan akhir, sambil menjaga status sesi tetap konsisten.
Di OpenClaw, loop adalah satu eksekusi terserialisasi per sesi yang memancarkan peristiwa siklus hidup dan stream saat model berpikir, memanggil alat, dan melakukan streaming keluaran. Dokumen ini menjelaskan bagaimana loop autentik itu dirangkai dari ujung ke ujung.
Titik masuk
- RPC Gateway:
agentdanagent.wait. - CLI: perintah
agent.
Cara kerjanya (tingkat tinggi)
- RPC
agentmemvalidasi parameter, menyelesaikan sesi (sessionKey/sessionId), mempertahankan metadata sesi, segera mengembalikan{ runId, acceptedAt }. agentCommandmenjalankan agen:- menyelesaikan model + default thinking/verbose/trace
- memuat snapshot Skills
- memanggil
runEmbeddedPiAgent(runtime pi-agent-core) - memancarkan akhir/kesalahan siklus hidup jika loop tertanam tidak memancarkan salah satunya
runEmbeddedPiAgent:- menserialkan eksekusi melalui antrean per-sesi + global
- menyelesaikan model + profil autentikasi dan membangun sesi pi
- berlangganan peristiwa pi dan melakukan streaming delta asisten/alat
- memberlakukan timeout -> membatalkan eksekusi jika terlampaui
- untuk giliran server aplikasi Codex, membatalkan giliran yang diterima yang berhenti menghasilkan progres server aplikasi sebelum peristiwa terminal
- mengembalikan payload + metadata penggunaan
subscribeEmbeddedPiSessionmenjembatani peristiwa pi-agent-core ke streamagentOpenClaw:- peristiwa alat =>
stream: "tool" - delta asisten =>
stream: "assistant" - peristiwa siklus hidup =>
stream: "lifecycle"(phase: "start" | "end" | "error")
- peristiwa alat =>
agent.waitmenggunakanwaitForAgentRun:- menunggu akhir/kesalahan siklus hidup untuk
runId - mengembalikan
{ status: ok|error|timeout, startedAt, endedAt, error? }
- menunggu akhir/kesalahan siklus hidup untuk
Pengantrean + konkurensi
- Eksekusi diserialkan per kunci sesi (jalur sesi) dan secara opsional melalui jalur global.
- Ini mencegah race alat/sesi dan menjaga riwayat sesi tetap konsisten.
- Kanal perpesanan dapat memilih mode antrean (collect/steer/followup) yang mengalirkan masukan ke sistem jalur ini. Lihat Antrean Perintah.
- Penulisan transkrip juga dilindungi oleh kunci tulis sesi pada file sesi. Kunci ini
sadar proses dan berbasis file, sehingga menangkap penulis yang melewati antrean dalam-proses atau berasal dari
proses lain. Penulis transkrip sesi menunggu hingga
session.writeLock.acquireTimeoutMssebelum melaporkan sesi sebagai sibuk; defaultnya adalah60000md. - Kunci tulis sesi secara default tidak reentrant. Jika helper sengaja menumpuk akuisisi
kunci yang sama sambil mempertahankan satu penulis logis, helper tersebut harus memilih ikut secara eksplisit dengan
allowReentrant: true.
Persiapan sesi + workspace
- Workspace diselesaikan dan dibuat; eksekusi tersandbox dapat dialihkan ke root workspace sandbox.
- Skills dimuat (atau digunakan kembali dari snapshot) dan disuntikkan ke env dan prompt.
- File bootstrap/konteks diselesaikan dan disuntikkan ke laporan prompt sistem.
- Kunci tulis sesi diperoleh;
SessionManagerdibuka dan disiapkan sebelum streaming. Setiap jalur penulisan ulang transkrip, Compaction, atau pemotongan nantinya harus mengambil kunci yang sama sebelum membuka atau memutasi file transkrip.
Penyusunan prompt + prompt sistem
- Prompt sistem dibangun dari prompt dasar OpenClaw, prompt Skills, konteks bootstrap, dan override per-eksekusi.
- Batas khusus model dan token cadangan Compaction diberlakukan.
- Lihat Prompt sistem untuk mengetahui apa yang dilihat model.
Titik kait (tempat Anda dapat mengintersepsi)
OpenClaw memiliki dua sistem kait:
- Kait internal (kait Gateway): skrip berbasis peristiwa untuk perintah dan peristiwa siklus hidup.
- Kait Plugin: titik ekstensi di dalam siklus hidup agen/alat dan pipeline Gateway.
Kait internal (kait Gateway)
agent:bootstrap: berjalan saat membangun file bootstrap sebelum prompt sistem difinalisasi. Gunakan ini untuk menambah/menghapus file konteks bootstrap.- Kait perintah:
/new,/reset,/stop, dan peristiwa perintah lain (lihat dokumen Kait).
Lihat Kait untuk penyiapan dan contoh.
Kait Plugin (siklus hidup agen + gateway)
Ini berjalan di dalam loop agen atau pipeline gateway:
before_model_resolve: berjalan pra-sesi (tanpamessages) untuk secara deterministik menimpa penyedia/model sebelum resolusi model.before_prompt_build: berjalan setelah pemuatan sesi (denganmessages) untuk menyuntikkanprependContext,systemPrompt,prependSystemContext, atauappendSystemContextsebelum pengiriman prompt. GunakanprependContextuntuk teks dinamis per-giliran dan field konteks sistem untuk panduan stabil yang seharusnya berada di ruang prompt sistem.before_agent_start: kait kompatibilitas lama yang dapat berjalan di salah satu fase; utamakan kait eksplisit di atas.before_agent_reply: berjalan setelah tindakan inline dan sebelum panggilan LLM, memungkinkan Plugin mengklaim giliran dan mengembalikan balasan sintetis atau membisukan giliran sepenuhnya.agent_end: memeriksa daftar pesan akhir dan metadata eksekusi setelah selesai.before_compaction/after_compaction: mengamati atau menganotasi siklus Compaction.before_tool_call/after_tool_call: mengintersepsi parameter/hasil alat.before_install: memeriksa temuan pemindaian bawaan dan secara opsional memblokir instalasi skill atau Plugin.tool_result_persist: secara sinkron mentransformasi hasil alat sebelum ditulis ke transkrip sesi milik OpenClaw.message_received/message_sending/message_sent: kait pesan masuk + keluar.session_start/session_end: batas siklus hidup sesi.gateway_start/gateway_stop: peristiwa siklus hidup gateway.
Aturan keputusan kait untuk penjaga keluar/alat:
before_tool_call:{ block: true }bersifat terminal dan menghentikan handler berprioritas lebih rendah.before_tool_call:{ block: false }adalah no-op dan tidak menghapus blok sebelumnya.before_install:{ block: true }bersifat terminal dan menghentikan handler berprioritas lebih rendah.before_install:{ block: false }adalah no-op dan tidak menghapus blok sebelumnya.message_sending:{ cancel: true }bersifat terminal dan menghentikan handler berprioritas lebih rendah.message_sending:{ cancel: false }adalah no-op dan tidak menghapus pembatalan sebelumnya.
Lihat Kait Plugin untuk API kait dan detail pendaftaran.
Harness dapat mengadaptasi kait ini secara berbeda. Harness server aplikasi Codex mempertahankan kait Plugin OpenClaw sebagai kontrak kompatibilitas untuk permukaan cermin yang terdokumentasi, sementara kait native Codex tetap menjadi mekanisme Codex tingkat lebih rendah yang terpisah.
Streaming + balasan parsial
- Delta asisten di-streaming dari pi-agent-core dan dipancarkan sebagai peristiwa
assistant. - Streaming blok dapat memancarkan balasan parsial baik pada
text_endmaupunmessage_end. - Streaming penalaran dapat dipancarkan sebagai stream terpisah atau sebagai balasan blok.
- Lihat Streaming untuk perilaku pemotongan chunk dan balasan blok.
Eksekusi alat + alat perpesanan
- Peristiwa mulai/perbarui/akhir alat dipancarkan pada stream
tool. - Hasil alat disanitasi untuk ukuran dan payload gambar sebelum dicatat/dipancarkan.
- Pengiriman alat perpesanan dilacak untuk menekan konfirmasi asisten duplikat.
Pembentukan balasan + penekanan
- Payload akhir disusun dari:
- teks asisten (dan penalaran opsional)
- ringkasan alat inline (saat verbose + diizinkan)
- teks kesalahan asisten saat model mengalami kesalahan
- Token diam persis
NO_REPLY/no_replydifilter dari payload keluar. - Duplikat alat perpesanan dihapus dari daftar payload akhir.
- Jika tidak ada payload yang dapat dirender tersisa dan alat mengalami kesalahan, balasan kesalahan alat fallback dipancarkan (kecuali alat perpesanan sudah mengirim balasan yang terlihat oleh pengguna).
Compaction + percobaan ulang
- Compaction otomatis memancarkan peristiwa stream
compactiondan dapat memicu percobaan ulang. - Saat percobaan ulang, buffer dalam memori dan ringkasan alat direset untuk menghindari keluaran duplikat.
- Lihat Compaction untuk pipeline Compaction.
Stream peristiwa (saat ini)
lifecycle: dipancarkan olehsubscribeEmbeddedPiSession(dan sebagai fallback olehagentCommand)assistant: delta streaming dari pi-agent-coretool: peristiwa alat streaming dari pi-agent-core
Penanganan kanal chat
- Delta asisten dibuffer menjadi pesan
deltachat. finalchat dipancarkan pada akhir/kesalahan siklus hidup.
Timeout
- Default
agent.wait: 30 dtk (hanya penantian). ParametertimeoutMsmenimpa ini. - Runtime agen: default
agents.defaults.timeoutSeconds172800 dtk (48 jam); diberlakukan di timer pembatalanrunEmbeddedPiAgent. - Runtime Cron:
timeoutSecondsgiliran-agen terisolasi dimiliki oleh cron. Penjadwal memulai timer itu saat eksekusi dimulai, membatalkan eksekusi yang mendasarinya pada tenggat yang dikonfigurasi, lalu menjalankan pembersihan berbatas sebelum mencatat timeout agar sesi anak yang stale tidak dapat membuat jalur tetap tersangkut. - Diagnostik keaktifan sesi: dengan diagnostik diaktifkan,
diagnostics.stuckSessionWarnMsmengklasifikasikan sesiprocessingyang lama yang tidak memiliki balasan, alat, status, blok, atau progres ACP yang diamati. Eksekusi tertanam, panggilan model, dan panggilan alat yang aktif dilaporkan sebagaisession.long_running; pekerjaan aktif tanpa progres terbaru dilaporkan sebagaisession.stalled;session.stuckdicadangkan untuk pencatatan sesi stale tanpa pekerjaan aktif. Pencatatan sesi stale segera melepaskan jalur sesi yang terdampak; eksekusi tertanam yang macet hanya dibatalkan-dikuras setelahdiagnostics.stuckSessionAbortMs(default: setidaknya 10 menit dan 5x ambang peringatan) agar pekerjaan yang mengantre dapat dilanjutkan tanpa memutus eksekusi yang hanya lambat. Pemulihan memancarkan hasil requested/completed terstruktur, dan status diagnostik ditandai idle hanya jika generasi pemrosesan yang sama masih berjalan. Diagnostiksession.stuckberulang melakukan back off selama sesi tetap tidak berubah. - Timeout idle model: OpenClaw membatalkan permintaan model ketika tidak ada chunk respons yang tiba sebelum jendela idle.
models.providers.<id>.timeoutSecondsmemperpanjang watchdog idle ini untuk penyedia lokal/self-hosted yang lambat; jika tidak, OpenClaw menggunakanagents.defaults.timeoutSecondssaat dikonfigurasi, dibatasi pada 120 dtk secara default. Eksekusi yang dipicu Cron tanpa timeout model atau agen eksplisit menonaktifkan watchdog idle dan mengandalkan timeout luar cron. - Timeout permintaan HTTP penyedia:
models.providers.<id>.timeoutSecondsberlaku untuk pengambilan HTTP model penyedia tersebut, termasuk koneksi, header, body, timeout permintaan SDK, penanganan pembatalan guarded-fetch total, dan watchdog idle stream model. Gunakan ini untuk penyedia lokal/self-hosted yang lambat seperti Ollama sebelum menaikkan seluruh timeout runtime agen.
Tempat hal dapat berakhir lebih awal
- Timeout agen (batal)
- AbortSignal (batal)
- Pemutusan Gateway atau timeout RPC
- Timeout
agent.wait(hanya menunggu, tidak menghentikan agen)
Terkait
- Alat — alat agen yang tersedia
- Kait — skrip berbasis peristiwa yang dipicu oleh peristiwa siklus hidup agen
- Compaction — bagaimana percakapan panjang diringkas
- Persetujuan Exec — gerbang persetujuan untuk perintah shell
- Thinking — konfigurasi tingkat berpikir/penalaran