Architecture & install

The honest, technical picture: two pieces, one loopback pipe, your DSH as the runtime. Nothing below requires modifying DeepSeek Harness.

TARGET ARCHITECTURE

┌─ Chromium (MV3 extension) ─────────────────────────────┐ │ side panel (chat UI, session picker, model picker, veil │ controls) │ service worker = chat UI + browser executor │ page overlay: frost veil + status pill (per tab) └────────────────────────────┬──────────────────────────┘ chrome.runtime.connectNative ┌────────────────────────────▼──────────────────────────┐ │ Node helper (repurposed bridge, the only process we own) │ dumb protocol pipe: re-frames native port traffic as │ ├─ POST /api/<method> unary calls │ ├─ WS /api/events.mux .host downlink frames │ └─ WS /api/augmentor plugin action channel └────────────────────────────┬──────────────────────────┘ │ loopback → passes trust fence ┌────────────────────────────▼──────────────────────────┐ │ DSH app, your running installation │ @deepseek-ai/dsh-augmentor plugin (cordis.patch.yml) │ ├─ ctx.tools.register: browser_* │ ├─ webServer route: WS /api/augmentor │ └─ session lifecycle + settings card │ stock: agent loop · session store · model catalog │ approvals · /api + downlinks └───────────────────────────────────────────────────────┘

WHY IT’S THIS SHAPE

  • DSH already exposes every method the extension needs (llm.models, session.create/list/history, session.selectModel, session.cancel) over loopback /api.
  • No second runtime: your DSH is the runtime, and the conversation is a real DSH session in the app’s own store.
  • No patch: session.interrupt is retired in favour of stock session.cancel (Stop).
  • The extension cannot dial /api directly (see the trust fence), so the native host is the pipe, and we already ship it.
MVP conclusion: everything needed is stock DSH. The only optional later change is a small client tweak for deep-linking a chat from “Open in DSH”.

The trust fence, settled

DSH has a hardcoded defense (not config) that refuses browser-originated requests on its API. Understanding it is why the pipe exists.

Host fence

Host must be loopback (127/8, ::1) or a declared trusted authority, applied to every request.

Cross-site fence

sec-fetch-site: cross-site is refused. Browsers attach this metadata; a Node process never does.

Origin fence

If an Origin is present, its host must equal the Host’s. chrome-extension://<id> never equals 127.0.0.1:3080 → refused.

The pieces

PieceWhat it doesStatus
@deepseek-ai/dsh-augmentorRegisters the browser_* tools, hosts the /api/augmentor WebSocket, runs the session-lifecycle service and a GUI settings card.new
bridge.mjs → protocol pipeRepurposed native host: reframes port traffic as unary /api POSTs + downlink sockets. No more runtime spawn.repurpose
MV3 extensionSide panel, browser executor, frost veil + status pill, model/session UI, approvals.reuse
session / interruptRetired. Replaced by stock session.cancel for Stop.removed
dsh-browser CLI + HTTP relayDeleted. The tools call the extension in-process, no bash round-trip.removed

Install

0 · Install DeepSeek Harness — only if you don't have it

Augmentor is a plugin for DeepSeek Harness (DSH), so DSH is the runtime you need first. Get it from github.com/deepseek-ai/deepseek-harness.

  • Install Node.js (v20+), then copy-paste into a terminal: npx @deepseek-ai/dsh web
  • DSH starts the web UI at http://127.0.0.1:3080 and opens it in your browser.
  • From source instead: git clone https://github.com/deepseek-ai/deepseek-harness.git && cd deepseek-harness && pnpm install && pnpm run build && pnpm dsh web

A · Extension

  1. chrome://extensions → Developer mode → Load unpacked → select augmentor/extension/.
  2. Note the extension id.
  3. Run ./install-native-host.sh <extension-id> (launch Chromium from a shell where node resolves).
  4. Open the side panel → Connect → prompt it.

B · Plugin

  • Install the package into your profile, or insert its row into ~/.dsh/cordis.patch.yml.
  • The app live-watches that file and mounts the plugin without a restart.
  • The plugin’s GUI card shows connection status, endpoint, and the dedicated directory (default ~/Augmentor).
  • No DSH fork, no local patch.

OR · AUTOMATIC INSTALL

Let your agent install it for you.

Not in the mood to click around? Copy this prompt into the AI you already use — your DSH agent or any coding assistant. It installs DSH and Augmentor end-to-end and reports exactly what it did.

You are installing Augmentor Agent (a DeepSeek Harness plugin + Chromium extension) on this machine. Work step by step; confirm each step and report what you did. 1) Prereq — confirm Node.js 20+ and npm are installed (`node -v`, `npm -v`). If not, install Node.js. 2) Install DeepSeek Harness if it isn't already running: `npx @deepseek-ai/dsh web`. Verify the UI is up at http://127.0.0.1:3080. 3) Load the Augmentor Chromium extension: open chrome://extensions, enable Developer mode, click "Load unpacked", and select the augmentor/extension/ folder in the Augmentor repo. Note the extension id. 4) Install the native-messaging host: run `./install-native-host.sh <extension-id>` from the Augmentor repo. 5) Add the DSH plugin: run `dsh plugin --profile <name> add @deepseek-ai/dsh-augmentor`. 6) Open the Augmentor side panel, click Connect, pick a model, and send a test prompt to confirm it works. Do not change anything outside DeepSeek Harness, the Augmentor repo, and the Chromium extension. When you are done, tell me exactly what you installed and where.

FAQ

One running app per port. An endpoint field in the extension options (default http://127.0.0.1:3080) selects it; the handshake tells the pipe which deployment it reached.
The tool handler returns a readable “no browser client connected” result and never blocks the turn. Reconnect reopens the pipe and refetches the session baseline.
Not yet. This is a preview build loaded unpacked. The plugin is installed locally (machine-level patch); publishing it upstream is a separate decision.

Ready to give your agent real hands?