dsh-policy-linter:在規則進上下文之前做策略體檢

前言

DeepSeek Harness(DSH)會把全局 AGENTS.md、工作區 AGENTS.md、技能(SKILL.md)和插件自帶提示一起送進模型上下文。單看每一份文件往往都合理,疊在一起卻可能出現互相矛盾的要求:一邊寫「先問用戶再動手」,一邊寫「直接執行」;一邊要求「回覆中文」,另一邊要求「回覆英文」。模型只能擇一執行,同一件事每次表現可能不一致,事後也很難對照是哪條規則在打架。

dsh-policy-linter(策略體檢)是社區插件,由 Yyhy110421 維護,歸類爲工作流。它在規則進入模型之前做只讀掃描,把衝突連同文件、行號、原文和修改建議列出來,不改動任何策略文件。

這是什麼

策略體檢是給 DSH 用的只讀規則檢查插件:掃描 AGENTS.md、SKILL.md 以及插件技能目錄中的 Markdown 規則,按嚴重程度分級報告問題。插件不聯網、不執行掃描到的命令,也不自動修改策略內容;最終是否改規則由人決定。

核心功能

工具 policy_lint

對話中可讓模型調用工具 policy_lint,對指定範圍掃描,按 error / warn / info 返回結果。默認示例如下:

{
  "scope": "all",
  "minSeverity": "warn",
  "format": "text"
}

參數含義(摘自 README):

參數 類型 說明
scope all / global / workspace 默認 all:全局 + 當前工作區
path string 只掃該文件或目錄;指定後 scope 無效
minSeverity info / warn / error 最低嚴重級別,默認 info
includeSkills boolean 是否掃技能目錄與插件 skills/,默認 true
format text / json 文本或結構化輸出
maxFindings number 最多返回條數,1–200,默認 100

四類檢查

  1. 規則衝突:同一主題出現相反要求(先確認 vs 直接執行、提交 vs 不提交、中文 vs 英文、並行 vs 串行、完全權限 vs 只讀等)。
  2. 跨文件重複:同一句規則散落在多個文件,改一處易漏另一處。
  3. 模糊限定:含「儘量」「適當」「必要時」「as needed」等表述,模型只能猜測。
  4. 危險命令:如 rm -rf /、git push --force、DROP DATABASE、Invoke-Expression 等,避免策略把危險操作寫成默認動作。

爲減少誤報:帶條件的前綴(如果 / 當 / if / when)視爲局部例外,不參與衝突判斷;不同技能文件不會同時加載,因此技能之間不做衝突判定。同文件內部、全局與工作區之間、以及全局/工作區對技能仍會比較。

設置界面

在 DSH 設置 → 策略體檢 中可調整掃描範圍、最低嚴重級別、額外路徑和忽略名單,並支持從設置頁觸發掃描。

安裝與啓用

DSH 生態理念是「一切皆插件」;社區目錄站點(如 SkillHub)與 DeepSeek / 幻方無官方從屬關係,安裝前請自行查看源碼與許可證(本插件爲 MIT © 2026 Yyhy110421)。插件以當前 DSH 進程權限運行,只讀本地文件。

在 DSH 中打開 設置 → 插件管理器,安裝下列任一來源(命令須與倉庫 README 一致):

github:Yyhy110421/dsh-policy-linter
file:<本倉庫的絕對路徑>

裝完後重啓 DSH 生效。

注意:file: 安裝是實體拷貝,改源碼後需卸載再裝纔會更新;update 僅支持 npm 註冊表插件,本插件不發佈到 npm。package.json 中版本爲 0.1.0,運行環境要求 Node ^22.19.0 || >=24.0.0。

配置與掃描範圍

配置文件路徑:$DSH_HOME/data/policy-linter.json(無 DSH_HOME 時使用 ~/.dsh)。

{
  "scope": "all",
  "minSeverity": "info",
  "includeSkills": true,
  "extraPaths": [],
  "ignoreIds": [],
  "workspacePath": ""
}
  • extraPaths:額外要掃的文件或目錄(目錄會遞歸查找 .md)。
  • ignoreIds:從報告中複製如 conflict:confirm:xxxxxxxxxx 的 ID,僅影響報告展示。
  • workspacePath:設置頁「掃描一次」用的工作區;留空則用宿主進程當前目錄。對話裏的 policy_lint 仍使用會話自己的工作區。

掃描覆蓋:

  • 全局:DSH_HOME 下的 AGENTS.md / CLAUDE.md / GEMINI.md、profile 的 AGENTS.md、DSH_HOME/skills、profile 的 skills/,以及 profile 內插件包的 skills/、bundled-skills/。
  • 工作區:根目錄的 AGENTS.md / CLAUDE.md / GEMINI.md、.dsh/AGENTS.md、.dsh/skills、skills/。

典型用法

  1. 安裝並重啓 DSH 後,在對話中說「檢查一下策略衝突」,模型會按需要調用 policy_lint。
  2. 需要只看工作區或全局時,將 scope 設爲 workspace 或 global。
  3. 臨時只掃某個目錄或文件時,傳入 path,並視情況調整 minSeverity 與 format: "json" 便於腳本處理。
  4. 對已知誤報,把報告中的 ID 寫入配置裏的 ignoreIds。

安全邊界與已知限制

安全邊界(README 原文要點):

  1. 只讀:僅使用 readFileSync / readdirSync / statSync。
  2. 不執行:報告中的危險命令不會運行。
  3. 不聯網。
  4. 有上限:最多約 600 個文件、單文件 512 KB、6000 條規則、100 條問題,超出會標記截斷。
  5. 跳過 .git、node_modules 內普通文檔(插件 skills/ 單獨收集)、緩存與會話目錄。

使用前應知曉:

  • 檢查基於規則匹配,不是語義理解;換一種說法可能漏報。
  • 主題表目前覆蓋約 10 類常見衝突,未覆蓋主題不報衝突。
  • 衝突是否真矛盾需人結合上下文判斷;報告提供證據與候選,不是終審。
  • 不同技能之間的差異故意不判衝突。

適合在持續維護 AGENTS.md、多套技能與工作區規則的團隊裏,在改規則後或發版前做一次體檢,減少「規則看起來都對、合在一起卻打架」的情況。

結尾

dsh-policy-linter 在策略進模型之前做只讀衝突與風險掃描,配合設置頁與 policy_lint 參數即可接入日常流程。更多信息見社區目錄頁與倉庫 README。

  • 目錄頁:https://www.skillhub.cn/plugins/Yyhy110421/dsh-policy-linter
  • GitHub:https://github.com/Yyhy110421/dsh-policy-linter
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜