dsh-plugin-browserskill
Tencent/BrowserSkillBrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
Envoy 直接从多模态链接得到 AI 可消费素材——Markdown、wiki、知识库条目;文章、PDF、音频同理。同一套技能适配 Codex、Claude Code 与 DeepSeek Harness,本条目即 DeepSeek Harness 插件。需另装 Envoy CLI(0.1.6+,用 GitHub Release 的 wheel 安装并运行 envoy browser setup);仅支持 macOS/Linux。
This package is a DeepSeek Harness bundle for Envoy. It does three things in one install:
@deepseek-ai/dsh-mcp-client;ctx.skills service;agent/pre-step event and, on the first step of a turn whoseuser message contains a public link, prepends one short routing message.
The adaptation keeps Envoy's reading, discovery, expansion, visual handoff, and capability behavior. It changes only the integration surface: the skill uses the mcp__envoy__* tool names that DeepSeek Harness assigns to the mounted server.
中文快速安装 · Envoy 安装指南
Paste a Douyin or Bilibili video or 图文 share link and Envoy returns source-linked material — transcript, timestamps, frames, a material_id you can quote — enough for the agent to write Markdown, a wiki page, or a knowledge-base entry from what was actually said, not from the title. Articles, PDFs, and audio links take the same path. For a whole feed, envoy collect checkpoints every item, so an interrupted run resumes instead of restarting.
The same Envoy skill ships for Codex and Claude Code; this package is the DeepSeek Harness build, and the deliverables are the same Markdown, wiki, or knowledge-base material on all three hosts.
Same links, same model, 20 sources × 3 questions, 95 turns scored:
How the turn ended · Without Envoy · With Envoy Hands over the finished artifact · 23% · 58% Never gets the content (asks you to log in, scan, authorize, or says it cannot read it) · 7% · 5% Cut off at the time limit · 70% · 37%
Time limits are 15 and 40 minutes, and a timed-out turn is not a failure. Sample is 95 of 120 turns. Full data: fixed evaluation set v1.
/bin/sh; Windows users must replace thelauncher with a PowerShell or cmd.exe equivalent.
Nothing else. The launcher uses an envoy already on PATH when there is one, and otherwise installs the pinned runtime wheel into ~/.local/share/envoy-dsh/runtime on first use, with uv or with python3 -m venv. The one case it cannot cover is a machine that has neither envoy nor uv nor python3: the mount then fails with a single line telling the user to install uv. Browser profiles, ASR, and OCR stay optional and on-demand — see INSTALL.md when a task needs them.
Envoy reads headlessly. When a page needs the user's identity, the tool returns requires_human: true inside details.needs_user_action; relay the question and options to the user, stop, and wait for their answer. Do not set ENVOY_VISIBLE_BROWSER, and do not run a command that opens a window. Visible mode only works for a human at an interactive terminal (stdin and stdout both a TTY, with explicit opt-in); the CLI refuses it under this plugin's stdio transport, so a login prompt with no window on screen is expected.
Plugin Manager → Install bundle → /absolute/path/to/Envoy/integrations/dsh/envoy-dshFrom a DeepSeek Harness agent session, the equivalent action is plugin_manager with action: install_bundle and that absolute directory as target. The Plugin Manager performs package linking and patch composition; do not edit the profile's package.json or cordis.patch.yml by hand. The runtime download happens on the first envoy mcp start, so the first link read after installing is slower than the rest.
A bundle install targets one profile, so a machine with several profiles can have Envoy in one and not the other. Confirm the profile of the session you are actually using before concluding it is missing:
echo "$DSH_PROFILE" # the profile this shell serves
readlink ~/.dsh/profiles/$DSH_PROFILE/node_modules/envoy-dshA symlink pointing at this directory means the repo copy is live and edits apply without reinstalling. The envoy skill appearing in the skill catalog is the same evidence seen from inside a session.
The bundle inserts two rows:
Row · Package · Purpose envoy-mcp · @deepseek-ai/dsh-mcp-client · Starts envoy mcp (core toolset) and exposes four link tools as mcp__envoy__*. envoy-skill · envoy-dsh · Registers the Envoy skill provider and the link-routing agent/pre-step hook.
core exposes envoy_read, envoy_expand, envoy_search, and envoy_observe_visual. The full toolset adds local-video, discovery, collection, replay, visual-history, and doctor tools. Export ENVOY_MCP_TOOLSET=full in the Harness environment and restart the bundle when those are needed. Starting with core keeps the MCP tool declarations, which enter every request prefix, small for ordinary link reading. The choice is static for the process lifetime.
The Harness GUI may not inherit a login shell's PATH, so the patch prepends the usual uv and Homebrew entries and then takes the first of these that answers:
Order · Source · When it applies 1 · ENVOY_BIN · A pinned binary, including builds newer than the release wheel. 2 · envoy on PATH · uv tool install, Homebrew, or a manual install. 3 · ~/.local/share/envoy-dsh/runtime/bin/envoy · Provisioned from the pinned release wheel on first start.
Set ENVOY_DSH_VERSION to provision another released version. To point the bridge at a source checkout or a development build, set ENVOY_BIN to its absolute path. toolCallTimeoutMs is 300 seconds, above Envoy's default 180-second work budget.
After installation, check that:
bundled bird icon.
mcp__envoy__envoy_read,mcp__envoy__envoy_expand, mcp__envoy__envoy_search, and mcp__envoy__envoy_observe_visual. The advanced tools appear only after a restart with ENVOY_MCP_TOOLSET=full in the Harness environment.
envoy; loading it shows# Envoy Link Reader in DeepSeek Harness and mcp__envoy__ tool names.
envoy doctor --json reports 0.1.8 and the expected capability catalog.When the bridge runs with full, mcp__envoy__envoy_doctor is equivalent.
injected [envoy-link-routing] message. A linkless prompt, a follow-up step, a localhost/private URL, or a prompt containing 不要用 Envoy gets no injection. The hook fails open: if anything throws, the original turn continues unchanged.
failOnStartupError: true makes a missing or broken runtime visible as a failed envoy-mcp row instead of silently leaving the agent without the tools. The rest of the profile remains usable.
integrations/dsh/envoy-dsh/
├── package.json # bundle manifest and display exports
├── cordis.patch.yml # MCP client + skill provider rows
├── index.js # skill provider + agent/pre-step link hook
├── locale/{en,zh}.json # Plugin Manager title and description
├── icon.png # downscaled Envoy bird artwork
├── skill/
│ ├── envoy.md # generated DSH skill body
│ ├── manifest.json # generated name/description
│ └── references/
│ └── protocol.md # generated protocol reference
├── README.md
├── LICENSE
└── NOTICEindex.js is hand-written and mirrors the shared policy in packages/envoy-cli/src/envoy_cli/hooks.py (URL extraction, private-address filtering, opt-out, six-point wording) without importing host internals. Keep the two in sync when the policy changes; tests/test_dsh_plugin.py runs the same parity corpus through both implementations.
The skill assets are generated from the canonical integrations/skills/envoy/SKILL.md and integrations/skills/envoy/references/protocol.md. Do not edit them by hand.
python3 scripts/build_envoy_dsh_plugin.py
python3 scripts/build_envoy_dsh_plugin.py --check
pytest -q tests/test_dsh_plugin.pyThe generator prefixes Envoy tool names, keeps the CLI commands unchanged, replaces the generic “MCP-compatible host” launch section with the DeepSeek Harness host description, and synchronizes the package version with packages/envoy-cli/pyproject.toml.
Apache-2.0. See LICENSE and NOTICE. The icon is the Envoy bird artwork from frontend/public/brand/envoy-bird.png, redistributed under the same license.