前两天,DeepSeek 发布了 DeepSeek Harness。
印象最深的是它对" 一切皆插件 "的坚持,而且做得相当彻底。
Skills、MCP 和 UI 只是比较容易看到的部分。
继续往下看,模型适配器、工具、文件系统、会话存储、沙箱,甚至 Agent Loop 都可以通过插件组合。
运行中的 DeepSeek Harness,就是一棵由配置组装出来的插件树。
插件挂载时,可以向共享上下文注册服务、事件和界面。
插件卸载后,对应的注册也会撤销。想换掉某部分能力,通常只需要在配置树里替换一项,或者插入一个新插件。
这个思路很激进。非常厉害。
DeepSeek Harness 目前的使用门槛还是偏高。
首先是部署。官方启动方式已经很简单了,安装 Node.js,再去终端里执行一条命令就能跑起来。
但对不写代码的人来说," 打开终端 " 本身就是一道门槛。
我给一些朋友推荐开发者工具时,经常在这一步失去他们。
另一个问题是界面。原来的 Web UI 功能基本齐全,使用时仍然能感觉到它处在开发者预览阶段。
很多能力已经接进来了,交互细节还没有来得及逐个整理。
所以我做了 Pilot Harness。
https://github.com/op7418/pilot-harness
可以先把它理解成 DeepSeek Harness 加上一层桌面外壳,再配上一组客户端插件。
桌面端启动后,会在本机运行 DeepSeek Harness,然后把 Web UI 加载进原生窗口。
窗口管理、目录选择、数据目录和运行时重启交给桌面端处理,Agent 和工具执行继续沿用 Harness 原来的实现。
如果你已经部署好了 DeepSeek Harness,也可以跳过桌面客户端,单独安装自己需要的插件。
UI 和交互:从开发者预览变成日常工具
DeepSeek 原版 UI 的目标很明确:先把 Harness 的能力完整地露出来。
工作区、会话、模型选择、权限模式、Trajectory 和插件设置都已经有了。
对于刚发布的开发者预览版本,这个完成度其实挺高。
只是把它当成一个每天使用的 Agent 客户端之后,一些问题会慢慢冒出来。
比如左侧栏。原版已经支持工作区和多级会话树,但工作区、会话和当前任务的视觉差别比较小。
项目多了之后,需要花一点时间确认自己在哪个目录、当前打开的是哪条会话。
点击项目主要用于展开和收起,会话的新建入口则放在旁边,切换项目时容易多走一步。
我把桌面端里的项目点击改成了更直接的逻辑:
点击一个未激活的项目,会直接切换到该项目并进入新会话。
已经激活的项目继续保留展开和收起操作,旁边的加号也还在。
会话 Hover 卡片也补了更多信息。
现在可以看到会话所属的工作区、项目路径、Agent 模式、模型以及定时任务等信息。
这里预留了插件插槽,所以后面安装其他插件,也可以继续往 Hover 卡片里加内容。
输入区的变化更明显。
DeepSeek 原版在空会话里,会把工作区和 Agent 模式放在输入框外面;
进入会话后,统计和上下文信息又会出现在输入框下方。功能都能找到,只是不同状态下的位置会发生变化。
我把空会话需要选择的工作区、权限和 Agent 模式收进了输入框。
开始对话后,低频的上下文信息会进入 Context 弹层,常用的模型选择、附件、停止和发送按钮继续放在输入区里。
这样从空会话进入工作状态时,页面不会突然多出一条信息栏。
输入框的 Focus 状态、禁用状态和发送状态也分别做了反馈。
原版比较大的圆形发送按钮被换成更紧凑的方形按钮,附件、模型、Context 和权限控制的尺寸也统一了。
信息仍然很多,视觉上安静了一些。
这部分交互经验主要来自 CodePilot。CodePilot 是我之前做的 Agent 客户端,从产品、设计到开发都是我一个人完成的,开发过程中大量使用了 AI。
做了几个月以后,我对 Agent 客户端里哪些信息需要常驻、哪些适合收起来,以及用户会频繁点击什么,已经有了一些自己的判断。这次基本都搬到了 Pilot Harness。
设置页面、菜单、弹窗和工具调用卡片也一起调整了。
DeepSeek 原版里有不少通用配置表单,比较接近框架配置的原始结构。
我重新整理了页面导航和表单层级,让服务商、模型、插件和通用设置各自有固定入口。
样式层面的改动包括字号、间距、圆角、边框和明暗主题,交互上则补了 Hover、Focus、选中、加载和错误状态。
原版已经提供了轨迹功能,我保留了它的数据和事件逻辑,重新处理了时间轴、工具栏和表格。
现在可以搜索执行记录、查看每个阶段的时间分布,也可以导出日志。
遇到 Agent 行为不符合预期时,直接在这里查它收到了哪些上下文、调用了什么工具。
这些改动被放在独立主题和 UI 插件里。关闭插件,界面会恢复到 Harness 原来的样子。后面继续同步上游时,也能看清楚哪些是 DeepSeek 的功能,哪些是我增加的交互。
侧边栏和文件树插件
我平时使用 Agent 时,经常需要查看当前目录。
Agent 说它修改了某个文件,我会想点开看看;它新建了目录,我也想确认一下结构。
有时候我只是想把一个文件路径放进输入框,让 Agent 接着处理。
每次切回 Finder 或编辑器,会把操作过程弄得很碎。
现在左侧栏可以管理多个工作区,并按工作区展示对应的会话。
点击底部的 Files,右边会打开当前项目的文件树。
在文件树里,可以展开目录、新建文件或文件夹、重命名,也可以调用系统应用打开文件。
需要让 Agent 处理某个文件时,可以把路径直接添加到输入框。
文件操作被限制在当前工作区里。
工作区根目录不能被重命名,符号链接也会额外检查,避免文件树越过当前项目。
服务商配置插件
模型服务商的配置也重新做了一遍。
原来的配置方式对开发者没有多大难度,不过第一次使用时,需要先理解服务商、模型、API Key 和配置文件的关系。这些概念一次摆在用户面前,很容易让人停下来查文档。
现在设置里有单独的 Providers 和 Models 页面。
在 Providers 页面,可以搜索并添加 DeepSeek、Anthropic、Google、Amazon Bedrock、Azure OpenAI、Groq、Cerebras、Fireworks、Cloudflare、Kimi Coding、Hugging Face 等服务商。
列表之外的服务商,可以通过自定义地址接入,只要它兼容对应的 API 协议。
服务商连接完成后,Models 页面会列出可用模型。
每个模型旁边会显示图片输入和 Reasoning 等能力标签,也可以按这些能力筛选,并指定默认模型。
这些页面负责把配置过程整理清楚。
API Key 仍然交给 Harness 的凭据插件保存,服务商配置进入设置插件,运行时模型路由由 LLM 插件处理。
已有的插件边界都保留了下来。
Mac、Windows 和 Linux
Pilot Harness 支持 macOS、Windows 和 Linux。
macOS 提供 DMG 和 ZIP,Windows 使用常规安装包,Linux 提供 AppImage、DEB 和 RPM。
桌面版使用系统原生的目录选择窗口,第一次使用时选一个项目,就可以直接开始会话。
客户端会定期同步 DeepSeek Harness 的更新。
适配成本依然存在。上游如果调整 UI 插槽或页面结构,主题插件需要重新做视觉回归;
配置协议变了,对应插件也要跟着改。好处是需要维护的范围比较清楚,不会把整套客户端拖进长期分叉。
做完这个客户端之后的一些感受
做这个的时候,还是因为认同 DeepSeek Harness" 一切皆插件 "的理念。
所以做的时候,尽量把所有的东西都拆开,变成一个一个的插件,这样既方便更新,也方便大家单独安装。
现在做 AI 产品,变化速度太快了。模型接口会变,Agent 的工作方式也在变,今天觉得稳定的交互,过几个月可能就要重新设计。
能力全都绑在一起,每次调整都会带出一串迁移工作。DeepSeek Harness 选择先把系统拆开,允许使用者重新组合。
模型和 Agent 的自我训练、自我迭代,现在也有不少项目在探索,Pi 一类项目里就能看到类似思路。
DeepSeek Harness 走得更远一些,它把自己的组成部分也开放出来了。
以后 Agent 如果要参与调整自身配置,至少已经有一套可以识别和替换的组件结构。
这离 Agent 自己进化产品还很远,目前更多是在准备接口。
可我愿意看这种尝试。Harness 暂时没有成熟 C 端产品那种沉重包袱,可以承受频繁改动,也可以试一些风险更高的架构。
Pilot Harness 目前加了几项我自己需要的东西:
更顺手的界面、项目文件树、服务商配置和三个平台的桌面安装包。
后面 DeepSeek Harness 继续更新,我也会继续跟。
如果觉得有需要,或者是想尝试一下,可以到这里试试:
也可以帮我点个赞,或者是转发给你需要的朋友们。


登录后才可以发布评论哦
打开小程序可以发布评论哦