DeepSeek Harness Web UI 详解:工作区、会话、权限与设置
DeepSeek Harness Web UI 的工作方式:选择工作区、发送任务、审批弹窗、权限预设、目录选择器,以及整个 UI 插件生态。
DeepSeek Harness(dsh)的 Web UI 默认在本地 http://127.0.0.1:3080 运行,核心流程是:在 Settings → Models 配置模型,选择一个工作区目录,然后新建会话、发送任务。除此之外——权限预设、目录选择器、/compact,以及整个视觉层——要么是内置默认值,要么就是可替换的插件。本文带你走一遍你真正会打交道的每一部分。
打开 Web UI
npx @deepseek-ai/dsh web
dsh web 是 dsh --profile web 的硬编码别名,启动一个默认绑定在 127.0.0.1 的本地 HTTP 服务。如果你还没配置模型 provider,请先看 配置你的 DeepSeek API Key 与模型 再继续往下读。
为什么不能绑定 0.0.0.0
--host 这个 flag 是存在的,但 0.0.0.0 被有意设计为不支持。官方给出的理由很直接:把 Web UI 暴露到网络上等于暴露远程代码执行能力,因为 agent 可以跑 shell 命令、写文件。有用户尝试用 socat 或端口转发来绕过这个限制(Discussion #76);据反馈,工作区加载和文件选择器在这种配置下仍然会出问题,所以这不是一个干净的绕过方案。如果你需要远程访问,用你自己信任的隧道(SSH 端口转发、VPN)指向 127.0.0.1,而不是试图让服务本身绑定到一个公网接口。
工作区
工作区是 dsh 用来当作 agent 工作环境根目录的一个目录。你没法在不选工作区的情况下开始会话——"新建会话"流程会一直卡住,直到你选定一个工作区。
目录选择器有两种后端:
| 后端 | 工作方式 |
|---|---|
directory-picker-native(以及 -auto 变体) | 使用操作系统原生的文件夹对话框 |
directory-picker-browse | 应用内、浏览器渲染的文件夹浏览器 |
具体来说在 Windows 上,原生选择器依赖一个叫 koffi 的原生绑定,它有一个已知的安装失败模式(directory picker failed: win32 folder dialog worker exited before reporting a result,Discussion #30)。有记录在案的修复方法是:用 --ignore-scripts 重新安装,然后编辑 ~/.dsh/profiles/web/cordis.patch.yml,禁用原生选择器插件,改为插入 directory-picker-browse 及其客户端 UI 包——完整命令序列见我们的 平台安装指南。
进入工作区后,dsh 会自动加载它在根目录能找到的任何 AGENTS.md 或 CLAUDE.md 文件,渲染预算最多 65,536 字节,并把这部分内容并入该工作区下每一个会话的 agent 上下文中。
会话与 Agent 循环
在工作区内,你新建会话并发送任务。agent 可以读写文件、跑 shell 命令、委派给子代理,并在工作过程中流式输出它的计划和工具调用。有几个会话层面的选项值得了解:
- 极简(Minimal)预设——一种内置的精简 agent 模式:系统提示固定为
You are a helpful software engineer assistant.,只挂载bash和str_replace_editor两个工具,没有其他 prompt 段落或面向模型的插件。当你想把某个任务的表面积压到最小时很有用。 /compact——一个人类命令(不是面向模型的工具),触发 dsh 的上下文压缩机制(由compaction系列包支撑),在不丢失工作状态的前提下缩小对话历史。- 会话内容在会话期间用一个内存 SQLite 存储做索引。
权限与审批弹窗
每一个新会话都有一个权限预设——沙箱模式与审批策略的配对。dsh 默认提供两档:
| 预设 | 沙箱模式 | 审批策略 |
|---|---|---|
workspace-write(新会话默认值) | 写操作被限制在工作区根目录 + 平台临时目录内;网络访问不受限 | ask——超出这个边界的操作你会看到一个弹窗 |
danger-full-access | 完全不做沙箱 | never——任何操作都不需要确认,直接执行 |
还有第三种沙箱模式 read-only,虽然存在,但不是两个默认预设之一——如果你配置了对应的自定义预设,它就可用。当 agent 尝试做当前策略会拦截的操作时,你会看到一个就地弹窗,询问是否允许或拒绝;在默认的 ask 策略下,不会有任何操作静默发生。自定义预设可以在配置里自行定义,不过名字 custom 本身是保留字,不能被用作自定义预设的名称。
如果你是在为共享的团队环境(而不是单人使用)搭建这套东西,请参考 DeepSeek Harness 权限与沙箱 和 在团队中运行 DeepSeek Harness,那里有本文没有展开的沙箱后端和策略细节。
插件层:哪些是内置的,哪些要自己装
默认 Web UI 里除核心聊天流程之外看到的几乎所有东西——侧边栏、主题、文件提及选择器、通知徽标——本身都是 Cordis 插件,和工具、模型适配器用的是同一套机制。也就是说,官方默认的 Web UI 有意做得比较朴素,人们通常归功于竞品的那种"打磨感",在 dsh 这边大多来自社区插件而不是内置功能。
dsh plugin --profile web add github:zhu1090093659/dsh-web-ui
这条命令会安装 dsh-web-ui-all——一个包含任务看板、Git 图谱和扩展侧边栏面板的 Web UI 插件合集,是 FindHarness UI 分类下 star 数最高的条目之一。其他值得关注的方向:
- 主题与皮肤——主题与外观 分类下的 dsh-deep-whale 是一个鲸鱼主题皮肤系列。
- 侧边栏工作台——dsh-better-sidebar 为侧边栏增加了文件渲染/编辑、终端和 Git 面板。
- 文件提及——dsh-at-file 为输入框带来了 Codex 风格的
@file提及功能。
到 UI 增强 浏览完整合集,或者到 如何安装 DeepSeek Harness 插件 看安装机制(npm vs. GitHub、allowBuilds 提示)。
FAQ
我能从手机或另一台电脑访问 Web UI 吗?
不能直接访问——出于安全考虑,--host 0.0.0.0 不被支持,因为暴露这个端口等于向网络暴露远程代码执行能力。请改用你信任的隧道或端口转发,指向 127.0.0.1。
为什么 Web UI 一直弹窗让我确认操作?
这是默认 workspace-write + ask 权限预设按预期在工作——它会对任何超出 workspace-write 沙箱边界的操作弹出确认。如果你想要一个完全不弹窗的无沙箱会话,切到 danger-full-access(理解其中的权衡),或者配置一个更严格的自定义预设。
极简预设和普通会话有什么区别?
极简预设把 agent 锁定在一个固定的系统提示和仅有的两个工具(bash、str_replace_editor)上,跳过其他所有 prompt 段落和面向模型的插件。普通会话则包含你已安装插件所注册的所有工具和 prompt 内容。
我每次会话都要重新选工作区吗?
开始会话时你要选一个工作区,它会成为该会话文件访问的根目录。是否会被记住作为下次会话的默认值,是一个值得你直接在应用里确认的 Web UI 细节,而不是官方文档记录为固定行为的东西。
默认 Web UI 缺功能是有意为之的吗?
在很大程度上是的——dsh"一切皆插件"的架构意味着维护者刻意把核心保持得很小,让社区以可安装插件的形式贡献 UI 改进,而不是把每个功能都硬编码进核心。社区在这方面做了什么,见 UI 增强。
Next steps
- DeepSeek Harness 快速上手 —— 从安装到第一个会话,完整走一遍。
- 配置你的 DeepSeek API Key 与模型 —— 深入讲解 Settings 页面。
- 如何安装 DeepSeek Harness 插件 —— 完整的插件安装机制。
- 到 UI 增强 和 主题与外观 浏览 Web UI 相关插件。