跳过主要内容
全部文章
指南

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 webdsh --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 resultDiscussion #30)。有记录在案的修复方法是:用 --ignore-scripts 重新安装,然后编辑 ~/.dsh/profiles/web/cordis.patch.yml,禁用原生选择器插件,改为插入 directory-picker-browse 及其客户端 UI 包——完整命令序列见我们的 平台安装指南

进入工作区后,dsh 会自动加载它在根目录能找到的任何 AGENTS.mdCLAUDE.md 文件,渲染预算最多 65,536 字节,并把这部分内容并入该工作区下每一个会话的 agent 上下文中。

会话与 Agent 循环

在工作区内,你新建会话并发送任务。agent 可以读写文件、跑 shell 命令、委派给子代理,并在工作过程中流式输出它的计划和工具调用。有几个会话层面的选项值得了解:

  • 极简(Minimal)预设——一种内置的精简 agent 模式:系统提示固定为 You are a helpful software engineer assistant.,只挂载 bashstr_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 锁定在一个固定的系统提示和仅有的两个工具(bashstr_replace_editor)上,跳过其他所有 prompt 段落和面向模型的插件。普通会话则包含你已安装插件所注册的所有工具和 prompt 内容。

我每次会话都要重新选工作区吗?

开始会话时你要选一个工作区,它会成为该会话文件访问的根目录。是否会被记住作为下次会话的默认值,是一个值得你直接在应用里确认的 Web UI 细节,而不是官方文档记录为固定行为的东西。

默认 Web UI 缺功能是有意为之的吗?

在很大程度上是的——dsh"一切皆插件"的架构意味着维护者刻意把核心保持得很小,让社区以可安装插件的形式贡献 UI 改进,而不是把每个功能都硬编码进核心。社区在这方面做了什么,见 UI 增强

Next steps