前言¶
在 DeepSeek Harness(dsh)中,智能體執行工具前通常會遇到審批問題:如果審批粒度太粗,低風險操作會反覆打擾人類;如果審批太寬鬆,又可能讓高風險命令直接執行。dsh-codex-approval 是一個仿照 OpenAI Codex CLI 審批模型的 dsh 插件,目標是在 dsh 的審批應答點上加入一條更細的決策鏈:先看顯式規則,再交給 AI 做風險判斷,最後由人類兜底。
下面介紹這個插件的定位、核心能力、安裝方式、配置項和使用注意事項。
這是什麼¶
dsh-codex-approval 是一個面向 DeepSeek Harness(dsh)的 AI 自動審批插件,由 040822 維護,許可證爲 MIT。
它的核心目標,是在 dsh 的 approval/request 應答者(answerer)seam 上實現自動審批決策鏈:
- 規則層:按顯式規則處理可預期的命令或原因。
- AI 審判層:對規則未命中的請求做風險評估。
- 人類兜底層:對仍無法自動決定的請求交還人類。
package.json 中版本爲 0.2.2,engines 要求 node >=22.19,依賴 @deepseek-ai/schemastery ^3.18.1。
核心功能¶
規則層¶
插件支持規則層自動審批,匹配對象可以是:
ToolName(args preview):例如Bash(git status*)。reason:<文本>:例如reason:*credential*。
每條規則可以指定動作:
allow:自動放行。ask:交人類處理。deny:直接拒絕。
規則優先級爲:
deny > ask > allow
也就是說,只要存在顯式 deny 規則,AI 層不能覆蓋該拒絕結果。
AI 審判層¶
當規則未命中時,插件可以調用 AI 對審批請求做判斷。AI 層會輸出:
risk:low、medium、high。authorization:allow、ask、deny。
最終結果會按 riskTolerance 映射爲 allow、ask 或 deny。AI 輸出只映射爲這三種結果之一,不會直接執行任意指令。
默認情況下,AI 使用:
- provider:
opencode-go - model:
deepseek-v4-flash
進入 AI prompt 前,命令文本會被截斷,默認 maxPromptChars 爲 2000。
人類兜底層¶
默認人類兜底行爲是 ask,也就是彈出 GUI 詢問。
如果 AI 調用失敗、超時或輸出無法識別,插件可以按 failOpen 配置交還人類。默認 failOpen 爲 ask。
審批模式¶
插件提供三種審批模式:
manual:完全旁路自動決策,審批交回人類。ai:按規則、AI、人類兜底的順序處理。ai-auto:規則與 AI 自動處理,ask不彈窗,按mode3OnAsk處理。
在 ai-auto 模式下,mode3OnAsk 默認爲 deny,即 AI 無法自動放行時不會彈窗,而是拒絕。如果把 mode3OnAsk 設爲 allow,AI 無法決定時也會放行高風險操作,需要慎用。
審計日誌¶
每次決策都會寫入 JSONL 審計日誌,默認路徑爲:
~/.dsh/logs/approval.jsonl
日誌中會記錄工具名、命令預覽、reason、判定來源、模式、風險、AI 理由、耗時等信息。
內置 npm publish 規則¶
插件內置規則:
Bash(npm publish*) → ask
這意味着 agent 執行 npm publish 時,默認需要詢問人類,AI 無權自動放行。
命令文案語言¶
插件命令文案語言支持:
autozhen
auto 會跟隨 dsh 設置的語言偏好。
安裝與啓用¶
先確認 Node 環境滿足 node >=22.19。然後執行:
dsh plugin --profile web add dsh-codex-approval
安裝後重啓 dsh web 生效。
插件只在目標 profile 註冊,推薦使用 web profile。qqbot / headless 等 profile 不受影響。
配置示例¶
插件配置可以放在:
~/.dsh/profiles/web/cordis.patch.yml
在文件中添加 id: dsh-codex-approval 的 config,例如:
- id: dsh-codex-approval
config:
mode: ai
mode3OnAsk: deny
locale: auto
rules:
- match: 'Bash(git status*)'
action: allow
- match: 'Bash(rm -rf /*)'
action: deny
- match: 'reason:*credential*'
action: ask
ai:
provider: opencode-go
model: deepseek-v4-flash
riskTolerance: medium
maxPromptChars: 2000
timeoutMs: 15000
maxTokens: 512
failOpen: ask
fallback: ask
logFile: ~/.dsh/logs/approval.jsonl
可配置項包括:
mode:審批模式。mode3OnAsk:ai-auto模式下ask的處理方式。locale:命令文案語言。rules:顯式規則。ai:AI provider、model、riskTolerance、maxPromptChars、timeoutMs、maxTokens、failOpen。fallback:無規則命中且 AI 關閉時的兜底動作。logFile:審計日誌路徑。
典型用法¶
運行時切換審批模式¶
可以使用斜槓命令切換當前會話的審批模式:
/approval-mode
查看當前模式。
/approval-mode 3
切換爲 ai-auto。
/approval-mode default
清除會話覆蓋,回落到配置默認值。
會話覆蓋會保存到:
~/.dsh/settings.yaml
保存位置是 dsh-codex-approval 命名空間。如果 settings 服務不可用,會降級爲純內存保存,重啓後會丟失。
配置規則¶
示例規則:
rules:
- match: 'Bash(git status*)'
action: allow
- match: 'Bash(rm -rf /*)'
action: deny
- match: 'reason:*credential*'
action: ask
含義如下:
Bash(git status*):只讀狀態檢查,自動放行。Bash(rm -rf /*):高風險刪除命令,直接拒絕。reason:*credential*:涉及憑據、密鑰等敏感原因,交人類詢問。
不配置時的默認行爲¶
如果不做配置,插件會使用內置默認:
- 只讀命令自動放行。
- 破壞性命令直接拒絕。
- 敏感詞場景詢問人類。
開發與測試¶
開發或測試插件時,可以運行:
node --test
適用場景與注意¶
這個插件適合以下場景:
- 使用 dsh web profile,希望減少低風險審批打擾。
- 希望按命令或審批原因配置顯式 allow/ask/deny 規則。
- 希望讓 AI 參與風險評估,但保留人類兜底。
- 需要 JSONL 審計日誌來追溯每次審批決策。
使用注意:
- 插件參與 dsh 的審批決策,安裝前應先檢查源碼、許可證和依賴。
- 插件以當前 dsh 進程權限運行,不應在不可信環境中隨意啓用。
deny規則永遠最先求值,AI 無權覆蓋顯式拒絕。ai-auto模式如果將mode3OnAsk設爲allow,AI 無法決定時也會放行高風險操作,慎用。danger-full-access模式下,沙箱不拒絕任何操作,審批請求不會發生,插件自然空閒。- 單次 AI 審批成本約 0.3~0.7 分錢(官方價估算),僅在規則未命中、需要調用 AI 時產生。
相關鏈接¶
- GitHub:https://github.com/040822/dsh-codex-approval
- 插件目錄頁:https://www.skillhub.cn/plugins/040822/dsh-codex-approval