Tác nhân ACP
Các phiên Agent Client Protocol (ACP) cho phép OpenClaw chạy các coding harnesses bên ngoài (như Pi, Claude Code, Codex, OpenCode và Gemini CLI) thông qua một plugin backend ACP. Nếu bạn yêu cầu OpenClaw bằng ngôn ngữ tự nhiên để “chạy cái này trong Codex” hoặc “bắt đầu Claude Code trong một thread”, OpenClaw sẽ định tuyến yêu cầu đó đến runtime ACP (không phải runtime sub-agent gốc).Quy trình vận hành nhanh
Sử dụng khi bạn cần một runbook/acp thực tế:
- Khởi tạo một phiên:
/acp spawn codex --mode persistent --thread auto
- Làm việc trong thread đã gắn (hoặc nhắm mục tiêu vào khóa phiên đó một cách rõ ràng).
- Kiểm tra trạng thái runtime:
/acp status
- Điều chỉnh các tùy chọn runtime khi cần:
/acp model <provider/model>/acp permissions <profile>/acp timeout <seconds>
- Điều chỉnh một phiên đang hoạt động mà không thay thế ngữ cảnh:
/acp steer tighten logging and continue
- Dừng công việc:
/acp cancel(dừng lượt hiện tại), hoặc/acp close(đóng phiên + xóa các liên kết)
Bắt đầu nhanh cho người dùng
Ví dụ về các yêu cầu tự nhiên:- “Bắt đầu một phiên Codex liên tục trong một thread ở đây và giữ nó tập trung.”
- “Chạy cái này như một phiên Claude Code ACP một lần và tóm tắt kết quả.”
- “Sử dụng Gemini CLI cho nhiệm vụ này trong một thread, sau đó giữ các theo dõi trong cùng thread đó.”
- Chọn
runtime: "acp". - Xác định mục tiêu harness được yêu cầu (
agentId, ví dụcodex). - Nếu yêu cầu gắn thread và kênh hiện tại hỗ trợ, gắn phiên ACP vào thread.
- Định tuyến các tin nhắn theo dõi thread đến cùng phiên ACP đó cho đến khi không còn tập trung/đóng/hết hạn.
ACP so với sub-agents
Sử dụng ACP khi bạn muốn một runtime harness bên ngoài. Sử dụng sub-agents khi bạn muốn các lần chạy được ủy quyền gốc của OpenClaw.| Khu vực | Phiên ACP | Chạy sub-agent |
|---|---|---|
| Runtime | Plugin backend ACP (ví dụ acpx) | Runtime sub-agent gốc của OpenClaw |
| Khóa phiên | agent:<agentId>:acp:<uuid> | agent:<agentId>:subagent:<uuid> |
| Lệnh chính | /acp ... | /subagents ... |
| Công cụ spawn | sessions_spawn với runtime:"acp" | sessions_spawn (runtime mặc định) |
Phiên gắn liền với thread (không phụ thuộc kênh)
Khi các liên kết thread được kích hoạt cho một adapter kênh, các phiên ACP có thể được gắn vào các thread:- OpenClaw gắn một thread vào một phiên ACP mục tiêu.
- Các tin nhắn theo dõi trong thread đó được định tuyến đến phiên ACP đã gắn.
- Đầu ra ACP được gửi lại cho cùng thread đó.
- Không tập trung/đóng/lưu trữ/hết thời gian chờ hoặc hết tuổi tối đa sẽ xóa liên kết.
acp.enabled=trueacp.dispatch.enabledđược bật theo mặc định (đặtfalseđể tạm dừng dispatch ACP)- Cờ spawn thread-adapter ACP được bật (đặc thù của adapter)
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
Các kênh hỗ trợ thread
- Bất kỳ adapter kênh nào cung cấp khả năng gắn kết phiên/thread.
- Hỗ trợ tích hợp sẵn hiện tại:
- Các thread/kênh Discord
- Các chủ đề Telegram (chủ đề diễn đàn trong nhóm/siêu nhóm và chủ đề DM)
- Các kênh plugin có thể thêm hỗ trợ thông qua cùng giao diện gắn kết.
Cài đặt cụ thể cho kênh
Đối với các quy trình không tạm thời, cấu hình các liên kết ACP liên tục trong các mụcbindings[] cấp cao nhất.
Mô hình liên kết
bindings[].type="acp"đánh dấu một liên kết cuộc trò chuyện ACP liên tục.bindings[].matchxác định cuộc trò chuyện mục tiêu:- Kênh hoặc thread Discord:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Chủ đề diễn đàn Telegram:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>"
- Kênh hoặc thread Discord:
bindings[].agentIdlà id tác nhân OpenClaw sở hữu.- Các ghi đè ACP tùy chọn nằm dưới
bindings[].acp:mode(persistenthoặconeshot)labelcwdbackend
Mặc định runtime cho mỗi tác nhân
Sử dụngagents.list[].runtime để định nghĩa mặc định ACP một lần cho mỗi tác nhân:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(id harness, ví dụcodexhoặcclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
bindings[].acp.*agents.list[].runtime.acp.*- Mặc định ACP toàn cầu (ví dụ
acp.backend)
- OpenClaw đảm bảo phiên ACP được cấu hình tồn tại trước khi sử dụng.
- Các tin nhắn trong kênh hoặc chủ đề đó được định tuyến đến phiên ACP đã cấu hình.
- Trong các cuộc trò chuyện đã gắn,
/newvà/resetđặt lại cùng khóa phiên ACP tại chỗ. - Các liên kết runtime tạm thời (ví dụ được tạo bởi các luồng tập trung thread) vẫn áp dụng khi có.
Bắt đầu các phiên ACP (giao diện)
Từ sessions_spawn
Sử dụng runtime: "acp" để bắt đầu một phiên ACP từ một lượt tác nhân hoặc cuộc gọi công cụ.
runtimemặc định làsubagent, vì vậy hãy đặtruntime: "acp"rõ ràng cho các phiên ACP.- Nếu
agentIdbị bỏ qua, OpenClaw sử dụngacp.defaultAgentkhi được cấu hình. mode: "session"yêu cầuthread: trueđể giữ một cuộc trò chuyện gắn liền liên tục.
task(bắt buộc): lời nhắc ban đầu được gửi đến phiên ACP.runtime(bắt buộc cho ACP): phải là"acp".agentId(tùy chọn): id harness mục tiêu ACP. Sẽ sử dụngacp.defaultAgentnếu được đặt.thread(tùy chọn, mặc địnhfalse): yêu cầu luồng gắn kết thread khi được hỗ trợ.mode(tùy chọn):run(một lần) hoặcsession(liên tục).- mặc định là
run - nếu
thread: truevà chế độ bị bỏ qua, OpenClaw có thể mặc định hành vi liên tục theo đường dẫn runtime mode: "session"yêu cầuthread: true
- mặc định là
cwd(tùy chọn): thư mục làm việc runtime được yêu cầu (được xác thực bởi chính sách backend/runtime).label(tùy chọn): nhãn hướng đến người vận hành được sử dụng trong văn bản phiên/banner.resumeSessionId(tùy chọn): tiếp tục một phiên ACP hiện có thay vì tạo một phiên mới. Tác nhân phát lại lịch sử cuộc trò chuyện của nó quasession/load. Yêu cầuruntime: "acp".streamTo(tùy chọn):"parent"truyền các tóm tắt tiến trình chạy ACP ban đầu trở lại phiên yêu cầu dưới dạng sự kiện hệ thống.- Khi có sẵn, các phản hồi được chấp nhận bao gồm
streamLogPathtrỏ đến một log JSONL theo phạm vi phiên (<sessionId>.acp-stream.jsonl) bạn có thể theo dõi để có lịch sử chuyển tiếp đầy đủ.
- Khi có sẵn, các phản hồi được chấp nhận bao gồm
Tiếp tục một phiên hiện có
Sử dụngresumeSessionId để tiếp tục một phiên ACP trước đó thay vì bắt đầu mới. Tác nhân phát lại lịch sử cuộc trò chuyện của nó qua session/load, vì vậy nó tiếp tục với đầy đủ ngữ cảnh của những gì đã xảy ra trước đó.
- Chuyển một phiên Codex từ laptop của bạn sang điện thoại — yêu cầu tác nhân của bạn tiếp tục từ nơi bạn đã dừng lại
- Tiếp tục một phiên mã hóa bạn đã bắt đầu tương tác trong CLI, bây giờ không có đầu qua tác nhân của bạn
- Tiếp tục công việc bị gián đoạn bởi khởi động lại gateway hoặc hết thời gian chờ
resumeSessionIdyêu cầuruntime: "acp"— trả về lỗi nếu được sử dụng với runtime sub-agent.resumeSessionIdkhôi phục lịch sử cuộc trò chuyện ACP thượng nguồn;threadvàmodevẫn áp dụng bình thường cho phiên OpenClaw mới bạn đang tạo, vì vậymode: "session"vẫn yêu cầuthread: true.- Tác nhân mục tiêu phải hỗ trợ
session/load(Codex và Claude Code có). - Nếu không tìm thấy ID phiên, spawn sẽ thất bại với một lỗi rõ ràng — không có fallback im lặng sang một phiên mới.
Kiểm tra nhanh của người vận hành
Sử dụng điều này sau khi triển khai gateway khi bạn muốn kiểm tra nhanh xem spawn ACP có thực sự hoạt động từ đầu đến cuối hay không, không chỉ vượt qua các bài kiểm tra đơn vị. Cổng được đề xuất:- Xác minh phiên bản/commit gateway đã triển khai trên máy chủ mục tiêu.
- Xác nhận mã nguồn đã triển khai bao gồm chấp nhận dòng dõi ACP trong
src/gateway/sessions-patch.ts(subagent:* hoặc acp:* sessions). - Mở một phiên cầu nối ACPX tạm thời đến một tác nhân trực tiếp (ví dụ
razor(main)trênjpclawhq). - Yêu cầu tác nhân đó gọi
sessions_spawnvới:runtime: "acp"agentId: "codex"mode: "run"- task:
Reply with exactly LIVE-ACP-SPAWN-OK
- Xác minh tác nhân báo cáo:
accepted=yes- một
childSessionKeythực - không có lỗi validator
- Dọn dẹp phiên cầu nối ACPX tạm thời.
- Giữ bài kiểm tra nhanh này trên
mode: "run"trừ khi bạn đang cố ý kiểm tra các phiên ACP liên tục gắn liền với thread. - Không yêu cầu
streamTo: "parent"cho cổng cơ bản. Đường dẫn đó phụ thuộc vào khả năng của người yêu cầu/phiên và là một kiểm tra tích hợp riêng biệt. - Xem xét thử nghiệm
mode: "session"gắn liền với thread như một lần vượt qua tích hợp phong phú thứ hai từ một thread Discord thực hoặc chủ đề Telegram.
Tương thích với Sandbox
Các phiên ACP hiện chạy trên runtime host, không phải bên trong sandbox OpenClaw. Hạn chế hiện tại:- Nếu phiên yêu cầu được sandbox, spawn ACP bị chặn cho cả
sessions_spawn({ runtime: "acp" })và/acp spawn.- Lỗi:
Sandboxed sessions cannot spawn ACP sessions because runtime="acp" runs on the host. Use runtime="subagent" from sandboxed sessions.
- Lỗi:
sessions_spawnvớiruntime: "acp"không hỗ trợsandbox: "require".- Lỗi:
sessions_spawn sandbox="require" is unsupported for runtime="acp" because ACP sessions run outside the sandbox. Use runtime="subagent" or sandbox="inherit".
- Lỗi:
runtime: "subagent" khi bạn cần thực thi được bảo vệ bởi sandbox.
Từ lệnh /acp
Sử dụng /acp spawn để kiểm soát rõ ràng từ chat khi cần.
--mode persistent|oneshot--thread auto|here|off--cwd <absolute-path>--label <name>
Giải quyết mục tiêu phiên
Hầu hết các hành động/acp chấp nhận một mục tiêu phiên tùy chọn (session-key, session-id, hoặc session-label).
Thứ tự giải quyết:
- Đối số mục tiêu rõ ràng (hoặc
--sessioncho/acp steer)- thử khóa
- sau đó ID phiên có dạng UUID
- sau đó nhãn
- Liên kết thread hiện tại (nếu cuộc trò chuyện/thread này được gắn vào một phiên ACP)
- Fallback phiên yêu cầu hiện tại
Unable to resolve session target: ...).
Chế độ spawn thread
/acp spawn hỗ trợ --thread auto|here|off.
| Chế độ | Hành vi |
|---|---|
auto | Trong một thread đang hoạt động: gắn thread đó. Ngoài một thread: tạo/gắn một thread con khi được hỗ trợ. |
here | Yêu cầu thread đang hoạt động hiện tại; thất bại nếu không có. |
off | Không gắn kết. Phiên bắt đầu không gắn kết. |
- Trên các bề mặt không gắn kết thread, hành vi mặc định là
off. - Spawn gắn kết thread yêu cầu hỗ trợ chính sách kênh:
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
Điều khiển ACP
Các lệnh có sẵn:/acp spawn/acp cancel/acp steer/acp close/acp status/acp set-mode/acp set/acp cwd/acp permissions/acp timeout/acp model/acp reset-options/acp sessions/acp doctor/acp install
/acp status hiển thị các tùy chọn runtime hiệu quả và, khi có, cả các định danh phiên cấp runtime và cấp backend.
Một số điều khiển phụ thuộc vào khả năng backend. Nếu một backend không hỗ trợ một điều khiển, OpenClaw trả về một lỗi không hỗ trợ rõ ràng.
Sổ tay lệnh ACP
| Lệnh | Chức năng | Ví dụ |
|---|---|---|
/acp spawn | Tạo phiên ACP; tùy chọn gắn kết thread. | /acp spawn codex --mode persistent --thread auto --cwd /repo |
/acp cancel | Hủy lượt đang thực hiện cho phiên mục tiêu. | /acp cancel agent:codex:acp:<uuid> |
/acp steer | Gửi hướng dẫn điều chỉnh đến phiên đang chạy. | /acp steer --session support inbox prioritize failing tests |
/acp close | Đóng phiên và hủy gắn kết mục tiêu thread. | /acp close |
/acp status | Hiển thị backend, chế độ, trạng thái, tùy chọn runtime, khả năng. | /acp status |
/acp set-mode | Đặt chế độ runtime cho phiên mục tiêu. | /acp set-mode plan |
/acp set | Ghi tùy chọn cấu hình runtime chung. | /acp set model openai/gpt-5.2 |
/acp cwd | Đặt ghi đè thư mục làm việc runtime. | /acp cwd /Users/user/Projects/repo |
/acp permissions | Đặt hồ sơ chính sách phê duyệt. | /acp permissions strict |
/acp timeout | Đặt thời gian chờ runtime (giây). | /acp timeout 120 |
/acp model | Đặt ghi đè mô hình runtime. | /acp model anthropic/claude-opus-4-6 |
/acp reset-options | Xóa các ghi đè tùy chọn runtime cho phiên mục tiêu. | /acp reset-options |
/acp sessions | Liệt kê các phiên ACP gần đây từ kho lưu trữ. | /acp sessions |
/acp doctor | Kiểm tra sức khỏe backend, khả năng, sửa chữa có thể thực hiện. | /acp doctor |
/acp install | In các bước cài đặt và kích hoạt xác định. | /acp install |
/acp sessions đọc kho lưu trữ cho phiên hiện tại đã gắn hoặc phiên yêu cầu. Các lệnh chấp nhận token session-key, session-id, hoặc session-label giải quyết mục tiêu thông qua khám phá phiên gateway, bao gồm các session.store tùy chỉnh cho mỗi tác nhân.
Ánh xạ tùy chọn runtime
/acp có các lệnh tiện lợi và một bộ thiết lập chung.
Các hoạt động tương đương:
/acp model <id>ánh xạ đến khóa cấu hình runtimemodel./acp permissions <profile>ánh xạ đến khóa cấu hình runtimeapproval_policy./acp timeout <seconds>ánh xạ đến khóa cấu hình runtimetimeout./acp cwd <path>cập nhật ghi đè cwd runtime trực tiếp./acp set <key> <value>là đường dẫn chung.- Trường hợp đặc biệt:
key=cwdsử dụng đường dẫn ghi đè cwd.
- Trường hợp đặc biệt:
/acp reset-optionsxóa tất cả các ghi đè runtime cho phiên mục tiêu.
Hỗ trợ harness acpx (hiện tại)
Các alias harness tích hợp sẵn hiện tại của acpx:piclaudecodexopencodegeminikimi
agentId trừ khi cấu hình acpx của bạn định nghĩa các alias tác nhân tùy chỉnh.
Sử dụng CLI acpx trực tiếp cũng có thể nhắm mục tiêu các adapter tùy ý qua --agent <command>, nhưng lối thoát thô đó là một tính năng CLI acpx (không phải đường dẫn agentId thông thường của OpenClaw).
Cấu hình cần thiết
Cơ sở ACP cốt lõi:- Discord:
channels.discord.threadBindings.spawnAcpSessions=true
Thiết lập plugin cho backend acpx
Cài đặt và kích hoạt plugin:Cấu hình lệnh và phiên bản acpx
Theo mặc định, plugin acpx (được phát hành dưới dạng@openclaw/acpx) sử dụng binary được ghim cục bộ plugin:
- Lệnh mặc định là
extensions/acpx/node_modules/.bin/acpx. - Phiên bản dự kiến mặc định là ghim của extension.
- Khởi động đăng ký backend ACP ngay lập tức là không sẵn sàng.
- Một công việc đảm bảo nền xác minh
acpx --version. - Nếu binary cục bộ plugin bị thiếu hoặc không khớp, nó chạy:
npm install --omit=dev --no-save acpx@<pinned>và xác minh lại.
commandchấp nhận một đường dẫn tuyệt đối, đường dẫn tương đối, hoặc tên lệnh (acpx).- Đường dẫn tương đối được giải quyết từ thư mục workspace OpenClaw.
expectedVersion: "any"vô hiệu hóa khớp phiên bản nghiêm ngặt.- Khi
commandtrỏ đến một binary/đường dẫn tùy chỉnh, cài đặt tự động cục bộ plugin bị vô hiệu hóa. - Khởi động OpenClaw vẫn không bị chặn trong khi kiểm tra sức khỏe backend chạy.
Cấu hình quyền
Các phiên ACP chạy không tương tác — không có TTY để phê duyệt hoặc từ chối các lời nhắc quyền ghi tệp và thực thi shell. Plugin acpx cung cấp hai khóa cấu hình kiểm soát cách xử lý quyền:permissionMode
Kiểm soát các hoạt động mà tác nhân harness có thể thực hiện mà không cần nhắc nhở.
| Giá trị | Hành vi |
|---|---|
approve-all | Tự động phê duyệt tất cả các ghi tệp và lệnh shell. |
approve-reads | Tự động phê duyệt chỉ đọc; ghi và thực thi yêu cầu nhắc nhở. |
deny-all | Từ chối tất cả các lời nhắc quyền. |
nonInteractivePermissions
Kiểm soát điều gì xảy ra khi một lời nhắc quyền sẽ được hiển thị nhưng không có TTY tương tác nào có sẵn (điều này luôn xảy ra đối với các phiên ACP).
| Giá trị | Hành vi |
|---|---|
fail | Hủy phiên với AcpRuntimeError. (mặc định) |
deny | Từ chối quyền một cách im lặng và tiếp tục (suy giảm nhẹ nhàng). |
Cấu hình
Đặt qua cấu hình plugin:Quan trọng: OpenClaw hiện mặc địnhpermissionMode=approve-readsvànonInteractivePermissions=fail. Trong các phiên ACP không tương tác, bất kỳ ghi hoặc thực thi nào kích hoạt một lời nhắc quyền có thể thất bại vớiAcpRuntimeError: Permission prompt unavailable in non-interactive mode. Nếu bạn cần hạn chế quyền, đặtnonInteractivePermissionsthànhdenyđể các phiên suy giảm nhẹ nhàng thay vì bị lỗi.
Khắc phục sự cố
| Triệu chứng | Nguyên nhân có thể xảy ra | Cách khắc phục |
|---|---|---|
ACP runtime backend is not configured | Plugin backend bị thiếu hoặc bị vô hiệu hóa. | Cài đặt và kích hoạt plugin backend, sau đó chạy /acp doctor. |
ACP is disabled by policy (acp.enabled=false) | ACP bị vô hiệu hóa toàn cầu. | Đặt acp.enabled=true. |
ACP dispatch is disabled by policy (acp.dispatch.enabled=false) | Dispatch từ các tin nhắn thread thông thường bị vô hiệu hóa. | Đặt acp.dispatch.enabled=true. |
ACP agent "<id>" is not allowed by policy | Tác nhân không có trong danh sách cho phép. | Sử dụng agentId được phép hoặc cập nhật acp.allowedAgents. |
Unable to resolve session target: ... | Token khóa/id/nhãn không hợp lệ. | Chạy /acp sessions, sao chép khóa/nhãn chính xác, thử lại. |
--thread here requires running /acp spawn inside an active ... thread | --thread here được sử dụng ngoài ngữ cảnh thread. | Di chuyển đến thread mục tiêu hoặc sử dụng --thread auto/off. |
Only <user-id> can rebind this thread. | Người dùng khác sở hữu liên kết thread. | Gắn lại như chủ sở hữu hoặc sử dụng một thread khác. |
Thread bindings are unavailable for <channel>. | Adapter không có khả năng gắn kết thread. | Sử dụng --thread off hoặc di chuyển đến adapter/kênh được hỗ trợ. |
Sandboxed sessions cannot spawn ACP sessions ... | Runtime ACP là phía host; phiên yêu cầu được sandbox. | Sử dụng runtime="subagent" từ các phiên sandbox, hoặc chạy spawn ACP từ một phiên không được sandbox. |
sessions_spawn sandbox="require" is unsupported for runtime="acp" ... | sandbox="require" được yêu cầu cho runtime ACP. | Sử dụng runtime="subagent" cho yêu cầu sandboxing, hoặc sử dụng ACP với sandbox="inherit" từ một phiên không được sandbox. |
| Thiếu metadata ACP cho phiên đã gắn | Metadata phiên ACP cũ/bị xóa. | Tạo lại với /acp spawn, sau đó gắn lại/tập trung thread. |
AcpRuntimeError: Permission prompt unavailable in non-interactive mode | permissionMode chặn ghi/thực thi trong phiên ACP không tương tác. | Đặt plugins.entries.acpx.config.permissionMode thành approve-all và khởi động lại gateway. Xem Cấu hình quyền. |
| Phiên ACP thất bại sớm với ít đầu ra | Các lời nhắc quyền bị chặn bởi permissionMode/nonInteractivePermissions. | Kiểm tra log gateway cho AcpRuntimeError. Để có đầy đủ quyền, đặt permissionMode=approve-all; để suy giảm nhẹ nhàng, đặt nonInteractivePermissions=deny. |
| Phiên ACP bị treo vô thời hạn sau khi hoàn thành công việc | Quá trình harness đã hoàn thành nhưng phiên ACP không báo cáo hoàn thành. | Giám sát với ps aux | grep acpx; giết các quá trình bị treo thủ công. |