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 อย่างเป็นทางการ:

bash
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 สแต็กประกอบด้วย:

    1. ระนาบควบคุมเซสชัน ACP ของ OpenClaw
    2. Plugin รันไทม์ @openclaw/acpx อย่างเป็นทางการ
    3. อะแดปเตอร์ Claude ACP
    4. กลไกรันไทม์/เซสชันฝั่ง 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 จะลบการผูก

    ตัวอย่าง:

    text
    /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 อื่นโดยไม่มี --cwd OpenClaw จะสืบทอดพื้นที่ทำงานของ เอเจนต์เป้าหมาย ตามค่าเริ่มต้น พาธที่สืบทอดมาแต่ไม่มีอยู่ (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=true
    • acp.dispatch.enabled เปิดอยู่ตามค่าเริ่มต้น (ตั้งเป็น false เพื่อหยุดการส่งเธรด ACP อัตโนมัติชั่วคราว โดยการเรียก sessions_spawn({ runtime: "acp" }) แบบชัดเจนยังคงใช้งานได้)
    • เปิดใช้การสร้างเซสชันเธรดของอะแดปเตอร์ช่อง (ค่าเริ่มต้น: true):
      • Discord: channels.discord.threadBindings.spawnSessions=true
      • Telegram: channels.telegram.threadBindings.spawnSessions=true

    การรองรับการผูกเธรดขึ้นอยู่กับอะแดปเตอร์ หากอะแดปเตอร์ช่องที่ใช้งานอยู่ ไม่รองรับการผูกเธรด 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="&lt;E.164|group JID&gt;" ใช้หมายเลข 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.backend
    • agents.list[].runtime.acp.mode
    • agents.list[].runtime.acp.cwd

    ลำดับความสำคัญของการแทนที่สำหรับเซสชัน ACP ที่ผูกไว้:

    1. bindings[].acp.*
    2. agents.list[].runtime.acp.*
    3. ค่าเริ่มต้น ACP ส่วนกลาง (เช่น acp.backend)

    ตัวอย่าง

    json5
    {  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 จากรอบการทำงานของเอเจนต์หรือการเรียกใช้เครื่องมือ

    json
    {  "task": "Open the repo and summarize failing tests",  "runtime": "acp",  "agentId": "codex",  "thread": true,  "mode": "session"}

    จากคำสั่ง /acp

    ใช้ /acp spawn เพื่อให้ผู้ดำเนินการควบคุมจากแชตโดยตรง

    text
    /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
    • ใช้ --bind here เมื่อต้องการตรึงการสนทนาปัจจุบันโดยไม่สร้างเธรดย่อย

    รูปแบบการส่งมอบ

    เซสชัน ACP สามารถเป็นพื้นที่ทำงานแบบโต้ตอบหรืองานเบื้องหลังที่เซสชันแม่เป็นเจ้าของ เส้นทางการส่งมอบขึ้นอยู่กับรูปแบบดังกล่าว

    เซสชัน ACP แบบโต้ตอบ

    เซสชันแบบโต้ตอบมีไว้เพื่อสนทนาต่อบนพื้นผิวแชตที่มองเห็นได้:

    • /acp spawn ... --bind here เชื่อมโยงการสนทนาปัจจุบันกับเซสชัน ACP
    • /acp spawn ... --thread ... เชื่อมโยงเธรด/หัวข้อของช่องทางกับเซสชัน ACP
    • bindings[].type="acp" แบบถาวรที่กำหนดค่าไว้จะกำหนดเส้นทางการสนทนาที่ตรงกันไปยังเซสชัน ACP เดิม

    ข้อความติดตามผลในการสนทนาที่เชื่อมโยงไว้จะถูกกำหนดเส้นทางโดยตรงไปยังเซสชัน ACP และผลลัพธ์จาก ACP จะถูกส่งกลับไปยังช่องทาง/เธรด/หัวข้อเดิม

    สิ่งที่ OpenClaw ส่งไปยังระบบควบคุม:

    • ข้อความติดตามผลตามปกติในการสนทนาที่เชื่อมโยงไว้จะถูกส่งเป็นข้อความพรอมต์ พร้อมไฟล์แนบเฉพาะเมื่อระบบควบคุม/แบ็กเอนด์รองรับ
    • คำสั่งจัดการ /acp และคำสั่ง Gateway ภายในเครื่องจะถูกดักก่อนส่งต่อไปยัง ACP
    • เหตุการณ์เสร็จสิ้นที่รันไทม์สร้างขึ้นจะถูกแปลงเป็นข้อมูลสำหรับแต่ละเป้าหมาย เอเจนต์ OpenClaw จะได้รับซองบริบทรันไทม์ภายในของ OpenClaw ส่วนระบบควบคุม ACP ภายนอกจะได้รับพรอมต์แบบธรรมดาที่มีผลลัพธ์จากงานย่อยและคำสั่ง ซองข้อมูลดิบ <<&lt;BEGIN_OPENCLAW_INTERNAL_CONTEXT&gt;>> ต้องไม่ถูกส่งไปยังระบบควบคุมภายนอกหรือบันทึกเป็นข้อความบทสนทนาของผู้ใช้ 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 จึงสามารถทำงานต่อพร้อมบริบททั้งหมดของสิ่งที่เกิดขึ้นก่อนหน้า

    json
    {  "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 ให้เรียกใช้การตรวจสอบแบบครบวงจรจริงแทนการเชื่อถือ การทดสอบหน่วย:

    1. ตรวจสอบเวอร์ชันและคอมมิตของ Gateway ที่ปรับใช้บนโฮสต์เป้าหมาย
    2. เปิดเซสชันบริดจ์ ACPX ชั่วคราวไปยังเอเจนต์ที่ทำงานจริง
    3. ขอให้เอเจนต์นั้นเรียก sessions_spawn โดยใช้ runtime: "acp", agentId: "codex", mode: "run" และงาน Reply with exactly LIVE-ACP-SPAWN-OK
    4. ตรวจสอบ accepted=yes, childSessionKey จริง และไม่มีข้อผิดพลาดจากตัวตรวจสอบ
    5. ล้างเซสชันบริดจ์ชั่วคราว

    กำหนดเกตไว้ที่ 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)

    ลำดับการระบุ:

    1. อาร์กิวเมนต์เป้าหมายที่ระบุอย่างชัดเจน (หรือ --session สำหรับ /acp steer)
      • ลองใช้คีย์
      • จากนั้นลองรหัสเซสชันที่มีรูปแบบ UUID
      • จากนั้นลองป้ายกำกับ
    2. การผูกเธรดปัจจุบัน (หากการสนทนา/เธรดนี้ผูกกับเซสชัน ACP)
    3. ทางเลือกสำรองไปยังเซสชันผู้ร้องขอปัจจุบัน

    ทั้งการผูกการสนทนาปัจจุบันและการผูกเธรดมีส่วนร่วมในขั้นตอนที่ 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
    ชุดควบคุมการทำงานเห็น <<&lt;BEGIN_OPENCLAW_INTERNAL_CONTEXT&gt;>> เอนเวโลปเหตุการณ์ภายในรั่วไหลข้ามขอบเขต ACP อัปเดต OpenClaw แล้วเรียกใช้โฟลว์การทำงานให้เสร็จสมบูรณ์อีกครั้ง ชุดควบคุมการทำงานภายนอกควรได้รับเฉพาะพรอมต์การทำงานให้เสร็จสมบูรณ์แบบข้อความธรรมดา

    เนื้อหาที่เกี่ยวข้อง

    Was this useful?
    On this page

    On this page