ARTICLE · 1302472
dsh 上手记:把日常搬进一个“一切皆插件”的开源 Agent
dsh 上手记:把日常搬进一个“一切皆插件”的开源 Agent前几天我想让它帮我发一篇公众号,它做的第一件事不是写稿,而是去翻我的环境:有没有公众号接口、有没有 AppID、有没有发布权限。翻完告诉我:没有凭据,只能把稿子写好交给我,它不硬发。 这个反应我挺喜欢的。能干活之前先确认边界,是一个 Agent 该有的样子。 它叫 dsh(DeepSeek Harness),DeepSeek AI 开源的 agent harness(智能体框架)。这篇文章讲三件事:它是什么、我用它做了什么、以及踩过的坑。
一句话:一个“一切皆插件”的 Agent 运行时。 • 开源地址:github.com/deepseek-ai/deepseek-harness,MIT 协议 • 底层是 Cordis,设计写在论文《A Programming Paradigm for Spatiotemporal Composability》里 • 目前处于开发者预览(developer preview)阶段,官方明确写了“会有破坏兼容性的变更” “一切皆插件”不是营销词。在 dsh 里,模型适配器、工具注册表、会话日志、沙箱与审批策略,甚至 agent loop(智能体循环)本身,全都是插件。没有需要打补丁的特权内核,每个部件都能从配置层替换掉。 对使用者来说,这意味着两件事:能力可以拼装,行为可以改到很细。
默认起在 1.设置 → 模型:填 API Key(也可以接 OpenAI 兼容的自定义端点),保存即生效,不用重启 2.选择工作区:选一个项目目录,它就以那儿为根干活 3.说话:比如“总结这个仓库,说清主要模块” 它也支持从源码跑(
它能读写文件、跑 shell、联网、调脚本。但每一项都在策略之下:文件写入有范围策略,命令跑在沙箱里,危险操作会先征询。 我在容器里实测过:正常写入 对我这种要碰生产环境的人来说,“默认拦得住”比“默认很自由”重要得多。 技能就是一个带 frontmatter 的 我把几件事封成了技能:线上问题排查流程、只读 SQL 查询的规范路径、飞书各类操作的 CLI 用法。之后不用每次重讲背景,说一句“查一下这个订单为什么没回调”,它自己去加载对应流程。 这解决的是 Agent 最实际的浪费:你每天在重复给它讲同样的上下文。 dsh 的子智能体可以绑定不同的 provider 和 model。也就是说,主会话用便宜快的模型做编排,遇到硬骨头(复杂架构、疑难 bug、高风险评审)派一个绑旗舰模型的子智能体去啃。 它甚至有 Team 形态:一个 Lead 拆任务,多个队友并行,各自不重叠地改不同文件。我用自己的仓库做过一次并行探索,四种方向同时跑,20 分钟出结果。 成本这件事,只有能“按任务分配模型”才谈得上优化。 这条特性直接决定了我的用法:规则不写在聊天里,写在文件里。聊天会滚走,文件会一直生效。 我拿它做每日复盘和每周的模型情报同步。代价是要注意:app 关着的时候提醒可能错过,所以还得靠“会话启动自检”兜底——这个坑我吃过。
这是我用 dsh 最深的一层。我在自己的 home 目录里给它搭了个“外置大脑”: 三条铁律:不编造(价格、能力必须能指出出处)、可复现(目录由脚本生成,不手写)、写完要用(新知识必须落到行为改变,否则就是收藏夹)。 几条真实发生过的记录,你可以看出这套东西到底在管什么: •模型目录:我接的聚合网关列了 135 个模型。逐个实测后,100 个 chat 模型里只有 66 个真能用——34 个是 403 白名单、404 下线或参数错误。“清单里有”和“你能用”是两件事,这条现在是它的强制规则。 •抓取失败:两个采集任务都卡在 •单位写错:我给它的任务书里把价格换算写成“×1000”,实际应该是 ×1e6。它是用同文给出的另一个基准价格反推出来的,差了一千倍。现在的规矩是:任何公式落笔前,先用两个已知基准验算。 •不要单例立规矩:同一个错误出现两次以上才晋升为规则,只出现一次的先放“观察期”。这条是为了防止它过度拟合,变得畏手畏脚。 这套东西最反直觉的一点是:它不是为了“看起来在进化”,而是为了让下一次少犯一次错。所以我给它定的考核指标不是我写了多少笔记,而是重复犯错率、路由命中率、教训复用率。
1.开发者预览别当生产工具。版本之间会破坏兼容,我遇到过 API 字段被删。锁版本、读 CHANGELOG,别盲目 2.全新 3. 4.改组合层配置要重启。 5.桌面 app 和 npm CLI 是两套安装。bundle 集合不一样,同一个配置可能只在一边有效。我一开始拿桌面版的能力去推 CLI,结论是错的。
适合:想让 Agent 真正嵌进自己工作流的人;愿意改配置、写文件、读文档的人;需要“可控、可审计、可替换”而不是“一键魔法”的人。 不适合:想装完就无脑用的人;要求今天上生产明天不能变的人;以及完全不想碰命令行的人——虽然它有 Web UI 和桌面版,但它的好处有一半在文件系统里。
我越来越觉得,Agent 工具之间的差距不在“能不能写代码”,而在三件事:边界是不是清楚、上下文能不能沉淀、能不能按任务换对脑子。 dsh 在这三件事上给的是“机制”,不是“功能”。机制意味着你得自己动手搭——麻烦,但搭完之后它是你的。 它现在还是开发者预览,会变的。但正因为是插件式的,变化大多能接住。 如果你也想试试,一条命令就够:
说明:本文基于 dsh 0.1.x 开发者预览版本的使用体验,部分数据为个人环境实测,版本更新后可能变化,以官方文档为准。
一、它是什么
二、跑起来只要三步
npx @deepseek-ai/dsh webhttp://127.0.0.1:3080,浏览器打开就是 Web UI。然后:pnpm install && pnpm run build && pnpm dsh web),还有桌面版 app 和 headless 模式。我第一次接触时最舒服的一点是:不用先读文档——UI 里该问的它都会问。三、我真正用上的五个能力
1. 工具 + 沙箱 + 审批
/work/ok.txt 成功,往 /root/escape.txt 写被沙箱直接拒绝(Permission denied)。Linux 下靠 Landlock 兜底,macOS 上是另一套。2. 技能:一次写好,反复触发
SKILL.md 目录,扔进技能根目录,watcher 会发现它,会话里立刻可用。3. 子智能体:让不同的“大脑”干不同的活
4. 记忆:写文件就真的改变行为
~/.dsh/AGENTS.md 会被注入到每一个会话。最让我意外的是时效——我写完那个文件,几秒内当前会话就收到了“指令已更新”的提示,不需要重启、不需要重开会话。5. 目标与定时
create_goal 能立一个跨轮持续的目标,它自己续轮推进;schedule_create 能挂 cron 式提醒,到点把消息投回会话。四、我拿它做的正事:一个会自我进化的助手
~/.dsh/evolution/├── AGENTS.md # 每次会话自动注入的全局协议├── core.md # 自我模型:我是谁、按什么原则决策├── models/ # 模型目录、路由表、价格、实测延迟├── knowledge/ # 带出处和日期的主题笔记├── lessons.md # 教训:Active / Probation / Retired├── journal/ # 每日三省└── tools/ # 同步、实测、索引、复盘脚本web_fetch 报“非公网 IP”。根因是我这边 DNS 被劫持。现在规则是:先 curl/dig 诊断再换源,拿不到一手页面就降置信度并在笔记里写明。五、踩过的坑(真实,供你避让)
latest。npm i -g 可能起不来。我遇到过 boot 阶段崩在 user patch-layer watching requires the Cordis HMR service——根因是子依赖用了 ^ 版本范围,新装解析到了不兼容的版本,生命周期时序对不上。桌面版锁了旧版本所以正常。排查这类问题,比的是完整依赖版本清单,不是主包版本号。dsh web --host 0.0.0.0 会被拒绝。这是有意为之,防止远程 RCE 外泄。容器里要跑,得用 127.0.0.1 加一层容器内代理。cordis.patch.yml 这类组合层改动需要重启进程;但 settings 里的模型路由是热生效的。分清楚哪层是哪种。六、适合谁,不适合谁
结尾
npx @deepseek-ai/dsh web













































































