前言¶
DeepSeek Harness(DSH)通过插件机制扩展功能。在智能体开发场景中,存在一类属于本地机器而非代码仓库的指令。这些指令通常包括环境特定的 E2E 流程、仅内部访问的端点,或者个人的工作流偏好。由于 AGENTS.md 是提交到仓库的共享文件,它不适合存储此类私密信息。dsh-project-prompt 插件旨在解决这一问题,它将这类规则保存在 $DSH_HOME 目录中,永远不会被提交到仓库。
这是什么¶
dsh-project-prompt 是一个 DeepSeek Harness 插件,用于管理私有的、按项目区分的提示词规则。它由 imroc 维护,采用 MIT 许可证。该插件通过匹配 Git 远程地址、本地仓库路径或当前工作目录前缀,将配置的规则注入到对应的会话中,覆盖主代理和子代理,且具备 Worktree(工作树)感知能力。
核心功能¶
- 三种匹配器:支持通过 Git 远程 URL、本地主仓库路径或纯目录前缀进行匹配。
- Worktree 感知:能识别 Git 链接工作树,通过
.git文件的指针回溯到主仓库,一次配置覆盖所有工作树及其子目录。 - 两种注入模式:
section:稳定系统提示词片段,支持 KV 缓存,支持{{cwd}}和{{model}}变量插值。inject:注入到第一条上下文消息中,不进行模板插值,适合包含字面量{{...}}的文本(如 Helm/Go 模板)。
- 覆盖子代理:子代理继承会话的当前工作目录,因此遵循相同的规则。
- 加载时校验:规则格式错误或未知的模板变量会在插件加载时抛出错误,而不是在每次请求时失败。
- 零依赖:单文件 ESM,仅引入 Node.js 内置模块,无需构建步骤。
安装与启用¶
安装前需确保 DeepSeek Harness 版本 >= 0.1.1-rc.2,且环境包含 Node.js >= 18。
通过 DSH 的插件命令安装到指定 profile:
dsh plugin --profile web add dsh-project-prompt
安装完成后需要重启 DSH,因为插件包在启动时进行组合。
卸载命令:
dsh plugin --profile web remove dsh-project-prompt
配置规则¶
规则配置文件位于 $DSH_HOME/cordis.patch.yml(默认为 ~/.dsh/cordis.patch.yml)。该文件是机器本地层,应用于机器上的所有 profile。插件会监听该文件的变化,保存后自动重载。
基本配置示例¶
以下是一个配置文件片段,展示了三种匹配方式和两种模式:
- id: project-prompt
config:
rules:
# 1. 通过 Git remote 匹配(支持任意克隆位置和工作树)
- remote: github.com/my-org/my-project
text: |
## E2E testing for this project (environment-specific, private)
1. Test entry point: http://e2e.internal.example.net (internal only)
2. Run `make e2e-prepare` before the first E2E run.
3. On failures, check ... first.
# 2. 通过本地主仓库路径匹配,使用 inject 模式以避免字面量 {{...}} 被解析
- repo: /home/me/dev/another-project
mode: inject
text: |
Render values like {{ .Values.replicas }} are literal here.
# 3. 通过目录前缀匹配
- path: /home/me/dev
text: |
...
规则字段说明¶
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
remote |
string | — | Git 远程 URL。比较时会忽略协议、user@、: 分隔符、.git 后缀、尾部斜杠及大小写。 |
repo |
string | — | 本地主仓库的绝对路径。会自动匹配该仓库的所有工作树和子目录。 |
path |
string | — | 当前工作目录前缀。会匹配该目录或其下的子目录。 |
text |
string | required | 需注入的提示词文本。 |
mode |
section | inject |
section |
注入模式,见下文。 |
sectionName |
string | project-prompt (自动递增) |
系统提示词片段的名称。 |
order |
number | 50 |
系统提示词片段的排序,DSH 规范中 0 为 persona,100-199 为工具指导。 |
注入模式详解¶
| 特性 | section (默认) |
inject |
|---|---|---|
| 位置 | 系统提示词 (systemPrompt) |
用户侧第一条上下文消息 |
| 可见性 | 每次请求 | 每次请求 |
| 模板插值 | 支持 {{cwd}} 和 {{model}},其他完整 {{...}} 报错 |
不支持,{{...}} 为字面量 |
| 适用场景 | 稳定指令、KV 缓存友好 | 包含字面量 {{...}} 的模板 |
验证安装¶
安装完成后,可通过以下步骤验证配置是否生效。
- 检查插件是否正确加载:
dsh --profile web --dump-config | grep -A3 project-prompt
-
在匹配的目录中启动会话并提问,检查模型是否接收到了规则文本。
-
查看会话日志。注入的文本会出现在记录的请求头中,位于
$DSH_HOME/sessions/.../session.jsonl.zstd文件里。
注意事项¶
- 静态配置:规则是静态配置,插件不会读取仓库内部文件(这会引入共享状态)。仓库内的文件加载请使用 DSH 内置的
AGENTS.md/CLAUDE.md。 - 子模块:Git 子模块目录(
.git指向.git/modules/...)不被追踪。如需匹配子模块,请使用path规则。 - 失败策略:配置错误(如
text缺失或section模式下存在未知的{{var}})会在插件加载时报错,而不是静默失败。 - 许可证:MIT License。