dsh-handitoff:长会话写 HANDOFF.md,新会话只读文档继续

前言

在 DeepSeek Harness(DSH)里做智能体或项目开发,会话一拉长,上下文窗口会被占满,换一个新会话又意味着模型要重新从对话里「摸」一遍背景。常见做法是手动复制粘贴摘要,或在新会话里重复说明目标与进度,既费时也容易漏掉关键约束。

dsh-handitoff 把这一步做成工作流:旧会话里由当前模型按固定模板写出工作区交接文档 HANDOFF.md,新会话通过 /handitoff resume 或会话菜单「交接并继续」只读这份文档接手,减少重复发现上下文的开销。下面介绍插件定位、能力与用法。

这是什么

dsh-handitoff 是社区维护的 DSH 插件(维护者 NFdrybattery,GitHub 仓库 NFdrybattery/dsh-handitoff),在 SkillHub 目录中归类为工作流。包名是 dsh-handitoff,斜杠命令仍是 /handitoff。

一句话:从长会话生成交接文档,再在全新会话里恢复工作,而不必让新模型重新梳理整段对话历史。

核心功能

已核实的能力如下。

生成交接文档

  • /handitoff:在旧会话后台向当前模型发送带格式要求的指令,按 0–12 共 13 节写出 HANDOFF.md。文档要等这一轮模型结束才可用。
  • 第 0–11 节为可总结的交接内容;第 12 节由插件在模型写完后直接读取会话日志追加(格式为 用户: / 回复:),不经过 agent 转录。轮数由 recentRounds 配置,默认 5;该节不做归纳。
  • 辅助命令:/handitoff status、/handitoff list;/handitoff update 与 /handitoff 同类动作;/handitoff --new 新开一条任务线。

一键交接

会话列表 ⋯ →「交接并继续」:

  1. 旧会话模型写 HANDOFF.md(只写 0–11 节);
  2. 等本轮结束(最多 4 分钟),插件追加第 12 节;
  3. 文档生成后弹出提问卡,默认可选「否,开始交接」,并可填写补充要求;
  4. 无补充则直接打开新会话;有补充则写入新会话注入信息并标明「交接前用户补充要求」;
  5. 新会话执行 /handitoff resume --latest --wake,命令结果默认收起;模型读文档并结合项目文件梳理前期工作,给出简要接手总结。

新会话第一轮约定不执行命令、不改文件,确认后再继续。

手动接续

/handitoff resume
/handitoff resume --latest
/handitoff resume --latest --wake
/handitoff resume <taskId>

不带 --wake 时只注入摘要,需再发一条消息;带 --wake 时注入后直接唤醒模型(一键交接走这条)。多条 pending 任务用 --latest 或显式 taskId。重复接续同一任务会提示「已接手」;加 --force 可重新注入。

归档与清理

/handitoff archive <taskId>

文档保留,但不再出现在 resume 候选中。任务默认在超过 retentionDays(默认 1 天)未更新后自动清理;0 可关闭自动删除。

安装与启用

环境要求:DeepSeek Harness 0.2.1-rc.x(package.json 中为 >=0.2.1-rc.1 <0.3.0-0),Node.js ^22.19.0 || >=24.0.0。

推荐在 设置 → 插件 里从本地目录安装 checkout,选中 dsh-handitoff 后重启。CLI 备选(路径换成你的实际目录):

dsh plugin --profile desktop add link:D:\path\to\dsh-handitoff

CLI 只安装包,仍需在 设置 → 插件 里选中 dsh-handitoff(或写入 profile 的 dsh.profile.bundles)再重启;其他 profile 将 desktop 换成对应名称。

卸载:设置 → 插件 移除,或:

dsh plugin --profile desktop remove dsh-handitoff

首次使用新默认目录时,会把旧的 .dsh/dsh-handoff/ 或 .dsh/handoff/ 自动迁到 .dsh/dsh-handitoff/,已有文档随目录保留。

插件以当前 DSH 进程权限运行;安装前应自行查看仓库源码与 MIT 许可证。

典型用法

仅生成文档

在需要暂停或切换会话前,于当前工作区会话执行:

/handitoff

用 /handitoff status 确认文档是否已生成。文档路径为 <工作区>/.dsh/dsh-handitoff/<taskId>/HANDOFF.md,索引在同级 index.json。

新开会话接手

/handitoff resume --latest --wake

或在 UI 走「交接并继续」完整流程。

配置

在 profile 的 cordis.patch.yml 里按 id 覆盖:

- id: dsh-handitoff
  name: dsh-handitoff
  config:
    retentionDays: 1
    language: zh
配置 默认 含义
enabled true 总开关
retentionDays 1 未更新任务目录自动删除天数;0 关闭
recentRounds 5 第 12 节写入的最近对话轮数;0 关闭该节
language zh zh 或 en
remindAfterSteps 1000 首次提醒步数
remindEverySteps 200 提醒分档间隔

安装并启用后,设置 → Handitoff 可编辑提醒阈值、保留天数、最近对话轮数、摘要/唤醒语言;保存走 Host 设置 API,部分项需重新加载插件。enabled 不在设置页,启停请用插件管理或 profile。

不想把交接笔记提交进仓库,可将 .dsh/ 加入 .gitignore;需随项目交付则保留。

适用场景与注意

适合谁: 在同一工作区上长时间改代码、调插件或跑多轮排查,需要在不丢上下文的前提下换会话或换「干净」上下文窗口的 DSH 用户。

限制(来自官方 README):

  • 文档质量取决于旧会话模型是否按模板写全各节;不允许只写标题,事实须来自当前会话。
  • 一键交接需要会话已绑定工作区;空白会话不显示菜单项。
  • 缺少 frontmatter task_id 时 resume 会拒绝载入,可重新 /handitoff。
  • index.json 用于任务发现与清理,不是交接正文。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,本文仅介绍社区插件能力,不构成官方背书。

结尾

dsh-handitoff 把「长会话 → 结构化 HANDOFF.md → 新会话 resume」收成可重复的工作流,并区分模型总结的 0–11 节与插件原样转录的第 12 节,便于接手时既看到结论又看到最近几轮原文。

当前 package 版本为 0.1.1,许可证 MIT。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜