用 dsh-plugin 讓 DeepSeek Harness 驅動本機 Tabbit 瀏覽器

前言

DeepSeek Harness(dsh)默認更像一臺編碼智能體:改文件、跑 shell、偶爾做一次聯網搜索。任務一旦變成「打開這個站點、點按鈕、填表、把登錄態留下來」,只靠 curl 或無頭瀏覽器就不夠用了——需要的是本機正在跑的圖形瀏覽器,以及一套能把頁面操作交回給模型的接口。

Tabbit 是一款 AI 原生桌面瀏覽器,國內站是 tabbit.com,國際站是 tabbit.ai,目前提供 macOS 與 Windows 安裝包。它自帶一套由瀏覽器持有、按任務隔離的 Playwright CLI(tabbit-cli)和 Runtime。Tabbit-Browser 組織把這條鏈路打成了 DeepSeek Harness 插件:倉庫名是 dsh-plugin,安裝進 DSH 之後,智能體就可以驅動 Tabbit 完成瀏覽任務。

本文按插件目錄頁、GitHub 倉庫 README、package.json、內置 Skill 原文和 DeepSeek Harness 官方倉庫覈對後整理:它是什麼、裝完能做什麼、怎麼裝、以及哪些邊界不要指望它補上。DeepSeek Harness 目前仍是開發者預覽,官方口號是「一切皆插件」;deepseek-harness-plugin.com 是獨立社區目錄,與 DeepSeek / 幻方無官方從屬關係,下面的安裝命令以目錄頁和倉庫原文爲準。

這是什麼

dsh-plugin 是 Tabbit-Browser 維護的社區插件,GitHub 倉庫爲 Tabbit-Browser/dsh-plugin。目錄頁把它歸在「界面增強」;倉庫裏的 npm 包名其實是 tabbit-browser,當前版本 0.1.0package.json 聲明許可證爲 MIT(倉庫根目錄目前沒有單獨的 LICENSE 文件,安裝前仍應對照源碼自行確認)。截至 2026-08-17,GitHub API 顯示 76 星;目錄頁仍顯示 16 星,以後者爲收錄快照、以倉庫頁面爲準。

它解決的問題很具體:讓 DSH 裏的智能體控制已經安裝在本機上的 Tabbit,而不是再去拉起 Chrome、Ego,或改走 curl / 裸 CDP。插件本身做兩件事:

  1. 隨 bundle 自動註冊名爲 tabbit-browser 的 Skill,模型可用 skill({ name: "tabbit-browser" })/tabbit-browser 加載說明,不必再單獨裝一份 Skill。
  2. 註冊工具 tabbit_browser_install:檢測正式版、覈對最低版本 1.9.0、檢查 tabbit-cli 與 Runtime;環境不夠時在後臺下載對應地區的安裝包。

真正的頁面操作不走插件裏的「原生瀏覽器工具」。README 寫得很清楚:它不提供 tabbit_browser_evaluate 這類接口。模型是通過宿主機上的 Shell 調用 tabbit-cli,把一段 Playwright 風格的 JavaScript 交進瀏覽器持有的 Runtime。

核心功能

環境預檢,而不是直接開瀏覽器

智能體在一次 DSH agent session 裏第一次做瀏覽操作前,應先調用 tabbit_browser_install。工具返回三種狀態:

  • ready:本機已有不低於 1.9.0 的正式版,且 tabbit-cli 與 Runtime 進程都在。接着還要用平臺文檔裏的 tabbit-cli tasks 做一次連接探測,探測成功纔算環境通過。
  • restart-required:版本夠了,但 Runtime 沒在跑。Skill 要求只提示用戶重啓一次 Tabbit,插件不會代爲啓動或重啓 Runtime。
  • background:沒裝正式版,或所有已裝正式版都低於 1.9.0。插件會用 ctx.jobs 開一個後臺下載任務,進度寫到 job 輸出,完成後通知安裝包的絕對路徑。

同一次 agent session 裏,成功的檢測結果會緩存。Runtime / launcher 失敗、瀏覽器剛裝過或剛重啓之後,再帶 refresh: true 作廢緩存。不要爲後續每一個小步驟重複跑預檢。

只認兩個正式版

檢測邏輯寫在 installer.js 裏,只認穩定渠道:

  • 國際正式版:應用名 Tabbit(macOS bundle id com.tabbit-ai.Tabbit
  • 國內正式版:應用名 Tabbit Browser(macOS bundle id com.tab-browser.Tabbit

裝任意一個、版本 >= 1.9.0 即可。開發版不會被識別。Windows 先查卸載項裏的固定鍵名 Tabbit / Tabbit Browser,找不到再掃卸載表;macOS 查 /Applications 和用戶 Applications。Linux 不在檢測與下載名單裏。

tabbit-cli 的路徑也是寫死的:

  • macOS:~/.local/bin/tabbit-cli
  • Windows:%LOCALAPPDATA%\Tabbit\LocalAgent\bin\tabbit-cli.exe

Skill 要求啓動器必須是命令行的第一個 token,不要用 envtimesh -lc 包一層。

缺瀏覽器時按地區下載,但不代裝

未安裝或版本過低時,插件讀取系統地區:macOS 用 defaults read -g AppleLocale,Windows 用系統地區 API。地區碼爲 CN 時走國內源 https://www.tabbit.com,其他地區或識別失敗走國際源 https://www.tabbit.ai。安裝包按平臺分成 Windows x64、macOS Apple Silicon、macOS Intel,落到用戶的 Downloads 目錄。

它會校驗 HTTPS 跳轉主機(www / pkg / releases 的 tabbit.com 與 tabbit.ai)、限制體積不超過 1 GiB,並檢查 .exe 的 MZ 頭或 .dmgkoly 尾。不會自動打開 .dmg / .exe。job 完成後出現 TABBIT_INSTALLER_READY 時,把路徑告訴用戶,由用戶自己跑完系統安裝嚮導,再啓動一次 Tabbit。

用任務空間驅動頁面,而不是每次新開一個瀏覽器

Skill 把一次用戶請求映射到一個 task space(任務空間)。第一次 tabbit-cli nodejs --task '...' 會在當前瀏覽器世代固定的非隱身 Profile 裏建隔離的 Playwright runtime;之後同名、同世代的調用會複用頁面、globalThis、receipt 和登錄態。Runtime 重啓會換世代,舊的具名任務不會復活。

評估代碼跑在持久的 Node 環境裏,拿到的是真正的 Playwright 對象:browsercontextpagepages()usePage(),以及 assert / expect。DOM 相關邏輯要放進 page.evaluate()。頁面上還有凍結的 tabbit 全局,提供 observe()safeClick()pasteText() 這類有界輔助,並不替代原生 Playwright API。

Skill 把日常操作分成三條工作流,可以組合使用:

  • 語義工作流(默認):普通 DOM 頁面,用 locator 和斷言
  • 視覺工作流:canvas、地圖、富文本等 DOM 對不上可見編輯目標時,先截圖再鍵鼠,寫入前做一次小探針
  • 頁面求值工作流:一次 page.evaluate() 做緊湊的 DOM 遍歷或聚合,不要把一次計算拆成很多次求值

多開 Tabbit 時,預檢仍判 Runtime 可用,不會誤報「沒在跑」。模型要根據 CLI 的選擇錯誤設置 TABBIT_PLAYWRIGHT_INSTANCE

安裝與啓用

先確認本機有 DSH。倉庫 README 的檢查方式:

dsh --version

沒有這條命令時,需要 Node.js 20 或更高版本(插件 engines 也要求 >=20),再安裝 CLI:

npm install -g @deepseek-ai/dsh

DeepSeek 官方倉庫的快速啓動是 npx @deepseek-ai/dsh web,Web UI 默認在 http://127.0.0.1:3080

社區目錄頁上的安裝命令原文是:

dsh plugin add github:Tabbit-Browser/dsh-plugin

倉庫 README 寫的是裝進 web profile,然後再啓動 Web UI:

dsh plugin --profile web add github:Tabbit-Browser/dsh-plugin
dsh web

目錄頁提示:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼;如需可復現安裝,請固定 commit。2026-08-17 倉庫 main 最新提交是 1aa3157e3ed01641b86d7ee80da059b7140a317e,可以寫成:

dsh plugin --profile web add github:Tabbit-Browser/dsh-plugin#1aa3157e3ed01641b86d7ee80da059b7140a317e

插件聲明的 peer 依賴包括 @deepseek-ai/cordis@deepseek-ai/dsh-jobs@deepseek-ai/dsh-skill@deepseek-ai/dsh-tools。README 還要求當前 profile 提供 ctx.skillsctx.toolsctx.jobs,以及跑在 Tabbit 所在宿主機上的 Bash/Shell,並且這個 Shell 能訪問瀏覽器持有的 Runtime Service。dsh-tool-jobs 需要能給當前 Agent 做後臺任務控制和完成通知。

典型用法

裝好並啓動 dsh web 之後,先讓模型加載 Skill,再做預檢,最後才發 tabbit-cli

加載 Skill:

skill({ name: "tabbit-browser" })

或在對話裏使用 /tabbit-browser

預檢(只在 session 內第一次瀏覽前調用;環境變了再帶 refresh):

tabbit_browser_install
tabbit_browser_install({ refresh: true })

下面這段來自內置 SKILL.md,在一個名爲 inspect extensions 的任務空間裏打開擴展頁並讀標題:

tabbit-cli nodejs --task 'inspect extensions' <<'EOF'
await page.goto('chrome://extensions', {waitUntil: 'domcontentloaded'});
return {title: await page.title(), url: page.url()};
EOF

命令會打印一個 JSON,終端成功結果在 receipt.result.value。同一任務空間裏賦給 globalThis 的值後續還能用。只讀探測可以加 --read-only

tabbit-cli nodejs --task 'inspect extensions' --read-only <<'EOF'
globalThis.extensionCount = await page.locator('extensions-item').count();
return {extensionCount};
EOF

--foreground 只有用戶在對話裏明確要求把任務頁帶到前臺時才加。--claim-tab 只用於用戶親手選中的標籤。重要的寫操作建議帶穩定的 --request-id;receipt 處於 queuedrunning 時不要重交同一段代碼,用 tabbit-cli receipt 查詢,中斷後用 tabbit-cli checkpoint 看檢查點。

做完後結束任務空間:

tabbit-cli finish --task 'inspect extensions'

默認會關掉任務自己創建的頁面,不會關用戶認領的標籤。研究、搜索、中間頁、空白頁和錯誤頁默認不保留;只有交付物或後續交接頁才 --keep

適用場景與注意事項

適合已經在本機使用 Tabbit、希望 DSH 智能體去做站點交互、信息抽取、迴歸或基準測試的人。Skill 描述裏寫的範圍是:Tabbit 瀏覽器自動化、網頁交互、抽取、QA 和 benchmarks,並且不要靜默切到別的瀏覽器後端

不適合這些情況:

  • DSH 的 Bash 跑在 E2B、遠程容器,或任何碰不到本機 GUI 瀏覽器的沙箱裏。README 寫明:這種環境下本 Skill 不會讓 Tabbit 自動化變得可用。
  • 只想控制 Chrome 當前標籤、或需要插件直接暴露 evaluate 類工具。本包明確不提供 tabbit_browser_evaluate,也不檢測開發版。
  • Linux。檢測與下載列表只有 Windows x64 與 macOS。

Windows 上還有一條權限邊界。DSH 的 read-only / workspace-write 限制令牌寫不了 Runtime 的命名管道。Skill 和源碼的策略是:先按默認沙箱正常跑 tabbit-cli tasks 探測,成功就不問權限;只有 Browser、launcher、Runtime 都已檢測到、但連接返回 BROWSER_RUNTIME_UNAVAILABLE 時,才請用戶把當前會話改成 Full Permission,然後立刻停任務,不重試、不繼續點頁面。同一次提交裏的單元測試斷言 Windows 的 cliSandboxModedefault;README「範圍」一節仍寫 Windows 返回 danger-full-access,與 index.js 不一致,以源碼和 Skill 爲準。

安裝安全方面,目錄頁的警告需要當真:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。裝之前檢查 源碼倉庫 和許可證;生產或要復現的環境請固定 commit。社區目錄不是官方應用商店,收錄不等於背書。

小結

dsh-plugin 並沒有在 DSH 裏再實現一套瀏覽器,而是把 Tabbit 自己的 CLI 和 Runtime 接進 Harness:預檢正式版、必要時下載安裝包、用任務空間複用登錄態,頁面操作交給 Playwright 風格的 tabbit-cli。目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin/ ;源碼:https://github.com/Tabbit-Browser/dsh-plugin 。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜