Skip to content
@omdsh-plugins

omdsh-plugins

An unofficial DeepSeek Harness(DSH) Plugins Community.

omdsh-plugins

English | 中文

A collection of plugins for the DeepSeek Harness — modes for its web GUI, panels around the conversation, two ways to hand it something it cannot read on its own (documents, pictures), a way onto other machines, a keyboard map, two top-row readouts (spend, project status), and a hub that installs and configures the rest from inside Settings. Three applications to run them in, and a catalog so the hub can find them.

Nothing here modifies the harness. Every feature ships as an out-of-tree bundle that a profile composes over dsh-base, through seams the harness already publishes: a slot, a service, a settings namespace, a route. That constraint is the whole design — the harness stays a tracked fork that can follow upstream, and a plugin written next year installs into a profile assembled today without either knowing about the other.

What is in here

Thirteen plugins, three applications, and one catalog.

Modes — what the middle column is

Package What it adds
omdsh-basemode The session-mode system: the registry every mode plugin registers a segment into, the switch that renders them, and the dots that colour the sidebar by mode. It invents no mode, and contributes one: Work, the harness's own column, so a switch always has somewhere to switch back to.
omdsh-chatmode Chat and Work. Chat starts a conversation without picking a project directory and keeps those conversations together in a managed workspace.
omdsh-codemode Code. A harness terminal in the conversation's workspace, running as the column rather than beside it.

Around the conversation

Package What it adds
omdsh-sidepanel A file tree down the right edge and a terminal along the bottom, in Work mode.
omdsh-sidechat A side conversation summoned anywhere, carrying whatever you were looking at as its anchor. Never touches the conversation you are running.
omdsh-usage Session spend, project spend, and account balance in the conversation's top row.
omdsh-status The current project's name with its git branch and change counts, at the right end of the conversation's top row.
omdsh-editor Open the conversation's directory in the editor, terminal, or file manager you actually use.

What the model can read

A DeepSeek route carries text and nothing else. These two hand it the rest of what a person has on their desk, by turning it into text before it gets there.

Package What it adds
omdsh-document Attach a Word file, a deck, a spreadsheet, a PDF or any text file — from Document under the Attachments heading these two put in the composer's plus menu, by dropping it on the window, or by pasting it into the message box — and the host puts its text in front of the message, without a mark in the message box.
omdsh-vision Sight, from a vision model you configure. Add a picture or a video from Multimedia in the same menu; drop or paste a video the same way. Pictures pasted or dropped stay in the harness's own composer rail — and the agent gets see_image, ask_image and watch_video for the ones already on disk.

Reach — other machines

Package What it adds
omdsh-remctrl A second front door on its own port, behind device pairing and a tiered method allowlist, so a phone on your tailnet can watch a session and approve what it asks for. Status: M0 — the door and the lock.

Plumbing

Package What it adds
omdsh-plughub The plugin hub: a Settings tab that installs, disables and configures these plugins from the settings schema each already registers. The hub and the mode system stay on.
omdsh-shortcuts One chord per command, on the desktop menu and in the page alike — one document, two surfaces. The reference implementation for the conventions.

Applications

Repository What it is
omdsh-desktop An Electron shell that supervises a harness runtime and adds the native surface around it — windows, menus, restart policy, boot screen.
omdsh-tui An interactive terminal for the harness, shipped as an installable profile bundle. omdsh-codemode runs this in its column.
omdsh-webapp A packager that writes the web UI into a double-clickable macOS application: it starts a profile from the Dock, raises the tab already showing it, and stops the server when it quits.

Each carries a pnpm workspace of its own, which is why none of them is a member of this one. None composes a layer into a profile either, so none appears in the catalog.

⬇️ Download the desktop application — nothing else needed on the machine, the runtime and the plugin hub are inside it: macOS (Apple silicon) · Windows (x64) · all releases

Catalog

Directory What it is
registry/ A generated manifest of every plugin here, so omdsh-plughub can offer them without enumerating a GitHub account one request at a time.

How they fit together

                    ┌──────────────── omdsh-plughub ────────────────┐
                    │  installs · disables · configures everything  │
                    └───────────────────────────────────────────────┘

  omdsh-basemode ──── the mode registry, the switch, the dots, and Work
      ├── omdsh-chatmode ── Chat · Work
      └── omdsh-codemode ── Code

  omdsh-shortcuts ── the `shortcut` service; every chord in the app
  omdsh-remdev ───── the `remdev` service; sidepanel and codemode ask it about a cwd

  omdsh-sidepanel · omdsh-sidechat · omdsh-usage · omdsh-editor
  omdsh-status
      surfaces beside the column, each answering for itself when a
      companion is not installed

Three services here are published by plugins rather than by the harness: sessionModes (omdsh-basemode), shortcut (omdsh-shortcuts), and remdev (omdsh-remdev). Whether one exists is a property of the profile a person assembled, so no plugin names another plugin's service in a top-level inject — it reaches for it inside apply, on a restricted fiber, and stays inert when it is absent. One missing companion must never take the page down. That is rule 9 of the conventions, and it is why any subset of this collection composes.

Install

You need a global dsh, Node ^22.19.0 || >=24.0.0, and pnpm 11.7.0.

From the hub

Install omdsh-plughub once, then install everything else from inside Settings:

dsh plugin --profile web add @omdsh-plugins/omdsh-plughub
dsh --profile web

Open Settings → Plugins → Plugin hub, and the collection is listed with an Install button on each card. The hub reads the registry manifest, so a plugin published after you installed the hub still appears.

Every install, update, and removal takes effect on the next start — the hub says so on the card, and the harness's loader does not hot-swap a bundle.

From the command line

The hub ships a command, and it installs anything in the catalog by name:

npx @omdsh-plugins/omdsh-plughub list                       # what is on offer
npx @omdsh-plugins/omdsh-plughub add omdsh-basemode omdsh-chatmode omdsh-codemode
npx @omdsh-plugins/omdsh-plughub remove omdsh-codemode

That is the Settings tab's installer with argv where the button was — the same catalog, the same specifier, the same dsh plugin underneath — so a plugin added this way is the same dependency and the same bundle row. It writes into the web profile unless --profile says otherwise, and that profile has to exist first: dsh --profile web writes one.

Every plugin but the hub is why it exists. Two packages install from npm: omdsh-plughub, the bootstrap in the section above, and omdsh-basemode, the mode system chatmode and codemode register into. The rest install from their GitHub repositories, so dsh plugin --profile web add @omdsh-plugins/omdsh-chatmode answers ERR_PNPM_FETCH_404 and changes nothing — the profile is left exactly as it was. The git specifier that would work needs a pnpm build-allowlist key carrying the commit pnpm resolved, which can be copied out of a failure and never written down in advance; the command writes it for you.

Order is a readability preference, not a requirement: a plugin composed before the service it wants waits on a restricted fiber rather than failing.

A version of the hub or of omdsh-basemode published in the last 24 hours does not install by name — through dsh plugin. That is pnpm's caution and not npm's, so the npx line above is unaffected. pnpm holds a fresh release at arm's length — minimumReleaseAge defaults to a day — so an add run the morning after a release quietly records the version before it, and the hub then offers an update to the one you thought you asked for. Name the version, or waive the delay for that one command:

dsh plugin --profile web add @omdsh-plugins/omdsh-plughub@<version>
dsh plugin --profile web add @omdsh-plugins/omdsh-plughub --config.minimumReleaseAge=0

The minimumReleaseAge: 0 in this workspace's pnpm-workspace.yaml does not reach that install: the profile directory is its own pnpm root and inherits nothing from here.

Remove the hub the same way:

dsh plugin --profile web remove @omdsh-plugins/omdsh-plughub

From this checkout

The hub and the mode system are published; everything else, and a plugin you are changing, is never the published one, so a profile assembled here installs from the working tree. Build first — dsh plugin add records a link: dependency, so the installed files are the checkout, and a checkout with no lib/ cannot be loaded:

pnpm install
pnpm run build
dsh plugin --profile web add "$PWD/omdsh-basemode" "$PWD/omdsh-chatmode" "$PWD/omdsh-codemode"

omdsh-tui is not a workspace member and installs into a profile of its own, which is where omdsh-codemode looks for it:

cd omdsh-tui && pnpm install && pnpm run install:profile

Code mode needs that profile. Without it, pressing Code renders dsh: profile "omdsh-tui" does not exist inside the terminal column — the rest of the app is unaffected.

One surface per profile

A profile composes exactly one surface bundle over dsh-base. @deepseek-ai/dsh-web-app and @omdsh-plugins/omdsh-tui-app are both surfaces and collide on seven loader ids, so the terminal lives in its own profile (omdsh-tui) and never alongside web. The feature plugins in this collection are not surfaces and stack freely.

Configure

A plugin with anything to configure registers one settings namespace with a schemastery schema, and omdsh-plughub renders a form from that schema — labels, descriptions, validation, secret redaction, and the base/user layering all come from the harness. No plugin teaches the hub anything about itself, which is what lets a plugin installed today get correct labels in both languages without the hub being edited.

Six plugins own a namespace: omdsh-plughub, omdsh-shortcuts, omdsh-remctrl, omdsh-usage, omdsh-document, omdsh-vision. The rest are configured, where they are configurable at all, in the profile's own cordis.patch.yml — each README says which it is.

A field holding a credential is declared .role('secret'), stripped from every response, and rendered as a write-only control.


The full README — the half this page leaves out: the commands, the tooling's known rough edges, and what a plugin here agrees to. Everything on one page, with the catalog and the conventions, is on the site.

Popular repositories Loading

  1. omdsh-basemode omdsh-basemode Public

    The session-mode system for the DeepSeek Harness web GUI: the segment registry every mode plugin registers into, the switch that renders them, and the sidebar dots that colour their conversations

    TypeScript 1

  2. omdsh-plughub omdsh-plughub Public

    The omdsh plugin hub: a Settings tab that installs and removes omdsh plugins from a configurable upstream, and configures every installed one from the settings schema it already registers

    TypeScript

  3. omdsh-shortcuts omdsh-shortcuts Public

    Bind a chord to anything the harness can do: a menu the desktop shell renders natively, a switchboard the runtime dispatches through, and an in-page listener for the web — one document, two surfaces

    TypeScript

  4. omdsh-usage omdsh-usage Public

    API spend at a glance for the DeepSeek Harness web GUI: this conversation, this project, and the account balance, beside the mode chip in Chat and Work and in the corner in Code

    TypeScript

  5. omdsh-editor omdsh-editor Public

    Open the current project directory in a native editor from the DeepSeek Harness web GUI: the session header's editor picker, and the host half that finds the installed editors and launches one

    TypeScript

  6. omdsh-codemode omdsh-codemode Public

    Code mode for the DeepSeek Harness web GUI: a third segment beside Chat and Work whose column is the harness's own terminal, running in the conversation's workspace

    TypeScript

Repositories

Showing 10 of 20 repositories

Top languages

Loading…

Most used topics

Loading…