deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
本文档介绍「按需规划模式」(预设 extra-plan)的机制与用法
本仓库为可安装源码版:clone 后按 §1 安装方式部署到本地 DSH 环境即可使用。
从reasonix得到的灵感,实现主动可控进行pro规划的agent模板(适合控制欲强的用户)
按需规划模式(extra-plan):主会话模型由用户手动切换(推荐 flash);每次动手前主会话先弹三选一路由确认(直接执行 / 进行pro规划 / 不同意),用户点哪条走哪条——直行路径主会话直接干;规划路径先澄清意图,再启用 pro 规划子代理(只读 + anchored 引导)产出规划方案(含逐条机械可核对的验收标准清单),用户批准后执行(主会话直做,或 flash 执行子代理 + 验收复核)。规划按需发生——简单任务全程零 pro,复杂任务 pro 只出现在规划子代理。
前置条件:已安装 DeepSeek Harness(DSH)。默认 DSH_HOME =
%USERPROFILE%\.dsh(Windows 下复制粘贴到资源管理器地址栏或 CMD 回车即可访问;可被环境变量DSH_HOME覆盖——若你自定义了 DSH_HOME 环境变量,直接用%DSH_HOME%替换路径前缀即可)。
本仓库以源码文件形式发布(不提供 zip 压缩包),安装 = 把文件复制到你的 DSH_HOME 对应位置。本模式不依赖任何第三方包,仅使用 DSH 自带宿主组件。
dsh-extra-plan/.agent-presets/extra-plan/ 整个目录 → %USERPROFILE%\.dsh\.agent-presets\ 下(与已有的 .agent-presets 合并,最终得到 %USERPROFILE%\.dsh\.agent-presets\extra-plan\preset.yml 与 agent.cordis.yml);dsh-extra-plan/profiles/web/node_modules/@local/ 下的包 → 你所用 profile 的 node_modules/@local/ 下:dsh-extra-plan(模式核心插件)与 dsh-executor-spawn(执行者委托层);dsh-flash-guide(flash 模型近场引导插件,见下方「可选模块」说明;不装不影响本模式核心功能);web:%USERPROFILE%\.dsh\profiles\web\node_modules\@local\%USERPROFILE%\.dsh\profiles\<你的profile>\node_modules\@local\模块背景:dsh-extra-plan 与 dsh-router-standard 经测试无法兼容,故仿照 dsh-router-standard 的引导机制制作本模块。
对模型为 flash 的 agent(主会话 + flash 执行者子代理),在每条真实用户消息后自动注入一条固定引导文本——简单任务用快速收敛版、复杂任务用深度决策版(带 flash 回顾/反跑题锚);pro 规划子代理(非 flash 模型)自动排除、验收复核者跳过。零工具注册、不改 extra-plan 任何行为
运行仓库根目录的闸门测试:node test-extra-plan-gate.mjs(验证三级机械闸门机制);
或运行 pe-test/tools/validate-extra-plan-preset.mjs 校验预设结构是否符合预期。
① 用户以按需规划模式进入:主会话模型由用户手动选择(推荐 flash);推理力度由用户自定。
② anchored 引导(主会话新会话首轮):极简提示词 + 清空运行时上下文 + 仅 shell/read 工具;模型完成首个工具调用后自动恢复全量 persona 与完整工具目录。
③ 用户提出需求 → 主会话只读探查思考(read/glob/grep/web_search/pwsh 只读)→ 形成路线倾向(直接执行 / 进行pro规划)。
④ 路由确认(每次动手前必问,硬闸门):ask_user_question 三选一,选项固定枚举为「直接执行」「进行pro规划」「不同意」(选项顺序 = 主会话思考后的选择在前);运行时解析 answers 的 selected 值验词——三个词都认不出、空白回复(跳过本题)、用户取消/中断提问 → 一律视为未确认、不放行,注入提示让主会话重新提问(防死锁仅提问通道级错误码放行):
⑤ 澄清意图:ask_user_question 提最关键的 1~3 个问题、给出候选选项(直行路径无此步;空白回复/取消/中断视为未澄清、不放行,同 ④ 口径)。
⑥ 探查线索落盘(save_probe):主会话把本轮只读探查留下的「线索地图」经专用工具 save_probe 落盘为 .extra-plan\ 下单个文件 线索-<任务名>-<时间戳>.md——只含四类定位线索:文件地图(fileMap)/ 重点区域(focusAreas)/ 排除项(exclusions)/ 背景与意图(background),不含证据(行号/数值/文案摘录),pro 子代理不得把线索文件内容当作【已探查核实】证据。随后委派 subagent_plan 时在 prompt 中带上线索文件路径并说明「先 read 线索文件、再按需补查」(避免重复探查)。save_probe 只在主会话工具目录注册(规划子代理/执行者/reviewer 不可见),放行条件与 subagent_plan 一致:路由确认选「进行pro规划」且澄清完成。
⑦ 启用 pro 规划子代理(subagent_plan 工具):
agent.cordis.yml 中 @local/dsh-extra-plan 插件行 config 的 exploreBudget@local/dsh-extra-plan 插件行 config 块,空串=不追加(例值见预设注释)。宿主依据:exec.arguments 与消息对象在宿主侧均 deepFreeze 不可原地改,拼接走子代理 agent/pre-step 消息替换通道(与 agent-instructions 基线注入同通道,拼接入会话日志、全历史可见)。在哪改:agent.cordis.yml 中 @local/dsh-extra-plan 插件行 config 的 plannerPromptSuffix.extra-plan\,双文件:方案-<任务名>-<yyyyMMddHHmmss>.md(规划方案 + 待确认假设清单)与 验收-<任务名>-<yyyyMMddHHmmss>.md(验收标准清单,每条带对应任务编号)。程序定死双写(两个 payload 必填 + 原子写入、崩溃自愈),保证两个文件要么都写成、要么都不写。该工具只出现在规划子代理的工具目录——规划子代理 = 只读 + 仅可落盘。落盘成功后在输出中给出两个文件路径⑧ 计划回传 → 主会话读取两个方案文件、原样展示其内容 + ask 确认,选项固定枚举三个词:「同意执行」「转交pro规划」「不同意」;同一次问话附第二个可空文本问题「修改意见」(供选转交/不同意时填写)。运行时验词:
⑨ 执行:
⑩ 验收:subagent_review(flash 验收复核者)只读「验收」文件(按路径读取、以文件内容为准)逐条核对——「通过」采纳并汇总;「不通过」把问题清单修正进执行委派重派(最多 2 轮);两轮仍不通过 → 收集两轮不通过原因、原样返回给你,由你决策(停止 / 转交pro规划修改方案 / 其他指示)。规划子代理在批准后保留(供续轮),任务你拍板结束后 interrupt 停止其当前轮次——interrupt 仅停轮、不销毁会话,continuable 子代理仍存续,可随时 send_message 唤醒续轮(不再需要时保持闲置即可)。
⑪ 下一条用户消息 → 回到 ③(每条动手消息都重新路由确认,含"继续"类消息)。
.extra-plan\ 双文件(方案 / 验收,内容不经 flash 手,保真靠构造);程序定死双写;批准时两个文件都展示;执行者读两文件(自验证依据)、reviewer 只读验收文件;文件为任务档案,清理时机用户自定。主会话的 save_probe 探查线索文件同样落在 .extra-plan\(单文件,与方案/验收双文件区分)。以下均为插件
@local/dsh-extra-plan已实现、但主线文档未展开的细节(无行为冲突,仅补记供查阅)。
agent/request-error,把失败的错误链(cause 链逐行、含包装码如 TRANSPORT)只记录不干预地追加写入诊断文件 extra-plan-request-errors.jsonl(默认在 DSH_HOME 下;可用 config 的 diagFile 改路径)。用途:定位"子代理请求流中断"类问题的真实底层错误(v0.1.3 教训——TRANSPORT 只是包装码,根因要挖 cause 链)。yyyyMMddHHmmss(本地时间)。save_probe 差异点:落盘单个线索文件(线索-<base>.md,与 save_plan 的「方案/验收」双文件区分);四字段(fileMap/focusAreas/exclusions/background)必填,条目数上限:文件地图/重点区域各 20 条、排除项/背景与意图各 10 条;单条长度与总量上限(总量约 4KB、≤4096 字符);fileMap/focusAreas 的 path 做真实存在性校验(相对按工作区解析、绝对原样;排除项允许概念边界、不校验);只注册在主会话层(规划子代理/执行者/reviewer 不可见);硬闸门放行条件与 subagent_plan 一致(route=plan 且已澄清)。executor-spawn(独立 provider 名 extra-executor-spawn)统一注入执行者 deny 清单(含 subagent_plan 防 worker 再规划)与 flash 模型(显式指定优先);ralph 的 maxRounds 为 64。ledger.cursor.json,路径同账本名替换 .jsonl)持久化 (sessionId,seq),(sessionId,seq) 去重保证与共用同一账本的插件实例间安全。subagent_fork 工具名也做"计划未批准即拒"拦截(本预设没有 fork 工具行——不列 deny 是 R2 教训,但 pre-execute 仍防御性覆盖该名字,无副作用)。childPolicyNeedsFloor),保证执行者/规划子代理在委派边界(审批固定 never)不会因权限档过低反复受阻。dsh-extra-plan/
├── README.md # 本文档(模式介绍 + 安装方式)
├── LICENSE # MIT 许可
├── .gitignore
├── test-extra-plan-gate.mjs # 闸门机制测试(node 直接运行)
├── agent_extra_plan_export.py # 维护者工具:从本机 DSH_HOME 打包 6 文件为 zip
├── agent_extra_plan_import.py # 维护者工具:把 agent_extra_plan.zip 解压安装到目标 DSH_HOME
├── 按需规划模式测试方案.md # 内部测试方案文档
├── extra-plan涉及文件路径.md # 涉及文件路径清单(本机路径已脱敏)
├── .agent-presets/
│ └── extra-plan/
│ ├── preset.yml # 预设元信息(GUI 显示名称与描述)
│ └── agent.cordis.yml # 预设主配置(persona/工具/插件行/delegation)
├── profiles/
│ └── web/
│ └── node_modules/@local/
│ ├── dsh-extra-plan/ # 模式核心插件(三级闸门/探查上限/save_plan 等)
│ │ ├── index.js
│ │ └── package.json
│ ├── dsh-executor-spawn/ # 执行者委托层(workflow/ralph worker 注入)
│ │ ├── index.js
│ │ └── package.json
│ └── dsh-flash-guide/ # 可选模块:flash 模型近场引导(不装不影响核心)
│ ├── index.js
│ └── package.json
└── pe-test/tools/ # 自检/取证工具(8 个)
├── validate-extra-plan-preset.mjs # 预设静态校验(YAML 语法 + deny 清单存在性)
├── validate-save-probe-gate.mjs # save_probe 注册层 + 硬闸门五态 + planner 预算回归验证
├── validate-reviewer-pwsh-guard.mjs # reviewer pwsh 写动词拦截验证
├── smoke-forensics-extra-plan.mjs # extra-plan 冒烟会话取证
├── saveplan-forensics.mjs # save_plan call/result 配对取证
├── ledger-summary.mjs # usage 账本聚合(P3 A/B 读数)
├── print-header-tools.mjs # 打印会话 request/header 的 tools 列表
└── decode-session.mjs # 解码单个会话日志(事件统计/plan/mode 摘要)
本项目基于 MIT License 发布(与插件 package.json 中 license: MIT 声明一致),详见 LICENSE 文件。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。