https://github.com/deepseek-ai/dsh-superagent-prototype解读一下

回复 贝尔 读完了,仓库和七篇文档都过了一遍。这个 prototype 的重点不在“让 agent 更会干活”,在“怎么不让 agent 烧掉团队的注意力”。核心原则原文一句话:take as little human attention as possible and give as much value as possible。 它是什么 一个“一个仓库配一个常驻 agent”的东西,打包成 DSH(DeepSeek Harness)的 bundle。它监听 GitHub,可选接飞书。有人向它要活,它开一个 Ticket,在自己的 session 和自己的目录里干,最后回到原来那个对话里回话,通常是一个 PR。另有一个 web 面板,只列“需要人处理”的事。 几个设计判断,我觉得比代码值钱 第一,激活靠门,不靠自觉。它只在两件事下动手:有人直接点名它、且这个人在白名单里;或者团队写了规则允许的主动行为。后者还有一个 observe 默认档:评估了但只记录“本来会接受”,不真的执行。要等你翻一遍这些记录,确认靠谱了,才切 auto。这个设计很扎实,绝大多数 agent 产品没有这一层,直接上线就抢活。 第二,把“只说话当有人必须行动或能用上结果”写成硬规则。确认一次、干活时闭嘴、有结果或要决定、或者干不下去才再说话。它对噪音的处理方向是“把 prompt 写短写严,或者暂停它”,明确写了“不要加更多消息去解释噪音”。 第三,权限和内容分开。消息、评论、被引用的文档都只是决策的输入,改不了允许列表和规则。这个边界写得很清楚,是很多 agent 系统会混掉的地方。 第四,执行是异步、可恢复的。worker 目录默认 /work,跑 prepare 命令建 worktree;前台 shell 超过 5 秒自动转后台,这样 worker 能在下一步收到新消息而不是干等长命令。每个 turn 结束后后台最多再跑 30 分钟,超了杀 shell job 并报 waiting;子 agent 可以继续。停服、重启、重试都有对应的恢复路径,还有个细节:重启后新的 Assignment 会先去目录和 git history 里确认,再重复任何外部动作。 第五,交还给人时按影响面停。局部改动做到可 review 为止,需要设计决策就带着一个具体问题停下来,一次只问一个结构化问题。这条对“agent 别一口气跑偏二十步”特别实用。 第六,设计上克制概念。文档明确说:新业务需求只能变成已有概念(比如 Source)的属性,或者一段 prompt,不许新增概念。设置也同理,能用一个默认值覆盖的就别加开关。这个自律很少见,多数框架是一有需求就加一层抽象。 它的边界,得说清楚 仓库自己声明是 research prototype,不是官方产品,代码大部分是 coding agent 写的,工程风格可能不一致,可能还有 bug,用之前要自己 review 和适配。而且它为了公开做了改写,跟内部版本和那篇《Exploring Super-agent Design》里描述的不完全一致,文章里有些设计还只是方向,没实现。 具体我看到的短板:执行 root 默认 /work,worker 以运维者的 OS 用户身份无审批跑命令,文档自己承认那些 wrapper 和目录只是给默认值,不是安全边界——绝对路径照样能执行程序。所以这东西适合放在隔离的机器或容器里跑,别直接挂在你主力机上。 另外 auto-merge 那段是 prompt 层面的约定,不是 host 逻辑:默认只允许本 Ticket 开的 PR、有覆盖 head commit 的批准、增删合计少于 200 行才自动合。这个是靠指令约束,不是靠机制强制,真要卡住得去开 branch protection。 对你有什么用 你方向是记忆和理解状态层,这个仓库里最值得抄的不是记忆(它这块很薄,靠 Ticket、Thread、Subscription 这些结构做上下文归属),而是三件事: 一是“归属”这个概念。一条消息到底属于哪个 Ticket,谁来处理,交还回去算谁的,什么时候退回到重新评估。它用 followupOwners、handback、released follow-ups 一整套状态机把这件事说死了。你做记忆中“哪段对话归哪条任务、什么时候该把它从活跃上下文里踢出去”,是同一类问题。 二是“先记录、后执行”。所有副作用都是 enqueue 进事务里,提交后才执行,失败按指数退避重试,还能被 pause 冻住。记忆写入如果能做成 durable side-effect queue,而不是模型调完就了事,丢数据和重复写入的问题会少一大半。这个跟你不喜欢 embedding、倾向把检索外置成工具的思路是一致的。 三是不用 RAG 也能做的召回。它靠订阅关系(Thread → Tickets)决定什么消息进哪条上下文,是结构化的路由,不是相似度检索。你之前研究过目录树式记忆,这个是另一种解法:按任务归属分区,而不是按语义分区。 要不要深读:我建议直接看 002 授权和 003 执行这两篇,其余的是实现映射。001 域模型那篇我两次抓取都失败,你本地读吧。