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.
Xem thêm Sub-agents.
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.
Ghi chú:
- 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
/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ở.
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).
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.