dsh-pilot:用契约把主代理与子代理的执行交给代码裁决

前言

在 DeepSeek Harness(DSH)里做多步开发时,常见做法是主会话负责理解需求,再派子代理去改代码、跑命令。廉价模型执行快、成本低,但容易幻觉;若让模型互相评价「做得对不对」,成本与不确定性都会上去。Nwflower 的 dsh-pilot 走另一条路:主代理只起草契约,子代理按契约执行,插件用确定性规则裁决(验收命令 exit code、git diff 与白名单、回执交叉核验),主代理最终只读一份紧凑的 verdict JSON。README 里用一句话对比:agent-teams 给你一支团队,dsh-pilot 给你一份合同。

这是什么

  • 名称:dsh-pilot(仓库 Nwflower/dsh-pilot)
  • 维护者:Nwflower
  • 分类:工作流(社区目录:SkillHub 插件页)
  • 许可:MIT(README 与 package.json 一致)
  • 当前 package 版本:0.2.0(以 package.json 为准)
  • 状态(README):M1.6 完成,全链路可用;设计见仓库内 DESIGN.md

插件面向 DSH 的 Host 插件形态:契约派发 → 白名单守卫 → 门禁执行 → 裁决回传。README 称 62/62 自动化测试通过,并经真实子代理派发会话验收(PASS)。

核心机制

下面介绍主代理、插件与子代理各自做什么。

 主代理(旗舰模型)                    dsh-pilot 插件(Host,纯代码裁决)
 ─────────────────                    ──────────────────────────────
 理解需求 · 摸清工程状况                ① 组装子代理 prompt = 契约 + 内联上下文
 起草契约 · 不亲手写代码     ──契约──▶   ② subagents.start(outputSchema, toolFilter)
                                      ③ 文件白名单守卫(tools.guard)
        ▲                             ④ 门禁:shell 跑 acceptance_cmd → 真实 exit code
        └────── verdict ◀──────────   ⑤ 核验:git diff vs 白名单 & 回执真实性
        (紧凑 JSON,<200 token)       ⑥ 失败:确定性反馈重试(≤max_retries)

README 强调的「幻觉防御」要点包括:

  1. 契约 schema 刻意没有 code 字段,主代理物理上不能通过契约塞代码。
  2. 门禁 exit code 由插件亲自执行验收命令取得,不信回执自报。
  3. 任务前后 git status 快照差集与回执 files_changed 交叉核验;虚报即 FAIL,并把真实 diff 喂回重试。
  4. 白名单守卫:子代理对 allowed_files 之外的写入会被拒绝(tools.guard,同步、fail-open 表述见 README)。
  5. 失败重试只喂确定性内容(如 stderr 尾部、越界清单);耗尽后 verdict 为 ESCALATED,交给人类。

verdict 取值:PASS、FAIL、BLOCKED、ESCALATED。非 PASS 时 README 说明会附 workspace_delta 等现场信息,便于先验收或回滚再派新契约。

契约与裁决示例

主代理通过工具 pilot_dispatch 提交契约(schema 强校验)。典型入参如下:

{
  "goal": "一句话目标",
  "detail": "需求细节、接口签名约定、边界条件",
  "context": [
    { "path": "src/auth.ts", "note": "TokenService 在此;签发签名 sign(uid: string): string" }
  ],
  "allowed_files": ["src/auth.ts", "tests/auth.test.ts"],
  "acceptance_cmd": "pnpm vitest run tests/auth.test.ts",
  "tier": "standard",
  "max_retries": 2
}

插件回给主代理的裁决示例(主代理只看这个):

{
  "verdict": "PASS",
  "files_changed": ["src/auth.ts", "tests/auth.test.ts"],
  "gate": { "cmd": "pnpm vitest run tests/auth.test.ts", "exit_code": 0 },
  "attempts": 1,
  "child": { "model": "deepseek-v4.1-flash", "tokens": 12345 }
}

安装与启用

README 写明:尚未发布 npm。开发期可本地挂载;发布后可用第二条命令。

dsh plugin --profile web add -w link:D:\Build\dsh-pilot   # 本地开发
dsh plugin --profile web add dsh-pilot                    # npm 发布后

本地开发示例路径来自 README(Windows 路径);Linux /macOS 用户需把 link: 指向本机 clone 或下载后的插件目录,命令形式仍以 README 为准。

在 cordis.patch.yml 组合行中可插入如下配置(字段名与 README 一致):

- insert:
    - id: dsh-pilot
      name: dsh-pilot
      config:
        provider: spawn              # 子代理 provider(subagents.list() 可查)
        model: deepseek-v4.1-flash   # 钉死子代理模型
        exposure: pointer            # pointer=一行 persona 指针;silent=上下文零占用
        guard: true
        maxRetries: 2
        gateTimeoutMs: 300000
        feedbackMaxChars: 2000

README 还提到上下文纪律:P0 只注册 pilot_dispatch 一个工具;详细手册在 pilot-playbook skill 里按需载入;exposure: silent 时 persona 段不注入、skill 仅用户显式调用。设计细节见仓库 DESIGN.md §2.3。

运行环境:package.json 要求 Node >= 18。

典型用法思路

  1. 主代理在会话里摸清工程状况,把目标、细节、相关文件说明写进契约的 goal、detail、context。
  2. 用 allowed_files 限定子代理可写路径,用 acceptance_cmd 写可重复的验收命令(例如单测一条命令)。
  3. 调用 pilot_dispatch;等待插件派发子代理、跑守卫与门禁。
  4. 根据返回的 verdict 决定继续规划、改契约重派,或在 ESCALATED 时人工介入。

子代理模型与 provider 由插件 config 固定(示例为 spawn + deepseek-v4.1-flash),与「贵模型规划、廉价模型执行」的分工一致。

适用场景与注意

适合谁

  • 已在 DSH 中使用子代理,希望把「是否完成、改了哪些文件、测试是否过」从 LLM 自评改为可脚本复现的裁决。
  • 愿意用契约约束范围:白名单文件 + 明确 acceptance 命令 + 有限次重试。

务必注意

  • DSH 插件在当前 dsh 进程权限下运行;安装前请自行阅读源码与 MIT 许可证,确认验收命令与白名单符合你的安全预期。
  • acceptance_cmd 会在工作区由插件执行;应使用你信任且可重复的命令,避免破坏性操作。
  • 社区目录 SkillHub 与 DeepSeek / 幻方无 README 所暗示的官方从属关系;DSH 生态理念是「一切皆插件」,本文事实均来自上述仓库 README 与 package.json。

同作者其它 DSH 插件(README Ecosystem 节):dsh-chat-import、dsh-file-claim、dsh-perf-lens、dsh-claude-style,可与本插件组合使用,具体能力以各仓库文档为准。

结尾

dsh-pilot 把多代理协作收成「契约 + 代码裁决」:主代理少读长日志,子代理越界与虚报由插件拦截。若要进一步看契约/回执/裁决规格与生态对照,请读仓库 DESIGN.md。

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

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

Xiaoye