Version 1.3.6
DeepSeek Harness jailbreak (破甲): every model can jailbreak; swap prompts per model. Default prompt for Chinese models — 小码酱. Please star ⭐
> Aligned with **dsh 0.1.5-rc.1** (Node.js **≥18**; Windows no-flash import hooks need **Node ≥22** `registerHooks`, older Node still gets file-level `windowsHide` patches). On other versions, unmatched originals stay pending or skipped. Nothing is rewritten blindly. > > Also accepts the 0.1.2 community `dsh-persona text` field and `dsh-mnemon` v0 session `summary`. After install you still need **Apply + restart**. --- ## ☕ Sponsor If dsh-purge helps you, a tip is welcome.
Built by 小杨 · for DeepSeek Harness
--- ## 🛡️ Why a local harness purge Models now sit inside a local Agent / Harness. Prompts, approval gates, sandbox policy, and session migration all rewrite behavior at runtime. Asking “will the model answer” is not enough if the host layer kills a lawful eval request first. 1. **Map the host guardrail, not just the model.** Reversible patches on the installed `@deepseek-ai/*` packages show which refusals come from the model and which come from default copy, approval ladders, or session-format checks. 2. **Keep official capabilities; drop refusal locks.** No second invented identity. Persona is whatever you put in `prompt-inject.md`. 3. **Survive upgrades.** Patches re-apply after npm overwrites `node_modules`. Unmatched originals skip so a 0.1.5 tree is not smashed blindly. This is a local Harness plugin. It is not a public scanner and not an attack kit for third-party sites. --- > ### ⚠️ Strict Legal & Compliance Disclaimer > > **Zero-tolerance notice:** This project opposes and forbids any illegal activity. The authors do not support, encourage, or assist unauthorized network attacks, exploit use, data theft, unlawful access to computer systems, or generation of illegal content. > > 1. **Authorized, controlled scope only.** `dsh-purge` is a local DeepSeek Harness red-team research plugin and robustness-eval aid. **Do not run this project or its derived patches against targets, public online systems, or production services without the owner’s lawful written authorization.** All testing must stay on **your authorized local Harness install, offline local synthetic fixtures, authorized cyber-range / lab environments**. > 2. **No illegal or prohibited use.** You must not use this project, directly or indirectly, to: > - violate the Criminal Law of the PRC, the Cybersecurity Law, the Data Security Law, the Personal Information Protection Law, or any other applicable law; > - conduct unauthorized intrusion, ransomware, destruction, credential stuffing, or malware distribution; > - induce, generate, or spread content that is illegal (national security threats, terrorism, graphic violence, pornography/gambling, fraud, privacy or IP infringement, and any other legally prohibited category); > - violate a model provider’s Terms of Service or Usage Policy. > 3. **You bear all liability.** The project is provided under the MIT license **AS-IS**, with no warranty of completeness, safety, or fitness. **You alone are responsible for every download, deploy, run, modification, and redistribution, and for every input and output that follows** — civil, administrative, and criminal. Authors and contributors accept no direct, indirect, or joint liability for misuse. > 4. **Breach terminates the license.** Anyone who uses this project for illegal attacks, malicious activity, or other violations loses the open-source license **automatically and irrevocably** from the moment of the violation. They must stop, permanently destroy all copies and derivatives, and face applicable legal consequences. > 5. **No affiliation.** This is an independent open-source security-eval project. It is not affiliated with, partnered with, authorized by, or endorsed by DeepSeek or its affiliates. > 6. **Use is consent.** Cloning, downloading, installing, redistributing, or running this code means you have read and accepted all of the above. If you do not agree, stop immediately and delete every copy. --- ## ⚡ Install Web and desktop install the same plugin into different profiles. After install you **must fully quit and restart** DeepSeek Harness so the **Rules** card appears. Then **Apply** — adding the bundle does not patch `@deepseek-ai` packages by itself. > 🌐 **Plugin hub:** [DeepSeek Harness Hub](https://deepseek.stream/plugins/dsh-purge) ### Method 1: Hand this to an AI agent (fastest) Paste this README (or the block below) to a local coding agent and let it install and operate.🌐 Open Hub page · 🚀 Install in desktop client
🔗 **Raw protocol URL:** ``` dsh://plugin/install?id=dsh-purge&name=dsh-purge&version=1.3.6&repo=YuJunZhiXue%2Fdsh-purge&permissions=%E7%B3%BB%E7%BB%9F%E6%8F%90%E7%A4%BA%E8%AF%8D%E6%B3%A8%E5%85%A5%2C%E6%9C%AC%E6%9C%BA%E8%A1%A5%E4%B8%81%2C%E8%AE%BE%E7%BD%AE%E9%A1%B5&downloadUrl=https%3A%2F%2Fgithub.com%2FYuJunZhiXue%2Fdsh-purge%2Farchive%2Frefs%2Fheads%2Fmaster.zip ``` **Web trigger example:** ```js /** * Open the DeepSeek Harness desktop client to install dsh-purge */ export function installDshPurgeToDesktop() { const params = new URLSearchParams({ id: 'dsh-purge', name: 'dsh-purge', version: '1.3.6', repo: 'YuJunZhiXue/dsh-purge', permissions: '系统提示词注入, 本机补丁, 设置页', downloadUrl: 'https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.zip', }); const deepLink = `dsh://plugin/install?${params.toString()}`; const iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.src = deepLink; document.body.appendChild(iframe); setTimeout(() => document.body.removeChild(iframe), 2000); } ``` **HTML link:** ```html 🚀 Install in desktop client ``` **`dsh://plugin/install` parameters:** | Param | Value / example | Meaning | |---|---|---| | id | `dsh-purge` | Plugin id | | name | `dsh-purge` | Display name | | version | `1.3.6` | Semver | | repo | `YuJunZhiXue/dsh-purge` | GitHub repo | | permissions | `系统提示词注入, 本机补丁, 设置页` | Requested permissions | | downloadUrl | `https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.zip` | Zip URL | ### Method 3: Official CLI (`dsh plugin add`) ```sh git clone https://github.com/YuJunZhiXue/dsh-purge.git cd dsh-purge # Web dsh plugin --profile web add . # Desktop dsh plugin --profile default add . ``` Or skip clone and pass the zip: ```sh dsh plugin --profile web add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.zip dsh plugin --profile default add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.zip ``` Run both if you use Web and desktop. Then **restart**, then Apply on the settings page or `/purge apply` in chat. ### Method 4: Manual install Use this when `dsh` is not on `PATH` or you do not want `dsh plugin add`. Do **not** delete existing bundles. **1. Find the Harness home (`$DSH_HOME`)** | Layout | Typical path | |---|---| | Env | `DSH_HOME` if set | | Windows portable | `.dsh` next to `npm-global`, e.g. `D:\DeepSeek Harness\.dsh` | | User default | Windows `%USERPROFILE%\.dsh`; Linux / macOS `~/.dsh` | Web = `profiles/web`. Desktop = `profiles/default` (or whatever profile directory the desktop client actually uses). **2. Put this repo under plugins** ```sh git clone https://github.com/YuJunZhiXue/dsh-purge.git "$DSH_HOME/plugins/dsh-purge" ``` Or copy the tree to `$DSH_HOME/plugins/dsh-purge` (folder name must be `dsh-purge`). **3. Edit that profile’s `package.json`** - Web: `$DSH_HOME/profiles/web/package.json` - Desktop: `$DSH_HOME/profiles/default/package.json` Add to `dependencies` (keep other deps): ```json "dsh-purge": "file:../../plugins/dsh-purge" ``` **Append** `"dsh-purge"` at the end of `dsh.profile.bundles`: - Web: **keep** `@deepseek-ai/dsh-web-app`, only append this plugin - Desktop: keep `@deepseek-ai/dsh-base` (and the rest), only append this plugin Sketch (keep every other field from the file on disk): ```json { "dependencies": { "dsh-purge": "file:../../plugins/dsh-purge" }, "dsh": { "profile": { "bundles": [ "@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-purge" ] } } } ``` If the desktop profile has no `dsh-web-app` row, do not add it; just make sure `"dsh-purge"` is in `bundles`. **4. Install deps** ```sh cd "$DSH_HOME/profiles/web" pnpm install cd "$DSH_HOME/profiles/default" pnpm install ``` PowerShell: substitute the real path, e.g. ```powershell cd "D:\DeepSeek Harness\.dsh\profiles\web" pnpm install ``` **5. Restart, then apply patches** 1. Fully quit DeepSeek Harness (Web process or desktop tray) and start it again. 2. Settings should show **Rules**. Ctrl+F5 if cached. 3. Click **Apply**, or `/purge apply`, or `dsh-purge --apply` from the plugin dir. 4. Restart again when prompted so patched packages load in this process. ### Uninstall Click **Restore** on the settings page if patches must be undone, then: ```sh dsh plugin --profile web remove dsh-purge dsh plugin --profile default remove dsh-purge ``` If you installed by hand: remove `dsh-purge` from that profile’s `dependencies` and `bundles`, run `pnpm install`, restart. Plugin config lives in `cordis.patch.yml`: ```yaml - insert: - id: dsh-purge name: 'dsh-purge' config: enabled: true autoApplyOnStart: true autoRevertOnMissing: false verbose: false postPromptOrder: 5100 postPrompt: "" ``` `postPrompt` is empty by default. --- ## What this is **dsh-purge** is a settings plugin for [DeepSeek Harness](https://www.deepseek.com/harness/): - Updates default copy, permission policy, and tool limits in the installed `@deepseek-ai/*` packages - Adds a **Rules** card: grouped patches, Apply / Restore, session override editor, multiple rule sets - Re-applies on start after an npm upgrade overwrites `node_modules` - No hardcoded drive letters: `$DSH_HOME`, `.dsh` next to the dsh launcher, then `~/.dsh` It does not patch the Harness source tree. Use **Apply** on the settings page. Identity comes only from your `prompt-inject.md` — the plugin does not author a second identity card. --- ## 0.1.5 notes | Symptom | Patch | What it does | |---|---|---| | Picking a workspace / new chat wipes to empty | `#4` `#28` `#39` | 0.1.5 `dsh-persona` requires `prefix`; old presets still send `text`. Alias `text` → `prefix` so 0.1.2 presets (liangshen) can mount | | History: `summary requires notice form` | `#40` | `dsh-session-format-v0-to-v1` allows mnemon `instructions` / `recall` sources to carry `summary` | | “Who are you” falls back to DeepSeek assistant | inject file | No second identity. The `dsh-purge` section is verbatim `prompt-inject.md` | | Liangshen turn 1 looks uninjected | `#29` | phase-1 keeps persona / persona-prefix / persona-suffix plus inject; official tool catalog stays isolated | `#20` / `#21` / `#28` / `#29` remain optional plugin rows: skip if those packages are absent. --- ## Preview The **Rules** card appears on the dsh web settings page. Switch **Light / Ink**. Patches are grouped; the count only includes items that actually applied. Rule sets sit in a list above the editor, with Enable and Delete on each row. **Patches**  **Rule sets**  | Area | What it shows | |---|---| | Light / Ink | card appearance | | Patches | grouped status, Apply or Restore | | Prompt | edit `prompt-inject.md` as the session override | | Rule sets | multiple `AGENTS.md` / `CLAUDE.md`; Enable writes under `$DSH_HOME`, Delete removes the row | --- ## Layout ``` dsh-purge/ ├── lib/ │ ├── core.js # path detect, patches, backup/restore, shim, override file │ ├── hide-console.js # Windows hide-console pin into bin.js │ ├── identity.js # fold inject into persona-prefix; no identity card │ ├── index.js # plugin: commands, tools, systemPrompt, HTTP │ ├── rules.js │ ├── restart-web.js │ └── default-prompt-inject.md ├── client.js # settings UI ├── bin/dsh-purge.js ├── docs/ │ ├── banner.svg │ ├── appreciate.png │ └── preview/ │ ├── settings.png │ └── rules.png ├── cordis.patch.yml ├── package.json ├── README.md ├── README.zh-CN.md └── LICENSE ``` Runtime user files: `$DSH_HOME/prompt-inject.md`, `$DSH_HOME/rules/`. If `DSH_HOME` is unset, the launcher-adjacent `.dsh` wins over `~/.dsh`. --- ## Verify - After restart, the **Rules** card is on the settings page. Hard-refresh (Ctrl+F5) if the client bundle is cached. - Click **Apply**, then **Restart** when prompted. Optional packages (liangshen / web-fetch) show as missing/skipped and do not block complete → restart. - First Apply writes the built-in default into `prompt-inject.md` when the file is missing; an already-empty file is left empty. - `/purge status` prints `DSH_HOME` and the patch list. - On 0.1.5, selecting an existing workspace should restore the session — not wipe to an empty workspace. - Skipped items are expected when a target file is absent (for example #20 / #21 without `dsh-web-fetch-http`). --- ## Usage ```sh dsh-purge --status dsh-purge --apply dsh-purge --revert dsh-purge --edit /purge status | apply | revert | edit | help /rules list | use