Chạy các lệnh shell trong workspace. Hỗ trợ thực thi foreground + background thông quaDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
process.
Nếu process không được cho phép, exec chạy đồng bộ và bỏ qua yieldMs/background.
Các phiên background được giới hạn theo từng agent; process chỉ thấy các phiên từ cùng agent.
Tham số
Lệnh shell cần chạy.
Thư mục làm việc cho lệnh.
Các ghi đè môi trường dạng khóa/giá trị được hợp nhất lên trên môi trường kế thừa.
Tự động đưa lệnh vào background sau khoảng trễ này (ms).
Đưa lệnh vào background ngay lập tức thay vì chờ
yieldMs.Ghi đè thời gian chờ exec đã cấu hình cho lần gọi này. Chỉ đặt
timeout: 0 khi lệnh nên chạy mà không có thời gian chờ của tiến trình exec.Chạy trong pseudo-terminal khi có sẵn. Dùng cho các CLI chỉ hỗ trợ TTY, agent lập trình và giao diện terminal.
Nơi thực thi.
auto được phân giải thành sandbox khi runtime sandbox đang hoạt động và thành gateway trong các trường hợp khác.Chế độ thực thi bắt buộc cho việc thực thi
gateway / node.Hành vi nhắc phê duyệt cho việc thực thi
gateway / node.ID/tên Node khi
host=node.Yêu cầu chế độ nâng quyền — thoát khỏi sandbox đến đường dẫn host đã cấu hình.
security=full chỉ bị bắt buộc khi elevated được phân giải thành full.hostmặc định làauto: sandbox khi runtime sandbox đang hoạt động cho phiên, nếu không thì Gateway.hostchỉ chấp nhậnauto,sandbox,gatewayhoặcnode. Đây không phải bộ chọn hostname; các giá trị giống hostname bị từ chối trước khi lệnh chạy.autolà chiến lược định tuyến mặc định, không phải wildcard.host=nodetheo từng lần gọi được phép từauto;host=gatewaytheo từng lần gọi chỉ được phép khi không có runtime sandbox đang hoạt động.- Không cần cấu hình bổ sung,
host=autovẫn “just works”: không có sandbox thì nó phân giải thànhgateway; có sandbox đang chạy thì nó ở lại trong sandbox. elevatedthoát khỏi sandbox đến đường dẫn host đã cấu hình: mặc định làgateway, hoặcnodekhitools.exec.host=node(hoặc mặc định phiên làhost=node). Tính năng này chỉ có sẵn khi quyền truy cập elevated được bật cho phiên/provider hiện tại.- Phê duyệt
gateway/nodeđược điều khiển bởi~/.openclaw/exec-approvals.json. nodeyêu cầu một Node đã ghép đôi (ứng dụng companion hoặc host Node headless).- Nếu có nhiều Node, đặt
exec.nodehoặctools.exec.nodeđể chọn một Node. exec host=nodelà đường dẫn thực thi shell duy nhất cho Node; wrapper cũnodes.runđã bị xóa.timeoutáp dụng cho foreground, background,yieldMs, Gateway, sandbox và thực thisystem.runtrên Node. Nếu bỏ qua, OpenClaw dùngtools.exec.timeoutSec; đặt rõtimeout: 0sẽ tắt thời gian chờ tiến trình exec cho lần gọi đó.- Trên các host không phải Windows, exec dùng
SHELLkhi được đặt; nếuSHELLlàfish, nó ưu tiênbash(hoặcsh) từPATHđể tránh các script không tương thích với fish, rồi mới fallback vềSHELLnếu không có cái nào. - Trên host Windows, exec ưu tiên tìm PowerShell 7 (
pwsh) (Program Files, ProgramW6432, rồi PATH), sau đó fallback về Windows PowerShell 5.1. - Thực thi host (
gateway/node) từ chốienv.PATHvà các ghi đè loader (LD_*/DYLD_*) để ngăn chiếm quyền binary hoặc chèn mã. - OpenClaw đặt
OPENCLAW_SHELL=exectrong môi trường lệnh được spawn (bao gồm thực thi PTY và sandbox) để các quy tắc shell/profile có thể phát hiện ngữ cảnh công cụ exec. openclaw channels loginbị chặn khỏiexecvì đây là luồng xác thực kênh tương tác; hãy chạy trong terminal trên host Gateway, hoặc dùng công cụ đăng nhập gốc của kênh từ chat khi có.- Quan trọng: sandboxing tắt theo mặc định. Nếu sandboxing tắt,
host=autongầm định phân giải thànhgateway.host=sandboxtường minh vẫn fail closed thay vì âm thầm chạy trên host Gateway. Bật sandboxing hoặc dùnghost=gatewayvới phê duyệt. - Các kiểm tra preflight của script (cho các lỗi cú pháp shell Python/Node phổ biến) chỉ kiểm tra những tệp nằm trong
ranh giới
workdirhiệu lực. Nếu đường dẫn script phân giải ra ngoàiworkdir, preflight sẽ bị bỏ qua cho tệp đó. - Với công việc chạy lâu bắt đầu ngay bây giờ, hãy khởi động nó một lần và dựa vào đánh thức
hoàn tất tự động khi tính năng này được bật và lệnh phát ra output hoặc thất bại.
Dùng
processcho log, trạng thái, input hoặc can thiệp; không mô phỏng lập lịch bằng vòng lặp sleep, vòng lặp timeout hoặc polling lặp lại. - Với công việc nên xảy ra sau hoặc theo lịch, dùng Cron thay vì
các mẫu sleep/delay của
exec.
Cấu hình
tools.exec.notifyOnExit(mặc định: true): khi true, các phiên exec được đưa vào background sẽ xếp hàng một sự kiện hệ thống và yêu cầu Heartbeat khi thoát.tools.exec.approvalRunningNoticeMs(mặc định: 10000): phát một thông báo “đang chạy” duy nhất khi một exec có cổng phê duyệt chạy lâu hơn mức này (0 để tắt).tools.exec.timeoutSec(mặc định: 1800): thời gian chờ exec mặc định theo từng lệnh, tính bằng giây.timeouttheo từng lần gọi sẽ ghi đè;timeout: 0theo từng lần gọi sẽ tắt thời gian chờ tiến trình exec.tools.exec.host(mặc định:auto; phân giải thànhsandboxkhi runtime sandbox đang hoạt động, nếu không thìgateway)tools.exec.security(mặc định:denycho sandbox,fullcho Gateway + Node khi chưa đặt)tools.exec.ask(mặc định:off)- Exec trên host không cần phê duyệt là mặc định cho Gateway + Node. Nếu bạn muốn hành vi phê duyệt/allowlist, hãy siết chặt cả
tools.exec.*và~/.openclaw/exec-approvals.jsoncủa host; xem Phê duyệt Exec. - YOLO đến từ các mặc định chính sách host (
security=full,ask=off), không phải từhost=auto. Nếu muốn buộc định tuyến Gateway hoặc Node, đặttools.exec.hosthoặc dùng/exec host=.... - Trong chế độ
security=fullcộng vớiask=off, exec trên host tuân theo trực tiếp chính sách đã cấu hình; không có lớp tiền lọc heuristic bổ sung cho lệnh bị làm rối hoặc lớp từ chối preflight script. tools.exec.node(mặc định: chưa đặt)tools.exec.strictInlineEval(mặc định: false): khi true, các dạng eval interpreter inline nhưpython -c,node -e,ruby -e,perl -e,php -r,lua -evàosascript -eluôn yêu cầu phê duyệt tường minh.allow-alwaysvẫn có thể lưu các lần gọi interpreter/script lành tính, nhưng các dạng inline-eval vẫn nhắc mỗi lần.tools.exec.pathPrepend: danh sách thư mục cần thêm vào đầuPATHcho các lần chạy exec (chỉ Gateway + sandbox).tools.exec.safeBins: các binary an toàn chỉ dùng stdin có thể chạy mà không cần mục allowlist tường minh. Để biết chi tiết hành vi, xem Safe bins.tools.exec.safeBinTrustedDirs: các thư mục tường minh bổ sung được tin cậy cho kiểm tra đường dẫnsafeBins. Các mụcPATHkhông bao giờ được tự động tin cậy. Mặc định tích hợp là/binvà/usr/bin.tools.exec.safeBinProfiles: chính sách argv tùy chỉnh tùy chọn cho từng safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Xử lý PATH
host=gateway: hợp nhấtPATHcủa login-shell vào môi trường exec. Các ghi đèenv.PATHbị từ chối cho thực thi host. Bản thân daemon vẫn chạy vớiPATHtối thiểu:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: chạysh -lc(login shell) bên trong container, nên/etc/profilecó thể đặt lạiPATH. OpenClaw thêmenv.PATHvào đầu sau khi source profile thông qua một biến env nội bộ (không nội suy shell);tools.exec.pathPrependcũng áp dụng ở đây.host=node: chỉ các ghi đè env không bị chặn mà bạn truyền vào mới được gửi đến Node. Các ghi đèenv.PATHbị từ chối cho thực thi host và bị host Node bỏ qua. Nếu bạn cần thêm mục PATH trên Node, hãy cấu hình môi trường dịch vụ host Node (systemd/launchd) hoặc cài công cụ vào vị trí tiêu chuẩn.
Ghi đè phiên (/exec)
Dùng /exec để đặt mặc định theo phiên cho host, security, ask và node.
Gửi /exec không có đối số để hiển thị các giá trị hiện tại.
Ví dụ:
Mô hình ủy quyền
/exec chỉ được tôn trọng cho người gửi được ủy quyền (allowlist/ghép đôi kênh cộng với commands.useAccessGroups).
Nó chỉ cập nhật trạng thái phiên và không ghi cấu hình. Để tắt cứng exec, từ chối qua chính sách công cụ
(tools.deny: ["exec"] hoặc theo từng agent). Phê duyệt host vẫn áp dụng trừ khi bạn đặt tường minh
security=full và ask=off.
Phê duyệt Exec (ứng dụng companion / host Node)
Các agent trong sandbox có thể yêu cầu phê duyệt theo từng yêu cầu trước khiexec chạy trên host Gateway hoặc Node.
Xem Phê duyệt Exec để biết chính sách, allowlist và luồng UI.
Khi cần phê duyệt, công cụ exec trả về ngay với
status: "approval-pending" và một id phê duyệt. Sau khi được phê duyệt (hoặc bị từ chối / hết thời gian),
Gateway phát các sự kiện hệ thống (Exec finished / Exec denied). Nếu lệnh vẫn
đang chạy sau tools.exec.approvalRunningNoticeMs, một thông báo Exec running duy nhất được phát.
Trên các kênh có thẻ/nút phê duyệt gốc, agent nên dựa vào
UI gốc đó trước và chỉ đưa vào lệnh /approve thủ công khi kết quả công cụ
nói rõ phê duyệt qua chat không khả dụng hoặc phê duyệt thủ công là
đường dẫn duy nhất.
Allowlist + safe bins
Thực thi allowlist thủ công khớp các glob đường dẫn binary đã phân giải và các glob tên lệnh trần. Tên trần chỉ khớp các lệnh được gọi thông qua PATH, nênrg có thể khớp
/opt/homebrew/bin/rg khi lệnh là rg, nhưng không khớp ./rg hoặc /tmp/rg.
Khi security=allowlist, lệnh shell chỉ được tự động cho phép nếu mọi segment pipeline
đều nằm trong allowlist hoặc là safe bin. Chaining (;, &&, ||) và redirection
bị từ chối trong chế độ allowlist trừ khi mọi segment cấp cao nhất thỏa mãn
allowlist (bao gồm safe bins). Redirection vẫn chưa được hỗ trợ.
Niềm tin bền vững allow-always không bỏ qua quy tắc đó: một lệnh chained vẫn yêu cầu mọi
segment cấp cao nhất khớp.
autoAllowSkills là một đường dẫn tiện ích riêng trong phê duyệt exec. Nó không giống với
các mục allowlist đường dẫn thủ công. Để có niềm tin tường minh nghiêm ngặt, hãy giữ autoAllowSkills bị tắt.
Dùng hai bộ điều khiển cho các nhiệm vụ khác nhau:
tools.exec.safeBins: các bộ lọc luồng nhỏ, chỉ dùng stdin.tools.exec.safeBinTrustedDirs: các thư mục bổ sung tường minh được tin cậy cho đường dẫn executable của safe-bin.tools.exec.safeBinProfiles: chính sách argv tường minh cho safe bins tùy chỉnh.- allowlist: niềm tin tường minh cho đường dẫn executable.
safeBins là danh sách cho phép chung, và không thêm các tệp nhị phân trình thông dịch/thời gian chạy (ví dụ python3, node, ruby, bash). Nếu bạn cần chúng, hãy dùng các mục danh sách cho phép tường minh và giữ bật lời nhắc phê duyệt.
openclaw security audit cảnh báo khi các mục safeBins của trình thông dịch/thời gian chạy thiếu hồ sơ tường minh, và openclaw doctor --fix có thể tạo khung cho các mục safeBinProfiles tùy chỉnh còn thiếu.
openclaw security audit và openclaw doctor cũng cảnh báo khi bạn thêm tường minh các bin có hành vi rộng như jq trở lại safeBins.
Nếu bạn thêm trình thông dịch vào danh sách cho phép một cách tường minh, hãy bật tools.exec.strictInlineEval để các dạng đánh giá mã nội tuyến vẫn yêu cầu phê duyệt mới.
Để biết đầy đủ chi tiết chính sách và ví dụ, hãy xem Phê duyệt Exec và Safe bins so với danh sách cho phép.
Ví dụ
Chạy nền trước:apply_patch
apply_patch là một công cụ con của exec dành cho các chỉnh sửa nhiều tệp có cấu trúc.
Công cụ này được bật mặc định cho các mô hình OpenAI và OpenAI Codex. Chỉ dùng cấu hình
khi bạn muốn tắt công cụ hoặc giới hạn công cụ cho các mô hình cụ thể:
- Chỉ có sẵn cho các mô hình OpenAI/OpenAI Codex.
- Chính sách công cụ vẫn áp dụng;
allow: ["write"]ngầm cho phépapply_patch. - Cấu hình nằm dưới
tools.exec.applyPatch. tools.exec.applyPatch.enabledmặc định làtrue; đặt thànhfalseđể tắt công cụ cho các mô hình OpenAI.tools.exec.applyPatch.workspaceOnlymặc định làtrue(giới hạn trong workspace). Chỉ đặt thànhfalsenếu bạn cố ý muốnapply_patchghi/xóa bên ngoài thư mục workspace.
Liên quan
- Phê duyệt Exec — cổng phê duyệt cho lệnh shell
- Sandboxing — chạy lệnh trong môi trường sandbox
- Tiến trình nền — exec chạy dài và công cụ process
- Bảo mật — chính sách công cụ và quyền truy cập nâng cao