Agent coordination
Agen ACP
Agent Client Protocol (ACP) sessions memungkinkan OpenClaw menjalankan harness pengodean eksternal (misalnya Claude Code, Cursor, Copilot, Droid, OpenClaw ACP, OpenCode, Gemini CLI, dan harness ACPX lain yang didukung) melalui plugin backend ACP.
Setiap spawn sesi ACP dilacak sebagai tugas latar belakang.
Halaman mana yang saya butuhkan?
| Anda ingin… | Gunakan ini | Catatan |
|---|---|---|
| Mengikat atau mengontrol Codex dalam percakapan saat ini | /codex bind, /codex threads |
Jalur server aplikasi Codex native saat plugin codex diaktifkan; mencakup balasan chat terikat, penerusan gambar, model/cepat/izin, stop, dan kontrol pengarahan. ACP adalah fallback eksplisit |
| Menjalankan Claude Code, Gemini CLI, Codex ACP eksplisit, atau harness eksternal lain melalui OpenClaw | Halaman ini | Sesi terikat chat, /acp spawn, sessions_spawn({ runtime: "acp" }), tugas latar belakang, kontrol runtime |
| Mengekspos sesi Gateway OpenClaw sebagai server ACP untuk editor atau klien | openclaw acp |
Mode bridge. IDE/klien berbicara ACP ke OpenClaw melalui stdio/WebSocket |
| Menggunakan ulang CLI AI lokal sebagai model fallback hanya teks | Backend CLI | Bukan ACP. Tidak ada alat OpenClaw, tidak ada kontrol ACP, tidak ada runtime harness |
Apakah ini berfungsi langsung?
Ya, setelah memasang plugin runtime ACP resmi:
openclaw plugins install @openclaw/acpxopenclaw config set plugins.entries.acpx.enabled trueCheckout sumber dapat menggunakan plugin workspace lokal extensions/acpx setelah
pnpm install. Jalankan /acp doctor untuk pemeriksaan kesiapan.
OpenClaw hanya mengajarkan agen tentang spawning ACP saat ACP benar-benar
dapat digunakan: ACP harus diaktifkan, dispatch tidak boleh dinonaktifkan, sesi
saat ini tidak boleh diblokir sandbox, dan backend runtime harus dimuat. Jika
kondisi tersebut tidak terpenuhi, Skills plugin ACP dan panduan ACP
sessions_spawn tetap tersembunyi agar agen tidak menyarankan backend yang
tidak tersedia.
Kendala saat pertama kali dijalankan
- Jika
plugins.allowdiatur, itu adalah inventaris plugin yang restriktif dan harus menyertakanacpx; jika tidak, backend ACP yang terpasang sengaja diblokir dan/acp doctormelaporkan entri allowlist yang hilang. - Adapter Codex ACP disiapkan bersama plugin
acpxdan diluncurkan secara lokal jika memungkinkan. - Codex ACP berjalan dengan
CODEX_HOMEyang terisolasi; OpenClaw menyalin entri proyek tepercaya plus konfigurasi routing model/penyedia yang aman dari konfigurasi Codex host, sementara autentikasi, notifikasi, dan hook tetap berada pada konfigurasi host. - Adapter harness target lain mungkin masih diambil sesuai permintaan dengan
npxsaat pertama kali Anda menggunakannya. - Autentikasi vendor tetap harus ada pada host untuk harness tersebut.
- Jika host tidak memiliki npm atau akses jaringan, pengambilan adapter pertama kali gagal hingga cache dipanaskan lebih dulu atau adapter dipasang dengan cara lain.
Prasyarat runtime
ACP meluncurkan proses harness eksternal nyata. OpenClaw memiliki routing, status tugas latar belakang, pengiriman, binding, dan kebijakan; harness memiliki login penyedia, katalog model, perilaku sistem berkas, dan alat native-nya sendiri.
Sebelum menyalahkan OpenClaw, verifikasi:
/acp doctormelaporkan backend yang aktif dan sehat.- ID target diizinkan oleh
acp.allowedAgentssaat allowlist tersebut diatur. - Perintah harness dapat dimulai pada host Gateway.
- Autentikasi penyedia tersedia untuk harness tersebut (
claude,codex,gemini,opencode,droid, dll.). - Model yang dipilih ada untuk harness tersebut - ID model tidak portabel antar-harness.
cwdyang diminta ada dan dapat diakses, atau hilangkancwddan biarkan backend menggunakan default-nya.- Mode izin cocok dengan pekerjaannya. Sesi non-interaktif tidak dapat mengeklik prompt izin native, jadi run pengodean yang banyak menulis/mengeksekusi biasanya memerlukan profil izin ACPX yang dapat berjalan headless.
Alat plugin OpenClaw dan alat bawaan OpenClaw tidak diekspos ke harness ACP secara default. Aktifkan bridge MCP eksplisit di agen ACP - penyiapan hanya saat harness harus memanggil alat tersebut secara langsung.
Target harness yang didukung
Dengan backend acpx, gunakan ID harness ini sebagai target /acp spawn <id>
atau sessions_spawn({ runtime: "acp", agentId: "<id>" }):
| ID harness | Backend umum | Catatan |
|---|---|---|
claude |
Adapter Claude Code ACP | Memerlukan autentikasi Claude Code pada host. |
codex |
Adapter Codex ACP | Fallback ACP eksplisit hanya saat /codex native tidak tersedia atau ACP diminta. |
copilot |
Adapter GitHub Copilot ACP | Memerlukan autentikasi CLI/runtime Copilot. |
cursor |
Cursor CLI ACP (cursor-agent acp) |
Timpa perintah acpx jika instalasi lokal mengekspos entrypoint ACP yang berbeda. |
droid |
Factory Droid CLI | Memerlukan autentikasi Factory/Droid atau FACTORY_API_KEY di lingkungan harness. |
gemini |
Adapter Gemini CLI ACP | Memerlukan autentikasi Gemini CLI atau penyiapan kunci API. |
iflow |
iFlow CLI | Ketersediaan adapter dan kontrol model bergantung pada CLI yang terpasang. |
kilocode |
Kilo Code CLI | Ketersediaan adapter dan kontrol model bergantung pada CLI yang terpasang. |
kimi |
Kimi/Moonshot CLI | Memerlukan autentikasi Kimi/Moonshot pada host. |
kiro |
Kiro CLI | Ketersediaan adapter dan kontrol model bergantung pada CLI yang terpasang. |
opencode |
Adapter OpenCode ACP | Memerlukan autentikasi CLI/penyedia OpenCode. |
openclaw |
Bridge Gateway OpenClaw melalui openclaw acp |
Memungkinkan harness yang sadar ACP berbicara kembali ke sesi Gateway OpenClaw. |
qwen |
Qwen Code / Qwen CLI | Memerlukan autentikasi yang kompatibel dengan Qwen pada host. |
Alias agen acpx kustom dapat dikonfigurasi di acpx itu sendiri, tetapi kebijakan
OpenClaw tetap memeriksa acp.allowedAgents dan mapping
agents.list[].runtime.acp.agent apa pun sebelum dispatch.
Runbook operator
Alur cepat /acp dari chat:
Spawn
/acp spawn claude --bind here,
/acp spawn gemini --mode persistent --thread auto, atau
/acp spawn codex --bind here eksplisit.
Kerja
Lanjutkan dalam percakapan atau thread yang terikat (atau targetkan kunci sesi secara eksplisit).
Periksa status
/acp status
Sesuaikan
/acp model <provider/model>,
/acp permissions <profile>,
/acp timeout <seconds>.
Arahkan
Tanpa mengganti konteks: /acp steer tighten logging and continue.
Hentikan
/acp cancel (giliran saat ini) atau /acp close (sesi + binding).
Detail siklus hidup
- Spawn membuat atau melanjutkan sesi runtime ACP, mencatat metadata ACP di penyimpanan sesi OpenClaw, dan dapat membuat tugas latar belakang saat run dimiliki induk.
- Sesi ACP yang dimiliki induk diperlakukan sebagai pekerjaan latar belakang bahkan saat sesi runtime bersifat persisten; penyelesaian dan pengiriman lintas permukaan melalui notifier tugas induk, bukan bertindak seperti sesi chat normal yang terlihat pengguna.
- Pemeliharaan tugas menutup sesi ACP one-shot yang terminal atau yatim dan dimiliki induk. Sesi ACP persisten dipertahankan selama binding percakapan aktif masih ada; sesi persisten lama tanpa binding aktif ditutup agar tidak dapat dilanjutkan diam-diam setelah tugas pemilik selesai atau catatan tugasnya hilang.
- Pesan tindak lanjut terikat langsung masuk ke sesi ACP hingga binding ditutup, tidak difokuskan, direset, atau kedaluwarsa.
- Perintah Gateway tetap lokal.
/acp ...,/status, dan/unfocustidak pernah dikirim sebagai teks prompt normal ke harness ACP terikat. cancelmembatalkan giliran aktif saat backend mendukung pembatalan; ini tidak menghapus binding atau metadata sesi.closemengakhiri sesi ACP dari sudut pandang OpenClaw dan menghapus binding. Harness mungkin tetap menyimpan riwayat upstream-nya sendiri jika mendukung resume.- Plugin acpx membersihkan pohon proses wrapper dan adapter milik OpenClaw setelah
close, dan menuai yatim ACPX milik OpenClaw yang lama saat startup Gateway. - Worker runtime idle memenuhi syarat untuk dibersihkan setelah
acp.runtime.ttlMinutes; metadata sesi yang disimpan tetap tersedia untuk/acp sessions.
Aturan routing Codex native
Pemicu bahasa alami yang harus dirouting ke plugin Codex native saat diaktifkan:
- "Bind this Discord channel to Codex."
- "Attach this chat to Codex thread
<id>." - "Show Codex threads, then bind this one."
Pengikatan percakapan Codex native adalah jalur kontrol obrolan default.
Alat dinamis OpenClaw tetap dieksekusi melalui OpenClaw, sedangkan
alat Codex-native seperti shell/apply-patch dieksekusi di dalam Codex.
Untuk peristiwa alat Codex-native, OpenClaw menyuntikkan relay hook native
per giliran sehingga hook plugin dapat memblokir before_tool_call, mengamati
after_tool_call, dan merutekan peristiwa Codex PermissionRequest
melalui persetujuan OpenClaw. Hook Codex Stop direlay ke
OpenClaw before_agent_finalize, tempat plugin dapat meminta satu
pass model lagi sebelum Codex memfinalisasi jawabannya. Relay tetap
sengaja konservatif: relay ini tidak memutasi argumen alat Codex-native
atau menulis ulang rekaman thread Codex. Gunakan ACP eksplisit hanya
saat Anda menginginkan model runtime/sesi ACP. Batas dukungan Codex
tertanam didokumentasikan dalam
Kontrak dukungan Codex harness v1.
Ringkasan pemilihan model / penyedia / runtime
- referensi model Codex legacy - rute model OAuth/langganan Codex legacy yang diperbaiki oleh doctor.
openai/*- runtime tertanam server aplikasi Codex native untuk giliran agen OpenAI./codex ...- kontrol percakapan Codex native./acp ...atauruntime: "acp"- kontrol ACP/acpx eksplisit.
Pemicu bahasa alami perutean ACP
Pemicu yang seharusnya dirutekan ke runtime ACP:
- "Jalankan ini sebagai sesi Claude Code ACP sekali jalan dan ringkas hasilnya."
- "Gunakan Gemini CLI untuk tugas ini dalam sebuah thread, lalu pertahankan tindak lanjut dalam thread yang sama."
- "Jalankan Codex melalui ACP dalam thread latar belakang."
OpenClaw memilih runtime: "acp", menyelesaikan harness agentId,
mengikat ke percakapan atau thread saat ini bila didukung, dan
merutekan tindak lanjut ke sesi tersebut hingga ditutup/kedaluwarsa. Codex hanya
mengikuti jalur ini saat ACP/acpx eksplisit atau Plugin Codex native
tidak tersedia untuk operasi yang diminta.
Untuk sessions_spawn, runtime: "acp" diiklankan hanya saat ACP
diaktifkan, peminta tidak berada dalam sandbox, dan backend runtime ACP
dimuat. acp.dispatch.enabled=false menjeda dispatch thread ACP
otomatis tetapi tidak menyembunyikan atau memblokir panggilan
sessions_spawn({ runtime: "acp" }) eksplisit. Ini menargetkan id harness ACP seperti codex,
claude, droid, gemini, atau opencode. Jangan meneruskan id agen
konfigurasi OpenClaw biasa dari agents_list kecuali entri itu
dikonfigurasi secara eksplisit dengan agents.list[].runtime.type="acp";
jika tidak, gunakan runtime sub-agen default. Saat agen OpenClaw
dikonfigurasi dengan runtime.type="acp", OpenClaw menggunakan
runtime.acp.agent sebagai id harness yang mendasarinya.
ACP versus sub-agen
Gunakan ACP saat Anda menginginkan runtime harness eksternal. Gunakan server aplikasi Codex
native untuk pengikatan/kontrol percakapan Codex saat Plugin codex
diaktifkan. Gunakan sub-agen saat Anda menginginkan eksekusi
terdelegasi native OpenClaw.
| Area | Sesi ACP | Eksekusi sub-agen |
|---|---|---|
| Runtime | Plugin backend ACP (misalnya acpx) | Runtime sub-agen native OpenClaw |
| Kunci sesi | agent:<agentId>:acp:<uuid> |
agent:<agentId>:subagent:<uuid> |
| Perintah utama | /acp ... |
/subagents ... |
| Alat spawn | sessions_spawn dengan runtime:"acp" |
sessions_spawn (runtime default) |
Lihat juga Sub-agen.
Cara ACP menjalankan Claude Code
Untuk Claude Code melalui ACP, stack-nya adalah:
- Control plane sesi ACP OpenClaw.
- Plugin runtime resmi
@openclaw/acpx. - Adapter ACP Claude.
- Mesin runtime/sesi sisi Claude.
ACP Claude adalah sesi harness dengan kontrol ACP, resume sesi, pelacakan tugas latar belakang, dan pengikatan percakapan/thread opsional.
Backend CLI adalah runtime fallback lokal khusus teks yang terpisah - lihat Backend CLI.
Untuk operator, aturan praktisnya adalah:
- Ingin
/acp spawn, sesi yang dapat diikat, kontrol runtime, atau pekerjaan harness persisten? Gunakan ACP. - Ingin fallback teks lokal sederhana melalui CLI mentah? Gunakan backend CLI.
Sesi terikat
Model mental
- Permukaan obrolan - tempat orang terus berbicara (kanal Discord, topik Telegram, obrolan iMessage).
- Sesi ACP - state runtime Codex/Claude/Gemini tahan lama yang dirutekan OpenClaw.
- Thread/topik anak - permukaan perpesanan tambahan opsional yang dibuat hanya oleh
--thread .... - Workspace runtime - lokasi sistem berkas (
cwd, checkout repo, workspace backend) tempat harness berjalan. Independen dari permukaan obrolan.
Pengikatan percakapan saat ini
/acp spawn <harness> --bind here menyematkan percakapan saat ini ke
sesi ACP yang di-spawn - tanpa thread anak, permukaan obrolan yang sama. OpenClaw tetap
memiliki transport, autentikasi, keselamatan, dan pengiriman. Pesan tindak lanjut dalam
percakapan tersebut dirutekan ke sesi yang sama; /new dan /reset mereset
sesi di tempat; /acp close menghapus pengikatan.
Contoh:
/codex bind # pengikatan Codex native, rutekan pesan mendatang ke sini/codex model gpt-5.4 # sesuaikan thread Codex native yang terikat/codex stop # kendalikan giliran Codex native yang aktif/acp spawn codex --bind here # fallback ACP eksplisit untuk Codex/acp spawn codex --thread auto # dapat membuat thread/topik anak dan mengikat di sana/acp spawn codex --bind here --cwd /workspace/repo # pengikatan obrolan yang sama, Codex berjalan di /workspace/repoAturan pengikatan dan eksklusivitas
--bind heredan--thread ...saling eksklusif.--bind herehanya berfungsi pada kanal yang mengiklankan pengikatan percakapan saat ini; OpenClaw mengembalikan pesan tidak didukung yang jelas jika tidak. Pengikatan bertahan lintas restart gateway.- Di Discord,
spawnSessionsmembatasi pembuatan thread anak untuk--thread auto|here- bukan--bind here. - Jika Anda spawn ke agen ACP berbeda tanpa
--cwd, OpenClaw mewarisi workspace agen target secara default. Path warisan yang hilang (ENOENT/ENOTDIR) fallback ke default backend; kesalahan akses lain (mis.EACCES) muncul sebagai kesalahan spawn. - Perintah manajemen Gateway tetap lokal dalam percakapan terikat - perintah
/acp ...ditangani oleh OpenClaw bahkan ketika teks tindak lanjut normal dirutekan ke sesi ACP terikat;/statusdan/unfocusjuga tetap lokal kapan pun penanganan perintah diaktifkan untuk permukaan tersebut.
Sesi terikat thread
Saat pengikatan thread diaktifkan untuk adapter kanal:
- OpenClaw mengikat thread ke sesi ACP target.
- Pesan tindak lanjut dalam thread tersebut dirutekan ke sesi ACP terikat.
- Output ACP dikirim kembali ke thread yang sama.
- Unfocus/tutup/arsip/timeout idle atau kedaluwarsa usia maksimum menghapus pengikatan.
/acp close,/acp cancel,/acp status,/status, dan/unfocusadalah perintah Gateway, bukan prompt ke harness ACP.
Flag fitur yang diperlukan untuk ACP terikat thread:
acp.enabled=trueacp.dispatch.enabledaktif secara default (aturfalseuntuk menjeda dispatch thread ACP otomatis; panggilansessions_spawn({ runtime: "acp" })eksplisit tetap berfungsi).- Spawn sesi thread adapter kanal diaktifkan (default:
true):- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
Dukungan pengikatan thread bersifat spesifik adapter. Jika adapter kanal aktif tidak mendukung pengikatan thread, OpenClaw mengembalikan pesan tidak didukung/tidak tersedia yang jelas.
Kanal yang mendukung thread
- Adapter kanal apa pun yang mengekspos kapabilitas pengikatan sesi/thread.
- Dukungan bawaan saat ini: thread/kanal Discord, topik Telegram (topik forum dalam grup/supergrup dan topik DM).
- Kanal Plugin dapat menambahkan dukungan melalui antarmuka pengikatan yang sama.
Pengikatan kanal persisten
Untuk alur kerja non-ephemeral, konfigurasikan pengikatan ACP persisten dalam
entri bindings[] tingkat atas.
Model pengikatan
bindings[].type"acp"Menandai pengikatan percakapan ACP persisten.
bindings[].matchobjectMengidentifikasi percakapan target. Bentuk per kanal:
- Kanal/thread Discord:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Kanal/DM Slack:
match.channel="slack"+match.peer.id="<channelId|channel:<channelId>|#<channelId>|userId|user:<userId>|slack:<userId>|<@userId>>". Utamakan id Slack yang stabil; pengikatan kanal juga cocok dengan balasan di dalam thread kanal tersebut. - Topik forum Telegram:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - DM/grup WhatsApp:
match.channel="whatsapp"+match.peer.id="<E.164|group JID>". Gunakan nomor E.164 seperti+15555550123untuk obrolan langsung dan JID grup WhatsApp seperti120363424282127706@g.usuntuk grup. - DM/grup iMessage:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>". Utamakanchat_id:*untuk pengikatan grup yang stabil.
bindings[].agentIdstringId agen OpenClaw pemilik.
bindings[].acp.mode"persistent" | "oneshot"Override ACP opsional.
bindings[].acp.labelstringLabel opsional yang terlihat oleh operator.
bindings[].acp.cwdstringDirektori kerja runtime opsional.
bindings[].acp.backendstringOverride backend opsional.
Default runtime per agen
Gunakan agents.list[].runtime untuk mendefinisikan default ACP sekali per agen:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(id harness, mis.codexatauclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
Presedensi override untuk sesi terikat ACP:
bindings[].acp.*agents.list[].runtime.acp.*- Default ACP global (mis.
acp.backend)
Contoh
{ agents: { list: [ { id: "codex", runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", cwd: "/workspace/openclaw", }, }, }, { id: "claude", runtime: { type: "acp", acp: { agent: "claude", backend: "acpx", mode: "persistent" }, }, }, ], }, bindings: [ { type: "acp", agentId: "codex", match: { channel: "discord", accountId: "default", peer: { kind: "channel", id: "222222222222222222" }, }, acp: { label: "codex-main" }, }, { type: "acp", agentId: "claude", match: { channel: "telegram", accountId: "default", peer: { kind: "group", id: "-1001234567890:topic:42" }, }, acp: { cwd: "/workspace/repo-b" }, }, { type: "route", agentId: "main", match: { channel: "discord", accountId: "default" }, }, { type: "route", agentId: "main", match: { channel: "telegram", accountId: "default" }, }, ], channels: { discord: { guilds: { "111111111111111111": { channels: { "222222222222222222": { requireMention: false }, }, }, }, }, telegram: { groups: { "-1001234567890": { topics: { "42": { requireMention: false } }, }, }, }, },}Perilaku
- OpenClaw memastikan sesi ACP yang dikonfigurasi ada setelah penerimaan khusus kanal dan sebelum digunakan.
- Pesan di kanal, topik, atau obrolan tersebut diarahkan ke sesi ACP yang dikonfigurasi.
- Pengikatan ACP yang dikonfigurasi memiliki rute sesinya sendiri. Penyebaran siaran kanal tidak menggantikan sesi ACP yang dikonfigurasi untuk pengikatan yang cocok.
- Dalam percakapan terikat,
/newdan/resetmereset kunci sesi ACP yang sama di tempat. - Pengikatan runtime sementara (misalnya yang dibuat oleh alur fokus thread) tetap berlaku jika ada.
- Untuk spawn ACP lintas agen tanpa
cwdeksplisit, OpenClaw mewarisi ruang kerja agen target dari konfigurasi agen. - Jalur ruang kerja warisan yang hilang kembali ke cwd bawaan backend; kegagalan akses yang tidak hilang muncul sebagai galat spawn.
Memulai sesi ACP
Dua cara untuk memulai sesi ACP:
From sessions_spawn
Gunakan runtime: "acp" untuk memulai sesi ACP dari giliran agen atau
panggilan alat.
{ "task": "Open the repo and summarize failing tests", "runtime": "acp", "agentId": "codex", "thread": true, "mode": "session"}From /acp command
Gunakan /acp spawn untuk kontrol operator eksplisit dari obrolan.
/acp spawn codex --mode persistent --thread auto/acp spawn codex --mode oneshot --thread off/acp spawn codex --bind here/acp spawn codex --thread hereFlag utama:
--mode persistent|oneshot--bind here|off--thread auto|here|off--cwd <absolute-path>--label <name>
Lihat Perintah slash.
Parameter sessions_spawn
taskstringrequiredPrompt awal yang dikirim ke sesi ACP.
runtime"acp"requiredHarus berupa "acp" untuk sesi ACP.
agentIdstringID harness target ACP. Kembali ke acp.defaultAgent jika ditetapkan.
threadbooleandefault: falseMeminta alur pengikatan thread jika didukung.
mode"run" | "session"default: run"run" adalah sekali jalan; "session" bersifat persisten. Jika thread: true dan
mode dihilangkan, OpenClaw dapat secara bawaan memakai perilaku persisten per
jalur runtime. mode: "session" memerlukan thread: true.
cwdstringDirektori kerja runtime yang diminta (divalidasi oleh kebijakan backend/runtime). Jika dihilangkan, spawn ACP mewarisi ruang kerja agen target saat dikonfigurasi; jalur warisan yang hilang kembali ke bawaan backend, sementara galat akses nyata dikembalikan.
labelstringLabel yang terlihat oleh operator dan digunakan dalam teks sesi/banner.
resumeSessionIdstringMelanjutkan sesi ACP yang sudah ada alih-alih membuat yang baru. Agen
memutar ulang riwayat percakapannya melalui session/load. Memerlukan
runtime: "acp".
streamTo"parent""parent" mengalirkan ringkasan progres run ACP awal kembali ke sesi
peminta sebagai peristiwa sistem. Respons yang diterima mencakup
streamLogPath yang menunjuk ke log JSONL bercakupan sesi
(<sessionId>.acp-stream.jsonl) yang dapat Anda ikuti untuk riwayat relay lengkap.
Aliran progres induk menampilkan komentar asisten dan progres status ACP secara
bawaan kecuali streaming.progress.commentary=false. Discord juga secara bawaan
memakai mode progres untuk pratinjau induk saat tidak ada mode aliran yang
dikonfigurasi. Progres status tetap mematuhi acp.stream.tagVisibility, sehingga
tag seperti plan tetap tersembunyi kecuali diaktifkan secara eksplisit.
Run ACP sessions_spawn menggunakan agents.defaults.subagents.runTimeoutSeconds untuk
batas giliran anak bawaannya. Alat ini tidak menerima penimpaan timeout per panggilan.
modelstringPenimpaan model eksplisit untuk sesi anak ACP. Spawn ACP Codex
menormalkan ref OpenAI seperti openai/gpt-5.4 ke konfigurasi
startup ACP Codex sebelum session/new; bentuk slash seperti
openai/gpt-5.4/high juga menetapkan upaya penalaran ACP Codex.
Saat dihilangkan, sessions_spawn({ runtime: "acp" }) menggunakan
bawaan model subagen yang sudah ada (agents.defaults.subagents.model atau
agents.list[].subagents.model) saat dikonfigurasi; jika tidak, ini membiarkan
harness ACP menggunakan model bawaannya sendiri.
Harness lain harus mengiklankan models ACP dan mendukung
session/set_model; jika tidak, OpenClaw/acpx gagal dengan jelas alih-alih
diam-diam kembali ke bawaan agen target.
thinkingstringUpaya berpikir/penalaran eksplisit. Untuk ACP Codex, minimal dipetakan ke
upaya rendah, low/medium/high/xhigh dipetakan langsung, dan off
menghilangkan penimpaan startup upaya penalaran.
Saat dihilangkan, spawn ACP menggunakan bawaan berpikir subagen yang sudah ada dan
agents.defaults.models["provider/model"].params.thinking per model
untuk model yang dipilih.
Mode spawn bind dan thread
--bind here|off
| Mode | Perilaku |
|---|---|
here |
Ikat percakapan aktif saat ini di tempat; gagal jika tidak ada yang aktif. |
off |
Jangan buat pengikatan percakapan saat ini. |
Catatan:
--bind hereadalah jalur operator paling sederhana untuk "jadikan kanal atau obrolan ini didukung Codex."--bind heretidak membuat thread anak.--bind herehanya tersedia pada kanal yang mengekspos dukungan pengikatan percakapan saat ini.--binddan--threadtidak dapat digabungkan dalam panggilan/acp spawnyang sama.
--thread auto|here|off
| Mode | Perilaku |
|---|---|
auto |
Dalam thread aktif: ikat thread tersebut. Di luar thread: buat/ikat thread anak saat didukung. |
here |
Memerlukan thread aktif saat ini; gagal jika tidak berada di dalamnya. |
off |
Tanpa pengikatan. Sesi dimulai tanpa ikatan. |
Catatan:
- Pada permukaan pengikatan non-thread, perilaku bawaan secara efektif adalah
off. - Spawn terikat thread memerlukan dukungan kebijakan kanal:
- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
- Gunakan
--bind heresaat Anda ingin menyematkan percakapan saat ini tanpa membuat thread anak.
Model pengiriman
Sesi ACP dapat berupa ruang kerja interaktif atau pekerjaan latar belakang yang dimiliki induk. Jalur pengiriman bergantung pada bentuk tersebut.
Interactive ACP sessions
Sesi interaktif dimaksudkan untuk terus berbicara pada permukaan obrolan yang terlihat:
/acp spawn ... --bind heremengikat percakapan saat ini ke sesi ACP./acp spawn ... --thread ...mengikat thread/topik kanal ke sesi ACP.bindings[].type="acp"persisten mengarahkan percakapan yang cocok ke sesi ACP yang sama.
Pesan lanjutan dalam percakapan terikat diarahkan langsung ke sesi ACP, dan output ACP dikirim kembali ke kanal/thread/topik yang sama.
Yang dikirim OpenClaw ke harness:
- Lanjutan terikat normal dikirim sebagai teks prompt, ditambah lampiran hanya saat harness/backend mendukungnya.
- Perintah manajemen
/acpdan perintah Gateway lokal dicegat sebelum pengiriman ACP. - Peristiwa penyelesaian yang dibuat runtime dimaterialisasi per target. Agen OpenClaw mendapatkan amplop konteks runtime internal OpenClaw; harness ACP eksternal mendapatkan prompt biasa dengan hasil anak dan instruksi. Amplop mentah
<<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>>tidak boleh pernah dikirim ke harness eksternal atau dipersistenkan sebagai teks transkrip pengguna ACP. - Entri transkrip ACP menggunakan teks pemicu yang terlihat oleh pengguna atau prompt penyelesaian biasa. Metadata peristiwa internal tetap terstruktur di OpenClaw jika memungkinkan dan tidak diperlakukan sebagai konten obrolan yang ditulis pengguna.
Parent-owned one-shot ACP sessions
Sesi ACP sekali jalan yang di-spawn oleh run agen lain adalah anak latar belakang, mirip dengan subagen:
- Induk meminta pekerjaan dengan
sessions_spawn({ runtime: "acp", mode: "run" }). - Anak berjalan di sesi harness ACP-nya sendiri.
- Giliran anak berjalan pada lane latar belakang yang sama dengan yang digunakan oleh spawn subagen native, sehingga harness ACP yang lambat tidak memblokir pekerjaan sesi utama yang tidak terkait.
- Laporan penyelesaian kembali melalui jalur pengumuman penyelesaian tugas. OpenClaw mengonversi metadata penyelesaian internal menjadi prompt ACP biasa sebelum mengirimkannya ke harness eksternal, sehingga harness tidak melihat penanda konteks runtime khusus OpenClaw.
- Induk menulis ulang hasil anak dengan suara asisten normal saat balasan yang terlihat oleh pengguna berguna.
Jangan perlakukan jalur ini sebagai obrolan peer-to-peer antara induk dan anak. Anak sudah memiliki kanal penyelesaian kembali ke induk.
sessions_send and A2A delivery
sessions_send dapat menargetkan sesi lain setelah spawn. Untuk sesi
peer normal, OpenClaw menggunakan jalur lanjutan agen-ke-agen (A2A)
setelah menyuntikkan pesan:
- Tunggu balasan sesi target.
- Secara opsional izinkan peminta dan target bertukar sejumlah giliran lanjutan yang dibatasi.
- Minta target menghasilkan pesan pengumuman.
- Kirim pengumuman tersebut ke kanal atau thread yang terlihat.
Jalur A2A tersebut adalah fallback untuk pengiriman peer ketika pengirim memerlukan
lanjutan yang terlihat. Jalur ini tetap aktif ketika sesi yang tidak terkait dapat
melihat dan mengirim pesan ke target ACP, misalnya di bawah pengaturan
tools.sessions.visibility yang luas.
OpenClaw melewati tindak lanjut A2A hanya ketika peminta adalah
induk dari anak ACP sekali-jalan milik induknya sendiri. Dalam kasus itu,
menjalankan A2A di atas penyelesaian tugas dapat membangunkan induk dengan
hasil anak, meneruskan balasan induk kembali ke anak, dan
membuat loop gema induk/anak. Hasil sessions_send melaporkan
delivery.status="skipped" untuk kasus anak-dimiliki tersebut karena jalur
penyelesaian sudah bertanggung jawab atas hasilnya.
Lanjutkan sesi yang sudah ada
Gunakan resumeSessionId untuk melanjutkan sesi ACP sebelumnya alih-alih
memulai dari awal. Agen memutar ulang riwayat percakapannya melalui
session/load, sehingga melanjutkan dengan konteks penuh dari yang terjadi sebelumnya.
{ "task": "Continue where we left off - fix the remaining test failures", "runtime": "acp", "agentId": "codex", "resumeSessionId": "<previous-session-id>"}Kasus penggunaan umum:
- Serahkan sesi Codex dari laptop Anda ke ponsel Anda - beri tahu agen Anda untuk melanjutkan dari tempat terakhir Anda berhenti.
- Lanjutkan sesi pengodean yang Anda mulai secara interaktif di CLI, sekarang tanpa antarmuka melalui agen Anda.
- Lanjutkan pekerjaan yang terputus oleh mulai ulang gateway atau batas waktu idle.
Catatan:
resumeSessionIdhanya berlaku ketikaruntime: "acp"; runtime sub-agen default mengabaikan bidang khusus ACP ini.streamTohanya berlaku ketikaruntime: "acp"; runtime sub-agen default mengabaikan bidang khusus ACP ini.resumeSessionIdadalah id lanjutan ACP/harness lokal-host, bukan kunci sesi kanal OpenClaw; OpenClaw tetap memeriksa kebijakan spawn ACP dan kebijakan agen target sebelum dispatch, sementara backend ACP atau harness memiliki otorisasi untuk memuat id upstream tersebut.resumeSessionIdmemulihkan riwayat percakapan ACP upstream;threaddanmodetetap berlaku normal untuk sesi OpenClaw baru yang Anda buat, sehinggamode: "session"tetap memerlukanthread: true.- Agen target harus mendukung
session/load(Codex dan Claude Code mendukungnya). - Jika id sesi tidak ditemukan, spawn gagal dengan galat yang jelas - tanpa fallback diam-diam ke sesi baru.
Uji smoke pasca-deploy
Setelah deploy gateway, jalankan pemeriksaan end-to-end langsung alih-alih memercayai uji unit:
- Verifikasi versi gateway dan commit yang dideploy pada host target.
- Buka sesi bridge ACPX sementara ke agen langsung.
- Minta agen tersebut memanggil
sessions_spawndenganruntime: "acp",agentId: "codex",mode: "run", dan tugasReply with exactly LIVE-ACP-SPAWN-OK. - Verifikasi
accepted=yes,childSessionKeynyata, dan tidak ada galat validator. - Bersihkan sesi bridge sementara.
Pertahankan gate pada mode: "run" dan lewati streamTo: "parent" -
mode: "session" yang terikat thread dan jalur stream-relay adalah
lintasan integrasi lebih kaya yang terpisah.
Kompatibilitas sandbox
Sesi ACP saat ini berjalan pada runtime host, bukan di dalam sandbox OpenClaw.
Batasan saat ini:
- Jika sesi peminta berada dalam sandbox, spawn ACP diblokir untuk
sessions_spawn({ runtime: "acp" })maupun/acp spawn. sessions_spawndenganruntime: "acp"tidak mendukungsandbox: "require".
Resolusi target sesi
Sebagian besar tindakan /acp menerima target sesi opsional (session-key,
session-id, atau session-label).
Urutan resolusi:
- Argumen target eksplisit (atau
--sessionuntuk/acp steer)- mencoba kunci
- lalu id sesi berbentuk UUID
- lalu label
- Binding thread saat ini (jika percakapan/thread ini terikat ke sesi ACP).
- Fallback sesi peminta saat ini.
Binding percakapan saat ini dan binding thread keduanya berpartisipasi dalam langkah 2.
Jika tidak ada target yang terurai, OpenClaw mengembalikan galat yang jelas
(Unable to resolve session target: ...).
Kontrol ACP
| Perintah | Fungsinya | Contoh |
|---|---|---|
/acp spawn |
Buat sesi ACP; bind saat ini atau bind thread opsional. | /acp spawn codex --bind here --cwd /repo |
/acp cancel |
Batalkan giliran yang sedang berjalan untuk sesi target. | /acp cancel agent:codex:acp:<uuid> |
/acp steer |
Kirim instruksi steer ke sesi yang sedang berjalan. | /acp steer --session support inbox prioritize failing tests |
/acp close |
Tutup sesi dan lepas binding target thread. | /acp close |
/acp status |
Tampilkan backend, mode, status, opsi runtime, kapabilitas. | /acp status |
/acp set-mode |
Tetapkan mode runtime untuk sesi target. | /acp set-mode plan |
/acp set |
Tulis opsi konfigurasi runtime generik. | /acp set model openai/gpt-5.4 |
/acp cwd |
Tetapkan override direktori kerja runtime. | /acp cwd /Users/user/Projects/repo |
/acp permissions |
Tetapkan profil kebijakan persetujuan. | /acp permissions strict |
/acp timeout |
Tetapkan batas waktu runtime (detik). | /acp timeout 120 |
/acp model |
Tetapkan override model runtime. | /acp model anthropic/claude-opus-4-6 |
/acp reset-options |
Hapus override opsi runtime sesi. | /acp reset-options |
/acp sessions |
Cantumkan sesi ACP terbaru dari store. | /acp sessions |
/acp doctor |
Kesehatan backend, kapabilitas, perbaikan yang dapat ditindaklanjuti. | /acp doctor |
/acp install |
Cetak langkah instalasi dan pengaktifan deterministik. | /acp install |
Kontrol runtime (spawn, cancel, steer, close, status, set-mode,
set, cwd, permissions, timeout, model, dan reset-options) memerlukan
identitas pemilik dari kanal eksternal dan operator.admin dari klien Gateway
internal. Pengirim non-pemilik yang berwenang tetap dapat menggunakan sessions, doctor,
install, dan help.
/acp status menampilkan opsi runtime efektif plus pengidentifikasi sesi tingkat-runtime dan
tingkat-backend. Galat kontrol yang tidak didukung muncul
dengan jelas ketika backend tidak memiliki kapabilitas. /acp sessions membaca
store untuk sesi terikat saat ini atau sesi peminta; token target
(session-key, session-id, atau session-label) terurai melalui
penemuan sesi gateway, termasuk root session.store kustom per agen.
Pemetaan opsi runtime
/acp memiliki perintah praktis dan setter generik. Operasi yang
setara:
| Perintah | Dipetakan ke | Catatan |
|---|---|---|
/acp model <id> |
kunci konfigurasi runtime model |
Untuk Codex ACP, OpenClaw menormalisasi openai/<model> ke id model adapter dan memetakan sufiks reasoning garis miring seperti openai/gpt-5.4/high ke reasoning_effort. |
/acp set thinking <level> |
opsi kanonis thinking |
OpenClaw mengirim padanan yang diiklankan backend ketika ada, dengan preferensi thinking, lalu effort, reasoning_effort, atau thought_level. Untuk Codex ACP, adapter memetakan nilai ke reasoning_effort. |
/acp permissions <profile> |
opsi kanonis permissionProfile |
OpenClaw mengirim padanan yang diiklankan backend ketika ada, seperti approval_policy, permission_profile, permissions, atau permission_mode. |
/acp timeout <seconds> |
opsi kanonis timeoutSeconds |
OpenClaw mengirim padanan yang diiklankan backend ketika ada, seperti timeout atau timeout_seconds. |
/acp cwd <path> |
override cwd runtime | Pembaruan langsung. |
/acp set <key> <value> |
generik | key=cwd menggunakan jalur override cwd. |
/acp reset-options |
menghapus semua override runtime | - |
harness acpx, penyiapan Plugin, dan izin
Untuk konfigurasi harness acpx (alias Claude Code / Codex / Gemini CLI), bridge MCP plugin-tools dan OpenClaw-tools, serta mode izin ACP, lihat Agen ACP - penyiapan.
Pemecahan masalah
| Gejala | Kemungkinan penyebab | Perbaikan |
|---|---|---|
ACP runtime backend is not configured |
Plugin backend hilang, dinonaktifkan, atau diblokir oleh plugins.allow. |
Instal dan aktifkan Plugin backend, sertakan acpx di plugins.allow ketika daftar izin itu disetel, lalu jalankan /acp doctor. |
ACP is disabled by policy (acp.enabled=false) |
ACP dinonaktifkan secara global. | Setel acp.enabled=true. |
ACP dispatch is disabled by policy (acp.dispatch.enabled=false) |
Pengiriman otomatis dari pesan utas normal dinonaktifkan. | Setel acp.dispatch.enabled=true untuk melanjutkan perutean utas otomatis; pemanggilan eksplisit sessions_spawn({ runtime: "acp" }) tetap berfungsi. |
ACP agent "<id>" is not allowed by policy |
Agen tidak ada dalam daftar izin. | Gunakan agentId yang diizinkan atau perbarui acp.allowedAgents. |
/acp doctor reports backend not ready right after startup |
Plugin backend hilang, dinonaktifkan, diblokir oleh kebijakan izin/tolak, atau executable yang dikonfigurasi tidak ada. | Instal/aktifkan Plugin backend, jalankan ulang /acp doctor, dan periksa galat instalasi backend atau kebijakan jika kondisinya tetap tidak sehat. |
| Perintah harness tidak ditemukan | CLI adaptor tidak terinstal, Plugin eksternal hilang, atau pengambilan npx pertama kali gagal untuk adaptor non-Codex. |
Jalankan /acp doctor, instal/prapanaskan adaptor pada host Gateway, atau konfigurasikan perintah agen acpx secara eksplisit. |
| Model tidak ditemukan dari harness | ID model valid untuk penyedia/harness lain tetapi tidak untuk target ACP ini. | Gunakan model yang tercantum oleh harness tersebut, konfigurasikan model di harness, atau hilangkan override. |
| Galat autentikasi vendor dari harness | OpenClaw sehat, tetapi CLI/penyedia target belum login. | Login atau sediakan kunci penyedia yang diperlukan pada lingkungan host Gateway. |
Unable to resolve session target: ... |
Token kunci/id/label salah. | Jalankan /acp sessions, salin kunci/label persis, lalu coba lagi. |
--bind here requires running /acp spawn inside an active ... conversation |
--bind here digunakan tanpa percakapan aktif yang dapat diikat. |
Pindah ke chat/saluran target dan coba lagi, atau gunakan spawn tanpa ikatan. |
Conversation bindings are unavailable for <channel>. |
Adaptor tidak memiliki kemampuan pengikatan ACP percakapan saat ini. | Gunakan /acp spawn ... --thread ... jika didukung, konfigurasikan bindings[] tingkat atas, atau pindah ke saluran yang didukung. |
--thread here requires running /acp spawn inside an active ... thread |
--thread here digunakan di luar konteks utas. |
Pindah ke utas target atau gunakan --thread auto/off. |
Only <user-id> can rebind this channel/conversation/thread. |
Pengguna lain memiliki target pengikatan aktif. | Ikat ulang sebagai pemilik atau gunakan percakapan atau utas lain. |
Thread bindings are unavailable for <channel>. |
Adaptor tidak memiliki kemampuan pengikatan utas. | Gunakan --thread off atau pindah ke adaptor/saluran yang didukung. |
Sandboxed sessions cannot spawn ACP sessions ... |
Runtime ACP berada di sisi host; sesi peminta berada dalam sandbox. | Gunakan runtime="subagent" dari sesi dalam sandbox, atau jalankan spawn ACP dari sesi yang tidak berada dalam sandbox. |
sessions_spawn sandbox="require" is unsupported for runtime="acp" ... |
sandbox="require" diminta untuk runtime ACP. |
Gunakan runtime="subagent" untuk sandbox wajib, atau gunakan ACP dengan sandbox="inherit" dari sesi yang tidak berada dalam sandbox. |
Cannot apply --model ... did not advertise model support |
Harness target tidak mengekspos pengalihan model ACP generik. | Gunakan harness yang mengiklankan ACP models/session/set_model, gunakan referensi model ACP Codex, atau konfigurasikan model langsung di harness jika memiliki flag startup sendiri. |
| Metadata ACP hilang untuk sesi terikat | Metadata sesi ACP sudah usang/terhapus. | Buat ulang dengan /acp spawn, lalu ikat ulang/fokuskan utas. |
AcpRuntimeError: Permission prompt unavailable in non-interactive mode |
permissionMode memblokir penulisan/eksekusi dalam sesi ACP non-interaktif. |
Setel plugins.entries.acpx.config.permissionMode ke approve-all dan mulai ulang gateway. Lihat Konfigurasi izin. |
| Sesi ACP gagal lebih awal dengan sedikit keluaran | Prompt izin diblokir oleh permissionMode/nonInteractivePermissions. |
Periksa log gateway untuk AcpRuntimeError. Untuk izin penuh, setel permissionMode=approve-all; untuk degradasi yang tertangani baik, setel nonInteractivePermissions=deny. |
| Sesi ACP macet tanpa batas setelah menyelesaikan pekerjaan | Proses harness selesai tetapi sesi ACP tidak melaporkan penyelesaian. | Perbarui OpenClaw; pembersihan acpx saat ini memanen proses wrapper usang milik OpenClaw dan proses adaptor saat penutupan dan startup Gateway. |
Harness melihat <<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>> |
Amplop peristiwa internal bocor melintasi batas ACP. | Perbarui OpenClaw dan jalankan ulang alur penyelesaian; harness eksternal seharusnya hanya menerima prompt penyelesaian biasa. |