dsh-cat-loop:一个对话里三套独立 Agent Team 与强制权限边界

前言

在 DeepSeek Harness(dsh)里做多智能体协作时,常见做法是让一个总控 Agent 通过 subagent 派活。这样会碰到几类具体问题:子智能体只是父会话的子对话,成不了 Team Lead,也拉不起自己的队友;Plan、Build、Review 挤在同一上下文里,文件与命令权限往往只能靠提示词「约定」;侧边栏里也不方便点进某一角色、直接接管那一队的会话。

下面介绍社区插件 dsh-cat-loop(npm 包名 @marvinlee2011/dsh-cat-loop,仓库 lee-nihao2333/dsh-cat-loop)。它在一次 cat-loop 工作流里同时拉起 Plan、Build、Review 三个独立的 Agent Team 根会话,并在 Host 侧用守卫强制执行各队的读写与 shell 边界,而不是把规则只写在系统提示里。

这是什么

dsh-cat-loop 是 dsh 的工作流类插件:新建 preset 为 cat-loop 的对话时,该对话即 Plan 团队(真实 Team Lead,可 spawn_teammate);插件还会在同年工作区里创建 Build、Review 两个独立的 Agent Team 会话。三者在侧边栏呈现为「一个根对话 + 可展开的 plan / build / review 子行」,点任一行进入对应团队的真实会话。

维护与源码归属:GitHub 仓库由 lee-nihao2333 托管;npm 元数据中 author 为 marvinlee2011。分类上属于 工作流。插件在 SkillHub 目录页 可查;该目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

三队独立、可见可切换

  • 选 cat-loop preset 进入的对话是 Plan 队(内部 preset 为 cat-plan)。
  • Build、Review 为无父会话的 root 会话,各自安装 Agent Teams 工具,可再拉队员。
  • 侧边栏 Plan 行左侧 ▸ 展开后可见 plan / build / review;右侧「子对话 / Sub-conversations」面板同步三队状态。Build、Review 的原生侧边栏行由 Client 半隐藏,以子对话形式挂在 Plan 下,点击后仍打开独立团队会话。

工作流与协作工具

典型流转(README 原文):

用户需求 → Plan 写 .cat-prompt/*.md 任务文档
        → cat_send 派发给 Build + Review
        → Build 实现;Review 同时在 .cat-test/ 写检查代码
        → Build 完成 → cat_send(code-ready) → Review 跑检查 + 审查
        → cat_send(report) 回 Plan → 通过则下一个任务,不通过则写修复 brief 再来一轮

各队除插件提供的 cat_send、cat_status 外,仍可使用 Agent Teams 自带工具(spawn_teammate、send_message、team_task_* 等);队员挂在各自团队对话下,继承队长 preset 与权限边界。

权限由 Host 强制执行

边界由 lib/guard.js 实现,两层机制:fs/write-intent、fs/edit-intent 按真实路径判定;ctx.tools.guard() 限制 shell 类工具。

团队 preset 文件边界 shell
Plan cat-plan 只可写 .cat-prompt/,其他只读 无 shell 工具
Build cat-build 可读写任意文件,除 .cat-test/ 有;命令不得出现 .cat-test
Review cat-review 只可写 .cat-test/,其他只读 有;命令路径须在 .cat-test/ 内

默认目录名可通过配置改:promptDir 默认 .cat-prompt,testDir 默认 .cat-test。

架构要点(便于排查)

  • Host:ctx.catLoop(会话快照、团队管理、cat_send / cat_status)、权限守卫、只读本机路由 GET /api/cat-loop/peek?session=、/api/cat-loop/state?session=;状态文件默认 $DSH_HOME/cat-loop/state.json。
  • Client:子对话展开面板、隐藏 Build/Review 原生行、对话头部子对话按钮与右侧面板。
  • 三队 cwd 均为项目根,不额外创建工作区;可选 structure: folder 把三队放进独立 workspace 文件夹(旧布局)。

安装与启用

环境要求(来自 package.json engines):

  • Node:^22.19.0 || >=24.0.0
  • dsh:>=0.2.1-rc.2 <0.3.0

方式一:插件管理器(推荐)

在 dsh Web 的「插件」页安装 @marvinlee2011/dsh-cat-loop(bundle),或在 profile 的 $DSH_HOME/profiles/<profile>/package.json 中加入:

{
  "dependencies": { "@marvinlee2011/dsh-cat-loop": "^1.0.0" },
  "dsh": { "profile": { "bundles": ["@marvinlee2011/dsh-cat-loop"] } }
}

然后重启 dsh(Host 半改动需重启;Client 半刷新页面即可)。

方式二:本地开发(link)

{
  "dependencies": { "@marvinlee2011/dsh-cat-loop": "link:/path/to/dsh-cat-loop" },
  "dsh": { "profile": { "bundles": ["@marvinlee2011/dsh-cat-loop"] } }
}

npm 包:https://www.npmjs.com/package/@marvinlee2011/dsh-cat-loop。许可证:MIT(当前资料中版本为 1.0.0)。

典型用法

  1. 新建对话:工作区选项目目录,preset 选 cat-loop,进入 Plan 团队后直接描述需求。
  2. 查看与切换:侧边栏展开 Plan 下的三子对话,或打开右侧子对话面板,点进 build / review。
  3. 协作:Plan 在 .cat-prompt/ 写任务 md,用 cat_send 派发;Build 改源码,Review 在 .cat-test/ 写检查脚本并审查;完成后经 cat_send 回 Plan。可用 cat_status 查看三队会话与状态。
  4. 验证权限(可选):在 plan 里试 bash 应无工具;Plan 写 src/ 应拒绝、写 .cat-prompt/test.md 应成功;build 写 .cat-test/ 应拒绝;review 写 .cat-test/check.mjs 应成功、执行带项目根路径的命令应拒绝。README 称上述行为在 test/policy.test.mjs、test/plugin.test.mjs 中有自动化用例。

配置项(Host,cordis.patch.yml 中 id: cat-loop)

配置项 默认 说明
promptDir .cat-prompt Plan 任务文档目录
testDir .cat-test Review 检查代码目录
presets root/plan/build/review 映射 角色到 preset id
structure nested nested 或 folder
hiddenPresets [cat-root, cat-build, cat-review] 选择器隐藏项
stateFile $DSH_HOME/cat-loop/state.json 插件状态文件

适用场景与注意

适合谁:希望在 dsh 里用 Plan–Build–Review 分工、且需要可点击切换的三套真实 Agent Team、并依赖 Host 守卫而非纯提示词约束权限的团队。

务必注意:

  • 插件与 dsh 进程同源权限运行;安装前建议阅读仓库源码与 MIT 许可证,确认边界符合你的安全要求。
  • 不要指望用 Plan 队直接改业务源码或跑 shell;实现与检查应分别在 Build、Review 会话中进行。
  • dsh 版本需落在 >=0.2.1-rc.2 <0.3.0 区间,否则可能不兼容。

结尾

dsh-cat-loop 把「一个对话里协调三套 Team」和「文件 / shell 权限硬边界」绑在一起:Plan 只写 .cat-prompt/ 且无 shell,Build 避开 .cat-test/,Review 专攻 .cat-test/ 与受限命令。若你正在 dsh 上试验多 Agent 工作流,可从目录页或 GitHub README 对照安装与验证步骤。

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

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

小夜