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。

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

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

小夜