by antibrow
DeepSeek Harness plugin: give your agent a browser with a persistent identity - engine-level fingerprint spoofing, unlimited free local profiles, Android device emulation, passkeys that survive, and residential proxy egress.
# Add to your Claude Code skills
git clone https://github.com/antibrow/dsh-antibrowLast scanned: 9/9/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-09-09T08:41:24.353Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}dsh-antibrow is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by antibrow. DeepSeek Harness plugin: give your agent a browser with a persistent identity - engine-level fingerprint spoofing, unlimited free local profiles, Android device emulation, passkeys that survive, and residential proxy egress. It has 81 GitHub stars.
Yes. dsh-antibrow passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/antibrow/dsh-antibrow" and add it to your Claude Code skills directory (see the Installation section above).
dsh-antibrow is primarily written in JavaScript. It is open-source under antibrow on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh dsh-antibrow against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
A DeepSeek Harness plugin that gives the agent a browser with an identity.
dsh plugin --profile <name> add dsh-antibrow
Every other browser plugin hands the agent a fresh Chromium. That is fine for reading a public page and useless for anything behind a login: the session dies with the process, the fingerprint is a stock automation build, and the traffic leaves from your machine.
| A plain Playwright plugin | dsh-antibrow | |
|---|---|---|
| Identity between runs | new browser every time | one persistent profile per name |
| Logins | gone when the process ends | cookies and passkeys persist, optionally synced across machines |
| Fingerprint | stock build, patched from page scripts | spoofed inside the engine, before any page script runs |
| Egress | your own IP | residential proxy, with timezone, language and reported connection following its exit |
| Parallel identities | one data directory to share | one isolated profile per agent or per account |
| Tabs | start from nothing | last session restored, so the agent resumes where it stopped |
The difference shows up the first time an agent has to be someone: check a mailbox, watch a dashboard, keep a marketplace account warm. A browser with no memory has to log in again on every run, and logging in again is exactly what a site treats as suspicious.
mcp__antibrow__*, all reachable from Code Mode as ordinary
async calls.deviceType: 'android' - and the agent is a phone: touch points, mobile client hints,
phone viewport, phone GPU. See below.start_live_view streams the agent's browser to a
dashboard, so a long unattended run is something you can look at instead of
guess about.{ "profile": "shop-mobile", "deviceType": "android", "temporary": true }
Android profiles are built from whole captured devices - the screen, the GPU report and the client hints agree with each other because they came off the same physical phone, and the plugin picks a row rather than assembling one. Three of them ship inside the package, so a free-tier agent can create an Android profile with no network round trip at all.
The device type is fixed when the profile is created and never drifts afterwards: a profile that was a phone stays that phone. Android needs engine 151 or newer - if none is available the launch fails rather than quietly handing you a desktop browser that claims to be a phone.
On a macOS host, through a US residential proxy, 2026-08-15, engine 151:
| Check | Result |
|---|---|
| whoer.net disguise | 90% |
| creepjs headless signal | 0% |
| creepjs stealth signal | 0% |
| creepjs platform hints | Arial, "Segoe UI" - no font from the host |
| Reported platform vs user agent | agree (Win32 / Windows) |
| Timezone vs proxy exit | agree (America/Los_Angeles) |
The 10% whoer deducts is WebRTC, which had no route to a STUN server on that
run. Reproduce all of it with tests/smoke - the harness is in this repository,
and it fails loudly rather than printing a number nobody checks.
dsh plugin --profile <name> add dsh-antibrow
export ANTI_DETECT_BROWSER_KEY=<key>
dsh --profile <name>
| Sessions | launch_browser close_browser list_sessions |
| Profiles | list_profiles create_profile delete_profile |
| Proxies | list_proxies claim_proxy |
| Page | navigate click fill evaluate get_content screenshot |
| Live view | start_live_view stop_live_view |
launch_browser takes a profile name and creates it on first use. Pass
temporary: true for automation work: those profiles are local-only and stay
out of the desktop app's list, while still persisting on disk.
launch_browser of a fresh install
pays for that; later ones do not.The bundle inserts one row, mcp-antibrow, configuring the harness's MCP client
against the anti-detect-browser CLI. Override it from your profile's own
cordis.patch.yml by targeting that id - a patch replaces the row's whole
config, so restate every key you keep:
- id: mcp-antibrow
config:
serverName: antibrow
transport: stdio
command: npx
args: ['-y', 'anti-detect-browser@^2.19.1', '--mcp']
env:
ANTI_DETECT_BROWSER_KEY: !!js process.env.MY_OWN_VAR
ANTI_DETECT_BROWSER_CACHE_DIR: /var/lib/antibrow
Turn it off without uninstalling:
- id: mcp-antibrow
disabled: true
To run the SDK from a checkout instead of npm, use the overlay this package ships:
export ANTIBROW_SDK_CLI=<checkout>/dist/cli.js
dsh --profile <name> --patch node_modules/dsh-antibrow/cordis.patch.local.yml
Verified against dsh 0.1.0-rc.6 and anti-detect-browser 2.19.1, 2026-08-15.
DeepSeek Harness is a developer preview and says it will break compatibility;
this line is the claim, and it rots without a re-test.
The SDK version floor is real: 2.19.1 is the first release whose close path ends the browser process instead of only dropping the debugging connection. On an older one a closed session leaves the browser running, which keeps that profile's directory locked - the next launch of it dies before the debugging connection is ready - and holds a concurrency slot for the rest of the run.
MIT