DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Codex Chrome — DeepSeek Harness 插件(DSH Plugin)
← Plugins
C

dsh-codex-chrome

Codex Chrome

通过复用 OpenAI Codex `chrome` 插件的浏览器运行时,从 DeepSeek Harness 控制用户自己的 Chrome(或 Edge/Brave/Vivaldi/Opera):标签页、已登录会话、可访问性树、屏幕截图和输入,并将其作为原生 DSH MCP 工具及捆绑技能提供。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:BruceZhang1993/dsh-codex-chrome#18e456b1d53e540e4fa51a26ad2a106e5598c9d5
README兼容性版本
DSH capturing a page from the user's Chrome via chrome_observe

兼容性与来源证明

Codex Chrome 以 dsh-codex-chrome 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/10/9

版本

0.1.0stable
2026/10/9

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/9
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 search-research 分类下经过校验的插件。

Ab Wechat Scrapedsh-ab-wechat-scrape--- description: "树外 wechat_scrape 工具:获取微信公众号文章,过滤推广区块,并将每篇文章保存为 Markdown 文件,供此机器的 dsh 配置文件维护者使用。" kind: "package-reference" ---Ab Market Researchdsh-ab-market-research一个树外 DeepSeek Harness 插件:将 trade_search 工具(多轮扩展方面的查询规划、出版商级别排序、来源多样性、JSON 快照)及其浏览器卡片集成在一个包中。Weknora@wxg-prc-cpg/dsh-weknora适用于 DeepSeek Harness (dsh) 的 WeKnora 知识检索工具:通过自有知识库进行语义搜索、文档阅读以及 RAG/代理回答。Free Searchdsh-free-searchDeepSeek Harness 的免费网页搜索:24 个引擎(Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel 无需密钥;通过 MCP 使用 Zhihu 全局/站内搜索,以及 Perplexity/SerpBase/DeepSeek/You.com/Baidu/Kimi/Aliyun/Doubao,需密钥;OpenAI/Gemini/Claude

README

dsh-codex-chrome

English · 简体中文

Control your own Chrome from DeepSeek Harness by migrating OpenAI Codex's chrome@openai-bundled plugin into DSH. The agent gets a set of native mcp__chrome__* tools and can reuse the browser state you already have — open tabs, cookies, logged-in sessions — to navigate, read pages, click, type and take screenshots.

DSH capturing a page from the user's Chrome via chrome_observe

Above: a DSH session calling chrome_observe { mode: "screenshot", fullPage: true } and getting a capture of the page open in the user's own Chrome.

What the Codex "plugin" actually is

It is enabled in ~/.codex/config.toml as:

[plugins."chrome@openai-bundled"]
enabled = true

But it is not an MCP server. It is three things:

PartLocationRole
Skill~/.codex/plugins/cache/openai-bundled/chrome/<ver>/skills/control-chrome/SKILL.mdTells the model to select a browser, observe with ax.write(), then act
Hooksplugin.json → Stop / Interrupt / SubagentStopCall the node_repl tool turn_ended each turn to release browser control
Runtimescripts/browser-client.mjs + scripts/browser-service.mjsThe actual browser control, hosted by Codex's node_repl MCP server as a trusted service

browser-client.mjs drives the work through globalThis.nodeRepl.rpc("browser", …), and that service only runs inside the Codex node_repl host: it depends on privileged capabilities that exist nowhere else (nativePipe, addTurnEndedHandler, createElicitation, host-injected turn metadata). This migration therefore does not rewrite browser control — it reuses the vendor runtime exactly as shipped.

Why there is an extra bridge process

Every browser call must carry Codex turn metadata:

{ "_meta": { "x-codex-turn-metadata": { "session_id": "…", "turn_id": "…", "call_id": "…" } } }

The browser service reads it from nodeRepl.requestMeta and hard-fails without it:

Missing required Codex turn metadata: session_id, turn_id

@deepseek-ai/dsh-mcp-client has no per-call _meta support — its only call site is client.callTool({ name, arguments }, { … }) — so bin/chrome-mcp.mjs fronts node_repl, injects the metadata, and republishes the browser API as native DSH tools:

DSH ──mcp-client(stdio)──▶ bin/chrome-mcp.mjs ──MCP(stdio) + _meta──▶ Codex node_repl
                                  │                                        │
                                  │                             trusted service browser-service.mjs
                                  │                                        │
                                  └────────── native tools ◀────── ChatGPT browser extension ◀▶ Chrome

Install

DSH Desktop

Open the plugin manager and install the bundle from this directory, or from a registry once published. Desktop profiles are managed exclusively by the app, so dsh plugin --profile desktop add … is refused by design.

CLI profiles

dsh plugin --profile web add /absolute/path/to/dsh-codex-chrome

Either way the profile's package.json ends up with the dependency and the bundle entry; doing it by hand is equivalent:

"dependencies": { "dsh-codex-chrome": "link:/path/to/dsh-codex-chrome" }
"dsh": { "profile": { "bundles": [ "…", "dsh-codex-chrome" ] } }

then run pnpm install in the profile directory. After a restart the model sees the eleven mcp__chrome__* tools and the control-chrome skill.

Tools

ToolPurpose
chrome_statusList connected browsers, the current binding, and open tabs
chrome_selectBind a browser: chrome / edge / brave / vivaldi / opera / iab / extension / default / auto
chrome_tabslist / new / select / close / user_tabs (your own tabs) / claim (take one over)
chrome_navigategoto / back / forward / reload
chrome_observestate (accessibility tree, preferred) / dom / visible_dom / screenshot / both
chrome_actvia:"ax": click, setValue, typeText, pressKey, paste, scroll, selectText, performSecondaryAction, drag
via:"locator": Playwright locator click, fill, press, selectOption, check, waitFor, …
chrome_readinnerText / textContent / allTextContents / attribute / count / isVisible / isEnabled
chrome_evaluateEvaluate a read-only expression in the page
chrome_waitWait for url / load / timeout / selector
chrome_jsEscape hatch: run JS inside the Codex runtime with agent / browser / tab in scope
chrome_end_turnRelease browser control for this turn (Codex's Stop hook equivalent)

The model-facing workflow, documented in the bundled control-chrome skill, is observe → act → observe: prefer accessibility element indices over coordinates, and re-derive the indices after every action.

Implementation notes

  • State lives on globalThis, not in module scope. Every js call in node_repl is evaluated in a fresh realm that re-evaluates the same import(); module-level bindings reset, while globalThis is shared for the life of the kernel.
  • Screenshots cannot be written to disk. Once the browser service is active the kernel filesystem turns read-only (even /tmp and $CODEX_HOME return EROFS), so images go out through nodeRepl.emitImage; the bridge spools a copy on the host side.
  • Accessibility indices are bound to the call that produced them. chrome_act re-reads tab.ax.get("state") before acting so an index returned by chrome_observe is usable.
  • The _meta injection is the whole point. Without it every browser call fails.
  • The vendor capture path labels JPEG as PNG. Both the sandbox and the bridge re-derive the type from magic bytes, because DSH rejects an image whose declared type disagrees with its payload.

Self-checks

node scripts/check-package.mjs   # static package consistency, no browser needed
node --test                      # 13 tests: unit checks + a real MCP handshake
node scripts/doctor.mjs          # assets, extension, native host, node_repl
node scripts/doctor.mjs --deep   # …plus one real browser round trip
node scripts/smoke.mjs           # end to end: open a tab, observe, screenshot, evaluate, close

Requirements

  • Linux (developed and verified on Arch with Chrome 154, on both Wayland and X11).
  • The ChatGPT/Codex desktop app must have run at least once, so it materialises ~/.codex/plugins/cache/openai-bundled/{chrome,browser}/… (scripts/browser-client.mjs, browser-service.mjs, extension-host).
  • The ChatGPT browser extension installed in the target browser, with the com.openai.codexextension native messaging host registered (~/.config/google-chrome/NativeMessagingHosts/).
  • The target browser running.

Environment overrides:

VariableMeaning
CODEX_HOMECodex home directory, defaults to ~/.codex
DSH_CODEX_CHROME_NODE_REPLAbsolute path to the node_repl executable
BROWSER_USE_AVAILABLE_BACKENDSBackends handed to node_repl, defaults to chrome,iab,mcpapps

Licence and provenance

This package is MIT licensed. It ships no OpenAI code: it calls browser-client.mjs / browser-service.mjs from your local Codex installation at runtime, and those proprietary files are not redistributed. See THIRD_PARTY.md.