前言¶
在 DeepSeek Harness(DSH)里跑 Agent,常见做法是靠 system prompt 约束行为,或在会话层面切换 spec / react 等模式。这类手段能影响模型「怎么说」,却难以围绕真实工具事件流做闭环:一次 write 之后有没有 readback,性能改动有没有完整 benchmark,重复调用是否带来新信息,往往仍靠模型自觉。
dsh-trajectory-governor(维护者 chunsi-w)走的是另一条路:在 Harness 事件流上维护任务阶段、验证债务与完成门槛,把轨迹策略做成可配置的 control plane。它是 dsh-mode-boost 的 clean-sheet 重构,不依赖 preset fork,也不依赖 super-injector。项目在 GitHub 上约 9 stars,SkillHub 分类为「工作流」。
这是什么¶
一句话定位:面向 DeepSeek Harness 的闭环 Agent 轨迹控制平面(Closed-loop trajectory policy plane)。
插件监听 inbox 消息、工具调用与 Code Mode 子调用,在同一请求内追加可重建的近场 policy message,并维护:
- Task Episode 与连续性关系(new / continuation / extension / correction / review 等);
- 当前工作阶段与结构化信息增益;
- workspace revision 与验证债务(Verification Debt);
- benchmark 证据与同规格、带容差的性能回归判断;
- scoped 工具能力面(必要时暂时隐藏
write/edit); - 显式
finish与自然结束的完成门; - 可选自适应 reasoning effort;
- 本地、非模型可见的决策账本。
闭环如何工作¶
README 给出的主路径如下:
真人消息被 inbox claim
-> 在第一次 prompt assembly 前建立 Task Contract
-> 判断 new / continuation / extension / correction / review / conversation
-> 必要时通过 agent.ctx.tools.restrict() 暂时隐藏 write/edit
-> agent/pre-step 在同一个请求内追加可重建的近场 policy message
-> Native tool 或 Code Mode SDK 子调用产生 durable 事件
-> 计算 observation novelty / mutation / verification
-> 修改产生 Verification Debt
-> readback + test/build/check 清偿当前 revision 的债务
-> 可选 benchmark gate 只接受当前 revision 的完整、可解析结果
-> 同 query count / concurrency / warmup 才比较 QPS,容差内不误判噪声
-> finish guard 与 turn-stopping 阻止无证据结束
-> 有限续步耗尽后要求模型明确报告 blocker
下面分几块说明各模块在做什么。
Task Episode 与关系判断¶
当前确定性 relation 包括:new-objective、continuation、extension、correction、clarification、review、conversation。判断综合指代词、文件名与 artifact 重合、与上一 objective 的词面相似度,以及 fix/build/review 语义。第一条消息若是寒暄,不会永久关闭插件;下一条真实任务会建立新的 objective。
能力面控制¶
当前版本把明确的 write、edit 视为专用 mutation 工具。str_replace_editor 是读写混合工具,只有在仍有独立 read 时才会被暂时隐藏,避免 Minimal preset 失去观察能力。Code Mode 下 restriction 会改变生成的 TypeScript SDK,但不会删除 run_code transport。
bash / pwsh 仍是混合读写工具。对 apply_patch、重定向、sed -i、git apply、包管理安装等常见写入签名,Governor 会保守标记为 mutation risk:成功后递增 workspace revision 并创建需要命令验证的债务。需要明确:Governor 是轨迹策略,不是安全边界;真正权限仍由官方 sandbox / approval 执行。
Verification Debt¶
成功的 write / edit / str_replace_editor mutation 或高风险 shell 写入会创建验证债务,并绑定创建时的 workspace revision;后续修改会使旧 readback / test 证据失效。
- 源代码:需要 readback + test / build / check;
- 文档:需要 readback;
- 未知 artifact:需要可执行验证。
以下 shell 命令会被识别为 verification:
npm/pnpm/yarn/bun test|build|lint|typecheck|check
pytest / vitest / jest / mocha / tsc
cargo test / go test / dotnet test / mvn test / gradle test / make test
bash 文本里出现非零 [exit code: N] 时也会被视为失败。债务未清时,Governor 最多按配置追加有限验证步;到达上限后追加一次仅用于报告 blocker 的步骤,不会无限循环,也不会静默放行。
Benchmark-aware Stop Controller¶
实验型性能任务可显式打开 benchmark gate,不影响普通开发任务。规则是确定性的:
- 只有
total_queries >= fullBenchmarkMinQueries且recall >= fullBenchmarkMinRecall才能通过当前 revision;无法解析的结果明确成为 blocker。 - QPS 只和相同
total_queries、concurrency、warmup的 best record 比较。 - 同规格下降未超过
benchmarkScoreTolerancePercent时保留为可接受噪声。 - 每次已识别 mutation 或高风险 shell 写入都会使先前 benchmark 失效。
benchmark 工具应在 meta 或模型可见文本中返回完整命名指标,JSON 最可靠,例如:
{
"total_queries": 10000,
"recall": 0.98,
"qps": 1250.5,
"concurrency": 8,
"warmup": 500
}
Governor 只保留 benchmark best record 与状态,不直接写用户工作区,因此不会伪造「自动 rollback」。
Native 与 Code Mode¶
Governor 同时观察 Native 的 tool/call / tool/result,以及 Code Mode 的 tool/code-dispatch-start / tool/code-dispatch。run_code 内部的 read / write / edit 也会更新信息增益、释放 restriction、创建并清偿验证债务。
状态工具与决策账本¶
只读工具 trajectory_policy_status 返回当前 Agent 的 episode、relation / phase / risk、artifacts、restriction、verification debt、benchmark 状态、ledger 状态与 assembly hash 等。实现严格使用 exec.agent,不会读取其他会话。
决策账本默认写入:
$DSH_HOME/trajectory-governor/decisions.jsonl
账本保存 session / message id、原消息 SHA-256(不保存原文)、relation / phase / risk、tool effect、open verification debt、request assembly hash、turn stop reason 等。账本失败不会改变官方 Agent 执行流,但会通过 console.error 与 trajectory_policy_status 暴露原因。
安装与启用¶
环境要求¶
- Node.js
^22.19.0 || >=24.0.0; - DeepSeek Harness
0.1.0-rc.7(开发与集成测试基线);peer range 兼容0.1.0-rc.5至<0.2.0。
从 npm 安装(推荐)¶
当前包名为 @chunsi-m/dsh-trajectory-governor,版本 0.2.0,MIT 许可证。安装命令:
dsh plugin --profile web add @chunsi-m/dsh-trajectory-governor
dsh --profile web --dump-config
如需固定版本:
dsh plugin --profile web add @chunsi-m/dsh-trajectory-governor@0.2.0
包已声明 cordis.patch.yml bundle patch,dsh plugin --profile web add ... 会把它加入 web profile 的 bundle 层,而不是只安装成普通依赖。
从源码或 tarball 安装¶
从当前目录:
npm run build
dsh plugin --profile web add .
dsh --profile web --dump-config
安装 tarball:
npm run pack:release
dsh plugin --profile web add ./chunsi-m-dsh-trajectory-governor-0.2.0.tgz
配置与推荐上线顺序¶
cordis.patch.yml 默认配置节选:
- insert:
- id: trajectory-governor
name: '@chunsi-m/dsh-trajectory-governor'
config:
mode: active
adaptiveReasoning: false
restrictBeforeEvidence: true
autoVerify: true
maxAutomaticContinuations: 1
exposeStatusTool: true
ledger: true
maxLedgerBytes: 10485760
benchmarkRequired: false
benchmarkToolNames: [run_benchmark]
verificationToolNames: [build_project, run_correctness_test]
finishToolNames: [finish]
fullBenchmarkMinQueries: 10000
fullBenchmarkMinRecall: 0.95
benchmarkScoreTolerancePercent: 2
maxActionsWithoutBenchmark: 8
maxStagnantFullBenchmarks: 2
stopRetryOnDeterministicErrors: true
常用字段含义:
| 字段 | 默认 | 说明 |
|---|---|---|
mode |
active |
off / shadow / active;shadow 只决策和记账,不改请求 |
restrictBeforeEvidence |
true |
fix / continuation 等任务在观察前临时隐藏已知专用写工具 |
autoVerify |
true |
有完成 blocker 时允许 agent/turn-stopping 追加有限验证步骤 |
maxAutomaticContinuations |
1 |
每个 turn 的自动验证续步上限 |
benchmarkRequired |
false |
为性能任务强制当前 revision 的完整 benchmark |
ledger |
true |
写入本地 policy ledger,不进入模型历史 |
先做 shadow 观察决策是否符合真实会话:
mode: shadow
ledger: true
确认 relation / phase 判断合理后,再切换为 active。adaptiveReasoning 默认关闭,因为改变 reasoning effort 会改变 request header 与缓存形状;应在具体 provider / model 上完成校准后再启用。
性能任务示例配置:
benchmarkRequired: true
benchmarkToolNames: [run_benchmark]
verificationToolNames: [build_project, run_correctness_test]
finishToolNames: [finish]
fullBenchmarkMinQueries: 10000
fullBenchmarkMinRecall: 0.95
benchmarkScoreTolerancePercent: 2
适用场景与注意¶
适合谁
- 已在 DSH 上跑长链路 Agent,希望用事件流而非纯 prompt 约束「先观察再改、改完要验证、性能改动要有完整 benchmark」的团队;
- 需要 Task Episode 连续性判断、验证债务与 finish gate 的工作流场景;
- 使用 Native tools 或 Code Mode,且工具名可按 harness 配置(
benchmarkToolNames、verificationToolNames、finishToolNames)。
注意事项
- 插件以当前
dsh进程权限运行,安装前应阅读 源码 与 MIT 许可证,确认 bundle patch 与默认配置符合你的环境。 - Governor 是轨迹策略层,不能替代 sandbox 与人工 approval;高风险 shell 写入只会创建验证债务,不会单独充当安全边界。
- SkillHub(目录页)是社区插件目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本插件是其中一条工作流向的补充。
结尾¶
dsh-trajectory-governor 把 Task Episode、验证债务、benchmark gate 与完成门槛接到 Harness 真实事件流上,让 Agent 轨迹从「靠 prompt 自律」变成可配置、可记账、可逐步上线的闭环策略。建议先用 shadow 模式对照 ledger,再切 active;性能类任务再单独打开 benchmarkRequired。