第十三節 工具權限與簽核
AVL Code 通過工具權限政策對每一次工具呼叫做精細化管控。
13.1 三態權限
每個工具都可以設置為:
- 啟用:直接放行。
- 詢問:每次呼叫前彈窗簽核。
- 停用:直接拒絕。
可按工作模式獨立配置;常見做法:execute 模式啟用寫工具,plan 模式停用所有寫工具。三態對子代理同樣生效(停用的工具在子代理側一並拿不到),外掛 / 外部服務解除安裝後殘留的工具配置會被自動清理。
13.2 呼叫前簽核
當一個被標記為「詢問」的工具即將執行時:
- 桌面端彈出簽核彈窗,展示工具名、入參與影響範圍。
- 你可以選擇:
- 允許(僅本次)
- 始終允許:把"工具+參數模式"加入白名單。
- 拒絕
- 彈窗帶 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 檢視與撤銷;「僅本次允許」與「拒絕」只作用於當次呼叫,不留存記錄。
