Agent coordination
เอเจนต์ ACP
โปรโตคอลไคลเอนต์เอเจนต์ (ACP) เซสชัน ช่วยให้ OpenClaw รันตัวรันเขียนโค้ดภายนอก (เช่น Pi, Claude Code, Cursor, Copilot, Droid, OpenClaw ACP, OpenCode, Gemini CLI และตัวรัน ACPX อื่น ๆ ที่รองรับ) ผ่าน Plugin แบ็กเอนด์ ACP
การสปอว์นเซสชัน 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/acpx
openclaw config set plugins.entries.acpx.enabled true
เช็กเอาต์ซอร์สสามารถใช้ Plugin เวิร์กสเปซภายในเครื่อง extensions/acpx ได้หลังจาก
pnpm install รัน /acp doctor เพื่อตรวจความพร้อม
OpenClaw จะสอนเอเจนต์เกี่ยวกับการสปอว์น ACP เฉพาะเมื่อ ACP ใช้งานได้จริง
เท่านั้น: ต้องเปิดใช้ ACP, ดิสแพตช์ต้องไม่ถูกปิด, เซสชันปัจจุบันต้องไม่ถูกบล็อกด้วยแซนด์บ็อกซ์
และต้องโหลดแบ็กเอนด์รันไทม์แล้ว หากไม่ตรงตามเงื่อนไขเหล่านั้น Skills ของ Plugin ACP และ
คำแนะนำ ACP สำหรับ sessions_spawn จะยังถูกซ่อน เพื่อให้เอเจนต์ไม่เสนอแบ็กเอนด์
ที่ไม่พร้อมใช้งาน
ข้อควรระวังในการรันครั้งแรก
- หากตั้งค่า
plugins.allowไว้ รายการนี้คือบัญชีรายการ Plugin แบบจำกัด และ ต้อง รวมacpx; มิฉะนั้นแบ็กเอนด์ ACP ที่ติดตั้งไว้จะถูกบล็อกโดยตั้งใจ และ/acp doctorจะรายงานรายการ allowlist ที่ขาดไป - อะแดปเตอร์ Codex ACP ถูกจัดเตรียมมากับ Plugin
acpxและจะเปิดใช้ภายในเครื่องเมื่อทำได้ - อะแดปเตอร์ตัวรันเป้าหมายอื่นอาจยังถูกดึงตามต้องการด้วย
npxในครั้งแรกที่คุณใช้งาน - การยืนยันตัวตนของผู้ให้บริการยังต้องมีอยู่บนโฮสต์สำหรับตัวรันนั้น
- หากโฮสต์ไม่มี npm หรือการเข้าถึงเครือข่าย การดึงอะแดปเตอร์ครั้งแรกจะล้มเหลวจนกว่าจะอุ่นแคชไว้ล่วงหน้าหรือติดตั้งอะแดปเตอร์ด้วยวิธีอื่น
ข้อกำหนดเบื้องต้นของรันไทม์
ACP เปิดใช้กระบวนการตัวรันภายนอกจริง OpenClaw เป็นเจ้าของการกำหนดเส้นทาง, สถานะงานเบื้องหลัง, การส่งมอบ, การผูก และนโยบาย; ตัวรันเป็นเจ้าของ การเข้าสู่ระบบผู้ให้บริการ, แค็ตตาล็อกโมเดล, พฤติกรรมระบบไฟล์ และ เครื่องมือเนทีฟของตัวเอง
ก่อนโทษ OpenClaw ให้ตรวจสอบว่า:
/acp doctorรายงานแบ็กเอนด์ที่เปิดใช้และสุขภาพดี- อนุญาต id เป้าหมายโดย
acp.allowedAgentsเมื่อมีการตั้งค่า allowlist นั้น - คำสั่งตัวรันสามารถเริ่มบนโฮสต์ Gateway ได้
- มีการยืนยันตัวตนผู้ให้บริการสำหรับตัวรันนั้น (
claude,codex,gemini,opencode,droidและอื่น ๆ) - โมเดลที่เลือกมีอยู่สำหรับตัวรันนั้น - id โมเดลไม่สามารถใช้ข้ามตัวรันได้
cwdที่ร้องขอมีอยู่และเข้าถึงได้ หรือไม่ต้องระบุcwdแล้วให้แบ็กเอนด์ใช้ค่าเริ่มต้นของตัวเอง- โหมดสิทธิ์ตรงกับงาน เซสชันแบบไม่โต้ตอบไม่สามารถคลิกพรอมป์สิทธิ์แบบเนทีฟได้ ดังนั้นงานเขียนโค้ดที่เน้นเขียน/เรียกใช้มักต้องใช้โปรไฟล์สิทธิ์ ACPX ที่ดำเนินต่อแบบไม่มีหน้าจอได้
เครื่องมือ Plugin ของ OpenClaw และเครื่องมือ OpenClaw ในตัว จะไม่ ถูกเปิดเผยให้ ตัวรัน ACP ตามค่าเริ่มต้น เปิดใช้บริดจ์ MCP แบบชัดเจนใน เอเจนต์ ACP - การตั้งค่า เฉพาะเมื่อตัวรัน ควรเรียกเครื่องมือเหล่านั้นโดยตรง
เป้าหมายตัวรันที่รองรับ
เมื่อใช้แบ็กเอนด์ acpx ให้ใช้ id ตัวรันเหล่านี้เป็นเป้าหมาย /acp spawn <id>
หรือ sessions_spawn({ runtime: "acp", agentId: "<id>" }):
| id ตัวรัน | แบ็กเอนด์ทั่วไป | หมายเหตุ |
|---|---|---|
claude |
อะแดปเตอร์ Claude Code ACP | ต้องมีการยืนยันตัวตน Claude Code บนโฮสต์ |
codex |
อะแดปเตอร์ Codex ACP | เป็นทางสำรอง ACP แบบชัดเจนเท่านั้นเมื่อ /codex แบบเนทีฟไม่พร้อมใช้งานหรือมีการร้องขอ ACP |
copilot |
อะแดปเตอร์ GitHub Copilot ACP | ต้องมีการยืนยันตัวตน Copilot CLI/รันไทม์ |
cursor |
Cursor CLI ACP (cursor-agent acp) |
แทนที่คำสั่ง acpx หากการติดตั้งภายในเครื่องเปิดเผยจุดเริ่มต้น ACP ที่ต่างออกไป |
droid |
Factory Droid CLI | ต้องมีการยืนยันตัวตน Factory/Droid หรือ FACTORY_API_KEY ในสภาพแวดล้อมของตัวรัน |
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 ที่ติดตั้ง |
opencode |
อะแดปเตอร์ OpenCode ACP | ต้องมีการยืนยันตัวตน OpenCode CLI/ผู้ให้บริการ |
openclaw |
บริดจ์ OpenClaw Gateway ผ่าน openclaw acp |
ทำให้ตัวรันที่เข้าใจ ACP พูดกลับไปยังเซสชัน OpenClaw Gateway ได้ |
pi |
รันไทม์ Pi/OpenClaw แบบฝังตัว | ใช้สำหรับการทดลองตัวรันแบบเนทีฟของ OpenClaw |
qwen |
Qwen Code / Qwen CLI | ต้องมีการยืนยันตัวตนที่เข้ากันได้กับ Qwen บนโฮสต์ |
สามารถกำหนดค่าเอเลียสเอเจนต์ 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 และลบการผูก ตัวรันอาจยังเก็บประวัติต้นทางของตัวเองไว้หากรองรับการดำเนินต่อ- เวิร์กเกอร์รันไทม์ที่ไม่ได้ใช้งานมีสิทธิ์ถูกล้างหลังจาก
acp.runtime.ttlMinutes; เมทาดาทาเซสชันที่จัดเก็บไว้ยังคงพร้อมใช้งานสำหรับ/acp sessions
กฎการกำหนดเส้นทาง Codex แบบเนทีฟ
ทริกเกอร์ภาษาธรรมชาติที่ควรกำหนดเส้นทางไปยัง Plugin Codex แบบเนทีฟ เมื่อเปิดใช้งาน:
- "ผูกช่อง Discord นี้กับ Codex"
- "แนบแชตนี้กับเธรด Codex
<id>" - "แสดงเธรด Codex แล้วผูกอันนี้"
การผูกบทสนทนา Codex แบบเนทีฟคือเส้นทางควบคุมแชตเริ่มต้น
เครื่องมือไดนามิก OpenClaw ยังคงเรียกใช้ผ่าน OpenClaw ขณะที่
เครื่องมือแบบเนทีฟของ Codex เช่น shell/apply-patch จะเรียกใช้ภายใน Codex
สำหรับอีเวนต์เครื่องมือแบบเนทีฟของ Codex, OpenClaw จะแทรกตัวส่งต่อ hook แบบเนทีฟรายเทิร์น
เพื่อให้ Plugin hooks สามารถบล็อก before_tool_call, สังเกต
after_tool_call และกำหนดเส้นทางอีเวนต์ PermissionRequest ของ Codex
ผ่านการอนุมัติของ OpenClaw hook Stop ของ Codex จะถูกส่งต่อไปยัง
before_agent_finalize ของ OpenClaw ซึ่ง Plugin สามารถขอรอบโมเดลเพิ่มอีกหนึ่งครั้ง
ก่อนที่ Codex จะสรุปคำตอบ การส่งต่อยังคงตั้งใจให้ระมัดระวัง:
ไม่แก้ไขอาร์กิวเมนต์เครื่องมือแบบเนทีฟของ Codex หรือเขียนระเบียนเธรด Codex ใหม่
ใช้ ACP แบบชัดเจนเฉพาะเมื่อคุณต้องการโมเดลรันไทม์/เซสชันของ ACP
ขอบเขตการรองรับ Codex แบบฝังตัวมีเอกสารอยู่ใน
สัญญาการรองรับตัวรัน Codex v1
ชีตสรุปการเลือกโมเดล / ผู้ให้บริการ / รันไทม์
openai-codex/*- เส้นทาง PI Codex OAuth/การสมัครใช้งานopenai/*บวกกับagentRuntime.id: "codex"- รันไทม์ฝังตัวของเซิร์ฟเวอร์แอป Codex แบบเนทีฟ/codex ...- การควบคุมบทสนทนา Codex แบบเนทีฟ/acp ...หรือruntime: "acp"- การควบคุม ACP/acpx แบบชัดเจน
ทริกเกอร์ภาษาธรรมชาติสำหรับการกำหนดเส้นทาง ACP
ทริกเกอร์ที่ควรกำหนดเส้นทางไปยังรันไทม์ ACP:
- "เรียกใช้งานนี้เป็นเซสชัน Claude Code ACP แบบครั้งเดียว แล้วสรุปผลลัพธ์"
- "ใช้ Gemini CLI สำหรับงานนี้ในเธรด แล้วเก็บการติดตามผลไว้ในเธรดเดียวกัน"
- "เรียกใช้ Codex ผ่าน ACP ในเธรดเบื้องหลัง"
OpenClaw เลือก runtime: "acp" แก้ค่า harness agentId
ผูกกับบทสนทนาหรือเธรดปัจจุบันเมื่อรองรับ และ
กำหนดเส้นทางการติดตามผลไปยังเซสชันนั้นจนกว่าจะปิด/หมดอายุ Codex จะ
ใช้เส้นทางนี้เฉพาะเมื่อ ACP/acpx ถูกระบุอย่างชัดเจน หรือ Plugin Codex
แบบเนทีฟไม่พร้อมใช้งานสำหรับการดำเนินการที่ร้องขอ
สำหรับ sessions_spawn, runtime: "acp" จะถูกประกาศเฉพาะเมื่อเปิดใช้ ACP
ผู้ร้องขอไม่ได้อยู่ใน sandbox และโหลด backend รันไทม์ ACP แล้ว
acp.dispatch.enabled=false จะหยุดการ dispatch เธรด ACP อัตโนมัติ
ชั่วคราว แต่จะไม่ซ่อนหรือบล็อกการเรียก
sessions_spawn({ runtime: "acp" }) แบบชัดเจน โดยมีเป้าหมายเป็น id ของ ACP harness เช่น codex,
claude, droid, gemini หรือ opencode อย่าส่ง id เอเจนต์ config
OpenClaw ปกติจาก agents_list เว้นแต่รายการนั้นจะถูกกำหนดค่า
อย่างชัดเจนด้วย agents.list[].runtime.type="acp";
ไม่เช่นนั้นให้ใช้รันไทม์ sub-agent เริ่มต้น เมื่อเอเจนต์ OpenClaw
ถูกกำหนดค่าด้วย runtime.type="acp" OpenClaw จะใช้
runtime.acp.agent เป็น id ของ harness พื้นฐาน
ACP เทียบกับ sub-agents
ใช้ ACP เมื่อคุณต้องการรันไทม์ harness ภายนอก ใช้ เซิร์ฟเวอร์แอป Codex
แบบเนทีฟ สำหรับการผูก/ควบคุมบทสนทนา Codex เมื่อเปิดใช้ Plugin codex
ใช้ sub-agents เมื่อคุณต้องการการรันแบบมอบหมายงานที่เป็นเนทีฟของ OpenClaw
| พื้นที่ | เซสชัน ACP | การรัน sub-agent |
|---|---|---|
| รันไทม์ | Plugin backend ACP (เช่น acpx) | รันไทม์ sub-agent แบบเนทีฟของ OpenClaw |
| คีย์เซสชัน | agent:<agentId>:acp:<uuid> |
agent:<agentId>:subagent:<uuid> |
| คำสั่งหลัก | /acp ... |
/subagents ... |
| เครื่องมือ spawn | sessions_spawn พร้อม runtime:"acp" |
sessions_spawn (รันไทม์เริ่มต้น) |
ดูเพิ่มเติมที่ Sub-agents
วิธีที่ ACP เรียกใช้ Claude Code
สำหรับ Claude Code ผ่าน ACP, stack คือ:
- ระนาบควบคุมเซสชัน ACP ของ OpenClaw
- Plugin รันไทม์
@openclaw/acpxอย่างเป็นทางการ - อะแดปเตอร์ Claude ACP
- กลไกรันไทม์/เซสชันฝั่ง Claude
ACP Claude เป็น เซสชัน harness ที่มีการควบคุม ACP, การทำงานต่อของเซสชัน, การติดตามงานเบื้องหลัง และการผูกบทสนทนา/เธรดที่เป็นตัวเลือก
backend CLI เป็นรันไทม์ fallback ในเครื่องแบบข้อความเท่านั้นที่แยกต่างหาก - ดู backend CLI
สำหรับผู้ปฏิบัติงาน กฎเชิงปฏิบัติคือ:
- ต้องการ
/acp spawn, เซสชันที่ผูกได้, การควบคุมรันไทม์ หรืองาน harness ที่คงอยู่ถาวร? ใช้ ACP - ต้องการ fallback ข้อความในเครื่องแบบง่ายผ่าน CLI ดิบ? ใช้ backend CLI
เซสชันที่ถูกผูก
แบบจำลองทางความคิด
- พื้นผิวแชต - ที่ที่ผู้คนคุยต่อกัน (ช่อง Discord, หัวข้อ Telegram, แชต iMessage)
- เซสชัน ACP - สถานะรันไทม์ Codex/Claude/Gemini ที่คงทนซึ่ง OpenClaw กำหนดเส้นทางไปหา
- เธรด/หัวข้อลูก - พื้นผิวการส่งข้อความเสริมที่เป็นตัวเลือก ซึ่งสร้างโดย
--thread ...เท่านั้น - พื้นที่ทำงานรันไทม์ - ตำแหน่งระบบไฟล์ (
cwd, repo checkout, พื้นที่ทำงาน backend) ที่ harness รัน เป็นอิสระจากพื้นผิวแชต
การผูกบทสนทนาปัจจุบัน
/acp spawn <harness> --bind here ปักหมุดบทสนทนาปัจจุบันกับ
เซสชัน ACP ที่ spawn แล้ว - ไม่มีเธรดลูก พื้นผิวแชตเดิม OpenClaw ยังคง
เป็นเจ้าของ transport, auth, ความปลอดภัย และการส่งมอบ ข้อความติดตามผลใน
บทสนทนานั้นจะถูกกำหนดเส้นทางไปยังเซสชันเดียวกัน; /new และ /reset รีเซ็ต
เซสชันในตำแหน่งเดิม; /acp close ลบการผูกออก
ตัวอย่าง:
/codex bind # การผูก Codex แบบเนทีฟ กำหนดเส้นทางข้อความในอนาคตมาที่นี่
/codex model gpt-5.4 # ปรับแต่งเธรด Codex แบบเนทีฟที่ถูกผูก
/codex stop # ควบคุม turn Codex แบบเนทีฟที่กำลังทำงาน
/acp spawn codex --bind here # fallback ACP แบบชัดเจนสำหรับ Codex
/acp spawn codex --thread auto # อาจสร้างเธรด/หัวข้อลูกและผูกที่นั่น
/acp spawn codex --bind here --cwd /workspace/repo # การผูกแชตเดิม Codex รันใน /workspace/repo
กฎการผูกและความเป็นเอกสิทธิ์
--bind hereและ--thread ...ใช้ร่วมกันไม่ได้--bind hereทำงานเฉพาะบนช่องทางที่ประกาศความสามารถการผูกบทสนทนาปัจจุบัน; มิฉะนั้น OpenClaw จะส่งคืนข้อความไม่รองรับที่ชัดเจน การผูกคงอยู่ข้ามการรีสตาร์ต Gateway- บน Discord,
spawnSessionsควบคุมการสร้างเธรดลูกสำหรับ--thread auto|here- ไม่ใช่--bind here - หากคุณ spawn ไปยังเอเจนต์ ACP อื่นโดยไม่มี
--cwd, OpenClaw จะสืบทอดพื้นที่ทำงานของ เอเจนต์เป้าหมาย โดยค่าเริ่มต้น เส้นทางที่สืบทอดมาซึ่งหายไป (ENOENT/ENOTDIR) จะ fallback ไปยังค่าเริ่มต้นของ backend; ข้อผิดพลาดการเข้าถึงอื่น ๆ (เช่นEACCES) จะแสดงเป็นข้อผิดพลาดการ spawn - คำสั่งจัดการ Gateway จะยังคงอยู่ในเครื่องภายในบทสนทนาที่ถูกผูก - คำสั่ง
/acp ...ถูกจัดการโดย OpenClaw แม้เมื่อข้อความติดตามผลปกติถูกกำหนดเส้นทางไปยังเซสชัน ACP ที่ถูกผูก;/statusและ/unfocusก็ยังอยู่ในเครื่องเช่นกันเมื่อเปิดใช้งานการจัดการคำสั่งสำหรับพื้นผิวนั้น
เซสชันที่ผูกกับเธรด
เมื่อเปิดใช้งานการผูกเธรดสำหรับอะแดปเตอร์ช่องทาง:
- OpenClaw ผูกเธรดกับเซสชัน ACP เป้าหมาย
- ข้อความติดตามผลในเธรดนั้นถูกกำหนดเส้นทางไปยังเซสชัน ACP ที่ถูกผูก
- เอาต์พุต ACP ถูกส่งกลับไปยังเธรดเดียวกัน
- Unfocus/close/archive/idle-timeout หรือการหมดอายุ max-age จะลบการผูกออก
/acp close,/acp cancel,/acp status,/statusและ/unfocusเป็นคำสั่ง Gateway ไม่ใช่พรอมป์ไปยัง ACP harness
feature flag ที่จำเป็นสำหรับ ACP ที่ผูกกับเธรด:
acp.enabled=trueacp.dispatch.enabledเปิดอยู่โดยค่าเริ่มต้น (ตั้งค่าfalseเพื่อหยุดการ dispatch เธรด ACP อัตโนมัติชั่วคราว; การเรียกsessions_spawn({ runtime: "acp" })แบบชัดเจนยังคงทำงาน)- เปิดใช้การ spawn เซสชันเธรดของอะแดปเตอร์ช่องทาง (ค่าเริ่มต้น:
true):- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
การรองรับการผูกเธรดขึ้นอยู่กับอะแดปเตอร์ หากอะแดปเตอร์ช่องทางที่ใช้งานอยู่ ไม่รองรับการผูกเธรด OpenClaw จะส่งคืนข้อความ ไม่รองรับ/ไม่พร้อมใช้งานที่ชัดเจน
ช่องทางที่รองรับเธรด
- อะแดปเตอร์ช่องทางใด ๆ ที่เปิดเผยความสามารถการผูกเซสชัน/เธรด
- การรองรับในตัวปัจจุบัน: เธรด/ช่อง Discord, หัวข้อ Telegram (หัวข้อฟอรัมในกลุ่ม/supergroup และหัวข้อ DM)
- ช่องทาง Plugin สามารถเพิ่มการรองรับผ่านอินเทอร์เฟซการผูกเดียวกัน
การผูกช่องทางแบบถาวร
สำหรับ workflow ที่ไม่ใช่แบบชั่วคราว ให้กำหนดค่าการผูก ACP แบบถาวรใน
รายการ bindings[] ระดับบนสุด
โมเดลการผูก
bindings[].type"acp"ทำเครื่องหมายการผูกบทสนทนา ACP แบบถาวร
bindings[].matchobjectระบุบทสนทนาเป้าหมาย รูปแบบตามช่องทาง:
- ช่อง/เธรด Discord:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - หัวข้อฟอรัม Telegram:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - DM/กลุ่ม BlueBubbles:
match.channel="bluebubbles"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"แนะนำให้ใช้chat_id:*หรือchat_identifier:*สำหรับการผูกกลุ่มที่เสถียร - DM/กลุ่ม iMessage:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"แนะนำให้ใช้chat_id:*สำหรับการผูกกลุ่มที่เสถียร
bindings[].agentIdstringid เอเจนต์ OpenClaw ที่เป็นเจ้าของ
bindings[].acp.mode"persistent" | "oneshot"การ override ACP ที่เป็นตัวเลือก
bindings[].acp.labelstringป้ายกำกับที่แสดงต่อผู้ปฏิบัติงาน เป็นตัวเลือก
bindings[].acp.cwdstringไดเรกทอรีทำงานของรันไทม์ เป็นตัวเลือก
bindings[].acp.backendstringการ override backend เป็นตัวเลือก
ค่าเริ่มต้นรันไทม์ต่อเอเจนต์
ใช้ agents.list[].runtime เพื่อกำหนดค่าเริ่มต้น ACP หนึ่งครั้งต่อเอเจนต์:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(id harness เช่นcodexหรือclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
ลำดับความสำคัญของการ override สำหรับเซสชันที่ผูกกับ 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 ที่กำหนดค่าไว้
- ในบทสนทนาที่ถูกผูก
/newและ/resetจะรีเซ็ตคีย์เซสชัน ACP เดิมในตำแหน่งเดิม - การผูกรันไทม์ชั่วคราว (เช่น ที่สร้างโดย flow การ focus เธรด) ยังคงใช้เมื่อมีอยู่
- สำหรับการ spawn ACP ข้ามเอเจนต์โดยไม่มี
cwdที่ชัดเจน OpenClaw จะสืบทอดพื้นที่ทำงานของเอเจนต์เป้าหมายจาก config เอเจนต์ - เส้นทางพื้นที่ทำงานที่สืบทอดมาและหายไปจะ fallback ไปยัง cwd เริ่มต้นของ backend; ความล้มเหลวในการเข้าถึงที่ไม่ได้เกิดจากการหายไปจะแสดงเป็นข้อผิดพลาดการ spawn
เริ่มเซสชัน ACP
สองวิธีในการเริ่มเซสชัน ACP:
จาก sessions_spawn
ใช้ runtime: "acp" เพื่อเริ่มเซสชัน ACP จาก turn ของเอเจนต์หรือ
การเรียกเครื่องมือ
{
"task": "Open the repo and summarize failing tests",
"runtime": "acp",
"agentId": "codex",
"thread": true,
"mode": "session"
}
From /acp command
ใช้ /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
agentIdstringid ของ harness เป้าหมาย ACP ใช้ acp.defaultAgent เป็นค่า fallback หากตั้งค่าไว้
threadbooleanขอ flow การผูกเธรดเมื่อรองรับ
mode"run" | "session""run" เป็นแบบทำครั้งเดียว; "session" เป็นแบบต่อเนื่อง หาก thread: true และ
ละเว้น mode OpenClaw อาจใช้ค่าเริ่มต้นเป็นพฤติกรรมแบบต่อเนื่องตาม
เส้นทาง runtime mode: "session" ต้องใช้ thread: true
cwdstringไดเรกทอรีทำงานของ runtime ที่ร้องขอ (ตรวจสอบโดยนโยบาย backend/runtime) หากละเว้น ACP spawn จะสืบทอด workspace ของเอเจนต์เป้าหมาย เมื่อมีการกำหนดค่าไว้; เส้นทางที่สืบทอดมาแต่หายไปจะ fallback ไปยังค่าเริ่มต้นของ backend ส่วนข้อผิดพลาดการเข้าถึงจริงจะถูกส่งกลับ
labelstringป้ายกำกับสำหรับผู้ปฏิบัติการที่ใช้ในข้อความเซสชัน/แบนเนอร์
resumeSessionIdstringทำงานต่อจากเซสชัน ACP ที่มีอยู่แทนการสร้างใหม่
เอเจนต์จะเล่นประวัติการสนทนาซ้ำผ่าน session/load ต้องใช้
runtime: "acp"
streamTo"parent""parent" สตรีมสรุปความคืบหน้าการรัน ACP เริ่มต้นกลับไปยัง
เซสชันผู้ร้องขอเป็นเหตุการณ์ระบบ คำตอบที่ยอมรับได้รวมถึง
streamLogPath ที่ชี้ไปยังล็อก JSONL เฉพาะเซสชัน
(<sessionId>.acp-stream.jsonl) ซึ่งคุณสามารถ tail เพื่อดูประวัติ relay ทั้งหมดได้
runTimeoutSecondsnumberยุติ turn ของลูก ACP หลังผ่านไป N วินาที 0 จะคง turn ไว้บน
เส้นทางไม่มี timeout ของ gateway ค่าเดียวกันจะถูกใช้กับการรัน Gateway
และ runtime ACP เพื่อไม่ให้ harness ที่ค้างหรือ quota หมด
ครอบครองเลนของเอเจนต์แม่อย่างไม่มีกำหนด
modelstringการ override โมเดลอย่างชัดเจนสำหรับเซสชันลูก ACP การ spawn ของ Codex ACP
จะ normalize ref ของ OpenClaw Codex เช่น openai-codex/gpt-5.4 เป็น config
เริ่มต้นของ Codex ACP ก่อน session/new; รูปแบบ slash เช่น
openai-codex/gpt-5.4/high จะตั้งค่า reasoning effort ของ Codex ACP ด้วย
harness อื่นต้องประกาศ ACP models และรองรับ
session/set_model; มิฉะนั้น OpenClaw/acpx จะล้มเหลวอย่างชัดเจนแทนที่จะ
fallback กลับไปยังค่าเริ่มต้นของเอเจนต์เป้าหมายอย่างเงียบ ๆ
thinkingstringthinking/reasoning effort ที่ระบุอย่างชัดเจน สำหรับ Codex ACP, minimal map ไปยัง
effort ต่ำ, low/medium/high/xhigh map โดยตรง และ off
จะละเว้นการ override reasoning-effort ตอนเริ่มต้น
โหมดการผูกและเธรดของ spawn
--bind here|off
| โหมด | พฤติกรรม |
|---|---|
here |
ผูกการสนทนาที่ใช้งานอยู่ในปัจจุบันไว้ที่เดิม; ล้มเหลวหากไม่มีรายการใดใช้งานอยู่ |
off |
ไม่สร้างการผูกการสนทนาปัจจุบัน |
หมายเหตุ:
--bind hereเป็นเส้นทางผู้ปฏิบัติการที่ง่ายที่สุดสำหรับ "ทำให้ช่องหรือแชตนี้รองรับ Codex"--bind hereไม่สร้างเธรดลูก--bind hereใช้ได้เฉพาะบนช่องที่เปิดเผยการรองรับการผูกการสนทนาปัจจุบัน- ไม่สามารถใช้
--bindและ--threadร่วมกันในการเรียก/acp spawnครั้งเดียวกันได้
--thread auto|here|off
| โหมด | พฤติกรรม |
|---|---|
auto |
ในเธรดที่ใช้งานอยู่: ผูกเธรดนั้น นอกเธรด: สร้าง/ผูกเธรดลูกเมื่อรองรับ |
here |
ต้องมีเธรดปัจจุบันที่ใช้งานอยู่; ล้มเหลวหากไม่ได้อยู่ในเธรด |
off |
ไม่มีการผูก เซสชันเริ่มโดยไม่ถูกผูก |
หมายเหตุ:
- บนพื้นผิวที่ไม่รองรับการผูกเธรด พฤติกรรมเริ่มต้นจะเทียบเท่ากับ
off - spawn แบบผูกเธรดต้องมีการรองรับจากนโยบายช่อง:
- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
- ใช้
--bind hereเมื่อคุณต้องการตรึงการสนทนาปัจจุบันโดยไม่สร้างเธรดลูก
รูปแบบการส่งมอบ
เซสชัน ACP อาจเป็น workspace แบบโต้ตอบหรือ งานเบื้องหลังที่แม่เป็นเจ้าของ เส้นทางการส่งมอบขึ้นอยู่กับรูปแบบนั้น
Interactive ACP sessions
เซสชันแบบโต้ตอบมีไว้เพื่อสนทนาต่อบนพื้นผิวแชตที่มองเห็นได้:
/acp spawn ... --bind hereผูกการสนทนาปัจจุบันกับเซสชัน ACP/acp spawn ... --thread ...ผูกเธรด/หัวข้อของช่องกับเซสชัน ACPbindings[].type="acp"ที่กำหนดค่าแบบต่อเนื่องจะ route การสนทนาที่ตรงกันไปยังเซสชัน ACP เดียวกัน
ข้อความติดตามผลในการสนทนาที่ผูกไว้จะถูก route โดยตรงไปยัง เซสชัน ACP และผลลัพธ์ ACP จะถูกส่งกลับไปยัง ช่อง/เธรด/หัวข้อเดียวกัน
สิ่งที่ OpenClaw ส่งไปยัง harness:
- follow-up ที่ผูกไว้ตามปกติจะถูกส่งเป็นข้อความพรอมป์ พร้อมไฟล์แนบเฉพาะเมื่อ harness/backend รองรับเท่านั้น
- คำสั่งจัดการ
/acpและคำสั่ง Gateway ภายในจะถูกดักก่อน dispatch ไปยัง ACP - เหตุการณ์การทำงานเสร็จที่ runtime สร้างขึ้นจะถูก materialize ตามเป้าหมาย เอเจนต์ OpenClaw จะได้รับ envelope runtime-context ภายในของ OpenClaw; harness ACP ภายนอกจะได้รับพรอมป์ธรรมดาพร้อมผลลัพธ์ลูกและคำสั่ง envelope ดิบ
<<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>>ไม่ควรถูกส่งไปยัง harness ภายนอกหรือ persist เป็นข้อความ transcript ของผู้ใช้ ACP - รายการ transcript ของ ACP ใช้ข้อความ trigger ที่ผู้ใช้มองเห็นหรือพรอมป์การทำงานเสร็จแบบธรรมดา metadata เหตุการณ์ภายในจะยังคงเป็นแบบ structured ใน OpenClaw เมื่อทำได้ และไม่ถือเป็นเนื้อหาแชตที่ผู้ใช้เขียน
Parent-owned one-shot ACP sessions
เซสชัน ACP แบบทำครั้งเดียวที่ spawn โดยการรันของเอเจนต์อื่นเป็นลูก เบื้องหลัง คล้ายกับ sub-agents:
- แม่ขอให้งานทำงานด้วย
sessions_spawn({ runtime: "acp", mode: "run" }) - ลูกทำงานในเซสชัน ACP harness ของตนเอง
- turn ของลูกทำงานบนเลนเบื้องหลังเดียวกับที่ใช้โดยการ spawn sub-agent แบบ native ดังนั้น ACP harness ที่ช้าจะไม่บล็อกงานของ main-session ที่ไม่เกี่ยวข้อง
- รายงานการทำงานเสร็จกลับผ่านเส้นทางประกาศ task-completion OpenClaw แปลง metadata การทำงานเสร็จภายในเป็นพรอมป์ ACP ธรรมดาก่อนส่งไปยัง harness ภายนอก ดังนั้น harness จะไม่เห็น marker runtime context เฉพาะ OpenClaw
- แม่เขียนผลลัพธ์ลูกใหม่ด้วยเสียง assistant ปกติเมื่อคำตอบสำหรับผู้ใช้มีประโยชน์
อย่า ถือว่า เส้นทางนี้เป็นแชตแบบ peer-to-peer ระหว่างแม่ และลูก ลูกมีช่องทางการทำงานเสร็จกลับไปยัง แม่อยู่แล้ว
sessions_send and A2A delivery
sessions_send สามารถกำหนดเป้าหมายไปยังเซสชันอื่นหลัง spawn ได้ สำหรับเซสชัน
peer ปกติ OpenClaw ใช้เส้นทาง follow-up แบบ agent-to-agent (A2A)
หลังจาก inject ข้อความ:
- รอคำตอบของเซสชันเป้าหมาย
- เลือกให้ผู้ร้องขอและเป้าหมายแลกเปลี่ยน turn ติดตามผลได้ในจำนวนที่จำกัด
- ขอให้เป้าหมายสร้างข้อความประกาศ
- ส่งประกาศนั้นไปยังช่องหรือเธรดที่มองเห็นได้
เส้นทาง A2A นั้นเป็น fallback สำหรับการส่งแบบ peer ที่ผู้ส่งต้องการ
follow-up ที่มองเห็นได้ เส้นทางนี้ยังคงเปิดใช้เมื่อเซสชันที่ไม่เกี่ยวข้องสามารถ
เห็นและส่งข้อความถึงเป้าหมาย ACP ได้ เช่นภายใต้การตั้งค่า
tools.sessions.visibility แบบกว้าง
OpenClaw จะข้าม A2A follow-up เฉพาะเมื่อผู้ร้องขอเป็น
แม่ของลูก ACP แบบทำครั้งเดียวที่แม่เป็นเจ้าของของตนเอง ในกรณีนั้น
การรัน A2A ทับบน task completion สามารถปลุกแม่ด้วย
ผลลัพธ์ของลูก ส่งต่อคำตอบของแม่กลับเข้าไปในลูก และ
สร้าง echo loop ระหว่างแม่/ลูก ผลลัพธ์ sessions_send รายงาน
delivery.status="skipped" สำหรับกรณี owned-child นั้น เพราะ
เส้นทางการทำงานเสร็จรับผิดชอบผลลัพธ์อยู่แล้ว
Resume an existing session
ใช้ 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 ต่อ โดยตอนนี้ทำแบบ headless ผ่านเอเจนต์ของคุณ
- ทำงานต่อจากงานที่ถูกขัดจังหวะโดยการรีสตาร์ต gateway หรือ idle timeout
หมายเหตุ:
resumeSessionIdใช้เฉพาะเมื่อruntime: "acp"; runtime sub-agent เริ่มต้นจะละเว้นฟิลด์เฉพาะ ACP นี้streamToใช้เฉพาะเมื่อruntime: "acp"; runtime sub-agent เริ่มต้นจะละเว้นฟิลด์เฉพาะ ACP นี้resumeSessionIdเป็น id resume ของ ACP/harness แบบ host-local ไม่ใช่คีย์เซสชันช่องของ OpenClaw; OpenClaw ยังตรวจสอบนโยบาย ACP spawn และนโยบายเอเจนต์เป้าหมายก่อน dispatch ขณะที่ backend หรือ harness ACP เป็นเจ้าของการอนุญาตสำหรับโหลด id ต้นทางนั้นresumeSessionIdคืนค่าประวัติการสนทนา ACP ต้นทาง;threadและmodeยังใช้ตามปกติกับเซสชัน OpenClaw ใหม่ที่คุณกำลังสร้าง ดังนั้นmode: "session"ยังคงต้องใช้thread: true- เอเจนต์เป้าหมายต้องรองรับ
session/load(Codex และ Claude Code รองรับ) - หากไม่พบ session id การ spawn จะล้มเหลวพร้อมข้อผิดพลาดที่ชัดเจน - ไม่มี fallback ไปยังเซสชันใหม่อย่างเงียบ ๆ
Post-deploy smoke test
หลัง deploy gateway ให้รันการตรวจสอบ end-to-end แบบ live แทนการ เชื่อถือ unit test:
- ตรวจสอบเวอร์ชันและ commit ของ gateway ที่ deploy บน host เป้าหมาย
- เปิดเซสชัน bridge ACPX ชั่วคราวไปยังเอเจนต์ live
- ขอให้เอเจนต์นั้นเรียก
sessions_spawnด้วยruntime: "acp",agentId: "codex",mode: "run"และ taskReply with exactly LIVE-ACP-SPAWN-OK - ตรวจสอบ
accepted=yes,childSessionKeyจริง และไม่มีข้อผิดพลาด validator - ล้างเซสชัน bridge ชั่วคราว
คง gate ไว้ที่ mode: "run" และข้าม streamTo: "parent" -
mode: "session" แบบผูกเธรดและเส้นทาง stream-relay เป็น
integration pass ที่สมบูรณ์กว่าและแยกต่างหาก
ความเข้ากันได้ของ sandbox
ขณะนี้เซสชัน ACP ทำงานบน runtime ของ host ไม่ใช่ ภายใน sandbox ของ OpenClaw
ข้อจำกัดปัจจุบัน:
- หากเซสชันของผู้ร้องขออยู่ในแซนด์บ็อกซ์ การ spawn ของ ACP จะถูกบล็อกสำหรับทั้ง
sessions_spawn({ runtime: "acp" })และ/acp spawn sessions_spawnที่ใช้runtime: "acp"ไม่รองรับsandbox: "require"
การระบุเป้าหมายเซสชัน
การทำงาน /acp ส่วนใหญ่รับเป้าหมายเซสชันที่ไม่บังคับได้ (session-key,
session-id หรือ session-label)
ลำดับการระบุ:
- อาร์กิวเมนต์เป้าหมายที่ระบุชัดเจน (หรือ
--sessionสำหรับ/acp steer)- ลองใช้ key
- จากนั้นใช้ session id ที่มีรูปแบบ UUID
- จากนั้นใช้ label
- การผูกเธรดปัจจุบัน (หากการสนทนา/เธรดนี้ถูกผูกกับเซสชัน 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 |
แสดง backend, โหมด, สถานะ, ตัวเลือกรันไทม์, capability | /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 |
ตั้งค่า timeout ของรันไทม์ (วินาที) | /acp timeout 120 |
/acp model |
ตั้งค่าการแทนที่โมเดลรันไทม์ | /acp model anthropic/claude-opus-4-6 |
/acp reset-options |
ลบการแทนที่ตัวเลือกรันไทม์ของเซสชัน | /acp reset-options |
/acp sessions |
แสดงรายการเซสชัน ACP ล่าสุดจาก store | /acp sessions |
/acp doctor |
สุขภาพ backend, capability, วิธีแก้ที่ทำได้ | /acp doctor |
/acp install |
พิมพ์ขั้นตอนการติดตั้งและเปิดใช้แบบกำหนดแน่นอน | /acp install |
/acp status แสดงตัวเลือกรันไทม์ที่มีผล รวมถึงตัวระบุเซสชันระดับรันไทม์และ
ระดับ backend ข้อผิดพลาดของการควบคุมที่ไม่รองรับจะแสดงอย่างชัดเจน
เมื่อ backend ไม่มี capability /acp sessions อ่าน
store สำหรับเซสชันที่ผูกอยู่ปัจจุบันหรือเซสชันของผู้ร้องขอ; โทเค็นเป้าหมาย
(session-key, session-id หรือ session-label) จะถูกระบุผ่าน
การค้นพบเซสชันของ Gateway รวมถึงราก session.store
แบบกำหนดเองต่อเอเจนต์
การแมปตัวเลือกรันไทม์
/acp มีคำสั่งอำนวยความสะดวกและตัวตั้งค่าทั่วไป การดำเนินการที่เทียบเท่า:
| คำสั่ง | แมปไปยัง | หมายเหตุ |
|---|---|---|
/acp model <id> |
คีย์การกำหนดค่ารันไทม์ model |
สำหรับ Codex ACP, OpenClaw จะปรับ openai-codex/<model> ให้เป็น id โมเดลของ adapter และแมป suffix reasoning แบบ slash เช่น openai-codex/gpt-5.4/high ไปยัง reasoning_effort |
/acp set thinking <level> |
คีย์การกำหนดค่ารันไทม์ thinking |
สำหรับ Codex ACP, OpenClaw จะส่ง reasoning_effort ที่สอดคล้องกันเมื่อ adapter รองรับ |
/acp permissions <profile> |
คีย์การกำหนดค่ารันไทม์ approval_policy |
- |
/acp timeout <seconds> |
คีย์การกำหนดค่ารันไทม์ timeout |
- |
/acp cwd <path> |
การแทนที่ cwd ของรันไทม์ | อัปเดตโดยตรง |
/acp set <key> <value> |
ทั่วไป | key=cwd ใช้พาธการแทนที่ cwd |
/acp reset-options |
ล้างการแทนที่รันไทม์ทั้งหมด | - |
acpx harness, การตั้งค่า Plugin และสิทธิ์
สำหรับการกำหนดค่า acpx harness (นามแฝง Claude Code / Codex / Gemini CLI), บริดจ์ MCP ของ plugin-tools และ OpenClaw-tools และ โหมดสิทธิ์ ACP โปรดดู ACP agents - การตั้งค่า
การแก้ไขปัญหา
| อาการ | สาเหตุที่เป็นไปได้ | วิธีแก้ |
|---|---|---|
ACP runtime backend is not configured |
Plugin แบ็กเอนด์หายไป ถูกปิดใช้งาน หรือถูกบล็อกโดย plugins.allow |
ติดตั้งและเปิดใช้งาน Plugin แบ็กเอนด์ ใส่ acpx ใน plugins.allow เมื่อตั้งค่า allowlist นั้นไว้ แล้วเรียกใช้ /acp doctor |
ACP is disabled by policy (acp.enabled=false) |
ACP ถูกปิดใช้งานแบบโกลบอล | ตั้งค่า acp.enabled=true |
ACP dispatch is disabled by policy (acp.dispatch.enabled=false) |
การ dispatch อัตโนมัติจากข้อความเธรดปกติถูกปิดใช้งาน | ตั้งค่า acp.dispatch.enabled=true เพื่อกลับมาใช้การกำหนดเส้นทางเธรดอัตโนมัติ การเรียก sessions_spawn({ runtime: "acp" }) แบบชัดเจนยังคงทำงาน |
ACP agent "<id>" is not allowed by policy |
เอเจนต์ไม่อยู่ใน allowlist | ใช้ agentId ที่อนุญาต หรืออัปเดต acp.allowedAgents |
/acp doctor รายงานว่าแบ็กเอนด์ยังไม่พร้อมทันทีหลังเริ่มทำงาน |
Plugin แบ็กเอนด์หายไป ถูกปิดใช้งาน ถูกบล็อกโดยนโยบายอนุญาต/ปฏิเสธ หรือไฟล์ปฏิบัติการที่กำหนดค่าไว้ไม่พร้อมใช้งาน | ติดตั้ง/เปิดใช้งาน Plugin แบ็กเอนด์ เรียก /acp doctor อีกครั้ง และตรวจสอบข้อผิดพลาดการติดตั้งแบ็กเอนด์หรือนโยบายหากยังไม่สมบูรณ์ |
| ไม่พบคำสั่งฮาร์เนส | ยังไม่ได้ติดตั้ง CLI ของอะแดปเตอร์, Plugin ภายนอกหายไป หรือการดึง npx ครั้งแรกสำหรับอะแดปเตอร์ที่ไม่ใช่ Codex ล้มเหลว |
เรียกใช้ /acp doctor ติดตั้ง/อุ่นเครื่องอะแดปเตอร์บนโฮสต์ Gateway หรือกำหนดคำสั่งเอเจนต์ acpx อย่างชัดเจน |
| ฮาร์เนสแจ้งว่าไม่พบโมเดล | id โมเดลใช้ได้กับ provider/ฮาร์เนสอื่น แต่ใช้กับเป้าหมาย ACP นี้ไม่ได้ | ใช้โมเดลที่ฮาร์เนสนั้นแสดงไว้ กำหนดค่าโมเดลในฮาร์เนส หรือละเว้น override |
| ข้อผิดพลาดการยืนยันตัวตนของผู้ขายจากฮาร์เนส | OpenClaw ทำงานปกติ แต่ CLI/provider เป้าหมายยังไม่ได้เข้าสู่ระบบ | เข้าสู่ระบบหรือระบุคีย์ provider ที่จำเป็นในสภาพแวดล้อมโฮสต์ Gateway |
Unable to resolve session target: ... |
คีย์/id/โทเค็นป้ายกำกับไม่ถูกต้อง | เรียก /acp sessions คัดลอกคีย์/ป้ายกำกับที่ตรงกัน แล้วลองใหม่ |
--bind here requires running /acp spawn inside an active ... conversation |
ใช้ --bind here โดยไม่มีการสนทนาที่ใช้งานอยู่และผูกได้ |
ย้ายไปยังแชต/ช่องเป้าหมายแล้วลองใหม่ หรือใช้การ spawn แบบไม่ผูก |
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 spawn จากเซสชันที่ไม่อยู่ในแซนด์บ็อกซ์ |
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 แบบทั่วไป | ใช้ฮาร์เนสที่ประกาศ ACP models/session/set_model ใช้การอ้างอิงโมเดล ACP ของ Codex หรือกำหนดค่าโมเดลโดยตรงในฮาร์เนสหากมีแฟล็กเริ่มต้นของตัวเอง |
| เมทาดาทา ACP สำหรับเซสชันที่ผูกไว้หายไป | เมทาดาทาเซสชัน ACP ค้าง/ถูกลบ | สร้างใหม่ด้วย /acp spawn แล้วผูกใหม่/โฟกัสเธรด |
AcpRuntimeError: Permission prompt unavailable in non-interactive mode |
permissionMode บล็อกการเขียน/exec ในเซสชัน ACP แบบไม่โต้ตอบ |
ตั้งค่า plugins.entries.acpx.config.permissionMode เป็น approve-all แล้วรีสตาร์ต gateway ดู การกำหนดค่าสิทธิ์ |
| เซสชัน ACP ล้มเหลวตั้งแต่ต้นโดยมีเอาต์พุตน้อย | พรอมป์สิทธิ์ถูกบล็อกโดย permissionMode/nonInteractivePermissions |
ตรวจสอบบันทึก gateway สำหรับ AcpRuntimeError หากต้องการสิทธิ์เต็ม ให้ตั้งค่า permissionMode=approve-all; หากต้องการลดระดับอย่างราบรื่น ให้ตั้งค่า nonInteractivePermissions=deny |
| เซสชัน ACP ค้างไม่สิ้นสุดหลังทำงานเสร็จ | โปรเซสฮาร์เนสจบแล้ว แต่เซสชัน ACP ไม่ได้รายงานว่าเสร็จสมบูรณ์ | ตรวจสอบด้วย ps aux | grep acpx; kill โปรเซสที่ค้างด้วยตนเอง |
ฮาร์เนสเห็น <<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>> |
ซองเหตุการณ์ภายในรั่วข้ามขอบเขต ACP | อัปเดต OpenClaw แล้วเรียกโฟลว์การทำให้เสร็จสมบูรณ์อีกครั้ง ฮาร์เนสภายนอกควรได้รับเฉพาะพรอมป์การทำให้เสร็จสมบูรณ์แบบข้อความธรรมดาเท่านั้น |