一切皆插件
一位律师的 DeepSeek Harness 实战记
—— 飞书发指令,电脑自己干活

2026年8月13日,DSH(DeepSeek Harness)开发者预览版 v0.1 面向全球开发者开放测试,同步以 MIT 协议开源。这个对标 OpenAI Codex 和 Anthropic Claude Code 的 AI Agent 运行框架,打出的核心口号是五个字:一切皆插件。
作为一名律师,我的第一反应不是"又一个 AI 工具来了",而是"能不能立刻用它干点实事"。
结果是:我用 DSH 协作搭建了一个飞书远程控制电脑的机器人,从部署到开源,一天内全部完成。这篇文章就是那次实战的完整记录。
DSH 是什么
DSH 是 DeepSeek 开源的一个 AI Agent 运行环境。通俗讲,它是一个"让 AI 模型能实际操作电脑"的框架——模型负责思考和决策,DSH 负责提供工具、沙箱、会话管理和调度执行。
它的核心设计理念是"一切皆插件"。基于 Cordis 插件系统,模型、工具、技能、会话、沙箱、存储、循环、调度、UI(用户界面,User Interface)等所有能力都是独立插件,可以自由替换和重组。开发者不需要改动 DSH 的源码,就能以插件方式扩展或替换任何一项能力。
DSH 提供四种运行模式:
标准模式:提供完整的工具组合,日常使用首选
PTC(程序化工具调用,Programmatic Tool Calling)模式:由模型生成一段代码来组合多轮工具调用,适合复杂任务编排
极简模式:只保留一个 shell 工具和一个文件编辑工具,用于最小环境下的模型基准测试
创造模式:可以检查当前运行时、在内存中试验插件,组合创作新的模式
还有一个设计让我印象深刻:每一次运行都有迹可循。模型看到的一切——系统提示词、思维链、工具调用与结果、子 Agent 调度——都会写入仅追加设计的会话日志。在 Trajectory 视图中,你可以按来源查看这些信息,恢复、分叉、检索与回放都共享同一份事件流。
这意味着什么?你用 DSH 做过的每一件事,都可以回头审视、复盘、改进。对于一个想把 AI 用在严肃工作场景里的人来说,这一点至关重要。
第一时间部署
DSH 的部署方式有两种。
快速体验一行命令搞定:
npx @deepseek-ai/dsh web
我选择从源码构建,因为想看清楚它的内部结构:
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web
环境要求:Node.js 22 以上版本、pnpm 包管理器。构建过程约 3-4 分钟,包括 TypeScript 编译、打包和前端构建三步。这里有一个小坑:pnpm 不要用 npm install -g pnpm安装,会有 native binary 问题。正确做法是用 Node.js 自带的 corepack:
corepack enable pnpm
corepack prepare pnpm@11.7.0 --activate
服务启动后,浏览器访问 http://127.0.0.1:3080,配置好 API(应用程序接口,Application Programming Interface)Key,就可以开始了。
我配置完模型和工作区后,打开 Trajectory 视图看了一眼——模型的每一步思考、每一次工具调用、每一个结果返回,都清清楚楚地列在那里。这种透明度,是我在其他 Agent 工具里很少见到的。
为什么要造飞书远程控制
原因很简单:律师的工作场景高度移动化。
开庭、出差、会议中,我经常需要远程操作电脑——查个文件、跑个脚本、拉取最新的法律检索结果。手机上打字发消息很容易,但如果能让电脑自动执行命令并把结果回传到飞书,效率就是指数级提升。
之前我用过 Hermes Agent 做飞书接入,也搭过 Codex 法律 Agent 的飞书 Bridge。这些探索积累了不少经验,但我一直想要一个更通用的方案:不依赖特定 Agent 框架,用最轻量的方式实现"飞书发指令、电脑自动执行、结果自动回传"。
DSH 的开源和"一切皆插件"的理念,让我觉得时机到了。
与 DSH Agent 协作搭建
整个项目是和 DSH 的 agent 对话协作完成的。我负责提需求和做决策,DSH 负责写代码、调试和打包。
技术架构不复杂:
飞书消息 → lark-cli 监听事件 → bot.py 解析指令 → 本机 shell 执行 → 自动回传结果
但要把这条链路跑通,需要解决一系列问题。整个过程分了 11 个里程碑:
每一步都是和 DSH agent 实时对话推进的。我描述需求,它给出方案和代码;遇到报错,它排查原因、给出修复。整个过程像是在和一个高效的工程师结对编程。
踩坑实录
项目踩了不少坑,挑最有价值的两个分享。
坑一:launchd 服务卡死(最耗时)
macOS 用 launchd 管理开机自启服务。配置好后,launchctl list显示进程有 PID,但 pgrep bot.py找不到进程,状态一直卡在 xpcproxy。
排查了很久,对照一个能正常工作的 plist 文件,发现差异在于:缺少 HOME和 PATH环境变量。launchd 的默认 PATH 不包含 Node.js 所在目录,导致 lark-cli 起不来,bot 启动即退出。
解决方法是在 plist 的 EnvironmentVariables中补齐 HOME 和 PATH,特别是要把 node 和 lark-cli 所在的目录加进去。
教训:launchd 不是终端环境,它不会继承你的 shell 配置。所有依赖 PATH 的程序,都必须在 plist 里显式声明。
坑二:gh repo transfer 子命令不存在
我用的 gh 版本(2.97.0)没有 repo transfer子命令。改用 REST API(应用程序接口,Application Programming Interface)解决:
gh api -X POST /repos/旧owner/仓库名/transfer -f new_owner=新owner
目标账号会收到邮件,点链接接受即可。
回到"一切皆插件"
项目做完后,我对 DSH "一切皆插件"的理念有了更深的理解。
传统的 Agent 工具通常是"一体化"的——模型、工具、会话管理打包在一起,用户能调整的空间有限。DSH 的做法是把每一项能力都拆成独立插件:想换模型?换插件。想换沙箱?换插件。想加一个新工具?写个插件。
这意味着你不会被锁定在某一个技术栈上。今天用 DeepSeek 的模型,明天想换 OpenAI 或 Anthropic,改个配置就行。对于想长期使用 AI Agent 的人来说,这种可组合性比任何一个具体功能都重要。
四种运行模式的设计也体现了同样的思路:不同场景需要不同的工具组合,不是每个人都需要"全家桶"。极简模式只给 shell 和文件编辑两个工具,反而更适合做模型能力评测——没有花哨的工具干扰,模型的真实水平一目了然。
而仅追加的 Trajectory 会话日志,解决的是"信任"问题。当 AI Agent 在你的电脑上执行操作时,你需要知道它到底做了什么。DSH 把每一步都记录下来,不可篡改,可以回溯。这不是锦上添花,而是 Agent 走向严肃应用场景的必要条件。
写在最后
作为一名律师,我并非专业程序员。但在这个 AI Agent 快速发展的时代,"会不会写代码"正在变成"能不能用 AI 工具解决实际问题"。
DSH 的开源意味着:任何人都可以在这个"一切皆插件"的基础上,组合出自己需要的 Agent 能力。律师可以用它搭建法律检索系统,医生可以用它整理病历,研究者可以用它分析数据——而你需要做的,只是描述需求,剩下的交给 AI。
这个项目的代码已经公开在 GitHub 上,欢迎 fork、PR、提 issue。
https://github.com/wxlawyers/lark-remote-control
用代码重塑法律工作流的律师
本项目由 DeepSeek Harness agent 与用户协作完成。
DSH 仓库:https://github.com/deepseek-ai/deepseek-harness
飞书远程控制项目仓库:https://github.com/wxlawyers/lark-remote-control
夜雨聆风