Agent coordination
เอเจนต์ ACP
เซสชัน Agent Client Protocol (ACP) ช่วยให้ OpenClaw เรียกใช้ชุดเครื่องมือเขียนโค้ดภายนอก (Claude Code, Cursor, Copilot, Droid, OpenClaw ACP, OpenCode, Gemini CLI และชุดเครื่องมือ ACPX อื่น ๆ ที่รองรับ) ผ่าน Plugin แบ็กเอนด์ ACP การสร้างแต่ละครั้งจะได้รับการติดตามเป็น งานเบื้องหลัง
ฉันควรใช้หน้าใด?
| คุณต้องการ... | ใช้รายการนี้ | หมายเหตุ |
|---|---|---|
| ผูกหรือควบคุม Codex ในบทสนทนาปัจจุบัน | /codex bind, /codex threads |
เส้นทางเซิร์ฟเวอร์แอป Codex แบบเนทีฟเมื่อเปิดใช้งาน Plugin codex: การตอบกลับแชตที่ผูกไว้ การส่งต่อรูปภาพ โมเดล/โหมดเร็ว/สิทธิ์ การหยุด และการชี้นำ ACP เป็นทางเลือกสำรองที่ต้องระบุอย่างชัดเจน |
| เรียกใช้ Claude Code, Gemini CLI, Codex ACP แบบระบุชัดเจน หรือชุดเครื่องมือภายนอกอื่น ผ่าน OpenClaw | หน้านี้ | เซสชันที่ผูกกับแชต, /acp spawn, sessions_spawn({ runtime: "acp" }), งานเบื้องหลัง และคำสั่งควบคุมรันไทม์ |
| เปิดเผยเซสชัน OpenClaw Gateway ในฐานะ เซิร์ฟเวอร์ ACP สำหรับเอดิเตอร์หรือไคลเอนต์ | openclaw acp |
โหมดบริดจ์: IDE/ไคลเอนต์สื่อสารด้วย ACP กับ OpenClaw ผ่าน stdio/WebSocket |
| นำ AI CLI ภายในเครื่องกลับมาใช้เป็นโมเดลสำรองแบบข้อความเท่านั้น | แบ็กเอนด์ CLI | ไม่ใช่ ACP: ไม่มีเครื่องมือ OpenClaw ไม่มีคำสั่งควบคุม ACP และไม่มีรันไทม์ชุดเครื่องมือ |
ใช้งานได้ทันทีหรือไม่?
ได้ หลังจากติดตั้ง Plugin รันไทม์ ACP อย่างเป็นทางการ:
openclaw plugins install @openclaw/acpxopenclaw config set plugins.entries.acpx.enabled trueซอร์สเช็กเอาต์สามารถใช้ Plugin เวิร์กสเปซ extensions/acpx ภายในเครื่องได้หลังจาก
pnpm install เรียกใช้ /acp doctor เพื่อตรวจสอบความพร้อม
OpenClaw จะสอนเอเจนต์เกี่ยวกับการสร้าง ACP เฉพาะเมื่อ ACP ใช้งานได้จริง เท่านั้น:
ต้องเปิดใช้งาน ACP ต้องไม่ปิดการส่งงาน เซสชันปัจจุบันต้องไม่ถูกแซนด์บ็อกซ์ปิดกั้น
และต้องโหลดแบ็กเอนด์รันไทม์ที่พร้อมใช้งานแล้ว หากเงื่อนไขใดไม่ผ่าน Skills ของ ACP
และคำแนะนำ ACP สำหรับ sessions_spawn จะยังคงถูกซ่อน
เพื่อไม่ให้เอเจนต์แนะนำแบ็กเอนด์ที่ใช้งานไม่ได้
ข้อควรระวังในการเรียกใช้ครั้งแรก
- หากตั้งค่า
plugins.allowไว้ ค่านี้คือรายการ Plugin แบบจำกัดและ ต้อง มีacpxมิฉะนั้นแบ็กเอนด์ ACP ที่ติดตั้งไว้จะถูกปิดกั้นโดยเจตนา (/acp doctorจะรายงานว่าขาดรายการในรายการอนุญาต) - อะแดปเตอร์ Codex ACP มาพร้อมกับ Plugin
acpxและจะเปิดทำงานภายในเครื่องเมื่อเป็นไปได้ - Codex ACP ทำงานด้วย
CODEX_HOMEที่แยกออกมา OpenClaw จะคัดลอกรายการความเชื่อถือของโปรเจกต์ที่เชื่อถือได้ พร้อมการกำหนดค่าเส้นทางโมเดล/ผู้ให้บริการที่ปลอดภัย (model,model_provider,model_reasoning_effort,sandbox_modeและฟิลด์model_providers.<name>ที่ปลอดภัย) จากการกำหนดค่า Codex ของโฮสต์ ส่วนการยืนยันตัวตน การแจ้งเตือน และฮุกจะคงอยู่เฉพาะในการกำหนดค่าของโฮสต์ - อะแดปเตอร์ชุดเครื่องมือเป้าหมายอื่นอาจถูกดาวน์โหลดตามต้องการด้วย
npxเมื่อใช้งานครั้งแรก - ต้องมีการยืนยันตัวตนของผู้จำหน่ายสำหรับชุดเครื่องมือนั้นอยู่บนโฮสต์แล้ว
- หากโฮสต์ไม่มี npm หรือการเข้าถึงเครือข่าย การดาวน์โหลดอะแดปเตอร์ครั้งแรกจะล้มเหลวจนกว่าจะเตรียมแคชไว้ล่วงหน้า หรือติดตั้งอะแดปเตอร์ด้วยวิธีอื่น
ข้อกำหนดเบื้องต้นของรันไทม์
ACP เปิดกระบวนการชุดเครื่องมือภายนอกจริง OpenClaw เป็นเจ้าของการกำหนดเส้นทาง สถานะงานเบื้องหลัง การนำส่ง การผูก และนโยบาย ส่วนชุดเครื่องมือเป็นเจ้าของ การเข้าสู่ระบบผู้ให้บริการ แค็ตตาล็อกโมเดล พฤติกรรมระบบไฟล์ และเครื่องมือเนทีฟของตน
ก่อนสรุปว่าเป็นปัญหาของ OpenClaw ให้ตรวจสอบว่า:
/acp doctorรายงานว่ามีแบ็กเอนด์ที่เปิดใช้งานและพร้อมทำงาน- รหัสเป้าหมายได้รับอนุญาตจาก
acp.allowedAgentsเมื่อตั้งค่ารายการอนุญาตนั้น - คำสั่งของชุดเครื่องมือสามารถเริ่มทำงานบนโฮสต์ Gateway ได้
- มีข้อมูลยืนยันตัวตนของผู้ให้บริการสำหรับชุดเครื่องมือนั้น (
claude,codex,gemini,opencode,droidเป็นต้น) - โมเดลที่เลือกมีอยู่สำหรับชุดเครื่องมือนั้น รหัสโมเดลไม่สามารถใช้ข้ามชุดเครื่องมือได้
cwdที่ร้องขอมีอยู่และเข้าถึงได้ หรือไม่ต้องระบุcwdเพื่อให้แบ็กเอนด์ใช้ค่าเริ่มต้น- โหมดสิทธิ์สอดคล้องกับงาน เซสชันแบบไม่โต้ตอบไม่สามารถคลิกพรอมต์สิทธิ์แบบเนทีฟได้ ดังนั้นการเขียนโค้ดที่ต้องเขียนไฟล์หรือเรียกใช้คำสั่งจำนวนมากมักต้องใช้โปรไฟล์สิทธิ์ ACPX ที่ทำงานต่อได้โดยไม่ต้องมีส่วนติดต่อผู้ใช้
เครื่องมือของ Plugin OpenClaw และเครื่องมือ OpenClaw ในตัวจะ ไม่ ถูกเปิดให้ ชุดเครื่องมือ ACP ใช้งานโดยค่าเริ่มต้น เปิดใช้บริดจ์ MCP ที่ระบุอย่างชัดเจนใน เอเจนต์ ACP - การตั้งค่า เฉพาะเมื่อชุดเครื่องมือควร เรียกใช้เครื่องมือเหล่านั้นโดยตรง
เป้าหมายชุดเครื่องมือที่รองรับ
เมื่อใช้แบ็กเอนด์ acpx ให้ใช้รหัสเหล่านี้เป็นเป้าหมายของ /acp spawn <id> หรือ
sessions_spawn({ runtime: "acp", agentId: "<id>" }):
| รหัสชุดเครื่องมือ | แบ็กเอนด์ทั่วไป | หมายเหตุ |
|---|---|---|
claude |
อะแดปเตอร์ Claude Code ACP | ต้องมีการยืนยันตัวตน Claude Code บนโฮสต์ |
codex |
อะแดปเตอร์ Codex ACP | เป็นทางเลือกสำรอง ACP แบบระบุชัดเจนเท่านั้น เมื่อ /codex แบบเนทีฟใช้งานไม่ได้หรือมีการร้องขอ ACP |
copilot |
อะแดปเตอร์ GitHub Copilot ACP | ต้องมีการยืนยันตัวตน CLI/รันไทม์ของ Copilot |
cursor |
Cursor CLI ACP (cursor-agent acp) |
เขียนทับคำสั่ง acpx หากการติดตั้งภายในเครื่องเปิดเผยจุดเริ่มต้น ACP ที่แตกต่างออกไป |
droid |
Factory Droid CLI | ต้องมีการยืนยันตัวตน Factory/Droid หรือ FACTORY_API_KEY ในสภาพแวดล้อมของชุดเครื่องมือ |
fast-agent |
อะแดปเตอร์ fast-agent-mcp ACP | ดาวน์โหลดตามต้องการด้วย uvx |
gemini |
อะแดปเตอร์ Gemini CLI ACP | ต้องมีการยืนยันตัวตน Gemini CLI หรือการตั้งค่าคีย์ API |
iflow |
iFlow CLI | ความพร้อมใช้งานของอะแดปเตอร์และการควบคุมโมเดลขึ้นอยู่กับ CLI ที่ติดตั้ง |
kilocode |
Kilo Code CLI | ความพร้อมใช้งานของอะแดปเตอร์และการควบคุมโมเดลขึ้นอยู่กับ CLI ที่ติดตั้ง |
kimi |
Kimi/Moonshot CLI | ต้องมีการยืนยันตัวตน Kimi/Moonshot บนโฮสต์ |
kiro |
Kiro CLI | ความพร้อมใช้งานของอะแดปเตอร์และการควบคุมโมเดลขึ้นอยู่กับ CLI ที่ติดตั้ง |
mux |
อะแดปเตอร์ Mux CLI ACP | ดาวน์โหลดตามต้องการด้วย npx |
opencode |
อะแดปเตอร์ OpenCode ACP | ต้องมีการยืนยันตัวตน OpenCode CLI/ผู้ให้บริการ |
openclaw |
บริดจ์ OpenClaw Gateway ผ่าน openclaw acp |
ช่วยให้ชุดเครื่องมือที่รองรับ ACP สื่อสารกลับไปยังเซสชัน OpenClaw Gateway |
qoder |
Qoder CLI | ความพร้อมใช้งานของอะแดปเตอร์และการควบคุมโมเดลขึ้นอยู่กับ CLI ที่ติดตั้ง |
qwen |
Qwen Code / Qwen CLI | ต้องมีการยืนยันตัวตนที่เข้ากันได้กับ Qwen บนโฮสต์ |
trae |
อะแดปเตอร์ Trae CLI ACP | ความพร้อมใช้งานของอะแดปเตอร์และการควบคุมโมเดลขึ้นอยู่กับ CLI ที่ติดตั้ง |
pi (pi-acp) ได้รับการลงทะเบียนในแบ็กเอนด์ acpx ด้วย แต่ไม่ใช่
ชุดเครื่องมือเขียนโค้ดในความหมายเดียวกับรายการอื่นข้างต้น
สามารถกำหนดนามแฝงเอเจนต์ acpx แบบกำหนดเองใน acpx ได้ แต่ก่อนส่งงาน
นโยบาย OpenClaw จะยังคงตรวจสอบ acp.allowedAgents และการแมป
agents.list[].runtime.acp.agent
คู่มือปฏิบัติงานสำหรับผู้ดูแลระบบ
ลำดับการใช้งาน /acp อย่างรวดเร็วจากแชต:
สร้าง
/acp spawn claude --bind here,
/acp spawn gemini --mode persistent --thread auto หรือระบุอย่างชัดเจนเป็น
/acp spawn codex --bind here
ทำงาน
ดำเนินการต่อในบทสนทนาหรือเธรดที่ผูกไว้ (หรือระบุคีย์เซสชัน โดยตรง)
ตรวจสอบสถานะ
/acp status
ปรับแต่ง
/acp model <provider/model>, /acp permissions <profile>,
/acp timeout <seconds>
ชี้นำ
โดยไม่แทนที่บริบท: /acp steer tighten logging and continue
หยุด
/acp cancel (รอบปัจจุบัน) หรือ /acp close (เซสชัน + การผูก)
รายละเอียดวงจรชีวิต
- การสร้างจะสร้างหรือดำเนินเซสชันรันไทม์ ACP ต่อ บันทึกข้อมูลเมตา ACP ในที่เก็บเซสชัน OpenClaw และอาจสร้างงานเบื้องหลังเมื่อรอบการทำงานมีงานแม่เป็นเจ้าของ
- เซสชัน ACP ที่มีงานแม่เป็นเจ้าของจะถือเป็นงานเบื้องหลัง แม้เซสชันรันไทม์จะเป็นแบบถาวร การแจ้งเสร็จสิ้นและการนำส่งข้ามพื้นผิวจะผ่านตัวแจ้งเตือนของงานแม่ แทนที่จะทำงานเหมือนเซสชันแชตทั่วไปที่แสดงต่อผู้ใช้
- การบำรุงรักษางานจะปิดเซสชัน ACP แบบครั้งเดียวที่มีงานแม่เป็นเจ้าของ ซึ่งสิ้นสุดแล้วหรือไม่มีงานแม่ เซสชัน ACP แบบถาวรจะถูกเก็บไว้ตราบใดที่ยังมีการผูกบทสนทนาที่ใช้งานอยู่ เซสชันถาวรที่ไม่มีการผูกที่ใช้งานอยู่และค้างเก่าจะถูกปิด เพื่อไม่ให้ดำเนินต่อโดยไม่แจ้งให้ทราบหลังจากงานเจ้าของเสร็จสิ้นหรือระเบียนงานหายไป
- ข้อความติดตามผลที่ผูกไว้จะส่งตรงไปยังเซสชัน ACP จนกว่าการผูกจะถูกปิด เลิกโฟกัส รีเซ็ต หรือหมดอายุ
- คำสั่ง Gateway จะยังคงทำงานภายในเครื่อง
/acp ...,/statusและ/unfocusจะไม่ถูกส่งเป็นข้อความพรอมต์ปกติไปยังชุดเครื่องมือ ACP ที่ผูกไว้ cancelจะยกเลิกรอบที่ทำงานอยู่เมื่อแบ็กเอนด์รองรับการยกเลิก โดยจะไม่ลบการผูกหรือข้อมูลเมตาของเซสชันcloseจะสิ้นสุดเซสชัน ACP จากมุมมองของ OpenClaw และนำการผูกออก ชุดเครื่องมืออาจยังเก็บประวัติต้นทางของตนเองไว้ หากรองรับการดำเนินต่อ- Plugin acpx จะล้างโครงสร้างกระบวนการแรปเปอร์และอะแดปเตอร์ที่ OpenClaw เป็นเจ้าของหลังจาก
closeและเก็บกวาดกระบวนการ ACPX กำพร้าที่ OpenClaw เป็นเจ้าของซึ่งค้างเก่า ระหว่างการเริ่มต้น Gateway - เวิร์กเกอร์รันไทม์ที่ไม่ได้ใช้งานมีสิทธิ์ถูกล้างหลังจาก
acp.runtime.ttlMinutesส่วนข้อมูลเมตาของเซสชันที่จัดเก็บไว้จะยังใช้งานได้สำหรับ/acp sessions
กฎการกำหนดเส้นทาง Codex แบบเนทีฟ
ตัวกระตุ้นภาษาธรรมชาติที่ควรถูกกำหนดเส้นทางไปยัง Plugin Codex แบบเนทีฟ เมื่อเปิดใช้งานอยู่:
- "ผูกช่อง Discord นี้กับ Codex"
- "แนบแชตนี้กับเธรด Codex
<id>" - "แสดงเธรด Codex แล้วผูกเธรดนี้"
การผูกการสนทนา Codex แบบเนทีฟเป็นเส้นทางควบคุมแชตเริ่มต้น
เครื่องมือแบบไดนามิกของ OpenClaw ยังคงทำงานผ่าน OpenClaw ขณะที่เครื่องมือ
แบบเนทีฟของ Codex เช่น shell/apply-patch จะทำงานภายใน Codex สำหรับเหตุการณ์
เครื่องมือแบบเนทีฟของ Codex นั้น OpenClaw จะแทรกรีเลย์ฮุกแบบเนทีฟประจำแต่ละรอบ
เพื่อให้ฮุกของ Plugin สามารถบล็อก before_tool_call สังเกต after_tool_call
และส่งเหตุการณ์ PermissionRequest ของ Codex ผ่านการอนุมัติของ OpenClaw
ฮุก Stop ของ Codex จะถูกส่งต่อไปยัง before_agent_finalize ของ OpenClaw
ซึ่ง Plugin สามารถขอให้โมเดลประมวลผลเพิ่มอีกหนึ่งรอบก่อนที่ Codex จะสรุปคำตอบ
รีเลย์นี้จงใจทำงานแบบระมัดระวัง โดยจะไม่แก้ไขอาร์กิวเมนต์ของเครื่องมือแบบเนทีฟ
ของ Codex หรือเขียนระเบียนเธรด Codex ใหม่ ใช้ ACP แบบชัดเจนเฉพาะเมื่อต้องการ
โมเดลรันไทม์/เซสชันของ ACP เท่านั้น ขอบเขตการรองรับ Codex แบบฝังตัวมีการจัดทำ
เอกสารไว้ใน
สัญญาการรองรับชุดควบคุม Codex v1
ข้อมูลสรุปการเลือกโมเดล / ผู้ให้บริการ / รันไทม์
- การอ้างอิงโมเดล Codex แบบเก่า - เส้นทางโมเดล OAuth/การสมัครสมาชิก Codex แบบเก่าที่ได้รับการซ่อมแซมโดย doctor
openai/*- รันไทม์ app-server แบบเนทีฟของ Codex ที่ฝังตัวสำหรับรอบการทำงานของเอเจนต์ OpenAI/codex ...- การควบคุมการสนทนา Codex แบบเนทีฟ/acp ...หรือruntime: "acp"- การควบคุม ACP/acpx แบบชัดเจน
ทริกเกอร์ภาษาธรรมชาติสำหรับการกำหนดเส้นทาง ACP
ทริกเกอร์ที่ควรกำหนดเส้นทางไปยังรันไทม์ ACP:
- "เรียกใช้งานนี้เป็นเซสชัน Claude Code ACP แบบครั้งเดียว แล้วสรุปผลลัพธ์"
- "ใช้ Gemini CLI สำหรับงานนี้ในเธรด แล้วให้การติดตามผลดำเนินต่อในเธรดเดิม"
- "เรียกใช้ Codex ผ่าน ACP ในเธรดเบื้องหลัง"
OpenClaw เลือก runtime: "acp" แก้ไข agentId ของชุดควบคุม ผูกกับ
การสนทนาหรือเธรดปัจจุบันเมื่อรองรับ และกำหนดเส้นทางข้อความติดตามผล
ไปยังเซสชันนั้นจนกว่าจะปิด/หมดอายุ Codex จะใช้เส้นทางนี้เฉพาะเมื่อ
ระบุ ACP/acpx อย่างชัดเจน หรือ Plugin Codex แบบเนทีฟไม่พร้อมใช้งานสำหรับ
การดำเนินการที่ร้องขอ
สำหรับ sessions_spawn จะประกาศ runtime: "acp" เฉพาะเมื่อเปิดใช้ ACP
ผู้ร้องขอไม่ได้อยู่ในแซนด์บ็อกซ์ และมีการโหลดแบ็กเอนด์รันไทม์ ACP แล้ว
acp.dispatch.enabled=false จะหยุดการส่งเธรด ACP อัตโนมัติชั่วคราว
แต่จะไม่ซ่อนหรือบล็อกการเรียก sessions_spawn({ runtime: "acp" })
แบบชัดเจน โดยกำหนดเป้าหมายไปยังรหัสชุดควบคุม ACP เช่น codex, claude,
droid, gemini หรือ opencode อย่าส่งรหัสเอเจนต์การกำหนดค่า OpenClaw
ปกติจาก agents_list เว้นแต่รายการนั้นจะได้รับการกำหนดค่าอย่างชัดเจนด้วย
agents.list[].runtime.type="acp" มิฉะนั้นให้ใช้รันไทม์ซับเอเจนต์เริ่มต้น
เมื่อเอเจนต์ OpenClaw ได้รับการกำหนดค่าด้วย runtime.type="acp" OpenClaw
จะใช้ runtime.acp.agent เป็นรหัสชุดควบคุมเบื้องหลัง
ACP เทียบกับซับเอเจนต์
ใช้ ACP เมื่อต้องการรันไทม์ชุดควบคุมภายนอก ใช้ app-server Codex
แบบเนทีฟ สำหรับการผูก/ควบคุมการสนทนา Codex เมื่อเปิดใช้ Plugin codex
ใช้ ซับเอเจนต์ เมื่อต้องการการทำงานที่มอบหมายแบบเนทีฟของ OpenClaw
| พื้นที่ | เซสชัน ACP | การทำงานของซับเอเจนต์ |
|---|---|---|
| รันไทม์ | Plugin แบ็กเอนด์ ACP (เช่น acpx) | รันไทม์ซับเอเจนต์แบบเนทีฟของ OpenClaw |
| คีย์เซสชัน | agent:<agentId>:acp:<uuid> |
agent:<agentId>:subagent:<uuid> |
| คำสั่งหลัก | /acp ... |
/subagents ... |
| เครื่องมือสร้าง | sessions_spawn พร้อม runtime:"acp" |
sessions_spawn (รันไทม์เริ่มต้น) |
ดูเพิ่มเติมที่ ซับเอเจนต์
วิธีที่ ACP เรียกใช้ Claude Code
สำหรับ Claude Code ผ่าน ACP สแต็กประกอบด้วย:
- ระนาบควบคุมเซสชัน ACP ของ OpenClaw
- Plugin รันไทม์
@openclaw/acpxอย่างเป็นทางการ - อะแดปเตอร์ Claude ACP
- กลไกรันไทม์/เซสชันฝั่ง Claude
ACP Claude เป็น เซสชันชุดควบคุม ที่มีการควบคุม ACP การดำเนินเซสชันต่อ การติดตามงานเบื้องหลัง และการผูกการสนทนา/เธรดแบบไม่บังคับ
แบ็กเอนด์ CLI เป็นรันไทม์สำรองภายในเครื่องแบบข้อความล้วนที่แยกต่างหาก - ดู แบ็กเอนด์ CLI
สำหรับผู้ปฏิบัติงาน กฎที่ใช้จริงคือ:
- ต้องการ
/acp spawnเซสชันที่ผูกได้ การควบคุมรันไทม์ หรืองานชุดควบคุมแบบถาวรใช่หรือไม่ ใช้ ACP - ต้องการการสำรองข้อความภายในเครื่องแบบง่ายผ่าน CLI โดยตรงใช่หรือไม่ ใช้แบ็กเอนด์ CLI
เซสชันที่ผูกไว้
แบบจำลองทางความคิด
- พื้นผิวแชต - ตำแหน่งที่ผู้คนสนทนาต่อเนื่อง (ช่อง Discord, หัวข้อ Telegram, แชต iMessage)
- เซสชัน ACP - สถานะรันไทม์ Codex/Claude/Gemini แบบถาวรที่ OpenClaw กำหนดเส้นทางไปให้
- เธรด/หัวข้อย่อย - พื้นผิวการส่งข้อความเพิ่มเติมแบบไม่บังคับ ซึ่งสร้างโดย
--thread ...เท่านั้น - พื้นที่ทำงานของรันไทม์ - ตำแหน่งระบบไฟล์ (
cwd, การเช็กเอาต์คลังโค้ด, พื้นที่ทำงานของแบ็กเอนด์) ที่ชุดควบคุมทำงาน เป็นอิสระจากพื้นผิวแชต
การผูกกับการสนทนาปัจจุบัน
/acp spawn <harness> --bind here จะตรึงการสนทนาปัจจุบันไว้กับ
เซสชัน ACP ที่สร้างขึ้น โดยไม่มีเธรดย่อยและใช้พื้นผิวแชตเดิม OpenClaw ยังคง
เป็นเจ้าของการขนส่ง การยืนยันตัวตน ความปลอดภัย และการนำส่ง ข้อความติดตามผลใน
การสนทนานั้นจะถูกกำหนดเส้นทางไปยังเซสชันเดิม /new และ /reset จะรีเซ็ตเซสชัน
ในตำแหน่งเดิม ส่วน /acp close จะลบการผูก
ตัวอย่าง:
/codex bind # native Codex bind, route future messages here/codex model gpt-5.4 # tune the bound native Codex thread/codex stop # control the active native Codex turn/acp spawn codex --bind here # explicit ACP fallback for Codex/acp spawn codex --thread auto # may create a child thread/topic and bind there/acp spawn codex --bind here --cwd /workspace/repo # same chat binding, Codex runs in /workspace/repoกฎการผูกและการใช้ร่วมกันไม่ได้
--bind hereและ--thread ...ไม่สามารถใช้ร่วมกันได้--bind hereใช้งานได้เฉพาะในช่องที่ประกาศว่ารองรับการผูกกับการสนทนาปัจจุบัน มิฉะนั้น OpenClaw จะส่งคืนข้อความไม่รองรับที่ชัดเจน การผูกจะคงอยู่หลังจาก Gateway เริ่มทำงานใหม่- บน Discord ค่า
spawnSessionsจะควบคุมการสร้างเธรดย่อยสำหรับ--thread auto|hereแต่ไม่ควบคุม--bind here - หากสร้างไปยังเอเจนต์ ACP อื่นโดยไม่มี
--cwdOpenClaw จะสืบทอดพื้นที่ทำงานของ เอเจนต์เป้าหมาย ตามค่าเริ่มต้น พาธที่สืบทอดมาแต่ไม่มีอยู่ (ENOENT/ENOTDIR) จะย้อนกลับไปใช้ค่าเริ่มต้นของแบ็กเอนด์ ส่วนข้อผิดพลาดการเข้าถึงอื่น ๆ (เช่นEACCES) จะแสดงเป็นข้อผิดพลาดในการสร้าง - คำสั่งจัดการ Gateway ยังคงทำงานภายในเครื่องในการสนทนาที่ผูกไว้ คำสั่ง
/acp ...จะได้รับการจัดการโดย OpenClaw แม้ว่าข้อความติดตามผลปกติจะถูกกำหนดเส้นทางไปยังเซสชัน ACP ที่ผูกไว้ ส่วน/statusและ/unfocusก็ยังคงทำงานภายในเครื่องเมื่อเปิดใช้การจัดการคำสั่งสำหรับพื้นผิวนั้น
เซสชันที่ผูกกับเธรด
เมื่อเปิดใช้การผูกเธรดสำหรับอะแดปเตอร์ช่อง:
- OpenClaw ผูกเธรดกับเซสชัน ACP เป้าหมาย
- ข้อความติดตามผลในเธรดนั้นจะถูกกำหนดเส้นทางไปยังเซสชัน ACP ที่ผูกไว้
- ผลลัพธ์ ACP จะถูกนำส่งกลับไปยังเธรดเดิม
- การเลิกโฟกัส/ปิด/เก็บถาวร/หมดเวลาจากการไม่มีการใช้งาน หรือหมดอายุสูงสุด จะลบการผูก
/acp close,/acp cancel,/acp status,/statusและ/unfocusเป็นคำสั่ง Gateway ไม่ใช่พรอมต์ที่ส่งให้ชุดควบคุม ACP
แฟล็กคุณลักษณะที่จำเป็นสำหรับ ACP ที่ผูกกับเธรด:
acp.enabled=trueacp.dispatch.enabledเปิดอยู่ตามค่าเริ่มต้น (ตั้งเป็นfalseเพื่อหยุดการส่งเธรด ACP อัตโนมัติชั่วคราว โดยการเรียกsessions_spawn({ runtime: "acp" })แบบชัดเจนยังคงใช้งานได้)- เปิดใช้การสร้างเซสชันเธรดของอะแดปเตอร์ช่อง (ค่าเริ่มต้น:
true):- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
การรองรับการผูกเธรดขึ้นอยู่กับอะแดปเตอร์ หากอะแดปเตอร์ช่องที่ใช้งานอยู่ ไม่รองรับการผูกเธรด OpenClaw จะส่งคืนข้อความว่าไม่รองรับ/ไม่พร้อมใช้งาน อย่างชัดเจน
ช่องที่รองรับเธรด
- อะแดปเตอร์ช่องใด ๆ ที่เปิดเผยความสามารถในการผูกเซสชัน/เธรด
- การรองรับที่มีมาให้ในปัจจุบัน: เธรด/ช่อง Discord, หัวข้อ Telegram (หัวข้อฟอรัมในกลุ่ม/ซูเปอร์กรุ๊ปและหัวข้อข้อความส่วนตัว)
- ช่องของ Plugin สามารถเพิ่มการรองรับผ่านอินเทอร์เฟซการผูกเดียวกัน
การผูกช่องแบบถาวร
สำหรับเวิร์กโฟลว์ที่ไม่ใช่แบบชั่วคราว ให้กำหนดค่าการผูก ACP แบบถาวรในรายการ
bindings[] ระดับบนสุด
โมเดลการผูก
bindings[].type"acp"ระบุการผูกการสนทนา ACP แบบถาวร
bindings[].matchobjectระบุการสนทนาเป้าหมาย รูปแบบแยกตามช่อง:
- ช่อง/เธรด Discord:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - ช่อง/ข้อความส่วนตัว Slack:
match.channel="slack"+match.peer.id="<channelId|channel:<channelId>|#<channelId>|userId|user:<userId>|slack:<userId>|<@userId>>"ควรใช้รหัส Slack ที่คงที่ การผูกช่องจะตรงกับการตอบกลับภายในเธรดของช่องนั้นด้วย - หัวข้อฟอรัม Telegram:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - ข้อความส่วนตัว/กลุ่ม WhatsApp:
match.channel="whatsapp"+match.peer.id="<E.164|group JID>"ใช้หมายเลข E.164 เช่น+15555550123สำหรับแชตโดยตรง และ JID กลุ่ม WhatsApp เช่น120363424282127706@g.usสำหรับกลุ่ม - ข้อความส่วนตัว/กลุ่ม iMessage:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"ควรใช้chat_id:*สำหรับการผูกกลุ่มที่คงที่
bindings[].agentIdstringรหัสเอเจนต์ OpenClaw ที่เป็นเจ้าของ
bindings[].acp.mode"persistent" | "oneshot"การแทนที่ ACP แบบไม่บังคับ
bindings[].acp.labelstringป้ายกำกับสำหรับผู้ปฏิบัติงานแบบไม่บังคับ
bindings[].acp.cwdstringไดเรกทอรีทำงานของรันไทม์แบบไม่บังคับ
bindings[].acp.backendstringการแทนที่แบ็กเอนด์แบบไม่บังคับ
ค่าเริ่มต้นของรันไทม์ต่อเอเจนต์
ใช้ agents.list[].runtime เพื่อกำหนดค่าเริ่มต้น ACP หนึ่งครั้งต่อเอเจนต์:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(รหัสชุดควบคุม เช่นcodexหรือclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
ลำดับความสำคัญของการแทนที่สำหรับเซสชัน ACP ที่ผูกไว้:
bindings[].acp.*agents.list[].runtime.acp.*- ค่าเริ่มต้น ACP ส่วนกลาง (เช่น
acp.backend)
ตัวอย่าง
{ 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 } }, }, }, }, },}ลักษณะการทำงาน
- OpenClaw ตรวจสอบว่าเซสชัน ACP ที่กำหนดค่าไว้มีอยู่หลังจากผ่านการอนุญาตเฉพาะช่องทางและก่อนนำไปใช้
- ข้อความในช่องทาง หัวข้อ หรือแชตนั้นจะถูกกำหนดเส้นทางไปยังเซสชัน ACP ที่กำหนดค่าไว้
- การเชื่อมโยง ACP ที่กำหนดค่าไว้เป็นเจ้าของเส้นทางเซสชันของตน การกระจายข้อความแบบแผ่ขยายของช่องทางจะไม่แทนที่เซสชัน ACP ที่กำหนดค่าไว้สำหรับการเชื่อมโยงที่ตรงกัน
- ในการสนทนาที่เชื่อมโยงไว้
/newและ/resetจะรีเซ็ตคีย์เซสชัน ACP เดิมโดยตรง - การเชื่อมโยงรันไทม์ชั่วคราว (ตัวอย่างเช่น การเชื่อมโยงที่สร้างโดยโฟลว์การโฟกัสเธรด) ยังคงมีผลในตำแหน่งที่มีอยู่
- สำหรับการสร้าง ACP ข้ามเอเจนต์โดยไม่มีการระบุ
cwdอย่างชัดเจน OpenClaw จะรับช่วงพื้นที่ทำงานของเอเจนต์เป้าหมายจากการกำหนดค่าเอเจนต์ - เส้นทางพื้นที่ทำงานที่รับช่วงมาซึ่งไม่มีอยู่จะย้อนกลับไปใช้ cwd เริ่มต้นของแบ็กเอนด์ ส่วนความล้มเหลวในการเข้าถึงเส้นทางที่มีอยู่จะแสดงเป็นข้อผิดพลาดในการสร้าง
เริ่มเซสชัน ACP
มีสองวิธีในการเริ่มเซสชัน ACP:
จาก sessions_spawn
ใช้ runtime: "acp" เพื่อเริ่มเซสชัน ACP จากรอบการทำงานของเอเจนต์หรือการเรียกใช้เครื่องมือ
{ "task": "Open the repo and summarize failing tests", "runtime": "acp", "agentId": "codex", "thread": true, "mode": "session"}จากคำสั่ง /acp
ใช้ /acp spawn เพื่อให้ผู้ดำเนินการควบคุมจากแชตโดยตรง
/acp spawn codex --mode persistent --thread auto/acp spawn codex --mode oneshot --thread off/acp spawn codex --bind here/acp spawn codex --thread hereแฟล็กหลัก:
--mode persistent|oneshot--bind here|off--thread auto|here|off--cwd <absolute-path>--label <name>
พารามิเตอร์ของ sessions_spawn
taskstringrequiredพรอมต์เริ่มต้นที่ส่งไปยังเซสชัน ACP
runtime"acp"requiredต้องเป็น "acp" สำหรับเซสชัน ACP
agentIdstringรหัสระบบควบคุมเป้าหมายของ ACP หากกำหนด acp.defaultAgent ไว้ จะย้อนกลับไปใช้ค่านั้น
threadbooleandefault: falseร้องขอโฟลว์การเชื่อมโยงเธรดในตำแหน่งที่รองรับ
mode"run" | "session"default: run"run" เป็นการทำงานครั้งเดียว ส่วน "session" เป็นแบบถาวร หากกำหนด thread: true และละเว้น mode OpenClaw อาจใช้ลักษณะการทำงานแบบถาวรเป็นค่าเริ่มต้นตามเส้นทางรันไทม์ mode: "session" ต้องใช้ thread: true
cwdstringไดเรกทอรีทำงานของรันไทม์ที่ร้องขอ (ผ่านการตรวจสอบตามนโยบายของแบ็กเอนด์/รันไทม์) หากละเว้น การสร้าง ACP จะรับช่วงพื้นที่ทำงานของเอเจนต์เป้าหมายเมื่อมีการกำหนดค่าไว้ เส้นทางที่รับช่วงมาซึ่งไม่มีอยู่จะย้อนกลับไปใช้ค่าเริ่มต้นของแบ็กเอนด์ ส่วนข้อผิดพลาดในการเข้าถึงจริงจะถูกส่งกลับ
labelstringป้ายกำกับสำหรับผู้ดำเนินการที่ใช้ในข้อความเซสชัน/แบนเนอร์
resumeSessionIdstringดำเนินเซสชัน ACP ที่มีอยู่ต่อแทนการสร้างเซสชันใหม่ เอเจนต์จะเล่นประวัติการสนทนาซ้ำผ่าน session/load ต้องใช้ runtime: "acp"
streamTo"parent""parent" จะสตรีมสรุปความคืบหน้าในการทำงาน ACP ครั้งแรกกลับไปยังเซสชันผู้ร้องขอในรูปแบบเหตุการณ์ระบบ การตอบรับที่ยอมรับจะมี streamLogPath ซึ่งชี้ไปยังบันทึก JSONL ที่จำกัดขอบเขตตามเซสชัน (<sessionId>.acp-stream.jsonl) ซึ่งคุณสามารถติดตามเพื่อดูประวัติการส่งต่อทั้งหมดได้ ตามค่าเริ่มต้น สตรีมความคืบหน้าของเซสชันแม่จะแสดงคำอธิบายจากผู้ช่วยและความคืบหน้าสถานะ ACP เว้นแต่จะกำหนด streaming.progress.commentary=false Discord ยังใช้โหมดความคืบหน้าสำหรับตัวอย่างในเซสชันแม่เป็นค่าเริ่มต้นเมื่อไม่ได้กำหนดโหมดสตรีมไว้ ความคืบหน้าสถานะยังคงเป็นไปตาม acp.stream.tagVisibility ดังนั้นแท็กอย่าง plan จะยังคงซ่อนอยู่ เว้นแต่จะเปิดใช้อย่างชัดเจน
การทำงาน sessions_spawn ของ ACP ใช้ agents.defaults.subagents.runTimeoutSeconds เป็นขีดจำกัดเริ่มต้นของรอบการทำงานย่อย เครื่องมือนี้ไม่ยอมรับการแทนที่ระยะหมดเวลาเป็นรายครั้ง (runTimeoutSeconds/timeoutSeconds จะถูกปฏิเสธพร้อมข้อผิดพลาดที่ระบุให้กำหนดค่าเริ่มต้น)
modelstringการแทนที่โมเดลอย่างชัดเจนสำหรับเซสชันย่อยของ ACP การสร้าง Codex ACP จะปรับการอ้างอิง OpenAI เช่น openai/gpt-5.4 ให้เป็นการกำหนดค่าเริ่มต้นของ Codex ACP ก่อน session/new รูปแบบสแลช เช่น openai/gpt-5.4/high จะกำหนดระดับการใช้เหตุผลของ Codex ACP ด้วย เมื่อละเว้น sessions_spawn({ runtime: "acp" }) จะใช้ค่าเริ่มต้นของโมเดลเอเจนต์ย่อยที่มีอยู่ (agents.defaults.subagents.model หรือ agents.list[].subagents.model) เมื่อมีการกำหนดค่าไว้ มิฉะนั้นจะปล่อยให้ระบบควบคุม ACP ใช้โมเดลเริ่มต้นของตนเอง ระบบควบคุมอื่นต้องประกาศ ACP models และรองรับ session/set_model มิฉะนั้น OpenClaw/acpx จะล้มเหลวพร้อมข้อความที่ชัดเจน แทนที่จะย้อนกลับไปใช้ค่าเริ่มต้นของเอเจนต์เป้าหมายโดยไม่มีการแจ้งเตือน
thinkingstringระดับการคิด/การใช้เหตุผลที่ระบุอย่างชัดเจน สำหรับ Codex ACP ค่า minimal จะจับคู่กับระดับต่ำ ค่า low/medium/high/xhigh จะจับคู่โดยตรง และ off จะละเว้นการแทนที่ระดับการใช้เหตุผลเมื่อเริ่มต้น เมื่อละเว้น การสร้าง ACP จะใช้ค่าเริ่มต้นด้านการคิดของเอเจนต์ย่อยที่มีอยู่และ agents.defaults.models["provider/model"].params.thinking รายโมเดลสำหรับโมเดลที่เลือก
โหมดการเชื่อมโยงและเธรดเมื่อสร้าง
--bind here|off
| โหมด | ลักษณะการทำงาน |
|---|---|
here |
เชื่อมโยงการสนทนาที่ใช้งานอยู่ในปัจจุบันโดยตรง และล้มเหลวหากไม่มีการสนทนาที่ใช้งานอยู่ |
off |
ไม่สร้างการเชื่อมโยงกับการสนทนาปัจจุบัน |
หมายเหตุ:
--bind hereเป็นเส้นทางที่ง่ายที่สุดสำหรับผู้ดำเนินการเมื่อต้องการ “ให้ช่องทางหรือแชตนี้ใช้ Codex เป็นระบบเบื้องหลัง”--bind hereไม่สร้างเธรดย่อย--bind hereใช้งานได้เฉพาะในช่องทางที่รองรับการเชื่อมโยงการสนทนาปัจจุบัน- ไม่สามารถใช้
--bindและ--threadร่วมกันในการเรียก/acp spawnครั้งเดียวกัน
--thread auto|here|off
| โหมด | ลักษณะการทำงาน |
|---|---|
auto |
เมื่ออยู่ในเธรดที่ใช้งานอยู่: เชื่อมโยงเธรดนั้น เมื่ออยู่นอกเธรด: สร้าง/เชื่อมโยงเธรดย่อยหากรองรับ |
here |
กำหนดให้ต้องมีเธรดที่ใช้งานอยู่ในปัจจุบัน และล้มเหลวหากไม่ได้อยู่ในเธรด |
off |
ไม่มีการเชื่อมโยง เซสชันเริ่มต้นโดยไม่เชื่อมโยง |
หมายเหตุ:
- บนพื้นผิวการเชื่อมโยงที่ไม่ใช่เธรด ลักษณะการทำงานเริ่มต้นจะเทียบเท่ากับ
off - การสร้างแบบเชื่อมโยงกับเธรดต้องได้รับการรองรับจากนโยบายของช่องทาง:
- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
- ใช้
--bind hereเมื่อต้องการตรึงการสนทนาปัจจุบันโดยไม่สร้างเธรดย่อย
รูปแบบการส่งมอบ
เซสชัน ACP สามารถเป็นพื้นที่ทำงานแบบโต้ตอบหรืองานเบื้องหลังที่เซสชันแม่เป็นเจ้าของ เส้นทางการส่งมอบขึ้นอยู่กับรูปแบบดังกล่าว
เซสชัน ACP แบบโต้ตอบ
เซสชันแบบโต้ตอบมีไว้เพื่อสนทนาต่อบนพื้นผิวแชตที่มองเห็นได้:
/acp spawn ... --bind hereเชื่อมโยงการสนทนาปัจจุบันกับเซสชัน ACP/acp spawn ... --thread ...เชื่อมโยงเธรด/หัวข้อของช่องทางกับเซสชัน ACPbindings[].type="acp"แบบถาวรที่กำหนดค่าไว้จะกำหนดเส้นทางการสนทนาที่ตรงกันไปยังเซสชัน ACP เดิม
ข้อความติดตามผลในการสนทนาที่เชื่อมโยงไว้จะถูกกำหนดเส้นทางโดยตรงไปยังเซสชัน ACP และผลลัพธ์จาก ACP จะถูกส่งกลับไปยังช่องทาง/เธรด/หัวข้อเดิม
สิ่งที่ OpenClaw ส่งไปยังระบบควบคุม:
- ข้อความติดตามผลตามปกติในการสนทนาที่เชื่อมโยงไว้จะถูกส่งเป็นข้อความพรอมต์ พร้อมไฟล์แนบเฉพาะเมื่อระบบควบคุม/แบ็กเอนด์รองรับ
- คำสั่งจัดการ
/acpและคำสั่ง Gateway ภายในเครื่องจะถูกดักก่อนส่งต่อไปยัง ACP - เหตุการณ์เสร็จสิ้นที่รันไทม์สร้างขึ้นจะถูกแปลงเป็นข้อมูลสำหรับแต่ละเป้าหมาย เอเจนต์ OpenClaw จะได้รับซองบริบทรันไทม์ภายในของ OpenClaw ส่วนระบบควบคุม ACP ภายนอกจะได้รับพรอมต์แบบธรรมดาที่มีผลลัพธ์จากงานย่อยและคำสั่ง ซองข้อมูลดิบ
<<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>>ต้องไม่ถูกส่งไปยังระบบควบคุมภายนอกหรือบันทึกเป็นข้อความบทสนทนาของผู้ใช้ ACP - รายการบทสนทนา ACP ใช้ข้อความที่ผู้ใช้มองเห็นซึ่งเป็นตัวกระตุ้น หรือพรอมต์การเสร็จสิ้นแบบธรรมดา เมทาดาทาเหตุการณ์ภายในจะคงอยู่ในรูปแบบมีโครงสร้างภายใน OpenClaw เมื่อทำได้ และจะไม่ถูกถือเป็นเนื้อหาแชตที่ผู้ใช้เขียน
เซสชัน ACP แบบครั้งเดียวที่เซสชันแม่เป็นเจ้าของ
เซสชัน ACP แบบครั้งเดียวที่ถูกสร้างโดยการทำงานของเอเจนต์อื่นเป็นงานย่อยเบื้องหลัง คล้ายกับเอเจนต์ย่อย:
- เซสชันแม่ร้องของานด้วย
sessions_spawn({ runtime: "acp", mode: "run" }) - งานย่อยทำงานในเซสชันระบบควบคุม ACP ของตนเอง
- รอบการทำงานย่อยทำงานบนช่องทางเบื้องหลังเดียวกับที่ใช้สำหรับการสร้างเอเจนต์ย่อยแบบเนทีฟ ดังนั้นระบบควบคุม ACP ที่ทำงานช้าจะไม่ขัดขวางงานของเซสชันหลักที่ไม่เกี่ยวข้อง
- การเสร็จสิ้นจะถูกรายงานกลับผ่านเส้นทางประกาศการเสร็จสิ้นของงาน OpenClaw จะแปลงเมทาดาทาการเสร็จสิ้นภายในเป็นพรอมต์ ACP แบบธรรมดาก่อนส่งไปยังระบบควบคุมภายนอก เพื่อให้ระบบควบคุมไม่เห็นเครื่องหมายบริบทรันไทม์ที่ใช้เฉพาะใน OpenClaw
- เซสชันแม่จะเรียบเรียงผลลัพธ์จากงานย่อยใหม่ด้วยน้ำเสียงปกติของผู้ช่วย เมื่อการตอบกลับสำหรับผู้ใช้มีประโยชน์
อย่า ถือว่าเส้นทางนี้เป็นการสนทนาแบบเพียร์ทูเพียร์ระหว่างเซสชันแม่กับงานย่อย งานย่อยมีช่องทางส่งผลการเสร็จสิ้นกลับไปยังเซสชันแม่อยู่แล้ว
การส่งมอบผ่าน sessions_send และ A2A
sessions_send สามารถกำหนดเป้าหมายไปยังเซสชันอื่นหลังจากสร้างแล้ว สำหรับเซสชันเพียร์ตามปกติ OpenClaw จะใช้เส้นทางติดตามผลแบบเอเจนต์ถึงเอเจนต์ (A2A) หลังจากแทรกข้อความ:
- รอการตอบกลับจากเซสชันเป้าหมาย
- อนุญาตให้ผู้ร้องขอและเป้าหมายแลกเปลี่ยนข้อความติดตามผลได้ตามจำนวนรอบที่จำกัด โดยเป็นทางเลือก
- ขอให้เป้าหมายสร้างข้อความประกาศ
- ส่งประกาศนั้นไปยังช่องทางหรือเธรดที่มองเห็นได้
เส้นทาง A2A นั้นเป็นทางเลือกสำรองสำหรับการส่งระหว่างเพียร์ในกรณีที่ผู้ส่งต้องการ
การติดตามผลที่มองเห็นได้ เส้นทางนี้จะยังคงเปิดใช้งานเมื่อเซสชันที่ไม่เกี่ยวข้องสามารถมองเห็นและ
ส่งข้อความไปยังเป้าหมาย ACP ได้ ตัวอย่างเช่น ภายใต้การตั้งค่า tools.sessions.visibility
แบบกว้าง
OpenClaw จะข้ามการติดตามผลผ่าน A2A เฉพาะเมื่อผู้ร้องขอเป็นพาเรนต์ของ
ACP ชิลด์แบบทำงานครั้งเดียวของตนเองซึ่งพาเรนต์เป็นเจ้าของ ในกรณีนั้น การเรียกใช้ A2A เพิ่มเติมจาก
การทำงานเสร็จสิ้นอาจปลุกพาเรนต์ด้วยผลลัพธ์ของชิลด์ ส่งต่อ
การตอบกลับของพาเรนต์กลับเข้าไปยังชิลด์ และสร้างลูปสะท้อนกลับระหว่างพาเรนต์กับชิลด์
ผลลัพธ์ของ sessions_send จะรายงาน delivery.status="skipped" สำหรับ
กรณีชิลด์ที่เป็นเจ้าของนั้น เนื่องจากเส้นทางการทำงานเสร็จสิ้นมีหน้าที่ส่งผลลัพธ์
อยู่แล้ว
ดำเนินเซสชันที่มีอยู่ต่อ
ใช้ resumeSessionId เพื่อดำเนินเซสชัน ACP ก่อนหน้าต่อแทนการ
เริ่มใหม่ เอเจนต์จะเล่นซ้ำประวัติการสนทนาผ่าน
session/load จึงสามารถทำงานต่อพร้อมบริบททั้งหมดของสิ่งที่เกิดขึ้นก่อนหน้า
{ "task": "Continue where we left off - fix the remaining test failures", "runtime": "acp", "agentId": "codex", "resumeSessionId": "<previous-session-id>"}กรณีใช้งานทั่วไป:
- ส่งต่อเซสชัน Codex จากแล็ปท็อปไปยังโทรศัพท์ โดยบอกให้เอเจนต์ทำงานต่อจากจุดที่คุณค้างไว้
- ดำเนินเซสชันการเขียนโค้ดที่คุณเริ่มแบบโต้ตอบใน CLI ต่อ โดยขณะนี้ทำงานแบบไร้ส่วนติดต่อผ่านเอเจนต์ของคุณ
- ทำงานต่อจากงานที่ถูกขัดจังหวะด้วยการรีสตาร์ต Gateway หรือหมดเวลาเนื่องจากไม่มีการใช้งาน
หมายเหตุ:
resumeSessionIdใช้ได้เฉพาะเมื่อruntime: "acp"เท่านั้น รันไทม์ซับเอเจนต์เริ่มต้นจะละเว้นฟิลด์ที่ใช้เฉพาะกับ ACP นี้streamToใช้ได้เฉพาะเมื่อruntime: "acp"เท่านั้น รันไทม์ซับเอเจนต์เริ่มต้นจะละเว้นฟิลด์ที่ใช้เฉพาะกับ ACP นี้resumeSessionIdเป็นรหัสสำหรับดำเนินการต่อของ ACP/ฮาร์เนสภายในโฮสต์ ไม่ใช่คีย์เซสชันช่องทางของ OpenClaw โดย OpenClaw ยังคงตรวจสอบนโยบายการสร้าง ACP และนโยบายเอเจนต์เป้าหมายก่อนส่งงาน ขณะที่แบ็กเอนด์ ACP หรือฮาร์เนสเป็นผู้ควบคุมการให้สิทธิ์สำหรับการโหลดรหัสต้นทางนั้นresumeSessionIdกู้คืนประวัติการสนทนา ACP ต้นทาง ส่วนthreadและmodeยังคงใช้ตามปกติกับเซสชัน OpenClaw ใหม่ที่คุณกำลังสร้าง ดังนั้นmode: "session"ยังคงต้องใช้thread: true- เอเจนต์เป้าหมายต้องรองรับ
session/load(Codex และ Claude Code รองรับ) - หากไม่พบรหัสเซสชัน การสร้างจะล้มเหลวพร้อมข้อผิดพลาดที่ชัดเจน โดยไม่มีการย้อนกลับไปสร้างเซสชันใหม่โดยไม่แจ้งให้ทราบ
การทดสอบเบื้องต้นหลังการปรับใช้
หลังจากปรับใช้ Gateway ให้เรียกใช้การตรวจสอบแบบครบวงจรจริงแทนการเชื่อถือ การทดสอบหน่วย:
- ตรวจสอบเวอร์ชันและคอมมิตของ Gateway ที่ปรับใช้บนโฮสต์เป้าหมาย
- เปิดเซสชันบริดจ์ ACPX ชั่วคราวไปยังเอเจนต์ที่ทำงานจริง
- ขอให้เอเจนต์นั้นเรียก
sessions_spawnโดยใช้runtime: "acp",agentId: "codex",mode: "run"และงานReply with exactly LIVE-ACP-SPAWN-OK - ตรวจสอบ
accepted=yes,childSessionKeyจริง และไม่มีข้อผิดพลาดจากตัวตรวจสอบ - ล้างเซสชันบริดจ์ชั่วคราว
กำหนดเกตไว้ที่ mode: "run" และข้าม streamTo: "parent" เนื่องจาก
mode: "session" ที่ผูกกับเธรดและเส้นทางรีเลย์สตรีมเป็นการตรวจสอบการผสานรวม
ที่สมบูรณ์กว่าและแยกจากกัน
ความเข้ากันได้กับแซนด์บ็อกซ์
ปัจจุบันเซสชัน ACP ทำงานบนรันไทม์ของโฮสต์ ไม่ใช่ ภายในแซนด์บ็อกซ์ของ OpenClaw
ข้อจำกัดปัจจุบัน:
- หากเซสชันผู้ร้องขออยู่ในแซนด์บ็อกซ์ การสร้าง ACP จะถูกบล็อกทั้งสำหรับ
sessions_spawn({ runtime: "acp" })และ/acp spawn sessions_spawnที่ใช้runtime: "acp"ไม่รองรับsandbox: "require"
การระบุเป้าหมายเซสชัน
การดำเนินการ /acp ส่วนใหญ่ยอมรับเป้าหมายเซสชันแบบไม่บังคับ (session-key,
session-id หรือ session-label)
ลำดับการระบุ:
- อาร์กิวเมนต์เป้าหมายที่ระบุอย่างชัดเจน (หรือ
--sessionสำหรับ/acp steer)- ลองใช้คีย์
- จากนั้นลองรหัสเซสชันที่มีรูปแบบ UUID
- จากนั้นลองป้ายกำกับ
- การผูกเธรดปัจจุบัน (หากการสนทนา/เธรดนี้ผูกกับเซสชัน ACP)
- ทางเลือกสำรองไปยังเซสชันผู้ร้องขอปัจจุบัน
ทั้งการผูกการสนทนาปัจจุบันและการผูกเธรดมีส่วนร่วมในขั้นตอนที่ 2
หากไม่สามารถระบุเป้าหมายได้ OpenClaw จะส่งคืนข้อผิดพลาดที่ชัดเจน
(Unable to resolve session target: ...)
การควบคุม ACP
| คำสั่ง | การทำงาน | ตัวอย่าง |
|---|---|---|
/acp spawn |
สร้างเซสชัน ACP พร้อมตัวเลือกผูกปัจจุบันหรือผูกเธรด | /acp spawn codex --bind here --cwd /repo |
/acp cancel |
ยกเลิกรอบการทำงานที่กำลังดำเนินอยู่สำหรับเซสชันเป้าหมาย | /acp cancel agent:codex:acp:<uuid> |
/acp steer |
ส่งคำสั่งชี้นำไปยังเซสชันที่กำลังทำงาน | /acp steer --session support inbox prioritize failing tests |
/acp close |
ปิดเซสชันและยกเลิกการผูกเป้าหมายเธรด | /acp close |
/acp status |
แสดงแบ็กเอนด์ โหมด สถานะ ตัวเลือกรันไทม์ และความสามารถ | /acp status |
/acp set-mode |
ตั้งค่าโหมดรันไทม์สำหรับเซสชันเป้าหมาย | /acp set-mode plan |
/acp set |
เขียนตัวเลือกการกำหนดค่ารันไทม์แบบทั่วไป | /acp set model openai/gpt-5.4 |
/acp cwd |
ตั้งค่าการแทนที่ไดเรกทอรีทำงานของรันไทม์ | /acp cwd /Users/user/Projects/repo |
/acp permissions |
ตั้งค่าโปรไฟล์นโยบายการอนุมัติ | /acp permissions strict |
/acp timeout |
ตั้งค่าระยะหมดเวลาของรันไทม์ (วินาที) | /acp timeout 120 |
/acp model |
ตั้งค่าการแทนที่โมเดลรันไทม์ | /acp model anthropic/claude-opus-4-6 |
/acp reset-options |
ลบการแทนที่ตัวเลือกรันไทม์ของเซสชัน | /acp reset-options |
/acp sessions |
แสดงรายการเซสชัน ACP ล่าสุดจากที่จัดเก็บ | /acp sessions |
/acp doctor |
ตรวจสุขภาพแบ็กเอนด์ ความสามารถ และแนวทางแก้ไขที่ทำได้ | /acp doctor |
/acp install |
แสดงขั้นตอนการติดตั้งและเปิดใช้งานที่ให้ผลลัพธ์แน่นอน | /acp install |
การควบคุมรันไทม์ (spawn, cancel, steer, close, status, set-mode,
set, cwd, permissions, timeout, model และ reset-options) ต้องใช้
ตัวตนเจ้าของจากช่องทางภายนอกและ operator.admin จากไคลเอนต์ Gateway
ภายใน ผู้ส่งที่ไม่ใช่เจ้าของแต่ได้รับอนุญาตยังคงสามารถใช้ sessions,
doctor, install และ help ได้
/acp status แสดงตัวเลือกรันไทม์ที่มีผลใช้งาน รวมถึงตัวระบุเซสชันระดับรันไทม์และ
ระดับแบ็กเอนด์ ข้อผิดพลาดของการควบคุมที่ไม่รองรับจะแสดงอย่างชัดเจน
เมื่อแบ็กเอนด์ไม่มีความสามารถนั้น /acp sessions อ่านที่จัดเก็บ
สำหรับเซสชันที่ผูกอยู่ในปัจจุบันหรือเซสชันผู้ร้องขอ โดยโทเค็นเป้าหมาย (session-key,
session-id หรือ session-label) จะได้รับการระบุผ่านการค้นหาเซสชันของ Gateway
รวมถึงราก session.store แบบกำหนดเองต่อเอเจนต์
การแมปตัวเลือกรันไทม์
/acp มีคำสั่งอำนวยความสะดวกและตัวตั้งค่าแบบทั่วไป การดำเนินการที่เทียบเท่ากัน:
| คำสั่ง | แมปไปยัง | หมายเหตุ |
|---|---|---|
/acp model <id> |
คีย์การกำหนดค่ารันไทม์ model |
สำหรับ Codex ACP นั้น OpenClaw จะปรับ openai/<model> ให้เป็นรหัสโมเดลของอะแดปเตอร์ และแมปคำต่อท้ายระดับการใช้เหตุผลที่คั่นด้วยเครื่องหมายทับ เช่น openai/gpt-5.4/high ไปยัง reasoning_effort |
/acp set thinking <level> |
ตัวเลือกมาตรฐาน thinking |
OpenClaw จะส่งค่าที่เทียบเท่าซึ่งแบ็กเอนด์ประกาศไว้เมื่อมี โดยเลือก thinking ก่อน ตามด้วย effort, reasoning_effort หรือ thought_level สำหรับ Codex ACP อะแดปเตอร์จะแมปค่าไปยัง reasoning_effort |
/acp permissions <profile> |
ตัวเลือกมาตรฐาน permissionProfile |
OpenClaw จะส่งค่าที่เทียบเท่าซึ่งแบ็กเอนด์ประกาศไว้เมื่อมี เช่น approval_policy, permission_profile, permissions หรือ permission_mode |
/acp timeout <seconds> |
ตัวเลือกมาตรฐาน timeoutSeconds |
OpenClaw จะส่งค่าที่เทียบเท่าซึ่งแบ็กเอนด์ประกาศไว้เมื่อมี เช่น timeout หรือ timeout_seconds |
/acp cwd <path> |
การแทนที่ cwd ของรันไทม์ | อัปเดตโดยตรง |
/acp set <key> <value> |
แบบทั่วไป | key=cwd ใช้เส้นทางแทนที่ cwd |
/acp reset-options |
ล้างการแทนที่รันไทม์ทั้งหมด | - |
ฮาร์เนส acpx การตั้งค่า Plugin และสิทธิ์
สำหรับการกำหนดค่าฮาร์เนส acpx (นามแฝง Claude Code / Codex / Gemini CLI), บริดจ์ MCP ของเครื่องมือ Plugin และเครื่องมือ OpenClaw รวมถึงโหมดสิทธิ์ ACP โปรดดู เอเจนต์ ACP - การตั้งค่า
การแก้ไขปัญหา
| อาการ | สาเหตุที่เป็นไปได้ | วิธีแก้ไข |
|---|---|---|
ACP runtime backend is not configured |
Plugin แบ็กเอนด์หายไป ถูกปิดใช้งาน หรือถูกบล็อกโดย plugins.allow |
ติดตั้งและเปิดใช้งาน Plugin แบ็กเอนด์ เพิ่ม acpx ใน plugins.allow เมื่อตั้งค่ารายการอนุญาตดังกล่าว แล้วเรียกใช้ /acp doctor |
ACP is disabled by policy (acp.enabled=false) |
ACP ถูกปิดใช้งานทั่วทั้งระบบ | ตั้งค่า acp.enabled=true |
ACP dispatch is disabled by policy (acp.dispatch.enabled=false) |
การส่งต่อโดยอัตโนมัติจากข้อความเธรดปกติถูกปิดใช้งาน | ตั้งค่า acp.dispatch.enabled=true เพื่อเปิดใช้การกำหนดเส้นทางเธรดอัตโนมัติอีกครั้ง โดยการเรียก sessions_spawn({ runtime: "acp" }) อย่างชัดเจนยังคงใช้งานได้ |
ACP agent "<id>" is not allowed by policy |
เอเจนต์ไม่อยู่ในรายการอนุญาต | ใช้ agentId ที่ได้รับอนุญาต หรืออัปเดต acp.allowedAgents |
/acp doctor reports backend not ready right after startup |
Plugin แบ็กเอนด์หายไป ถูกปิดใช้งาน ถูกบล็อกโดยนโยบายอนุญาต/ปฏิเสธ หรือไฟล์ปฏิบัติการที่กำหนดค่าไว้ไม่พร้อมใช้งาน | ติดตั้ง/เปิดใช้งาน Plugin แบ็กเอนด์ เรียก /acp doctor อีกครั้ง และตรวจสอบข้อผิดพลาดในการติดตั้งแบ็กเอนด์หรือข้อผิดพลาดด้านนโยบายหากสถานะยังคงผิดปกติ |
| ไม่พบคำสั่งของชุดควบคุมการทำงาน | ไม่ได้ติดตั้ง CLI ของอะแดปเตอร์, Plugin ภายนอกหายไป หรือการดึงข้อมูลด้วย npx ในการเรียกใช้ครั้งแรกล้มเหลวสำหรับอะแดปเตอร์ที่ไม่ใช่ Codex |
เรียกใช้ /acp doctor ติดตั้ง/เตรียมอะแดปเตอร์ล่วงหน้าบนโฮสต์ Gateway หรือกำหนดค่าคำสั่งเอเจนต์ acpx อย่างชัดเจน |
| ชุดควบคุมการทำงานรายงานว่าไม่พบโมเดล | รหัสโมเดลใช้ได้กับผู้ให้บริการ/ชุดควบคุมการทำงานอื่น แต่ใช้ไม่ได้กับเป้าหมาย ACP นี้ | ใช้โมเดลที่ชุดควบคุมการทำงานนั้นระบุไว้ กำหนดค่าโมเดลในชุดควบคุมการทำงาน หรือละเว้นการแทนที่ |
| ข้อผิดพลาดการยืนยันตัวตนของผู้จำหน่ายจากชุดควบคุมการทำงาน | OpenClaw ทำงานเป็นปกติ แต่ยังไม่ได้เข้าสู่ระบบ CLI/ผู้ให้บริการเป้าหมาย | เข้าสู่ระบบหรือระบุคีย์ผู้ให้บริการที่จำเป็นในสภาพแวดล้อมของโฮสต์ Gateway |
Unable to resolve session target: ... |
โทเค็นคีย์/รหัส/ป้ายกำกับไม่ถูกต้อง | เรียกใช้ /acp sessions คัดลอกคีย์/ป้ายกำกับให้ตรงทุกตัวอักษร แล้วลองอีกครั้ง |
--bind here requires running /acp spawn inside an active ... conversation |
ใช้ --bind here โดยไม่มีการสนทนาที่ใช้งานอยู่และรองรับการผูก |
ไปยังแชต/ช่องเป้าหมายแล้วลองอีกครั้ง หรือสร้างเซสชันโดยไม่ผูก |
Conversation bindings are unavailable for <channel>. |
อะแดปเตอร์ไม่รองรับความสามารถในการผูก ACP กับการสนทนาปัจจุบัน | ใช้ /acp spawn ... --thread ... ในกรณีที่รองรับ กำหนดค่า bindings[] ระดับบนสุด หรือย้ายไปยังช่องที่รองรับ |
--thread here requires running /acp spawn inside an active ... thread |
ใช้ --thread here นอกบริบทของเธรด |
ไปยังเธรดเป้าหมาย หรือใช้ --thread auto/off |
Only <user-id> can rebind this channel/conversation/thread. |
ผู้ใช้อื่นเป็นเจ้าของเป้าหมายการผูกที่ใช้งานอยู่ | ผูกใหม่ในฐานะเจ้าของ หรือใช้การสนทนาหรือเธรดอื่น |
Thread bindings are unavailable for <channel>. |
อะแดปเตอร์ไม่รองรับความสามารถในการผูกเธรด | ใช้ --thread off หรือย้ายไปยังอะแดปเตอร์/ช่องที่รองรับ |
Sandboxed sessions cannot spawn ACP sessions ... |
รันไทม์ ACP ทำงานฝั่งโฮสต์ แต่เซสชันที่ร้องขออยู่ในแซนด์บ็อกซ์ | ใช้ runtime="subagent" จากเซสชันที่อยู่ในแซนด์บ็อกซ์ หรือสร้าง ACP จากเซสชันที่ไม่ได้อยู่ในแซนด์บ็อกซ์ |
sessions_spawn sandbox="require" is unsupported for runtime="acp" ... |
มีการร้องขอ sandbox="require" สำหรับรันไทม์ ACP |
ใช้ runtime="subagent" เมื่อต้องบังคับใช้แซนด์บ็อกซ์ หรือใช้ ACP พร้อม sandbox="inherit" จากเซสชันที่ไม่ได้อยู่ในแซนด์บ็อกซ์ |
Cannot apply --model ... did not advertise model support |
ชุดควบคุมการทำงานเป้าหมายไม่ได้เปิดให้ใช้การสลับโมเดล ACP แบบทั่วไป | ใช้ชุดควบคุมการทำงานที่ประกาศรองรับ models/session/set_model ของ ACP, ใช้การอ้างอิงโมเดล Codex ACP หรือกำหนดค่าโมเดลโดยตรงในชุดควบคุมการทำงานหากมีแฟล็กเริ่มต้นของตนเอง |
| ข้อมูลเมตา ACP สำหรับเซสชันที่ผูกไว้หายไป | ข้อมูลเมตาของเซสชัน ACP ล้าสมัยหรือถูกลบ | สร้างใหม่ด้วย /acp spawn แล้วผูก/โฟกัสเธรดใหม่ |
PermissionPromptUnavailableError: Permission prompt unavailable in non-interactive mode |
permissionMode บล็อกการเขียน/การเรียกใช้คำสั่งในเซสชัน ACP แบบไม่โต้ตอบ |
ตั้งค่า plugins.entries.acpx.config.permissionMode เป็น approve-all แล้วเริ่ม Gateway ใหม่ ดูการกำหนดค่าสิทธิ์ |
| เซสชัน ACP ล้มเหลวตั้งแต่ช่วงต้นและมีเอาต์พุตเพียงเล็กน้อย | พรอมต์ขอสิทธิ์ถูกบล็อกโดย permissionMode/nonInteractivePermissions |
ตรวจสอบบันทึกของ Gateway เพื่อหา AcpRuntimeError หากต้องการสิทธิ์เต็มรูปแบบ ให้ตั้งค่า permissionMode=approve-all หากต้องการให้ลดระดับการทำงานอย่างราบรื่น ให้ตั้งค่า nonInteractivePermissions=deny |
| เซสชัน ACP ค้างไม่สิ้นสุดหลังทำงานเสร็จ | กระบวนการชุดควบคุมการทำงานเสร็จสิ้นแล้ว แต่เซสชัน ACP ไม่ได้รายงานว่าเสร็จสมบูรณ์ | อัปเดต OpenClaw การล้างข้อมูล acpx ปัจจุบันจะกำจัดกระบวนการตัวห่อและอะแดปเตอร์ที่ค้างซึ่ง OpenClaw เป็นเจ้าของเมื่อปิดและเมื่อเริ่มต้น Gateway |
ชุดควบคุมการทำงานเห็น <<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>> |
เอนเวโลปเหตุการณ์ภายในรั่วไหลข้ามขอบเขต ACP | อัปเดต OpenClaw แล้วเรียกใช้โฟลว์การทำงานให้เสร็จสมบูรณ์อีกครั้ง ชุดควบคุมการทำงานภายนอกควรได้รับเฉพาะพรอมต์การทำงานให้เสร็จสมบูรณ์แบบข้อความธรรมดา |