前言¶
給智能體寫協作規則,常見做法是把所有約定堆進一份全局提示詞。規則一多就有兩個問題:無關內容佔用上下文,模型也分不清「哪條規則管哪些文件」。Claude Code 用 rules.md 和 # Path: 段落解決了這件事——規則自己聲明管轄的文件範圍,觸碰匹配文件時才生效。
如果你在 DeepSeek Harness(DSH)上開發,想要同樣的機制,下面介紹的 dsh-rules 提供的就是它:規則按 glob 匹配文件,agent 讀取或編輯匹配文件時,規則內容自動注入對話。
這是什麼¶
dsh-rules 由 rj-jiangyichen 維護,當前版本 0.1.1,MIT 許可證。定位一句話可以說清:爲 DSH 提供 glob 激活的規則提示——每條規則聲明 glob 模式,當 agent 觸碰(讀取/編輯)匹配文件時規則激活,內容以一條 <rules> 快照注入對話,並覆蓋先前快照,機制上對標 Claude Code 的 rules.md / # Path: 風格。
DSH 的理念是「一切皆插件」,這個插件也遵循這一點:它適用於所有 DSH 部署形態——desktop / web / tui / headless / 自定義 profile,沒有桌面專屬依賴。
工作機制¶
先看規則從文件到對話的完整鏈路:
- agent 讀取或編輯一個文件,插件以會話爲單位記錄觸碰過的路徑;
- 每個 step 由 agent/pre-step 監聽器把觸碰路徑與所有規則的 glob 匹配,收集激活規則;
- 匹配結果渲染成一條
<rules>快照,作爲用戶消息注入對話。
圍繞這條鏈路有幾個值得留意的設計:
- 可見且持久:注入的是用戶消息,UI 可見,會話日誌也會留存;每個快照覆蓋先前快照,模型始終看到當前生效的規則集。
- 字節預算:每次注入默認 32 KB(32768 UTF-8 字節),超預算時先丟棄低優先級規則,最後一條規則被截斷;內容會轉義,不會逃出框架標籤。
- 會話恢復:resume 時從日誌還原最後快照及其匹配文件,避免重複注入。
- 按會話跟蹤:每個 agent/session 獨立記錄觸碰過的文件,子代理也包括;沒有聲明 path 的全局規則始終激活。
- 規則熱更新:規則源每步重新探測並帶版本緩存,規則文件修改後下一步即生效。文件讀取優先走 harness fs 服務(含包含性檢查),未掛載 fs 服務時回退到 Node 文件系統。
安裝與啓用¶
通用安裝方式,從 npm registry 一步完成安裝並激活(profile 按部署形態換成 desktop / web / tui / headless):
dsh plugin --profile desktop add dsh-rules
安裝後重啓 DSH(桌面形態重啓應用,web / headless 形態重啓進程)即可生效。更新用 update 子命令,也可以先 remove 再 add:
dsh plugin --profile desktop update dsh-rules
本地開發時,在倉庫根目錄執行下面這行命令:
dsh plugin --profile desktop add .
注意:pnpm 會在空格處拆分 add 參數,倉庫路徑含空格時必須通過無空格 junction 安裝(如 mklink /J)。
DSH Desktop (Windows) 還提供一鍵腳本:先克隆倉庫,再在倉庫根目錄運行:
node scripts\install-desktop.mjs
腳本完成後重啓 DSH Desktop,插件即隨下一次加載生效。
卸載有兩種方式,任選其一:
# 方式一:一鍵腳本卸載
node scripts\install-desktop.mjs --uninstall
# 方式二:dsh 命令卸載
dsh plugin --profile desktop remove dsh-rules
安裝與卸載都不會觸碰 DSH 安裝目錄(resources\app.asar.unpacked),只改 profile 配置,完全可回退;操作後記得重啓應用。環境要求:Node ^22.19.0 || >=24.0.0。
規則怎麼寫¶
規則有兩種來源,可以混用。
來源 A:規則文件。 項目內放在 .dsh/rules/*.md,用戶級規則放在 ~/.dsh/rules/*.md(可選)。frontmatter 的 path 字段聲明 glob:
---
path:
- "src/**/*.ts"
- "!src/**/*.test.ts"
---
規則正文(markdown,激活時注入對話)
glob 語法支持 **、*、?、{a,b}、[abc] 及 ! 排除(底層是 picomatch),路徑相對項目根、用 / 分隔。path 缺省或爲空時,規則成爲始終激活的全局規則。frontmatter 還支持可選的 name 字段,用於同名規則去重,缺省取文件名(去掉 .md 後綴)。
來源 B:# Path: 段落。 需要 includeClaudeSections: true。插件會解析 AGENTS.md / CLAUDE.md(含 .local.md 變體與 ~/.dsh/AGENTS.md)中的 # Path: 標題:
# Project notes
# Path: src/**/*.ts, scripts/**
這一段只在觸碰 src/**/*.ts 或 scripts/ 下的文件時激活
每個 # Path: 標題開啓一條規則,內容持續到下一個標題或文件末尾,globs 可用逗號或空格分隔。注意第一個 # Path: 標題之前的內容不由本插件注入——那部分由 DSH 內置的 agent-instructions 注入完整 AGENTS.md/CLAUDE.md 基線。
優先級與去重規則:項目規則(rank 100)> 用戶規則(rank 200)> # Path: 段落(rank 300)。同名規則只保留優先級最高的那條;渲染順序按 (rank, name) 確定,跨 step 保持一致。
配置¶
插件默認以代碼內置值運行;要按 profile 覆蓋,在 <profile>/cordis.patch.yml 中設置入口的 config:
- id: dsh-rules
name: dsh-rules
config:
includeClaudeSections: true
projectRootMarkers: [".git", ".dsh"]
上面這段開啓了 # Path: 段落解析,並把項目根標記擴展爲 .git 和 .dsh。常用配置項如下(完整列表以倉庫 README 爲準):
| 配置項 | 默認值 | 說明 |
|---|---|---|
dshHome |
$DSH_HOME / ~/.dsh |
用戶規則與 ~/.dsh/AGENTS.md 的根目錄 |
projectRootMarkers |
[".git"] |
向上查找項目根時使用的標記文件/目錄 |
ruleDirNames |
[".dsh/rules"] |
項目內規則目錄(相對項目根,可配置多個) |
includeUserRules |
true |
是否啓用 ~/.dsh/rules/*.md |
includeClaudeSections |
false |
是否解析 # Path: 段落 |
instructionFileCandidates |
["AGENTS.md", "CLAUDE.md"] |
# Path: 段落的候選文件名 |
localInstructionFileCandidates |
["AGENTS.local.md", "CLAUDE.local.md"] |
每目錄候選文件名 |
maxBytes |
32768 |
每次注入的渲染預算(UTF-8 字節);<= 0 時禁用插件 |
maxSourceBytes |
1048576 |
單條規則源文件大小上限,超限的文件被跳過 |
其中有兩個邊界容易踩到:maxBytes 設爲 0 或負數會直接禁用整個插件;單個規則源文件超過 1 MB 會被整體跳過,不會部分注入。
適用場景與注意¶
適合誰:
- 在 DSH 上維護多模塊項目,希望「改 src 走 src 的規範、改測試走測試的規範」的開發者;
- 從 Claude Code 遷移過來的團隊——
.dsh/rules/*.md與 AGENTS.md / CLAUDE.md 裏的# Path:段落都能直接沿用; - 在意上下文佔用的場景:規則只在觸碰匹配文件時注入,且有字節預算兜底。
注意事項:
- 插件以當前 dsh 進程的權限運行,安裝前請先檢查倉庫源碼與許可證(本項目爲 MIT)。
- 本地倉庫路徑含空格時,必須先建立無空格 junction 再安裝,否則 pnpm 會拆錯 add 參數。
小結¶
dsh-rules 把 Claude Code 的按路徑規則機制帶進了 DSH:規則用 frontmatter 或 # Path: 聲明 glob,agent 觸碰匹配文件才注入,快照可恢復、預算可控,且適配 desktop / web / tui / headless 全部部署形態。如果你在 DSH 上管理多模塊項目的協作規則,經過上面幾步的安裝與規則編寫,就能直接用起來。
- 插件目錄頁:https://www.skillhub.cn/plugins/rj-jiangyichen/dsh-rules
- GitHub 倉庫:https://github.com/rj-jiangyichen/dsh-rules
最後說明一句:上述目錄頁來自社區維護的插件站點,與 DeepSeek / 幻方無官方從屬關係。