# dsh-plugin

> Integrate Tabbit browser automation into DeepSeek Harness, automatically detecting browser version and runtime, and downloading compatible installation packages in the background when missing.

## Metadata

- Author: [@Tabbit-Browser](https://github.com/Tabbit-Browser)
- Repo: <https://github.com/Tabbit-Browser/dsh-plugin.git>
- GitHub: [Tabbit-Browser/dsh-plugin](https://github.com/Tabbit-Browser/dsh-plugin)
- Stars: 90
- Language: JavaScript
- Homepage: <https://www.tabbit.ai>
- Topics: `browser-automation`, `browser-use`, `deepseek-harness`, `dsh-plugin`, `dsh-plugin-market`, `dsh-plugin-verify`, `dsh-plugins`, `playwright`, `tabbit`
- Forks: 7
- Open Issues: 8
- Last push: 2026-08-17T05:22:10.000Z
- Added: 2026-08-17T00:00:00.000Z

## Install

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

## Wiki

## One-Sentence Positioning
A DSH package branded as "Tabbit Browser" in the DSH plugin marketplace that equips DeepSeek Harness with a Skill capable of controlling the local Tabbit browser for automation operations, and automatically downloads the installer when the browser is missing or using an outdated version.

## Core Capabilities
- Register a bundled Skill named `tabbit-browser` in DSH, enabling the model to invoke it via `/tabbit-browser` or `skill({ name: "tabbit-browser" })`
- Provide `tabbit_browser_install` tool to automatically check whether a stable Tabbit version 1.9.0 or higher is installed on the local machine
- Detect `tabbit-cli` daemon runtime and Playwright Runtime processes (`browser-runtime-service.mjs` / `nodejs-playwright-runtime.mjs`)
- Cache detection results per agent session to reduce redundant detection overhead; use `refresh: true` to actively invalidate and re-detect
- When the browser is missing or the version doesn't match, download the appropriate regional and architecture installer to the `Downloads` directory via DSH background tasks
- Automatically select download source based on system locale (tabbit.com for Mainland China, tabbit.ai for other regions), and verify file format (exe/dmg)

## Technical Implementation
- **Language**: JavaScript (ESM)
- **Key Dependencies**: `@deepseek-ai/cordis`, `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-jobs`, `@deepseek-ai/dsh-skill`
- **Architecture Pattern**: DSH bundle package + Cordis patch injection; declare `inject: ['skills', 'tools', 'jobs']`, inject Skill Provider via `cordis.patch.yml` at host startup, and register bundled Skill and detection tool via `apply(ctx)`
- **Entry Files**: `index.js` (main entry) + `installer.js` (environment detection and installer download implementation)

## Use Cases
When users want AI agents to directly operate the local browser for web interaction, data extraction, automation testing, or evaluation tasks, this plugin exposes the Tabbit browser as a controlled Playwright runtime to the DSH model. It fits the bridging scenario where "the agent runs in sandbox, the browser runs on host GUI"; when users haven't manually installed Tabbit, the plugin can also handle the download phase for them.

## Prerequisites and Compatibility
| Dependency | Minimum Version | Description |
|---|---|---|
| DSH Host | `dsh` CLI | Must be able to run in an environment where `dsh --version` executes |
| Cordis | `>=4.0.0` | Internal DSH dependency, provides Skill/Tool/Job registration capability |
| `@deepseek-ai/dsh-jobs` | `>=0.1.0-rc.5` | Background task support, this plugin starts downloads via `ctx.jobs.start` |
| `@deepseek-ai/dsh-tools` | `>=0.1.0-rc.5` | Tool registration framework |
| `@deepseek-ai/dsh-skill` | `>=0.1.0-rc.5` | Skill Provider registration framework |
| Node.js | `>=20` | Declared by `package.json#engines.node` |
| Platform | macOS (arm64/x64) / Windows x64 | Linux is not in the installer list; source code will throw errors |

## Installation
```bash
dsh plugin --profile web add github:Tabbit-Browser/dsh-plugin
```

## Configuration Options
| Config | Type | Description | Default |
|---|---|---|---|
| `tabbit_browser_install.refresh` | boolean | Force re-run browser and runtime detection, discarding current session cache. Only use when Runtime/launcher errors occur or browser is updated/restarted | `false` |

> This plugin has no DSH global configuration items; all adjustable parameters are passed as arguments when calling the tool.

## FAQ

**Q: Do I need to manually install Tabbit browser before using it?**

A: Not required. The plugin first tries to detect whether Tabbit stable version 1.9.0 or higher is already installed on the system; if not, it automatically starts a background task to download the appropriate regional and architecture installer to the `Downloads` directory for the user to manually complete the native installation.

**Q: Which operating systems are supported?**

A: Only macOS (Apple Silicon and Intel) and Windows 64-bit. The source code only declares installer specifications for these three platform/arch combinations; Linux will error out due to not finding matching download configuration.

**Q: Do I need to separately install tabbit-browser Skill after installing the plugin?**

A: No. The plugin comes with a bundled Skill pre-installed; `skill-tabbit-browser` is inserted into the DSH host via `cordis.patch.yml`, and the Skill becomes visible after DSH starts.

**Q: Will detection results run every time?**

A: No. Successful detection results are cached in `WeakMap` per agent session; subsequent calls directly return `cached: true`. Only when Runtime/launcher fails or the browser changes, passing `refresh: true` will invalidate and re-run.

**Q: What happens if multiple downloads run simultaneously in the same agent?**

A: The plugin tracks in-progress jobs; repeated calls will return the existing `jobId` and prompt "a download is already in progress", preventing concurrent download tasks.

**Q: How to troubleshoot CLI connection failure on Windows (`BROWSER_RUNTIME_UNAVAILABLE`)?**

A: The plugin doesn't proactively request Full Permission. First normally call `tabbit-cli tasks` for connection probing; if the browser, launcher, and Runtime processes are all detected but this error persists, ask the user to switch the current DSH session to Full Permission and stop the current task, don't retry or switch browsers.

**Q: What's the difference between installers downloaded by Mainland China and overseas users?**

A: The plugin reads the system locale: Mainland China `CN` downloads the domestic version from `tabbit.com` ("Tabbit Browser", bundleId `com.tab-browser.Tabbit`), other or unknown locales download the international version from `tabbit.ai` ("Tabbit", bundleId `com.tabbit-ai.Tabbit`). Both versions are supported, but the display name and bundleId differ.

**Q: How to uninstall?**

A: Use `dsh plugin --profile web remove github:Tabbit-Browser/dsh-plugin`. The plugin doesn't modify persistent data outside the system; detection cache only exists in the current DSH agent session memory and becomes invalid upon restart.

## Difficulty Level
Beginner — The installation command is a single line, and the plugin automatically handles Skill registration and browser detection; you only need to read the README's "Prerequisites" and "Scope" sections when troubleshooting Runtime connection or download failures.

## Known Issues and Limitations
- **Does not recognize dev builds**: Only detects stable `Tabbit` and `Tabbit Browser`; dev builds are ignored (installer.js hardcodes `channel: 'stable'`)
- **Does not auto-launch installer**: After download completes, it only tells the user the path; the user must manually double-click `.dmg` / `.exe`; the plugin won't open it (README.md:67 explicitly states)
- **Won't replace or supplement native browser tools**: This plugin only exposes `tabbit_browser_install`; it doesn't provide tools like `tabbit_browser_evaluate` for direct browser invocation (README.md:96 explicitly states)
- **Windows sandbox mode limited**: DSH's `read-only` and `workspace-write` modes on Windows use restricted tokens and cannot write to Runtime named pipes; only when Browser, launcher, and Runtime are all detected but CLI connection fails, prompt the user to switch to Full Permission and stop the task, don't retry
- **Linux not supported**: `installer.js` only defines three platform/arch combinations for macOS and Windows; Linux is neither in the detection scope nor has available download sources (installer.js:113-140)
- **Multiple Tabbit instances will prompt ambiguity without error**: If multiple Tabbit instances are running, detection results will mark `playwrightRuntimeAmbiguous: true` and prompt setting the `TABBIT_PLAYWRIGHT_INSTANCE` environment variable, rather than misidentifying as Runtime not running

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-plugin](https://deepseek-plugin.org/plugins/Tabbit-Browser/dsh-plugin)
Wiki generated by AI (model: `MiniMax-M2.5`)
