在 DeepSeek Harness (DSH) 的开发流程中,保持仓库级的状态(如当前任务 ID)和会话间的上下文连续性是常见挑战。手动导出与导入往往缺乏一致性,且难以追踪证据。shared-handoff-dsh 插件封装了 shared-handoff-kit 的核心工作流,提供零依赖的解决方案,适配 macOS、Linux 和 Windows 平台,实现了 Codex 和 Claude 中类似的自动化行为。
核心定位¶
这是一个 DeepSeek Harness (dsh) 技能插件,由 eve1329 维护。它提供基于证据的会话交接和仓库本地任务 ID 状态管理技能,支持跨 Codex、Claude 和 dsh 互操作。该插件通过 DSH 事件系统模拟了原 Kit 的钩子行为,且不需要构建步骤。
安装与启用¶
安装过程仅包含一行命令。安装完成后,重启 dsh web,技能将自动加入技能目录,模型会通过 skill 工具加载它们。
dsh plugin --profile web add shared-handoff-dsh
核心功能¶
插件包含两个主要技能:
- 证据驱动的会话交接:支持导出和恢复会话上下文,并在 Codex、Claude 和 dsh 之间共享状态文件。
- 仓库本地任务 ID 状态管理:在
.agents/state/tasks/<task-id>/下管理任务状态,绑定当前 dsh 会话。
此外,它具备以下特性:
* 跨平台支持:原生支持 Windows 10 与 11 的 Python 环境差异。
* 自动化 Hook 等效行为:通过 agent/pre-step 和 session/event 事件监听,自动处理会话启动、任务路由、续写和压缩保护。
* 零依赖、无构建步骤:纯 Node.js 实现(基于 Node.js >=20.16.0)。
典型用法¶
安装后无需记忆命令,技能通过对话触发。
task-id-bootstrap:打开一个任务¶
在 dsh 聊天中输入指令即可启动新任务。例如:
新开task-id=init-kmp,然后开个 init-kmp 分支
模型会运行内置的 bootstrap 脚本。成功后,模型会输出三行关键信息以证明状态建立:
Task state: .../.agents/state/tasks/init-kmp
Current task: init-kmp
Session binding: /Users/you/.dsh/sessions/.../session.jsonl.zstd
后续在需要恢复时,只需说 继续,task-id=init-kmp。
注意:task-id-bootstrap 需要 Python 3.9+。如果系统中缺少 Python,插件不会静默安装,而是报告缺失并显示安装命令,必须获得明确同意后才会执行。
handoff:导出 / 恢复会话¶
当对话线程过长时,可以使用交接功能。输入:
帮我做个 handoff
模型会生成一段可直接粘贴到新线程的提示词,包含工作区、分支、完成状态和下一步骤。在新线程中,输入:
继续上次 handoff
模型会从状态文件重建上下文,而不是依赖聊天历史。触发词包括 交接、新开线程继续、继续上次、resume 等。
自动化机制¶
插件的自动化行为通过 DSH 事件系统实现,无需手动干预:
| 原始 Hook | DSH 等效事件 | 行为说明 |
|---|---|---|
SessionStart |
agent/pre-step |
将当前任务的 process.md 作为基线注入,提示完成里程碑后运行 handoff 技能。 |
UserPromptSubmit |
agent/pre-step |
扫描消息中的 task=<id> 标记,绑定会话并切换当前任务。 |
| Continuation | agent/pre-step |
识别 继续 等关键词,重新注入持久化的状态。 |
Stop |
session/event |
在每次交互后刷新 process.auto.md,并将摘要追加到 process.md 的 ## Auto Log 部分。 |
PreCompact / PostCompact |
compaction/start / compaction/summary |
在压缩前后写入快照,生成 context_guard.json,并在达到阈值时建议清理。 |
设计细节与限制¶
- Subagents 是只读的:由父会话派生的子代理或 Fork,只能接收基线注入,不会写入状态(无快照、无 Auto Log、无任务绑定更新、无压缩保护更新)。
- Session Binding:插件通过环境变量
DSH_SESSION_JSONL获取当前会话记录路径,确保状态文件与 DSH 会话严格对应。 - 互操作性:状态布局与 Codex/Claude 版本一致,
session-tasks.json可共享。context_guard.json采用读-合并-写策略,确保交替使用不同运行时时仍能正确保护上下文。 - 配置覆盖:如果默认行为不符合需求,可以通过 Profile Patch 覆盖配置项(如关闭基线注入、关闭自动快照、调整日志条目数等)。
许可证与资源¶
该插件采用 MIT 许可证。它以当前 DSH 进程的权限运行,安装前建议检查源码与许可证。