DSH Plugins Marketplace

DSH Plugins

Plugins

/

deepseek-mods

u

deepseek-mods

Discovered

Mods and skills for DeepSeek Harness: an editable system prompt in the chat header, full Russian localization, a mod manager, and a skill-authoring toolkit with a bundled checker. Every claim verified

Harness Mods

Plugins for an agent harness — the agent harness whose browser UI is the dsh web GUI.

Repository: https://gitverse.ru/ubikon/dsh-mods

Three mods live here:

ModWhat it does
system-prompt-modA Промпт / Prompt button in the chat header that opens the live system prompt, lets you edit it, and applies the result on the next model request — no restart.
locale-ruRussian localization for the whole GUI: 42 namespaces, 1257 strings, selectable in Settings → General → Language.
skill-managerA Skills tab in Settings → Plugins, after Mods: every skill this harness resolves, with the description the model is matched against and a one-line summary for a person. Pause a skill and the model stops being offered it on the next request — no restart.
mod-managerA Mods tab in Settings → Plugins: what is installed, whether the page was actually served it, and turn-off / turn-on / remove — without a restart.

Русская версия этого файла: README.ru.md.

The Prompt control in the session header

The editor showing the live system prompt

The Промпт control sits with the session header actions; the dialog shows the prompt the model actually receives — assembled in the live agent's scope, with {{model}}, {{cwd}} and preset layers already resolved.

Language selection in Russian

The language pack adds Русский to Settings → General → Language.

The Mods tab listing installed mods

Before: every loader row, whether this page was served it, and what can be done with each one.

The same tab after turning the prompt mod off

After: the prompt mod turned off from this panel. Its row left the patch file, its host route stopped answering, the badge reads "off" and the button became "turn on" — with no restart. Turning it back on restores the row the same way.


What is different here

Most collections list what they contain. This is what is different about this one, written so that it can be checked rather than believed.

Verification with the evidence publishedEvery claim in these docs was measured, and docs/VERIFICATION.md is the table: what was run, what it returned, and — the column most projects leave out — what was not covered.
Honest failure pathsA mod that will not install says which check failed and what to do about it. The mirror script refuses to push a token saved for the wrong host. The skills checker reports what it cannot prove as a warning instead of a failure.
Bilingual from the startEvery user-facing file exists as X.md and X.ru.md. The Russian pack is a generated bundle of 1257 strings with its own test, not a hand-edited translation.
Tests that are allowed to failA browser test here caught a re-render loop that a naive stub could not see; the stub was fixed, not the test. When a check asserts something inconvenient, the check is examined rather than lowered.
No build stepPlain JavaScript packages. No compiler, no bundler, no network access at install time.

What this repository does not claim is that any of it is a new idea. Plugin managers exist elsewhere. What is uncommon is the verification discipline — and the Russian localization, which a scan of the main harness catalogues found to be an empty niche.

Requirements

  • An agent harness installed and able to run dsh web. Tested against 0.1.5-rc.2.
  • Node.js — the same runtime the harness itself runs on.
  • git, to clone (skip it and download the ZIP instead — the installer does not need git).
  • No build step, no compiler, no network access at install time.

The mods are plain JavaScript packages. The harness is pre-1.0 and its plugin API moves quickly, so read Compatibility before upgrading the harness.

Install

git clone https://gitverse.ru/ubikon/dsh-mods.git dsh-mods
cd dsh-mods
node tools/install.mjs

That URL is the repository's home. A clone from any mirror or fork works the same — nothing in the project depends on where it was cloned from.

Then reload the Web GUI (F5) — the browser roster is composed when the page loads.

That is the whole installation. The script copies both packages into $DSH_HOME/profiles/node_modules/@local/ (default ~/.dsh) and adds one loader row per package to $DSH_HOME/profiles/web/cordis.patch.yml, leaving any existing content in that file untouched.

Re-running is safe and, when nothing changed, a genuine no-op: a package whose installed copy already matches this checkout is left alone, the rows are checked without duplication, and no backup is written. When an installed package differs — you pulled a new version — that package is replaced and the previous copy plus the mod state is snapshotted into $DSH_HOME/mod-backups/<timestamp>/ first, which is what makes a rollback possible.

Options:

node tools/install.mjs --lang ru        # Russian console output
node tools/install.mjs --profile tui    # a profile other than `web`
node tools/install.mjs --home-level     # rows also go to $DSH_HOME/cordis.patch.yml (all profiles)
node tools/install.mjs --dry-run        # report what would change, write nothing
node tools/install.mjs --backup-only    # snapshot what a re-install would replace, then stop
node tools/install.mjs --uninstall      # remove the packages and their rows

--backup-only writes a snapshot only when there is something to preserve. When the installed packages already match this checkout it says so and creates no directory at all, rather than naming a path that does not exist.

Verify

With dsh web running:

node tools/boot-check.mjs
GET / -> 200 (28171 bytes)
boot rows referencing /client.js: 168
  OK   dsh-system-prompt-mod
  OK   dsh-locale-ru

The probe reads the browser-session signing secret from your own harness home, mints the same cookie the GUI uses, and reports which client rows the served boot graph carries. It never prints the secret.

Using the mods

System prompt

Open a session and click Промпт (Prompt) in the session header, next to the other header actions. The dialog shows the prompt the model actually receives — assembled in the live agent's scope, so {{model}}, {{cwd}} and preset layers are resolved.

  • Взять текущий / Load current copies the live prompt into the editor.
  • Показать / Show reveals the prompt read-only.
  • The switch chooses append (your text is added after the deployment prompt) or replace (your text becomes the entire system prompt).
  • Сохранить и применить / Save and apply writes the change; it takes effect on the next model request.

The override is stored in $DSH_HOME/system-prompt-mod.json and applies to every agent. While the mod is disabled — which is the default — the prompt is untouched.

A text containing a {{variable}} group is rejected on save: the harness interpolates those strictly and offers no escape syntax, so such a prompt would break every later request. The editor explains this instead of accepting it.

Russian

Settings → General → Language → Русский. The switch is instant, and the choice is persisted in $DSH_HOME/settings.yaml.

A browser that asks for Russian (Accept-Language: ru) gets the Russian UI immediately, without visiting Settings — the harness takes the locale from the browser until an explicit choice is stored.

Anything not translated falls back to English per key, so a partial or outdated pack degrades gracefully instead of leaving blanks.

Skills

Skills are not mods: no install, no restart, no plugin row. A skill is a folder of instructions an agent reads when a task matches it, and several harnesses — this one and others — read the same SKILL.md format.

SkillWhat it does
create-a-skillTeaches an agent to write a good skill, and to measure whether it works. Assembled from every skill about skill authoring published in a repository with 5000+ stars, then extended with what none of them had: a bundled checklist runner (scripts/check-skill.py, standard library only) and a measured evaluation protocol.

Copy the folder into your harness's skills root and it is live — see Where it goes for the harness's seven roots and the conventions of other harnesses.

Plain text, no binaries, nothing to build. The one Python file is a checker that reads the standard library and nothing else, so the skill stays usable in any harness even if you delete it.

Uninstall

node tools/install.mjs --uninstall

Removes the packages and the rows this installer added, and restores the patch file to its shipped empty form. Reload the page afterwards.

How the mods are wired

This matters for updates, so it is worth knowing:

  • A harness profile is a directory under $DSH_HOME/profiles/<name>/ holding a package.json (the bundle list) and cordis.patch.yml (your own patch layer).

  • A profile plugin is an npm-shaped package placed in the profile's node_modules, plus one row in the patch layer:

    - insert:
        - id: locale-ru
          name: '@local/dsh-locale-ru'
    
  • A package becomes a browser plugin by declaring dsh.client in its package.json and exporting a ./client bundle in the format the harness's client module system serves:

    window.__ModuleLoader__.load({
      id: "@local/dsh-locale-ru",
      factory: (require) => { /* … */ return module.exports }
    })
    
  • $DSH_HOME is not part of the harness installation. Updating or reinstalling the harness replaces the installation; it leaves the home — your sessions, settings, profiles and these mods — in place.

The one operation that can drop the mods is installing profile dependencies (dsh plugin --profile web …), because that runs pnpm, which removes packages the profile manifest does not list. Re-run node tools/install.mjs afterwards.

Repository layout

packages/
  system-prompt-mod/   dual-face plugin: host half + browser half
    lib/index.js       host: prompt section + /api/system-prompt.mod route
    lib/client.js      browser: header button + editor dialog
  locale-ru/           browser-only plugin
    lib/client.js      GENERATED by tools/build-locale.mjs
    i18n/en|ru/        translation sources, one file per locale namespace
tools/
  install.mjs          install / uninstall / backup
  boot-check.mjs       verify the served boot graph
  build-locale.mjs     rebuild the language pack from i18n/
  extract-locale.mjs   pull the shipped dictionaries out of a harness installation
  dev/                 development and verification harness (see tools/dev/README.md)
docs/
  AI-INSTALL.md        install runbook for an AI agent
  AI-PROMPT.md         prompt + reference for having an AI build a new mod
  VERIFICATION.md      every check that was run, and what was not covered
  PUBLISH.md           how to publish this repository (GitHub, GitVerse)
  ROADMAP.md           mod ideas that are not built yet
  screenshots/         images used by this file
.github/workflows/
  ci.yaml              checks that need only Node — runs on GitHub and GitVerse
AGENTS.md              what an agent working here should know — loaded automatically

Adding a mod is a matter of dropping a directory into packages/: tools/install.mjs discovers packages there at run time, uses the directory name as the loader row id, and reads the package name from its manifest.

For AI agents

This repository is written to be operated by an agent as well as a person:

  • AGENTS.md — loaded automatically by the harness when an agent works in this directory: the rules, the layout, and the command cheat sheet.
  • docs/AI-INSTALL.md — a step-by-step install runbook with a check after every step and a troubleshooting table.
  • docs/AI-PROMPT.md — a ready-to-paste prompt for having an AI build a new harness mod: the reconnaissance procedure, the extension points, the exact client bundle format, the verified APIs, the pitfalls, and the deliverable checklist.

Both documents exist in Russian too: docs/AI-INSTALL.ru.md, docs/AI-PROMPT.ru.md.

Every check that was run against these mods — and everything that was not covered — is written down in docs/VERIFICATION.md.

Compatibility

The mods bind to the harness's plugin APIs at a specific version:

ModDepends on
system-prompt-modthe conversation.session.header.utilities slot, ctx.slots, ctx.systemPrompt.section, ctx.connection.fetch.register, ctx.agents.get, and the Modal/Button/Switch/Tag primitives
locale-ructx.locale.addLanguage, ctx.locale.register(namespace, locale, dict), and the shipped namespace key sets

The harness is pre-1.0 and states in its own onboarding notice that core plugins and foundational APIs will keep changing. If a future version renames one of these, a mod stops loading — gracefully: the language pack falls back to English, and the prompt mod simply never registers its route, so the GUI itself keeps working. Fixes are usually a line or two; the installer is also the recovery path after any harness upgrade.

Namespaces or keys added by a newer harness stay English until the pack is rebuilt with tools/build-locale.mjs after re-extracting with tools/extract-locale.mjs.

Development

node tools/extract-locale.mjs              # shipped dictionaries -> locale-en.json
node tools/build-locale.mjs                # i18n/ru/*.json -> lib/client.js
node tools/dev/test-host.mjs               # 11 unit checks on the prompt host half
node tools/dev/test-client.mjs             # 6 checks on the prompt browser bundle
node tools/dev/test-locale-ru.mjs          # language pack contract

The unit tests need the harness packages (@deepseek-ai/*) resolvable from the repository, so they run on a machine that has the harness installed; see tools/dev/README.md.

License

MIT. The Russian dictionaries are translations of the harness user interface, which is MIT-licensed; the original English strings remain the property of their authors.

Comments

Loading…

Similar plugins

dsh-custom-mode

by BOWLUNA

A custom agent mode for DeepSeek Harness (dsh): an editable system prompt that takes effect on the next step, per-row plugin switches, and a settings page.

Terminal & ClientsSessions & MessagesManifest valid

★ 3

↓ 4.4k/wk

MIT

JavaScript

Sep 28, 2026

dsh plugin --profile web add dsh-custom-mode

Skill routing for DeepSeek Harness: embeds skills and each user task with a local model, keeps the clearly-relevant skills with a gap-based selection rule, and auto-injects their full bodies into the

Manifest valid

★ 0

NOASSERTION

TypeScript

dsh plugin --profile web add dsh-skill-router

by Zenjibad

Auto-inject user-chosen skills (e.g. caveman, ponytail) into DeepSeek Harness sessions: every prompt or once at session start, with a settings page and a composer indicator.

Manifest valid

★ 3

MIT

TypeScript

Sep 13, 2026

dsh plugin --profile web add skill-injector-plugin

by MJorgin

Task-to-skill pairing for DeepSeek Harness — pours the minimal set (usually one; zero when plain tools suffice), prefers workflow skills over hand-composed atomics. Laziness ladder, quarantine → SkillSpector scan → explicit human approval, never auto-installs. 任务配技能 · 懒惰阶梯 · 安全酒窖 · 绝不自动安装

Manifest valid

★ 1

MIT

Python

Aug 17, 2026

dsh plugin --profile web add skill-bartender

by Epiphany-Leon

Multi-Agent collaborative skill forging system for DeepSeek Harness — distill conversational experience into verifiable, reusable Agent Skills.

Manifest valid

★ 0

MIT

TypeScript

Sep 6, 2026

dsh plugin --profile web add dsh-skill-forge

Import, install and invoke Agent Skills in DeepSeek Harness from Codex, Claude Code, OpenCode, GitHub or npm — composer-side ⚡ picker inserts /skill-name into the draft, and a Skill 管理 settings page o

Manifest valid

★ 0

dsh plugin --profile web add dsh-any-skills