dsh-crew — 把一次任务交给一支角色小队:产品经理就在你的会话里,评审员只有只读工具,只有它能动 git #3212
Replies: 1 comment
|
这条帖子值得单独提炼一个原则:允许清单 > 禁止清单。 你"禁掉 write/edit 却被 另外两点:
flat crew 的设计理由(dsh 层级硬规矩 → 角色间靠文件交接)逻辑自洽,安全边界的取舍都摆在了明面上,质量很高。 |
|
这条帖子值得单独提炼一个原则:允许清单 > 禁止清单。 你"禁掉 write/edit 却被 另外两点:
flat crew 的设计理由(dsh 层级硬规矩 → 角色间靠文件交接)逻辑自洽,安全边界的取舍都摆在了明面上,质量很高。 |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
非官方项目,由社区成员独立开发与维护。
仓库:https://github.com/stuarthu/dsh-crew · npm 包名:
dsh-crew(0.4.3)· MIT 许可它是什么
dsh-crew把一次任务交给一支小队来做。你自己的 dsh 会话变成 产品经理,也是唯一跟你说话的角色。它先写清「做完」的标准,等你确认,再叫 架构师 做设计、工程师 写代码、代码 / 安全 / 文档评审员 和 测试 做检查。调研员 会先在仓库里找答案,所以你只会被问文件回答不了的问题。dsh plugin --profile tui add dsh-crew # 或 --profile web重启 dsh,开会话时选 Crew 这个预设。
分成两半,因为工具不住在 profile 里
dsh 把模型能看见的工具放在预设(agent preset)里,不放在 profile 里。所以这个插件分成两半:
crew预设crew预设就是 dsh 自带的standard,去掉subagent、subagent_fork、workflow、ralph和产品类子代理,换成小队角色。在这个预设里,能起代理的只有小队角色这一条路。为什么小队是平的
dsh 有三条硬规矩:消息只能发给 直接的下级;下级只向 直接的上级 汇报;两个下级之间 完全不能 通话。所以只有产品经理起代理,每个角色都是它的直接下级,角色之间靠磁盘上的文件交接,而不是聊天。要是让架构师去起工程师,产品经理就再也联系不到工程师了。
评审员用「允许清单」,是两次实测逼出来的
角色不是产品经理粘过去的一段提示词,而是用
@deepseek-ai/dsh-tool-subagent做出来的真工具,人设就是那个下级自己的系统提示词。评审员手上只有read、glob、grep。之前用「禁止清单」的时候,发生了两件事:write和edit之后,它用echo hello > file照样把文件建出来了 —— 命令行本身就是一个写文件的工具。workflow、ralph和一组控制桌面的 MCP 工具,每一个都是出口。禁止清单说不出一个环境里还没装的东西,允许清单不需要说。每个角色工具还带着
maxDepth: 1,所以小队的下级不能再起下级。只有产品经理动 git
host/git-guard.js会看每个代理(产品经理也一样)发出的每一条命令,这些一律拒绝:推main/master/trunk/develop/HEAD或者不写分支名;推标签、删远端分支、--mirror、--all、强推;npm/pnpm/yarn/bun publish、npm dist-tag、gh release create;推向一个看起来会自动发包的仓库;还有任何碰到那个批准文件的命令 —— 代理不能自己批准自己。别的分支要推,得你亲手建一个一次性的文件(
touch ~/.dsh/crew/push-ok),一推就被删掉。每一次推之前产品经理都会问你,改完再推也要再问一次。说句实话:它读的是命令的字面文本,是一根很结实的安全带,不是一道锁死的门 —— 藏在脚本文件里的命令还是可能溜过去。真正的关卡还是 dsh 自己的审批弹窗。
已知粗糙的地方
每个角色工具显示出来的,都是 dsh 通用的那句委派说明,因为
dsh-tool-subagent没有「按行单独写说明」的设置。要是现在已经有办法做到,欢迎告诉我。也欢迎聊聊升级预设这条路:新版本会整个替换掉预设文件夹,把你改过的文件留成
agent.cordis.yml.bak—— 能用,但不好看。All reactions