前言¶
用 DeepSeek Harness(DSH)做单人长期项目时,状态接续是个绕不开的问题:项目跨多个会话和 Turn,每轮开始前都要弄清「目标是什么、当前做到哪个 Milestone、上一轮停在哪里」。没有持久锚点时,这些信息靠手工交接,Goal 容易漂移。
DSH 的理念是「一切皆插件」,这类连续性需求可以交给插件解决。下面介绍的就是这样一个插件:dsh-project-anchor。
这是什么¶
dsh-project-anchor 由 KKLL2025 维护,许可证为 MIT,一句话定位:为单人长期运行的 DeepSeek Harness 项目提供用户批准的 Goal、单一活跃 Milestone 与持久 Turn 检查点。项目层面的判断不写死在插件里,而是留给按需加载的 Skills。
当前版本是 v0.1.0-preview.1,走 source-only 的 GitHub Preview 路线:未发布到 npm,没有移动分支安装路线,只能安装 release notes 中记录的已审查完整 commit。已验证宿主为 DeepSeek Harness 0.1.0-rc.6(source revision 47f943859bef60e4160492346772ded9b24f765a);DSH 本身处于 developer preview,后续版本可能需要插件改动。
核心功能¶
1、项目锚定:把单人长期 DSH 项目锚定到用户批准的 Goal、一个活跃 Milestone 和持久的 Turn 检查点。
2、冷恢复与同意门控的 resume:冷恢复可以为关联的 DSH Goal 提供需用户同意(consent-gated)的原生 resume。缺状态、漂移、推迟、问题不可用或恢复失败时,Anchor 与 Milestone 均保持不变。
3、三个字节级冻结的内置 Skills:align-project-requirements、drive-large-project、organize-ai-project-files。DSH 只在被选中时才加载 Skill 正文及引用资源。
4、三档执行强度:drive-large-project 提供 fast、continuity、high-risk/release 三档,按当前风险与验收边界选择最轻量够用的一档。注意这是临时 Skill 判断而非原生插件状态,模型无法通过 Anchor 字段持久化或提升它;公开发布等外部操作仍需单独授权。
5、权限与边界:插件记住 consent 与稳定的 Goal 关联,仅在 Anchor 激活时暴露检查点工具,并从 DSH 实时状态推导 Goal、Milestone、Turn 身份。普通工具保持不受限制;缺失检查点最多获得一次同 Turn 内的短修复尝试,避免强制循环。
6、启用逻辑:无当前 DSH Goal 时,Skill 加载成功后会询问是否启用持久连续性层;已有合适 Goal 时,提供显式的复用或恢复选择。已完成的 Goal 不会被替换或复用;没有 question provider 的 headless 激活会 fail closed。
安装与启用¶
前置要求:Node ^22.19.0 || >=24.11.0、pnpm 在 PATH 上、DeepSeek Harness 0.1.0-rc.6。先安装宿主并确认版本:
npm install --global @deepseek-ai/dsh@0.1.0-rc.6
dsh --version
要求 dsh --version 输出 0.1.0-rc.6。然后安装插件:
dsh plugin --profile web add github:KKLL2025/dsh-project-anchor#<FULL_COMMIT_SHA>
<FULL_COMMIT_SHA> 需要从 v0.1.0-preview.1 的 release 页复制完整的 40 位 commit,不能填包名或分支名。
第一次 add 预期会在运行 Git 包的 prepare 构建前停止:Git 源安装会运行包的 prepare 脚本,需要 pnpm 的 allowBuilds 显式批准,这属于宿主代码执行,批准前应先审查源码。把 pnpm 打印的完整依赖键写入所选 profile 的 pnpm-workspace.yaml:
allowBuilds:
'<EXACT_KEY_PRINTED_BY_PNPM>': true
键要完整复制,不要缩短成包名。然后重复同一条 add 命令,并用下面两条命令验证安装结果:
dsh plugin --profile web list dsh-project-anchor --depth 0
dsh --profile web --dump-config
依赖列表应包含 dsh-project-anchor,配置转储应恰好含一个 # == dsh-project-anchor 层。如果 Web 已经在运行,安装后需要重启该 DSH 进程。
典型用法¶
启动项目时,用点名 Skill 的普通项目请求:
Use `drive-large-project` for this multi-session project: <describe the project and desired result>. Recover the repository's real state, choose one independently verifiable Milestone, carry it through validation, and finish the Turn with the Project Anchor checkpoint.
没有当前 DSH Goal 时,Skill 加载成功后插件会询问是否启用持久连续性层;已有合适 Goal 时,则提供显式的复用或恢复选择,不会静默替换。
后续会话,用更短的请求即可:
Continue this project with `drive-large-project`. Recover the current Goal, Project Anchor state, handoff, and repository facts; work only on the next unblocked Milestone, then validate and checkpoint it before ending the Turn.
冷恢复后 DSH 会使 Goal 处于 disarmed 状态。下一次 drive-large-project 加载会核对当前 Goal 与活跃 Anchor 完全一致,并询问是否恢复;只有明确回答 Resume this Goal 才会调用 DSH 原生 resume。推迟、缺状态、版本变化、问题不可用,都会让 Goal、Anchor 与 Milestone 保持不变。
适用场景与注意¶
适合的场景:单人维护、跨多个会话与 Turn 的长期 DSH 项目,需要一个明确的「当前做到哪、下一步做什么」的持久锚点,同时把项目方法论留给 Skill 按需加载。
使用前请注意:
- 插件以当前 dsh 进程的权限运行,安装即意味着让这段代码在你的环境里执行。Git 源安装会触发 prepare 脚本(宿主代码执行),安装前应审查源码、固定完整 commit SHA、确认许可证(MIT),不要从移动分支安装。
- 重启恢复仅在独立 Node.js 进程中用 JSONL 持久化测试过;OS 断电、写撕裂与跨机恢复不在当前证据范围内。
- 公开发布等外部操作仍需单独授权,执行强度也不会被模型持久化或提升,仓库规则、用户显式决定和当前验收声明仍是权威。
结尾¶
dsh-project-anchor 用一个用户批准的 Goal、单一活跃 Milestone 和持久 Turn 检查点,把跨会话项目的连续性问题收敛到一个可验证的锚点上,而项目判断仍留给 Skill 和你本人。如果你在用 DSH 跑长期项目,值得一看。
- GitHub:https://github.com/KKLL2025/dsh-project-anchor
- 社区目录页:https://www.skillhub.cn/plugins/KKLL2025/dsh-project-anchor (社区独立站点,与 DeepSeek / 幻方无官方从属关系)