Tools

執行核准

Exec 核准是輔助應用程式/節點主機的防護機制,用於允許 沙箱化代理程式在實際主機(gatewaynode)上執行命令。只有當政策、允許清單與(選用的)使用者核准全都同意時,命令 才會執行。 核准機制疊加在工具政策與提高權限閘控之上(提高權限 full 會略過這些機制)。

如需以模式為主的 denyallowlistaskautofull、 Codex Guardian 對應,以及 ACPX 控制框架權限概覽,請參閱 權限模式

適用範圍

Exec 核准會在執行主機上於本機強制執行:

  • 閘道主機 -> 閘道機器上的 openclaw 程序。
  • 節點主機 -> 節點執行器(macOS 輔助應用程式或無介面節點主機)。

信任模型

  • 經過閘道驗證的呼叫者,是該閘道受信任的操作者。
  • 已配對節點會將該受信任操作者的能力延伸至節點主機。
  • 核准可降低意外執行的風險,但不是個別使用者的驗證邊界或檔案系統唯讀政策。
  • 命令一經核准,即可依照所選主機或沙箱檔案系統權限修改檔案。
  • 已核准的節點主機執行會繫結標準執行環境:cwd、確切 argv、存在時的 env 繫結,以及適用時鎖定的可執行檔路徑。
  • 對於 Shell 指令碼及直接以直譯器/執行階段叫用檔案的情況,OpenClaw 也會嘗試繫結一個明確的本機檔案運算元。如果該檔案在核准後、執行前發生變更,系統會拒絕執行,而非執行已偏移的內容。
  • 檔案繫結採盡力而為,並非涵蓋所有直譯器/執行階段載入路徑的完整模型。如果無法識別恰好一個明確的本機檔案,OpenClaw 會拒絕建立由核准支援的執行,而不會假裝已完整涵蓋。

macOS 職責劃分

  • 節點主機服務會透過本機 IPC,將 system.run 轉送至 macOS 應用程式
  • macOS 應用程式會強制執行核准,並在 UI 環境中執行命令。

檢查有效政策

命令 顯示內容
openclaw approvals get / --gateway / --node <id|name|ip> 要求的政策、主機政策來源,以及有效結果。
openclaw exec-policy show 本機的合併檢視。
openclaw exec-policy set / preset 透過單一步驟,將本機要求的政策與本機主機核准檔案同步。

完整的命令列介面參考(旗標、JSON 輸出、允許清單新增/移除):核准命令列介面

當本機範圍要求 host=node 時,exec-policy show 會在執行階段將該 範圍回報為由節點管理,而不會將本機核准 檔案視為事實來源。

如果輔助應用程式 UI 無法使用,任何通常會 提示的要求,都會由詢問備援處理(預設:deny)。

設定與儲存空間

核准資訊存放於執行主機上的本機 JSON 檔案。設定 OPENCLAW_STATE_DIR 時,檔案會跟隨該狀態目錄; 否則會使用預設的 OpenClaw 狀態目錄:

text
$OPENCLAW_STATE_DIR/exec-approvals.json# 否則~/.openclaw/exec-approvals.json

預設核准 Socket 會使用相同的根目錄: $OPENCLAW_STATE_DIR/exec-approvals.sock;若未設定變數,則為 ~/.openclaw/exec-approvals.sock

各狀態目錄是彼此獨立的信任範圍。當 OPENCLAW_STATE_DIR 指向其他位置時,OpenClaw 絕不會匯入或封存 ~/.openclaw/exec-approvals.json;請為自訂狀態目錄 另行設定核准。Doctor 也只會在舊版 plugin-binding-approvals.json 屬於作用中狀態目錄時匯入該檔案。

結構描述範例:

json
{  "version": 1,  "socket": {    "path": "~/.openclaw/exec-approvals.sock",    "token": "base64url-token"  },  "defaults": {    "security": "deny",    "ask": "on-miss",    "askFallback": "deny",    "autoAllowSkills": false  },  "agents": {    "main": {      "security": "allowlist",      "ask": "on-miss",      "askFallback": "deny",      "autoAllowSkills": true,      "allowlist": [        {          "id": "B0C8C0B3-2C2D-4F8A-9A3C-5A4B3C2D1E0F",          "pattern": "~/Projects/**/bin/rg",          "argPattern": "sha256:argv:...",          "source": "allow-always",          "lastUsedAt": 1737150000000,          "lastResolvedPath": "/Users/user/Projects/.../bin/rg"        },        {          "pattern": "~/Projects/**/bin/git"        }      ]    }  }}

政策控制項

tools.exec.mode

tools.exec.mode 是主機 Exec 的建議正規化政策介面:

行為
deny 封鎖主機 Exec。
allowlist 僅執行允許清單中的命令,不進行詢問。
ask 使用允許清單政策,並在未命中時詢問。
auto 使用允許清單政策,直接執行確定性比對,並先將核准未命中項目交由 OpenClaw 的原生自動審查器處理,再備援至人工核准途徑。
full 執行主機 Exec,不顯示核准提示。

Doctor 會將已淘汰的持續保存 tools.exec.security / tools.exec.ask 配對遷移至 tools.exec.mode

exec.security

security"deny" | "allowlist" | "full"
  • deny - 封鎖所有主機 Exec 要求。
  • allowlist - 僅允許允許清單中的命令。
  • full - 全部允許(等同於提高權限)。

閘道/節點主機的預設值為 fullsandbox 主機的預設值則為 deny

exec.ask

ask"off" | "on-miss" | "always"

為主機 Exec 設定的詢問政策。控制來自 tools.exec.ask 與主機核准預設值的基準核准 提示行為。 預設值為 off。每次呼叫的 ask 工具參數(請參閱 Exec 工具)只能加強該基準;當有效的主機詢問政策為 off 時, 來自頻道的模型呼叫會忽略此參數。

  • off - 永不提示。
  • on-miss - 僅在允許清單未比對成功時提示。
  • always - 每個命令都提示。當有效詢問模式為 always 時,allow-always 永久信任不會抑制提示。

askFallback

askFallback"deny" | "allowlist" | "full"

需要提示但無法連線至任何 UI(或提示逾時)時的處理方式。省略時預設為 deny

  • deny - 封鎖。
  • allowlist - 僅在符合允許清單時允許。
  • full - 允許。

tools.exec.strictInlineEval

strictInlineEvalboolean

true 時,即使直譯器二進位檔本身位於允許清單中,也會將行內程式碼求值形式視為僅能透過核准執行。這可為無法明確對應至單一穩定檔案運算元的 直譯器載入器提供縱深防禦。

嚴格模式會攔截的範例:python -cnode -e/--eval/-pruby -eperl -e/-Ephp -rlua -eosascript -e(亦包括 awksedmakefind -execxargs 的行內形式)。

在嚴格模式下,這些命令需要審查器或明確核准。使用 tools.exec.mode: "auto" 時,如果命令具備可強制執行的計畫,審查器可授予一次低風險執行;否則 OpenClaw 會詢問人工操作者。 到達審查器備援的 Codex app-server 命令核准會詢問 人工操作者,因為其核准要求不會公開可強制執行且已解析的 可執行檔。 allow-always 不會為行內求值命令永久保存新的允許清單項目。

tools.exec.commandHighlighting

commandHighlightingbooleandefault: false

僅影響呈現:啟用後,OpenClaw 可附加由剖析器衍生的 命令範圍,讓 Web 核准提示能醒目標示命令詞元。這 不會變更 securityask、允許清單比對、嚴格行內求值 行為、核准轉送或命令執行。

可在 tools.exec.commandHighlighting 下進行全域設定,或在 agents.entries.*.tools.exec.commandHighlighting 下為各代理程式設定。

YOLO 模式(無需核准)

若要執行主機 Exec 而不顯示核准提示,必須同時開放兩個政策層: OpenClaw 設定中要求的 Exec 政策(tools.exec.*以及 執行主機核准檔案中的主機本機核准政策。

省略 askFallback 時,預設為 deny。如果在沒有 UI 的情況下,核准提示應備援為允許,請明確將主機 askFallback 設為 full

層級 YOLO 設定
tools.exec.mode gateway/node 上的 full
主機 askFallback full

公開自身非互動式權限模式、由命令列介面支援的供應商 可以遵循此政策。當 OpenClaw 的有效 exec 政策為 YOLO 時,Claude 命令列介面會加入 --permission-mode bypassPermissions。對於由 OpenClaw 管理的 Claude 即時工作階段,OpenClaw 的有效 exec 政策優先於 Claude 的原生權限模式: YOLO 會將即時啟動正規化為 --permission-mode bypassPermissions,而 限制性的有效 exec 政策會將即時啟動正規化為 --permission-mode default,即使原始 Claude 後端引數指定其他 模式亦然。

若需要更保守的設定,請將 OpenClaw exec 政策收緊回 allowlist / on-missdeny

永久性的閘道主機「永不提示」設定

  • 設定要求的設定政策

    bash
    openclaw config set tools.exec.host gatewayopenclaw config set tools.exec.mode fullopenclaw gateway restart
  • 配合主機核准檔案

    bash
    openclaw approvals set --stdin <<'EOF'{  version: 1,  defaults: {    security: "full",    ask: "off",    askFallback: "full"  }}EOF
  • 本機捷徑

    bash
    openclaw exec-policy preset yolo

    同時更新本機 tools.exec.host/security/ask 與本機核准 檔案的預設值(包括 askFallback: "full")。此功能刻意 僅限本機。若要從遠端變更閘道主機或節點主機的核准,請使用 openclaw approvals set --gatewayopenclaw approvals set --node <id|name|ip>

    其他內建預設組合:cautioushost=gatewaysecurity=allowlistask=on-missaskFallback=deny)與 deny-allhost=gatewaysecurity=denyask=offaskFallback=deny)。套用方式相同: openclaw exec-policy preset cautious

    若要設定個別欄位,而非完整的預設組合,請使用 openclaw exec-policy set --host <auto|sandbox|gateway|node> --security <deny|allowlist|full> --ask <off|on-miss|always> --ask-fallback <deny|allowlist|full>,並搭配這些旗標的任意子集。

    節點主機

    改為在節點上套用相同的核准檔案:

    bash
    openclaw approvals set --node <id|name|ip> --stdin <<'EOF'{  version: 1,  defaults: {    security: "full",    ask: "off",    askFallback: "full"  }}EOF

    僅限工作階段的捷徑

    • /exec security=full ask=off 只會變更目前的工作階段。
    • /elevated full 是緊急使用的捷徑,只有在要求的政策與主機核准檔案皆解析為 security: "full"ask: "off" 時,才會略過 exec 核准。較嚴格的主機檔案(例如 ask: "always")仍會提示。

    若主機核准檔案維持比設定更嚴格的狀態,仍以較嚴格的主機 政策為準。

    允許清單(每個代理程式)

    允許清單是每個代理程式各自獨立的。若有多個代理程式,請在 macOS 應用程式中切換目前要編輯的代理程式。模式採用 glob 比對。

    模式可以是解析後二進位檔路徑的 glob,也可以是純命令名稱的 glob。 純名稱只會比對透過 PATH 叫用的命令,因此當命令為 rg 時,rg 可以比對 /opt/homebrew/bin/rg,但不能比對 ./rg/tmp/rg。請使用路徑 glob 來信任單一特定位置的二進位檔。

    舊版 agents.default 項目會在載入時移轉至 agents.mainecho ok && pwd 等 Shell 鏈結仍要求每個頂層區段 都符合允許清單規則。

    範例:

    • rg
    • ~/Projects/**/bin/peekaboo
    • ~/.local/bin/*
    • /opt/homebrew/bin/rg

    使用 argPattern 限制引數

    當允許清單項目應比對某個二進位檔及 特定引數形式時,請加入 argPattern。OpenClaw 在每個主機上使用 ECMAScript(JavaScript)規則 運算式語意,並針對剖析後的命令引數評估運算式,但不包括可執行檔權杖(argv[0])。 對於手動撰寫的項目,引數會以單一空格連接,因此 需要完全比對時,請錨定模式。

    json
    {  "version": 1,  "agents": {    "main": {      "allowlist": [        {          "pattern": "python3",          "argPattern": "^safe\\.py$"        }      ]    }  }}

    該項目允許 python3 safe.pypython3 other.py 不符合允許 清單。若同一個二進位檔也有僅限路徑的項目,不符合的 引數仍可退回使用該僅限路徑的項目。若目標是將二進位檔限制為宣告的引數,請省略僅限路徑的 項目。

    由核准流程儲存的項目會使用內部分隔符號格式,以精確 比對 argv。請優先使用使用者介面或核准流程重新產生這些項目, 而不要手動編輯編碼後的值。若 OpenClaw 無法剖析某個命令區段的 argv, 具有 argPattern 的項目不會相符。

    產生的 allow-always 項目會繫結至 argv。新產生的項目包含 argPattern;較舊的產生式僅限路徑項目會被忽略,且需要重新 核准。若是手動的僅限路徑規則,請同時省略 sourceargPattern

    每個允許清單項目支援:

    欄位 意義
    pattern 解析後二進位檔路徑 glob 或純命令名稱 glob
    argPattern ECMAScript argv 規則運算式或產生的精確 argv 雜湊;省略時僅比對路徑
    id 穩定的不透明 ID;不存在時產生為 UUID
    source 產生項目的來源,例如 allow-always;手動項目請省略
    commandText 舊版純文字輸入;載入期間捨棄
    lastUsedAt 上次使用時間戳記
    lastUsedCommand 上次相符的命令;產生的雜湊 argv 項目會省略
    lastResolvedPath 上次解析出的二進位檔路徑

    自動允許 Skills 命令列介面

    啟用 自動允許 Skills 命令列介面autoAllowSkills)後,已知 Skills 所參照的可執行檔在節點上(macOS 節點或無介面節點主機) 會視為已列入允許清單。此功能透過閘道 RPC 使用 skills.bins 擷取 Skill 二進位檔清單。若需要嚴格的手動 允許清單,請停用此功能。

    安全二進位檔與核准轉送

    如需瞭解安全二進位檔(僅限 stdin 的快速路徑)、直譯器繫結詳細資訊,以及 如何將核准提示轉送至 Slack/Discord/Telegram(或作為 原生核准用戶端執行),請參閱 Exec 核准-進階

    Control UI 編輯

    使用 Control UI -> Nodes -> Exec approvals 卡片編輯預設值、 每個代理程式的覆寫值,以及允許清單。選擇範圍(Defaults 或某個代理程式)、 調整政策、新增或移除允許清單模式,然後按 Save。使用者介面 會顯示每個模式的上次使用中繼資料,方便維持清單整潔。

    目標選擇器可選擇 Gateway(本機核准)或 Node。 節點必須公告 system.execApprovals.get/set(macOS 應用程式或無介面 節點主機)。若節點尚未公告 exec 核准,請直接編輯其 本機核准檔案。

    部分節點主機(包括 Windows 夥伴應用程式)使用不同的核准 政策格式。Control UI 會以唯讀方式顯示這些主機原生政策。請使用 夥伴應用程式或搭配原生政策形式的 openclaw approvals set --node <id|name|ip> 進行編輯;請參閱核准命令列介面

    命令列介面:openclaw approvals 支援閘道或節點編輯-請參閱 核准命令列介面

    核准流程

    需要提示時,閘道會向操作員用戶端廣播 exec.approval.requested。Control UI 與 macOS 應用程式會透過 exec.approval.resolve 解決該提示,接著閘道會將 已核准的請求轉送至節點主機。

    對於 host=node,核准請求包含標準化的 systemRunPlan 承載資料。轉送已核准的 system.run 請求時,閘道會將該計畫用作具權威性的命令/cwd/工作階段 內容:

    • 節點 exec 路徑會預先準備一份標準計畫。
    • 核准記錄會儲存該計畫及其繫結中繼資料。
    • 核准後,最終轉送的 system.run 呼叫會重複使用已儲存的計畫,而不信任呼叫端後續的編輯。
    • 若呼叫端在核准請求建立後變更 commandrawCommandcwdagentIdsessionKey,閘道會因核准不符而拒絕轉送的執行。

    系統事件與拒絕

    節點回報完成後,exec 生命週期會將 Exec finished 系統訊息張貼至代理程式的 工作階段。OpenClaw 也可以在核准授予後, 經過 tools.exec.approvalRunningNoticeMs(預設為 100000 會停用 此功能)時發出進行中通知。遭拒絕的 exec 核准對主機命令而言是終止狀態:命令 不會執行。

    • 對於具有來源工作階段的主要代理程式非同步核准,OpenClaw 會將拒絕作為內部後續訊息張貼回該工作階段,讓代理程式 可以停止等待非同步命令,並避免缺少結果的修復作業。
    • 若沒有工作階段或無法恢復工作階段,OpenClaw 仍可 向操作員或直接聊天路由回報簡短的拒絕訊息。
    • 子代理程式與排程工作階段的拒絕不會張貼回該 工作階段。

    閘道主機 exec 核准會發出相同的完成生命週期事件。 受核准管制的 exec 會重複使用核准 ID,以將待處理 請求與其完成/拒絕訊息建立關聯(Exec finished (gateway id=...) / Exec denied (gateway id=...))。

    影響

    • full 功能強大;請盡可能優先使用允許清單。
    • ask 讓你持續掌握狀況,同時仍可快速核准。
    • 每個代理程式各自獨立的允許清單,可防止某個代理程式的核准洩漏至其他代理程式。
    • 核准只適用於來自已授權傳送者的主機 exec 請求。未授權的傳送者無法發出 /exec
    • /exec security=full 是供已授權操作員使用的工作階段層級便利功能,依設計會略過核准。若要硬性封鎖主機 exec,請將核准安全性設為 deny,或透過工具政策拒絕 exec 工具。

    相關內容

    Was this useful?
    On this page

    On this page