第十三節 工具權限與簽核

AVL Code 通過工具權限政策對每一次工具呼叫做精細化管控。

13.1 三態權限

每個工具都可以設置為:

  • 啟用:直接放行。
  • 詢問:每次呼叫前彈窗簽核。
  • 停用:直接拒絕。

可按工作模式獨立配置;常見做法:execute 模式啟用寫工具,plan 模式停用所有寫工具。三態對子代理同樣生效(停用的工具在子代理側一並拿不到),外掛 / 外部服務解除安裝後殘留的工具配置會被自動清理。

13.2 呼叫前簽核

當一個被標記為「詢問」的工具即將執行時:

  1. 桌面端彈出簽核彈窗,展示工具名、入參與影響範圍。
  2. 你可以選擇:
    • 允許(僅本次)
    • 始終允許:把"工具+參數模式"加入白名單。
    • 拒絕
  3. 彈窗帶 30 秒倒數計時,超時未回應按「拒絕」處理。

13.2.1 無限制模式(進階)

輸入區模式滑塊右側有一個盾牌開關,專給清楚自己在做什麼的進階使用者用。啟用前先過一道風險確認彈窗(含 5 秒冷靜期 — 確認按鈕先停用並倒數計時「請仔細閱讀風險提示 5s…」,歸零才能點,期間按 Enter 也不觸發),啟用後紅色危險態常駐提醒,關閉即時生效。

作用域:按工作階段獨立、純記憶體、重新啟動即清,不會悄悄留着。

啟用後解除三類日常摩擦

摩擦 啟用後
工具批准 跳過批准彈窗(不再逐個 ask / 拒絕 / 延後),工具直接執行
命令白名單 fs.exec 不再受命令白名單限制,任意命令可執行
網路存取 web.fetch / web.bing 不再過濾內網 / 環回 / 鏈路本機地址

始終保留的硬底線(不受開關影響):

  • samples/ 沙箱隔離
  • rm -rf 等破壞性命令的參數校驗
  • 危險注入黑名單(fork 炸彈 / 寫 /etc / curl|sh / eval
  • http(s) 協議白名單

斜槓命令快捷開關 — 也可在輸入框直接敲:

  • /unrestricted(或中文別名 /無限)— 切換當前工作階段的無限制模式。啟用時同樣過 5 秒冷靜期的風險確認彈窗,關閉即時生效。中文別名在命令選單與 /help 裡隱藏(避免重復行),但鍵入回車仍可執行。

無護欄區間的訊息標記:無限制模式期間產生的連續訊息會以淺色邊框整體圈出,起止一目了然,事後回看能一眼分辨哪些內容是在無護欄狀態下生成的;關閉開關後邊框當場收口,模式未結束時不會提前打「結束」界標。子代理可按需遞歸繼承該模式,繼承產生的訊息同樣帶標記。

13.3 白名單匹配

「始終允許」的匹配粒度可在 設置 → Hooks → 自動批准 中調整:

  • 僅本次(最嚴)
  • 同工具同參數
  • 同工具任何參數
  • 整個工作區放行(最松)

13.4 多端簽核

同一條簽核請求會同時出現在桌面彈窗與已綁定的遠端通道(如微信);首個應答生效,其餘端的後續回覆會被提示已應答。另有一條容易混淆的規則:拒絕 > 掛起 > 詢問 > 允許 的優先級排序屬於 Hook 層 — 同一次評估中多個 Hook 傳回的權限決策按它合併,與多端應答無關。

13.5 遠端簽核

如果你已綁定微信通道,所有 詢問 類簽核都會同步推播到對應聊天,你可以在微信裡用一行命令完成簽核:

/approve <簽核號>      # 允許本次
/always  <簽核號>      # 始終允許
/deny    <簽核號>      # 拒絕

桌面側彈窗會同步消失,整條任務自動續跑。

13.6 留痕

簽核決策不落獨立稽核儲存:僅「始終允許」寫入工作區級授權檔案 hook-approvals.yaml(記錄授權指紋與決策時間),可在 設置 → Hooks 檢視與撤銷;「僅本次允許」與「拒絕」只作用於當次呼叫,不留存記錄。