BrambleXu/dsh-annotate
DeepSeek Harness的视觉浏览器元素标注,捕获DOM、样式、可访问性数据、评论和视口截图。
项目介绍Project Overview
dsh-annotate 是一个面向 DeepSeek Harness 的浏览器反馈插件,通过 /annotate 命令让 Chrome 或 Chromium 扩展进入选择模式。所选元素的选择器、DOM 信息、计算样式、无障碍数据、注释及视口截图会作为结构化附件发送至下一轮 Agent。适用于在本地调试 Web UI 问题时精准定位元素。注意 0.1 版本仅支持单一本地浏览器与当前可见标签。
dsh-annotate is a DeepSeek Harness plugin that brings visual feedback from a companion Chrome or Chromium extension. The /annotate command activates selection mode, capturing each element's selector, DOM facts, computed-style highlights, accessibility data, a comment, and an optional viewport screenshot for the next agent turn via a local loopback WebSocket bridge. Use it when text alone cannot describe a browser UI problem precisely. Version 0.1 supports only one local browser and the currently visible tab.
请帮我了解并安装插件:【dsh-annotate】【https://github.com/BrambleXu/dsh-annotate】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:BrambleXu/dsh-annotate
把 BrambleXu/dsh-annotate 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-annotate

English | 中文
Visual browser feedback for DeepSeek Harness. /annotate asks the companion Chrome extension to enter selection mode; each selected element contributes a selector, DOM facts, computed style highlights, accessibility data, a comment, and an optional viewport screenshot to the agent's next turn.
Why this exists 💡
Browser UI problems are difficult to describe precisely through plain text. dsh-annotate lets you point at the relevant element and send the Agent the surrounding browser facts, so visual feedback stays attached to the page element instead of becoming a vague description or a copied screenshot.
Features ✨
- Select elements directly in Chrome or Chromium through
/annotate. - Capture selectors, DOM facts, computed-style highlights, accessibility data, comments, and optional viewport screenshots.
- Send structured annotations to the Agent through a local loopback WebSocket bridge.
- Restrict browser connections by loopback host, extension origin, and optional extension ID.
Install 📦
Add the plugin project to a Harness profile:
dsh plugin --profile demo add ./dsh-annotate
Then install the companion extension:
- Open
chrome://extensionsin Chrome or Chromium. - Enable Developer mode.
- Choose Load unpacked and select this project's
browser-extensiondirectory. - Open the extension popup and keep the default bridge endpoint.
For tighter local authorization, copy the extension ID shown in the popup into allowedExtensionId in a later Harness patch layer.
Use 🚀
/annotate
/annotate http://localhost:3000
Click an element, enter its comment, and repeat as needed. Submit sends all captured facts and the visible-tab screenshot to the agent. Escape cancels.
Configure ⚙️
- id: dsh-annotate
name: dsh-annotate
config:
host: 127.0.0.1
port: 43119
allowedExtensionId: abcdefghijklmnopqrstuvwxyzabcdef
requestTimeoutMs: 300000
maxPayloadBytes: 16777216
includeScreenshot: true
The server refuses non-loopback hosts and browser connections whose origin is not chrome-extension://. An empty allowedExtensionId accepts any locally installed Chrome extension; set the exact ID for stricter isolation.
Develop 🧑💻
pnpm install
pnpm run check
Reload the unpacked browser extension after editing its files.
Scope 🎯
Version 0.1 targets one local Chrome/Chromium browser, one active tab, and visible-viewport screenshots. Remote browsers, full-page capture, edit recording, and inline draggable note cards are deferred.
License 📄
MIT
Credits 🙏
The interaction is inspired by pi-annotate. This implementation is built around Harness's human-command, attachment, and Agent APIs and uses a small loopback WebSocket bridge instead of a native-messaging host.
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/colleague-skill
nocobase/nocobase
Tencent/WeKnora