dsh-living-plan:为每次 DSH 会话维护一份可版本化的活计划

前言

在 DeepSeek Harness(DSH)里做长任务时,计划往往只存在于某次工具调用或对话片段中。内置 /plan 更像一次性评审:通过后计划不会继续注入后续请求,也没有版本历史。goal 只能盯住一句话,难以表达「已完成什么、已决定什么、下一步是什么」。会话经过 compaction 或上下文换档后,模型往往只能从摘要里猜用户当前真正要什么。

dsh-living-plan 由社区维护者 doctorllll 发布,归类为工作流插件。它为每个会话固定一份 Markdown 计划文件,在任务推进过程中持续更新,并在每次变更或 compaction 后重新送入对话,尽量让长会话始终对齐用户「此刻」的意图。

这是什么

dsh-living-plan 是 DSH 的主机端与 Web 客户端组合插件(不是 agent skill)。当前版本为 0.3.1,在 DSH 0.2.2-rc.1 上验证过(桌面应用、dsh web、headless、PTC 模式)。许可证为 MIT。

一句话定位:给每个 DSH 会话一份 living plan——模型在开工前写好,工作中维护;每次保存生成新版本并进入对话;compaction 之后会再次投递,并尽可能用原文恢复被摘要替换的用户表述。

与内置能力的关系

README 中的对比可以概括如下:

  • /plan:评审关卡,批准后计划停留在工具调用里,无版本、不重复注入。
  • goal:单行目标,不承载进度与决策结构。
  • dsh-living-plan:填补「长任务现在站在哪、下一步做什么」这一层,并在 compaction 后仍能带回计划与用户原话。

核心功能

固定存储与版本

计划路径固定为:

$DSH_HOME/living-plan/<session-id>/plan.md

每个会话一份,位于 DSH 主目录而非工作区仓库内。每次 plan_write 或你直接编辑 plan.md 都会 bump 版本;旧版本写入 history/vNNNN.md(数量由 historyLimit 控制)。

注入方式与 compaction

计划以 living-plan 消息进入对话,而不是塞进系统提示前缀(默认 placement: message)。在以下情况会投递:有新版本、compaction 吞掉了上一版、或距上次投递已超过 refreshSteps 步。系统提示里只保留固定的写作约定,避免每次改计划都重写缓存前缀。

compaction 之后,插件会从会话日志推断「哪一版已投递、是否被 compaction 覆盖」,以便重启与恢复时行为一致。被 compaction 替换的用户消息会随计划一并带上(有总字节上限 ledgerMaxBytes)。

提醒与写作提示

  • 改主意:用户发言后若计划若干步未更新(remindAfterSteps,默认 3),会短提醒模型先更新计划。
  • 进度:计划 staleSteps 步未变(默认 20)时,会询问进展与下一步是否变化;仅 placement: message 时生效。
  • 无计划:会话运行多步仍无计划时,可触发一次提醒(noPlanAfterSteps)。
  • 形状提示:plan_write 若缺少用户原话引用或验收标准,可能返回 hints(保存仍会成功)。

并发与子代理

plan_write 仅在模型已「看过」当前版本时接受;若你中途改了文件,会返回 PLAN_STALE,模型需先 plan_read;超出 maxPlanBytes 时返回 PLAN_LIMIT。子代理默认不维护独立计划(includeSubagents: false)。

Web 侧栏

Web UI 右侧有「计划」面板(界面与提示文案为中文):当前版本、修改者、文件路径、渲染后的计划及历史版本,随应用明暗主题切换。

安装与启用

要求 DSH 0.2.2-rc.1(其他版本未在 README 中声明兼容;0.3.0 需要 sessionProjections 服务)。安装前请退出桌面应用。

在指定 profile 下执行:

dsh plugin --profile <profile> add github:doctorllll/dsh-living-plan#v0.3.1

macOS 桌面版若 PATH 上的 dsh 被 Electron 托管拒绝,需使用应用内置 CLI,例如:

"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
  plugin --profile desktop add github:doctorllll/dsh-living-plan#v0.3.1

安装后重新打开应用。插件对该 profile 内新创建的会话生效。

插件是主机级能力:装在某 profile 后,该 profile 下所有会话(含自定义 preset)都会带上计划相关工具。若某 profile 不需要(例如没有 plan_* 工具的聊天机器人),可在该 profile 或 home 的 cordis.patch.yml 中禁用:

- id: living-plan
  disabled: true

升级:用新 tag 再次执行 plugin add 并重启应用。卸载:

dsh plugin --profile <profile> remove dsh-living-plan

$DSH_HOME/living-plan/ 下的计划文件默认保留。

配置

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

- id: living-plan
  config:
    includeSubagents: false   # true 时子代理会话各自维护计划
    maxPlanBytes: 24576       # 超出则 plan_write 返回 PLAN_LIMIT
    historyLimit: 50            # 保留旧版本数;0 表示不保留
    placement: message        # message:注入对话;system:0.2.x 旧行为(计划进系统提示)
    refreshSteps: 40          # 超过该步数后重新投递;0 表示不按步数刷新
    remindAfterSteps: 3       # 用户发言后计划未动的提醒步数;0 关闭
    staleSteps: 20            # 计划长期未改的进度询问步数;0 关闭
    noPlanAfterSteps: 8       # 无计划时的单次提醒;0 关闭
    ledgerMaxBytes: 6144      # 随计划投递的用户原话总上限
    sectionOrder: 950         # 写作约定在提示中的段落顺序
    home: null                # 默认 $DSH_HOME,再回退 ~/.dsh

placement: system 可一行配置加重启切回旧行为(改主意与无计划提醒仍有效;进度提醒在 system 模式下不工作)。

典型用法

模型侧工具

  • plan_read:返回 markdown、version、bytes、path、exists、truncated 等,并标记「已读当前版」。
  • plan_write({ markdown, note? }):整份替换并生成下一版本;可能带 hints。过大或版本过期分别对应 PLAN_LIMIT、PLAN_STALE。

提示词约定计划骨架包含:标题、用 > 引用的用户原话、目标与验收、已决定、已放弃、进度、下一步等。对超出快问快答规模的任务,模型应在未明确要求时也先写计划;用户最新表述应压在旧计划内容之上;验收清单未完成前不应自称完工。

PTC 模式

在 PTC 模式下模型通常只能直接调用 run_code,README 示例为在代码里调用工具:

await tools.plan_write({ markdown: "# Plan\n\n- [ ] first step" })

人工编辑

直接编辑 plan.md 是支持路径;下一步会把你的修改作为新版本投递。

适用场景与注意

适合:多轮 compaction 的 refactor、调研、分阶段交付等长会话;需要可读版本史、或想在侧栏随时看计划而不搜路径的场景。

注意:

  1. 插件在当前 DSH 进程权限下运行,安装前请自行查阅 GitHub 仓库 源码与 MIT 许可证。
  2. 仅对部分 profile 安装;不需要的 profile 请显式 disabled: true。
  3. 安装前创建的会话可能仍缓存旧的工具声明,宜新开会话验证。
  4. 社区目录 SkillHub 插件页 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系;星标等统计以目录页为准(当前为 0)。

结尾

dsh-living-plan 把「计划」从一次性评审拉成与会话同寿命、可版本化、可人工改写的 Markdown,并在 compaction 后重新对齐用户表述。若你经常在 DSH 里跑长任务,可先在一个 profile 安装 v0.3.1,在新会话中观察侧栏「计划」面板与 plan_read / plan_write 的协作是否符合你的工作流。

  • 目录页:https://www.skillhub.cn/plugins/doctorllll/dsh-living-plan
  • 源码与文档:https://github.com/doctorllll/dsh-living-plan
羽毛球分组比赛记分
小程序二维码

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

小夜