前言¶
在 DeepSeek Harness(DSH)里做智能体开发,常见需求会分散在好几类能力上:让 agent 能打开网页并操作表单、把本机会话暴露给外部 MCP 客户端、在 GitHub 或 GitLab 上自动评审 PR/MR,还要有一个地方集中查看模块状态。这些能力往往需要分别找插件或自己写集成脚本,配置项也散落在不同位置。
dsh-reef(维护者 huey1in)把上述能力打包成一个 DSH 插件 bundle:一次安装提供五个模块,共享同一套配置与面板。插件当前版本为 1.5.2,在 GitHub 上约 16 stars(MIT 许可证)。下面介绍它的定位、各模块能做什么,以及安装与典型用法。
这是什么¶
dsh-reef 是 DSH 的「全家桶」式工作流插件。设计原则是:能交给 agent 用 bash 完成的一次性操作(例如 GitHub 写操作用 gh CLI)就不在插件里重复实现;插件只负责 bash 做不到的常驻自动化与集成。
一次安装包含五个模块:
| 模块 | 作用 | 入口 |
|---|---|---|
| 原生面板 | 注入 DSH 界面右下角:模块状态、浏览器实时画面、GitHub 事件看板、五模块设置区 | 自动注入,无需配置 |
| 浏览器自动化 | 共享 Playwright 浏览器:多标签、多 profile、下载/上传、Cookie、表单回放 | browser_* 工具(21 个) |
| MCP Server | 把 DSH 会话与 agent 反向暴露给 MCP 客户端 | http://127.0.0.1:3080/reef/mcp |
| GitHub 集成 | 4 个只读工具 + webhook 自动 PR 评审 + issue 自动修复闭环 | github_* 工具 + webhook |
| GitLab 集成 | 3 个只读工具 + webhook 自动 MR 评审 | gitlab_* 工具 + webhook |
运行时唯一第三方依赖是 playwright-core,复用系统已安装的 Edge/Chrome,无需额外下载 Chromium;不依赖任何 @deepseek-ai 运行时包。要求 Node.js >= 22。
核心功能¶
原生嵌入面板¶
安装后自动注入 DSH 界面(基于官方 --dsw-alias-* 设计变量,自适应亮/暗主题)。右下角悬浮按钮打开面板,内容包括:
- 状态行:浏览器开关/标签数/当前 URL、MCP 在线状态、GitHub webhook 状态与事件数
- 实时画面:浏览器打开时显示缩略图,点击可放大;2 秒轮询更新,下方列出最近 50 条访问历史(按 profile 隔离)
- GitHub 事件看板:最近 3 条 webhook 事件(时间、事件类型、仓库、编号、处理结果)
- 设置区:五个模块的配置均可在面板内修改
浏览器自动化¶
给 agent 一个共享浏览器会话,默认 headless,channel: auto 会依次探测 msedge → chrome → chromium,也可通过 executablePath 指定可执行文件。
常用工具包括:
- 导航与页面读取:
browser_open、browser_snapshot(文本/链接/输入框)、browser_elements(可交互元素 + CSS 选择器) - 交互:
browser_click、browser_type、browser_press、browser_eval - 标签与会话:
browser_tabs、browser_profile(多配置文件,登录态持久化) - 文件与表单:
browser_download、browser_upload、browser_form/browser_form_save/browser_forms - 其他:
browser_screenshot、browser_cookies、browser_wait、browser_back、browser_reload
browser_screenshot 保存的 PNG 会自动清理:每次截图后即时清扫,另每小时定时清扫;默认保留最近 7 天、最多 200 张(可通过 screenshotMaxAgeDays / screenshotMaxCount 调整,设为 0 关闭对应规则)。
首次调用浏览器工具时自动启动浏览器;启动失败会提示安装 Chromium(npx playwright install chromium)或配置 executablePath。
MCP Server¶
把 DSH 变成 MCP 服务器,任何支持 Streamable HTTP 的 MCP 客户端均可接入:
{
"mcpServers": {
"dsh": { "url": "http://127.0.0.1:3080/reef/mcp" }
}
}
提供 5 个工具:dsh_list_sessions、dsh_read_session、dsh_search_sessions、dsh_run_agent(用默认模型跑一次性 agent,长任务流式输出)、dsh_agents_status。
鉴权支持三种方式(可并存):面板内配置静态 Bearer token、通过 authTokenEnv 引用环境变量、或启用 OAuth 2.0 client_credentials(token 端点 /reef/mcp/oauth/token,发现端点 /.well-known/oauth-authorization-server)。
GitHub 集成¶
只读工具(公共仓库无需 token,匿名限额 60 次/小时;配置 GITHUB_TOKEN 后可访问私有仓库且无此限制):
| 工具 | 说明 |
|---|---|
github_repo |
仓库元信息 |
github_issues |
issue 列表 |
github_pulls |
PR 列表 |
github_pr |
PR 详情(可带文件 diff) |
写操作建议让 agent 用 gh CLI 或 curl + GITHUB_TOKEN 完成。
Webhook 自动 PR 评审:在仓库 Settings → Webhooks 添加 http://<机器>:3080/reef/github/webhook,Content type 选 application/json,Secret 与 GITHUB_WEBHOOK_SECRET 一致,事件勾选 Pull requests。PR 打开/更新时自动拉取 diff、调用评审模型、以 COMMENT 形式提交评审。同一 PR 同一 head commit 默认只评审一次(reviewDedupe)。
Issue 自动修复闭环:配置 autoFixRepos(仓库 → 本地路径映射)后,新 issue 可自动触发 agent 在本地仓库修复、建分支、跑测试、push 并开 PR。autoFixLabels 可限定只处理带特定标签的 issue。
GitLab 集成¶
只读工具(需要 GITLAB_TOKEN):gitlab_project、gitlab_issues、gitlab_mr_list。写操作用 glab CLI 或 curl + GITLAB_TOKEN。
Webhook 自动 MR 评审:在仓库 Settings → Webhooks 添加 http://<机器>:3080/reef/gitlab/webhook,Secret Token 与 GITLAB_WEBHOOK_SECRET 一致,事件勾选 Merge Request。自建 GitLab 实例可通过 apiBase 修改 API 地址。
安装与启用¶
在 DSH 的 web profile 下执行:
dsh plugin --profile web add dsh-reef
重启 DSH 后生效。
不需要某个模块时,可在 $DSH_HOME/profiles/web/cordis.patch.yml 里删掉对应行(reef-browser / reef-mcp / reef-github / reef-gitlab / reef-console),或给对应行加 config: { enabled: false }。
配置分三个层级:插件内置默认(cordis.patch.yml)→ 面板设置区(运行时,即时生效)→ 用户 profile 的 cordis.patch.yml(启动时覆盖)。凭据类配置优先写入 $DSH_HOME/.credentials.yaml;普通配置写入 $DSH_HOME/.dsh-reef/settings.json。路径类配置(如 liveViewPath、webhookPath、MCP path)改动后需重启 DSH。
典型用法¶
让 agent 读取并操作网页¶
agent 可先调用 browser_open 打开目标 URL,再用 browser_snapshot 获取页面文本与链接,用 browser_elements 拿到可交互元素的选择器,随后 browser_click 或 browser_type 完成操作。需要保留登录态时,配置 userDataDir 或使用 browser_profile 区分 work/personal 等会话。
把 DSH 会话暴露给外部 MCP 客户端¶
在 MCP 客户端配置中填入 http://127.0.0.1:3080/reef/mcp,按需设置 Bearer token 或 OAuth。外部工具即可通过 dsh_list_sessions 列出本机会话,用 dsh_run_agent 触发一次性 agent 任务。
配置 GitHub PR 自动评审¶
- 在面板或环境变量中设置
GITHUB_TOKEN、GITHUB_WEBHOOK_SECRET - 在目标仓库添加 webhook,URL 指向
http://<你的机器>:3080/reef/github/webhook - PR 打开或更新后,插件自动评审并在 PR 下留 COMMENT;可在面板 GitHub 行查看最近事件
配置 issue 自动修复¶
在 cordis.patch.yml 或面板设置区配置 autoFixRepos,例如:
autoFixRepos:
"owner/repo": "/path/to/local/repo"
新 issue 触发后,agent 会在本地仓库建 fix/issue-N 分支、修复、测试、push 并自动开 PR。
适用场景与注意¶
适合谁:
- 需要在 DSH agent 中稳定使用浏览器自动化,且希望多标签、多 profile、表单回放一次到位
- 想把 DSH 会话反向接入 Claude Desktop、Cursor 等 MCP 客户端
- 在 GitHub/GitLab 上希望 PR/MR 评审自动化,或 issue 触发本地修复闭环
- 偏好在一个面板里查看浏览器画面、MCP 状态与 webhook 事件
注意事项:
- 插件以当前 DSH 进程权限运行,安装前应检查 源码 与 MIT 许可证,确认凭据与 webhook 暴露范围符合你的安全要求
- webhook 端点需从你的 GitHub/GitLab 实例能访问到运行 DSH 的机器(内网部署时注意 NAT/防火墙)
- 浏览器模块依赖本机已安装的 Edge/Chrome 或 Playwright Chromium;GitHub 匿名 API 有速率限制,私有仓库需配置 token
- 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系
结尾¶
dsh-reef 把浏览器自动化、MCP 反向暴露、GitHub/GitLab 集成与原生面板收进一次安装,减少在多插件之间切换配置的成本。若你的工作流同时涉及网页操作、外部 MCP 接入和代码托管事件自动化,可以按上面的安装命令试用。
- 社区目录页:https://www.skillhub.cn/plugins/huey1in/reef
- GitHub 仓库:https://github.com/huey1in/reef