Back to home

Tianyu209

dsh-browser-companion

A personal DSH browser plugin: persistent profile, visible window, human-in-the-loop login, and safe agent browser tools.

Stars
2
Language
JavaScript
Created
Aug 14, 2026
Updated
Aug 14, 2026

Introduction

dsh-browser-companion

English | 简体中文

dsh-browser-companion

A personal DeepSeek Harness (DSH) browser plugin.

It gives your agent a dedicated, persistent, visible browser:

  • You can watch what the agent is doing in a real browser window.
  • Logins are done by you in the popup window; passwords and OAuth secrets never pass through the agent.
  • Cookies and login state are saved in the same profile, so logins persist across restarts.

Features

  • ✅ Persistent browser profile (cookies / localStorage / login state)
  • ✅ Visible window mode (default headless: false)
  • ✅ Human-in-the-loop login: browser_login opens a window and you type your password / complete OAuth yourself
  • ✅ Agent tools: open, snapshot, click, type, press, screenshot, see, select, check, upload, hover, scroll, tabs, status
  • ✅ Security guard: browser_type refuses to fill password fields
  • browser_see uses a local vision model (OpenAI-compatible) so the agent can understand images / visual layouts when needed
  • ✅ Based on agent-browser, so the hard browser automation is battle-tested

Out-of-the-box

The plugin works with zero configuration for basic browsing:

  • Uses the bundled browser (agent-browser's Chromium) by default
  • Uses a default persistent profile under ~/.dsh/browser-profile
  • All basic tools work: open, snapshot, click, type, tabs, etc.

Optional settings can be changed in the DSH WebUI plugin settings:

  • executablePath: set to your real Chrome/Edge to avoid login blocks (e.g. Google)
  • visionBaseUrl / visionModel: enable browser_see with a local vision model
  • profilePath: use a custom browser profile location

If browser_see is not configured, it returns a friendly message instead of breaking the agent.

Install

1. Install dependencies

npm install -g agent-browser
agent-browser install   # first-time Chromium download

2. Install the plugin

From npm or GitHub (once published):

dsh plugin --profile web add dsh-browser-companion

pnpm users: when installing from GitHub, pnpm may block agent-browser's build script.
Add this to your profile's pnpm-workspace.yaml and re-run:

allowBuilds:
  agent-browser: true

Or for local development, add this to ~/.dsh/profiles/web/cordis.patch.yml:

- insert:
    - id: dsh-browser-companion
      name: 'file:///absolute/path/to/dsh-browser-companion/src/index.js'
      config:
        profilePath: '/home/your-name/.dsh/browser-profile'
        headless: false
        executablePath: '/path/to/your/chrome'
        browserArgs: '--disable-blink-features=AutomationControlled'
        defaultTimeout: 30000

See examples/dsh-browser-companion.config.yml for a full sample config with placeholders.

⚠️ Never commit real paths, tokens, or personal profile data. Use the sample config and replace values locally.

3. Restart DSH

dsh web

Agent Tools

ToolDescription
browser_openOpen a URL (visible window by default)
browser_snapshotGet an accessibility snapshot with @e1 refs
browser_clickClick an element
browser_typeType text (never into password fields)
browser_pressPress a key
browser_screenshotSave a screenshot locally
browser_seeScreenshot + local vision model description (use sparingly)
browser_get_textRead element text
browser_get_url / browser_get_titleGet URL / title
browser_waitWait for time / element / URL
browser_back / forward / reloadNavigation
browser_selectSelect a dropdown option
browser_check / browser_uncheckCheck / uncheck a checkbox
browser_uploadUpload files
browser_hoverHover an element
browser_scrollScroll the page
browser_tabs / browser_new_tab / browser_close_tab / browser_switch_tabTab management
browser_statusBrowser status
browser_loginOpen a visible login window for the user
browser_wait_loginWait until login completes (cookie / URL)
browser_closeClose the browser (profile is kept)

Typical Login Flow

Agent: I need to log in to a site.
Agent calls browser_login("https://example.com/login")
→ You see a popup and log in manually
→ You tell the agent "done"
→ Agent continues with the same cookies

How the Agent “Sees” a Page

  • Default: browser_snapshot — fast, free accessibility tree with refs.
  • Only when needed: browser_see — screenshot + local vision model, for images / visual layout / complex UI.

Configuration

KeyDefaultDescription
profilePath~/.dsh/browser-profilePersistent profile directory
headlessfalseShow browser window
defaultTimeout30000Per-operation timeout (ms)
agentBrowserPathauto-detectOverride agent-browser CLI path
executablePathautoChrome/Edge executable path (recommended for Google login)
browserArgs--disable-blink-features=AutomationControlledExtra browser launch args
visionBaseUrlhttp://127.0.0.1:1234/v1Local vision model endpoint
visionModelyour-vision-modelLocal vision model name

Security Notes

  • The agent is instructed never to fill password fields.
  • Passwords and OAuth secrets are entered by the user in the visible browser window.
  • For stronger protection, future versions can add encrypted cookie storage and proxy-based credential injection.

Development

npm install
npm test

License

MIT