AI 程式設計教學中文版
官方教學中文版安全與企業

Policy engine

Gemini CLI policy engine 的用途:細粒度控制工具執行、替代簡單 allowed tools、適合團隊和企業治理。

📖 本篇術語速查表
英文 / 縮寫中文一句話解釋
Policy engine策略引擎用規則統一管控 Agent 行為。
規則rule允許 / 攔截 / 確認的策略。
優先順序precedence多條策略的生效順序。

不想讀完?把下面這段提示詞丟給 AI 幫你跑完——幫你用 Gemini CLI 的策略引擎統一管控允許/攔截哪些操作。

你是 Gemini CLI 策略引擎顧問。

【角色】
Gemini CLI 策略引擎顧問,按最小夠用、安全合規優先的原則給可落地方案,每條結論都落到能照做的步驟或示例,不停留在空泛建議。

【輸入】
- 想允許 / 攔截哪些操作:___
- 高危操作有哪些:___
- 個人還是團隊統一:___
- 風險偏好:___
- 經驗水平:___

【工作流程】
1. 把需求轉成策略規則
2. 處理規則優先順序
3. 高危操作預設攔截或確認
4. 給測試規則的方式
5. 給落地

【輸出規範】
▌一、策略規則
▌二、優先順序處理
▌三、高危預設攔截
▌四、測試 + 落地

【硬約束】
- 高危操作預設攔截或確認
- 規則先測試再生效
- 團隊策略變更可審計
- 不要替我臆測情況或編造不存在的設定,資訊不全先問清
- 不確定的設定或介面一律以官方文件為準,禁止照搬過時寫法
- 給的每條結論都要落到具體可照做的步驟或示例,不停留在「建議」「考慮一下」這類沒法直接執行的空泛表述

Policy engine 用來更細粒度地控制工具能否執行、在什麼條件下執行。官方 CLI cheatsheet 裡也提示 --allowed-tools 已 deprecated,建議使用 policy engine。

許可權邊界要寫進 policy,不要只寫進 prompt。Prompt 是建議,policy 是執行前攔截。

它的核心不是“開或關某個工具”,而是按規則決定工具呼叫應該 allowdeny 還是 ask_user。規則寫在 TOML 檔案中,可以匹配工具名、引數、互動模式和優先順序。

Policy 的價值在於執行前攔截。尤其是 shell、MCP 寫工具、subagent 和自動化任務,越不能靠“模型會聽話”來控制。規則要能被負例測試觸發。

適合控制

  • 哪些工具可用。
  • 哪些命令需要確認。
  • 哪些目錄禁止寫。
  • 哪些 MCP server 可以用。
  • 團隊預設安全策略。

基本規則

最常見的規則結構包含四個欄位:

  • toolName:匹配工具名,例如 run_shell_command
  • commandPrefixargsPattern:匹配命令或引數。
  • decisionallowdenyask_user
  • priority:數字越大優先順序越高。

例如高風險 shell 字首應當直接 deny;常見但有副作用的 gitnpmpnpmdocker 命令可以先設為 ask_user

決策含義

  • allow:工具直接執行,不再詢問。
  • ask_user:讓使用者確認;headless 場景裡通常等同於 deny。
  • deny:阻斷工具呼叫。對於全域 deny,工具還會從模型可見工具列表中排除,這比只靠 prompt 要可靠。

優先順序與層級

Policy engine 有 Default、Extension、Workspace、User、Admin 等層級。官方文件特別說明:Workspace tier 目前不可用,專案級 .gemini/policies 不會生效,應使用 User 或 Admin policies。

團隊環境裡,Admin policy 應該壓過個人設定;個人本機可以用 ~/.gemini/policies/*.toml 做預設保護。

使用建議

個人專案可以先用預設確認;團隊專案應該把 policy 寫清楚,避免每個人用不同的許可權模型。

不要只靠“請不要刪除檔案”這種 prompt 管許可權。真正的許可權邊界應該進入 policy:危險 shell 字首、未知 MCP 寫操作、生產目錄寫入、部署和刪除命令都應明確規則。

風險建議 decision
git statusrg、只讀診斷allow 或預設確認
npm installdocker、遷移命令ask_user
rm -rf、生產目錄寫入deny
未知 MCP 寫操作ask_userdeny
headless 中需要人工確認的動作deny

驗收方式

寫完 policy 後要主動觸發測試:讓 Gemini CLI 嘗試一個應該被攔截的命令,確認它被 deny 或 ask_user;再測試一個應該允許的只讀命令,確認沒有誤傷。否則 policy 只是“看起來安全”。

還要做反向測試:確認高優先順序 deny 不會被低優先順序 allow 覆蓋,確認 headless 中 ask_user 不會變成靜默允許。團隊環境裡,每次改 policy 都應該留下測試用例和預期結果。

企業環境還應把 policy 版本化,避免各機器漂移。

如果一個動作在互動模式下是 ask_user,在無互動 headless 場景裡要按不可確認處理。自動化任務不應該依賴人工彈出視窗;需要人工確認的動作要在 CI 之前拆成審批步驟。

最小上線組合

個人專案可以從三條規則開始:允許只讀診斷,詢問安裝依賴和 Git 寫操作,拒絕刪除、部署和生產目錄寫入。團隊專案再補 MCP allowlist、subagent 限制和 Admin policy。

Policy 不需要一次寫成“大而全”。先覆蓋最危險的誤操作,再用記錄和失敗案例補規則,反而更容易維護。

接下來去哪

官方來源

本頁目錄