DeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分
JavaScript
6,940
229 commits
updated Oct 12, 2026
Version 1.1.71
DeepSeek Harness jailbreak: every model, swap prompts per model. Default prompt for 小码酱. Please star ⭐ If you build on this, see Attribution required.
Updates paused. The author has no steady income for now because of work. Maintenance is on hold: no new releases, issues / PRs are not taken, and new dsh versions are not guaranteed. The repo stays usable; see Sponsor below. When maintenance resumes, this README will say so.
Official Web and the official desktop app are both supported. Official
dsh webuses profileweb. The official desktop EXE (DeepSeek Harness 0.2.0-rc.2) uses profiledesktop. Install and Apply them separately. This release targets dsh 0.2 only. Older dsh builds need the matching older plugin. Community Desktop is not maintained.Adding the plugin to a profile does not patch the host. Click dsh-purge beside the session title → Clean → Apply. A successful Apply restarts; an unfinished Apply does not. After the restart, start a new chat — that is when the inject enters the session.
Node.js ≥18. Windows no-flash needs Node ≥22. Hub one-click and the commands below both install the npm package
dsh-purge.
If this project helps you, send it over — I'm out here asking~
| Asset | Address |
|---|---|
| USDT (TRC20) | TV5ajPkRD8RH623Dx9mqvYZVNN8nPGRKid |
| Solana | 6x16GhRgLVpKFFXaU1seKNdx2rypspSJTL4dbpt6Xpwk |
| Ethereum | 0xB68BD60C0e8c519513B7DF9bB147696815423B3E |
| Bitcoin | bc1qu70yxkrtwnymt8ryluz9x8y8hqzune5340npht |
dsh-purge is a cybersecurity red-team plugin for the official DeepSeek Harness already installed on your machine. Official Web (dsh web) and the official desktop EXE are both supported. Install and Apply them separately.
Harness does more than forward a prompt. It rewrites prompts, approval gates, sandbox policy, and session migration at runtime. Asking only “will the model answer” treats a host-layer block as a model refusal. This plugin separates those two layers on your own install, for controlled evaluation and for seeing which default policy is too tight.
| You get | What it does |
|---|---|
| dsh-purge dock | A button beside the session title opens the right dock. Two pages: Clean and Drill |
| Clean | Grouped patch status, Apply / Restore / Uninstall, prompt editor, multiple rule sets |
| Drill | Built into the stable release. After authorization: assets, skills, and the local environment. Only for a host you manage, an offline target, or a written authorized exercise |
| Host policy | Default copy, permission policy, and tool limits. Official capabilities stay. No second invented identity |
| On start | Checks and reapplies. After npm overwrites node_modules, you do not hand-edit files |
No hardcoded drive letters. It looks at $DSH_HOME, .dsh next to the dsh launcher, then ~/.dsh. It does not patch the Harness source tree. Apply on the Clean page of dsh-purge is what writes the changes. Identity comes from the encrypted prompt shipped in the plugin, the text the prompt box shows by default. The host prompt file is not read.
It only touches the official @deepseek-ai packages and local config on the user's machine. It is not a public scanner and not an attack kit for third-party sites. The repo does not ship malware, unauthorized-exploit scripts, or payloads aimed at the public internet.
If you borrow this project's name, ideas, code, or prompts, you must credit the author and name the source repository: YuJunZhiXue/dsh-purge.
Using them without attribution, hiding the source, or passing them off as your own will be pursued.
Douyin live account 「老张的ai」 (room name 「老张AI讲堂」) is selling this repository: taking fees in the live room, no attribution, and ignoring the non-profit rule above. The author was in the room. They still charged.
This project is free and non-profit. Selling courses, the plugin, tokens, or reselling it voids the license on the spot. The author reserves the right to pursue it.
Recorded 2026-10-12:
WeChat name 「老张的ai科技」, same handle as the live-room viewer board. Asked if they were this repo's developer, they said they were. The author said they would report it.
Disclaimer: This is a non-profit open-source project. It follows applicable laws and the rules of the platforms it uses, and is intended only for learning and research. Do not use it for any illegal or non-compliant purpose; the user bears any resulting consequences.
Zero-tolerance statement: This project opposes and forbids any illegal activity. The authors do not support, encourage, or assist unauthorized network attacks, exploit use, data theft, unlawful intrusion into computer information systems, or generation of illegal or prohibited content. Anyone who uses this project for crime is solely responsible under the law. The authors have no liability.
@deepseek-ai packages, local profile / $DSH_HOME). The target is the user's own official local software, not someone else's website, server, account, or information system.The latest plugin supports dsh 0.2 only — do not apply it to 0.1.x.
dsh web): use 1.1.40 or newer. This page installs that line.Unmatched patches stay pending or skipped; nothing is rewritten blindly.
Web and the official desktop EXE are the two maintained hosts. Install both. Apply each separately. A Web install does not reach the desktop app, and a desktop install does not reach Web.
Web (official dsh web)
dsh plugin --profile web add dsh-purge
Desktop (official EXE)
dsh plugin --profile desktop add dsh-purge
If this directory is already a clone, use add . instead of the package name. If dsh is not on PATH, use Manual install. Registry blocked: add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz with the same --profile.
Hub one-click on dsh-plugin.org searches npm for this repository and installs dsh-purge. The catalog line may still show github: — use the command above if the button falls back to git.
For the desktop client you can also click the button (dsh:// deep link):
Adding the plugin to a profile does not patch @deepseek-ai by itself.
dsh web, or quit the desktop tray and reopen that app.Web controls affect Web only; desktop controls affect the desktop app only. Do not Apply one host from the other.
/purge status in chat prints DSH_HOME and the patch list — the path should be the home you actually run.Paste the block below to a local assistant. It should only run the install command — no disk scan, no other edits, no Apply, no restart.
Install the DeepSeek Harness plugin dsh-purge into both the Web profile and the official desktop profile. Do not scan the whole disk, do not read or edit other files, do not apply settings, and do not restart the app.
If dsh is not on PATH, tell the user and stop. If this directory is already a clone, use . instead of the package name in both commands. If the npm registry is blocked, use https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz. If one profile is missing, skip that command and still install the other.
Web (official dsh web)
dsh plugin --profile web add dsh-purge
Desktop (official EXE)
dsh plugin --profile desktop add dsh-purge
After the commands finish, tell the user to fully quit and restart dsh web, and to quit the desktop tray then reopen the EXE. On each host, open dsh-purge beside the session title and Apply on Clean. Then stop.
Use this when the command fails or dsh is not on PATH. Edit only the profile for the host you run — do not touch the other, and do not delete existing bundles.
1. Find the $DSH_HOME this host uses. A real home is named .dsh (official EXE sometimes dsh-home), contains profiles, and has at least one profiles/<name>/package.json. Check in order: DSH_HOME env → .dsh next to the install root (portable) → %USERPROFILE%\.dsh or ~/.dsh → %APPDATA% / %LOCALAPPDATA%\DeepSeek Harness\dsh-home. Confirm: profiles/web/package.json has "name": "dsh-profile-web" (or dsh-profile-desktop). Machines often have two homes — use the one that belongs to the host you actually start.
PowerShell to list candidates:
$cands = @()
if ($env:DSH_HOME) { $cands += $env:DSH_HOME }
$cands += "$env:USERPROFILE\.dsh"
$dsh = Get-Command dsh -ErrorAction SilentlyContinue
if ($dsh) {
$dir = Split-Path $dsh.Source
$cands += @((Join-Path $dir ".dsh"), (Join-Path (Split-Path $dir) ".dsh"), (Join-Path (Split-Path (Split-Path $dir)) ".dsh"))
}
$cands += @("$env:APPDATA\DeepSeek Harness\dsh-home", "$env:LOCALAPPDATA\DeepSeek Harness\dsh-home")
$cands | Select-Object -Unique | Where-Object { $_ -and (Test-Path (Join-Path $_ "profiles")) }
2. Put the plugin at $DSH_HOME/plugins/dsh-purge (folder must be named dsh-purge, with a package.json whose "name" is dsh-purge).
git clone https://github.com/YuJunZhiXue/dsh-purge.git "$DSH_HOME/plugins/dsh-purge"
Without git: download master.tar.gz, extract, rename dsh-purge-master → dsh-purge, and place it under plugins. If you already have a clone, copy the whole tree — not a few .js files.
3. Edit only that profile's package.json — back it up first. Web → $DSH_HOME/profiles/web/package.json; desktop → $DSH_HOME/profiles/desktop/package.json. Add only two things, keeping every existing dependency and bundle:
dependencies, add "dsh-purge": "file:../../plugins/dsh-purge"dsh.profile.bundles, append "dsh-purge" (skip if already there){
"name": "dsh-profile-web",
"private": true,
"dependencies": {
"dsh-purge": "file:../../plugins/dsh-purge"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-purge"
],
"patchReload": "live"
}
}
}
Keep JSON valid (comma before the new item, none after the last). Do not switch file:../../plugins/dsh-purge to an absolute path, do not touch patchReload or other plugins, and do not list "dsh-purge" twice. On desktop, if there is no dsh-web-app row, do not add one.
4. Run pnpm install in that profile only (cd into the profile dir, not the repo root or $DSH_HOME):
cd "$DSH_HOME/profiles/web" # or profiles/desktop
pnpm install
Success: profiles/<web|desktop>/node_modules/dsh-purge/package.json exists. If pnpm is missing, use the Node / pnpm shipped with official dsh; on Could not resolve, re-check the file: path; on a JSON error, fix commas or restore the backup.
5. Fully quit that host, reopen it, then Apply — same three steps as above. The card appears beside the session title; click Apply (or /purge apply) on that host only. If the card is missing, you likely edited the other .dsh — go back to step 1.
dsh-purge beside the session title → Clean → Uninstall. Confirm the dialog: it reverts any applied patches, restores the original Harness, and restarts the current host.
# or from a terminal / chat
dsh-purge --uninstall
# /purge uninstall
Plugin config lives in cordis.patch.yml (postPrompt is empty by default):
- insert:
- id: dsh-purge
name: 'dsh-purge'
config:
enabled: true
autoApplyOnStart: true
autoUpdateOnStart: false
autoRevertOnMissing: false
verbose: false
postPromptOrder: 5100
postPrompt: ""
dsh-purge sits beside the session title. It opens a right-hand dock with two pages: Clean and Drill. 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.
The first time you open Drill you read the notice, wait out the countdown, scroll to the end, and check three boxes. Clean does not need that step. Drill is only for a host you manage, an offline target, or an exercise that already has written authorization.
Clean

Drill authorization

Drill

Patches

Own servers
On the Clean page, under Prompt. One host per line, then Save list. Steps are in Own servers.

| Area | What it shows |
|---|---|
| dsh-purge | button beside the session title; opens or collapses the dock |
| Clean | the old Rules page: patches, prompt, rule sets, skills |
| Drill | assets, skills, and environment after authorization. The tab says Unauthorized until then |
| Patches | grouped status, Apply, Restore, or Uninstall |
| Prompt | edit prompt-inject.md as the session override |
| Own servers | one IP or exact hostname per line, saved to $DSH_HOME/net-scope-allow.txt |
| Rule sets | multiple AGENTS.md / CLAUDE.md; Enable writes under $DSH_HOME, Delete removes the row |
| Skills | import a zip or folder into this host’s official $DSH_HOME/skills/<id>/SKILL.md (web and desktop each use their own home; no drive letter is hardcoded); DSH owns match, load, and /name. You can also delete that folder yourself |
bin/ is the CLI, lib/ is patches and the drill console, presets/redteam/ is the red-team preset, skills/redteam/ is the bundled skills, and client.js is the dock.
Runtime files live under $DSH_HOME: prompt-inject.md, rules/, skills/, net-scope-allow.txt, redteam/. If DSH_HOME is unset, the launcher-adjacent .dsh wins over ~/.dsh. Web and the desktop app each use their own home. Skills are not part of the inject section and do not replace the prompt.
dsh-purge --status
dsh-purge --apply
dsh-purge --revert
dsh-purge --uninstall
dsh-purge --edit
/purge status | apply | revert | uninstall | edit | help
/rules list | use <id> | create <id> | delete <id> | reset | help
/skills list | import <zip-or-folder> | create <id> [description] | delete <id> | help
/rewind
purge_status purge_apply purge_revert
After a successful Apply, the host restarts so patched packages load; you can also click Restart manually. Under the patch title are the stable release and the test release. The test release follows the beta branch. Switch to stable installs master and clears any pin. Picking an older stable version pins it; click Update to return to the latest. Old test tags are not listed.
The composer Undo once and Undo last round follow official DSH session.fork({ atSeq }): the withdrawn turn is cut off, a new session keeps the earlier context, the old session is archived, and the line returns to the input so send again re-injects. /rewind does the same.
If the same task works in standard but fails in minimal or PTC, preset run_code, sandbox, or plan intercept text is often still uncleared, or built-in minimal is missing agent-instructions. Use 1.1.61+, then quit the host fully → Apply in Clean → restart → start a new chat. Switching preset alone does not reload patches in the running process.
DSH runs Bash calls in a tool batch one at a time. Older dsh-purge releases raised the default foreground wait from 60 seconds to 10 minutes, so one slow command could hold up later calls for that long. Patch #21 now restores marked plugin values to the official 60-second default. Unmarked timeouts and other custom values are preserved; an unmarked 10-minute value cannot reliably be distinguished from a user setting.
For a shorter wait in dsh web on macOS/Linux, add this entry to $DSH_HOME/profiles/web/cordis.patch.yml (normally ~/.dsh/profiles/web/cordis.patch.yml). Edit an existing entry with the same id instead of adding a duplicate. This profile layer is applied after the bundled configuration, so future plugin applies keep the override.
- id: bash-sandbox
config:
timeoutMs: 10000
With the standard jobs service and promoteOnTimeout: true, an unfinished command returns a background job id after 10 seconds and keeps running. Read it with job_output or stop it with job_kill. This changes the foreground wait, not the command's speed. Without that service or with promotion disabled, the timeout kills the command. A per-call timeoutMs overrides this default; run_in_background: true returns a job id immediately.
For routine tasks, you can also opt into Low reasoning for new sessions:
- id: agent-default-model
config:
provider: deepseek-official
model: deepseek-flash
reasoningEffort: low
Restart dsh web to load the profile. The model and reasoning defaults apply to newly created sessions; select Low in the composer for an existing session. The plugin does not change these model preferences automatically. Keep High when the task needs deeper reasoning, and narrow file searches rather than recursively scanning every application directory.
Addresses in mainland China, Hong Kong, and Macau stay forbidden unless that one host was registered first. Saying “this is my server” in chat does not allow it. A key or a password does not allow it either.
The box sits under Prompt. If the dock does not show it yet, quit DeepSeek Harness completely and open it again.
203.0.113.10 — one IP.my-vps.example.com — one exact hostname. After you save, the addresses that hostname resolves to at lookup time are allowed too.[email protected] — the account only identifies this form. It does not prove the machine is yours.$DSH_HOME/net-scope-allow.txt.203.0.113.10 and example.com above are only examples of the form. Replace them with your own host before you save.
node --check lib/index.js
node --check lib/core.js
node --check lib/surface.js
node --check lib/web.js
node --check lib/desktop.js
node --check lib/host.js
node --check lib/rewind.js
node --check lib/skills.js
node --check client.js
Apply, on start or when you click Apply:
flowchart TD
A["Start or click Apply"] --> B{"Patch already in place?"}
B -->|yes| C["Skip"]
B -->|no| D["Back up the original as .dshpurge.bak"]
D --> E["Replace the matched files"]
E --> F["Override the shim"]
F --> G["Inject the encrypted prompt shipped in the plugin, the text the prompt box shows by default"]
Override on each session:
flowchart TD
A["Restart or new session"] --> B["Inject the plugin's encrypted default. No save click, and no host prompt file"]
Prompt injection and ruleset decision at every turn. The three inputs on the left are what you control in the dsh-purge panel; the dotted edges show which decision each one drives:
flowchart TD
L["Rule library: activate a set → writes prompt-inject.md"]
W["Local rules: check AGENTS.md / CLAUDE.md in the current dir"]
P["Workspace policy: strict / fallback / always"]
A["Turn start"] --> B{"prompt-inject.md non-empty?"}
B -->|yes| C["Inject = prompt-inject.md (A)"]
B -->|no| D{"Any checked local md in the current dir, non-empty?"}
D -->|yes| E["Inject = selected workspace md (B)"]
D -->|no| F["Inject = plugin encrypted slot default (D)"]
C --> G{"Workspace baseline policy (C)"}
E --> G
F --> G
G -->|strict| H["Drop DSH workspace baseline section"]
G -->|fallback default| I{"User inject present above? (A or B)"}
G -->|always| J["Keep DSH workspace baseline section"]
I -->|yes| H
I -->|no| J
H --> K["Final system prompt"]
J --> K
L -.-> B
W -.-> D
P -.-> G
Skills stay out of the inject section:
flowchart LR
A["Settings import or /skills import"] --> B["Write into the official skills directory"]
B --> C["DSH loads it"]
C --> D["Uninstall does not delete user skills"]
<file>.dshpurge.bak before the first apply./purge revert copies backups back and deletes them. With no backup, shim lines written by this plugin are stripped.prompt-inject.md is a user file and is kept.The host surface is detected first: web / desktop (gui / tui are reserved and still fall back to web).
Web:
DSH_HOME / DSH_BASE.dsh next to the dsh launcher (portable install, any drive)npm prefix -g / npm root -g@deepseek-ai/dsh/node_modules/@deepseek-ai~/.dshOfficial desktop EXE: the running official Harness install (resources/app or the unpacked package). The drive letter is not hard-coded. A successful Apply restarts once.
Community Desktop is not maintained.
Official npm-global is not patched. Sealed host-commands / runtime-commands are scrubbed, never injected.
If nothing is found, set DSH_BASE / DSH_DESKTOP_INSTALL. No files are changed.
What changed, and the zip, are on Releases. To publish, bump the version in package.json, write Chinese and English notes in release-notes.md, and push master. Pushing the same version again does not publish another package.
@deepseek-ai/* packages, plus override files and rule sets under the harness home.@deepseek-ai are left alone (CMD silence may best-effort patch installed doctor / market / liangshen / mnemon at runtime).dsh-purge: dsh plugin --profile web add dsh-purge or dsh plugin --profile desktop add dsh-purge. From this repo, add .. If the registry is blocked, add the master.tar.gz URL instead. Hub one-click uses the same npm package.Thanks to the LINUX DO community
63 followers · starred Oct 2026
689 followers · starred Oct 2026
8 followers · starred Sep 2026
8 followers · starred Sep 2026
DeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分
JavaScript
6,940
229 commits
updated Oct 12, 2026
Version 1.1.71
DeepSeek Harness jailbreak: every model, swap prompts per model. Default prompt for 小码酱. Please star ⭐ If you build on this, see Attribution required.
Updates paused. The author has no steady income for now because of work. Maintenance is on hold: no new releases, issues / PRs are not taken, and new dsh versions are not guaranteed. The repo stays usable; see Sponsor below. When maintenance resumes, this README will say so.
Official Web and the official desktop app are both supported. Official
dsh webuses profileweb. The official desktop EXE (DeepSeek Harness 0.2.0-rc.2) uses profiledesktop. Install and Apply them separately. This release targets dsh 0.2 only. Older dsh builds need the matching older plugin. Community Desktop is not maintained.Adding the plugin to a profile does not patch the host. Click dsh-purge beside the session title → Clean → Apply. A successful Apply restarts; an unfinished Apply does not. After the restart, start a new chat — that is when the inject enters the session.
Node.js ≥18. Windows no-flash needs Node ≥22. Hub one-click and the commands below both install the npm package
dsh-purge.
If this project helps you, send it over — I'm out here asking~
| Asset | Address |
|---|---|
| USDT (TRC20) | TV5ajPkRD8RH623Dx9mqvYZVNN8nPGRKid |
| Solana | 6x16GhRgLVpKFFXaU1seKNdx2rypspSJTL4dbpt6Xpwk |
| Ethereum | 0xB68BD60C0e8c519513B7DF9bB147696815423B3E |
| Bitcoin | bc1qu70yxkrtwnymt8ryluz9x8y8hqzune5340npht |
dsh-purge is a cybersecurity red-team plugin for the official DeepSeek Harness already installed on your machine. Official Web (dsh web) and the official desktop EXE are both supported. Install and Apply them separately.
Harness does more than forward a prompt. It rewrites prompts, approval gates, sandbox policy, and session migration at runtime. Asking only “will the model answer” treats a host-layer block as a model refusal. This plugin separates those two layers on your own install, for controlled evaluation and for seeing which default policy is too tight.
| You get | What it does |
|---|---|
| dsh-purge dock | A button beside the session title opens the right dock. Two pages: Clean and Drill |
| Clean | Grouped patch status, Apply / Restore / Uninstall, prompt editor, multiple rule sets |
| Drill | Built into the stable release. After authorization: assets, skills, and the local environment. Only for a host you manage, an offline target, or a written authorized exercise |
| Host policy | Default copy, permission policy, and tool limits. Official capabilities stay. No second invented identity |
| On start | Checks and reapplies. After npm overwrites node_modules, you do not hand-edit files |
No hardcoded drive letters. It looks at $DSH_HOME, .dsh next to the dsh launcher, then ~/.dsh. It does not patch the Harness source tree. Apply on the Clean page of dsh-purge is what writes the changes. Identity comes from the encrypted prompt shipped in the plugin, the text the prompt box shows by default. The host prompt file is not read.
It only touches the official @deepseek-ai packages and local config on the user's machine. It is not a public scanner and not an attack kit for third-party sites. The repo does not ship malware, unauthorized-exploit scripts, or payloads aimed at the public internet.
If you borrow this project's name, ideas, code, or prompts, you must credit the author and name the source repository: YuJunZhiXue/dsh-purge.
Using them without attribution, hiding the source, or passing them off as your own will be pursued.
Douyin live account 「老张的ai」 (room name 「老张AI讲堂」) is selling this repository: taking fees in the live room, no attribution, and ignoring the non-profit rule above. The author was in the room. They still charged.
This project is free and non-profit. Selling courses, the plugin, tokens, or reselling it voids the license on the spot. The author reserves the right to pursue it.
Recorded 2026-10-12:
WeChat name 「老张的ai科技」, same handle as the live-room viewer board. Asked if they were this repo's developer, they said they were. The author said they would report it.
Disclaimer: This is a non-profit open-source project. It follows applicable laws and the rules of the platforms it uses, and is intended only for learning and research. Do not use it for any illegal or non-compliant purpose; the user bears any resulting consequences.
Zero-tolerance statement: This project opposes and forbids any illegal activity. The authors do not support, encourage, or assist unauthorized network attacks, exploit use, data theft, unlawful intrusion into computer information systems, or generation of illegal or prohibited content. Anyone who uses this project for crime is solely responsible under the law. The authors have no liability.
@deepseek-ai packages, local profile / $DSH_HOME). The target is the user's own official local software, not someone else's website, server, account, or information system.The latest plugin supports dsh 0.2 only — do not apply it to 0.1.x.
dsh web): use 1.1.40 or newer. This page installs that line.Unmatched patches stay pending or skipped; nothing is rewritten blindly.
Web and the official desktop EXE are the two maintained hosts. Install both. Apply each separately. A Web install does not reach the desktop app, and a desktop install does not reach Web.
Web (official dsh web)
dsh plugin --profile web add dsh-purge
Desktop (official EXE)
dsh plugin --profile desktop add dsh-purge
If this directory is already a clone, use add . instead of the package name. If dsh is not on PATH, use Manual install. Registry blocked: add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz with the same --profile.
Hub one-click on dsh-plugin.org searches npm for this repository and installs dsh-purge. The catalog line may still show github: — use the command above if the button falls back to git.
For the desktop client you can also click the button (dsh:// deep link):
Adding the plugin to a profile does not patch @deepseek-ai by itself.
dsh web, or quit the desktop tray and reopen that app.Web controls affect Web only; desktop controls affect the desktop app only. Do not Apply one host from the other.
/purge status in chat prints DSH_HOME and the patch list — the path should be the home you actually run.Paste the block below to a local assistant. It should only run the install command — no disk scan, no other edits, no Apply, no restart.
Install the DeepSeek Harness plugin dsh-purge into both the Web profile and the official desktop profile. Do not scan the whole disk, do not read or edit other files, do not apply settings, and do not restart the app.
If dsh is not on PATH, tell the user and stop. If this directory is already a clone, use . instead of the package name in both commands. If the npm registry is blocked, use https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz. If one profile is missing, skip that command and still install the other.
Web (official dsh web)
dsh plugin --profile web add dsh-purge
Desktop (official EXE)
dsh plugin --profile desktop add dsh-purge
After the commands finish, tell the user to fully quit and restart dsh web, and to quit the desktop tray then reopen the EXE. On each host, open dsh-purge beside the session title and Apply on Clean. Then stop.
Use this when the command fails or dsh is not on PATH. Edit only the profile for the host you run — do not touch the other, and do not delete existing bundles.
1. Find the $DSH_HOME this host uses. A real home is named .dsh (official EXE sometimes dsh-home), contains profiles, and has at least one profiles/<name>/package.json. Check in order: DSH_HOME env → .dsh next to the install root (portable) → %USERPROFILE%\.dsh or ~/.dsh → %APPDATA% / %LOCALAPPDATA%\DeepSeek Harness\dsh-home. Confirm: profiles/web/package.json has "name": "dsh-profile-web" (or dsh-profile-desktop). Machines often have two homes — use the one that belongs to the host you actually start.
PowerShell to list candidates:
$cands = @()
if ($env:DSH_HOME) { $cands += $env:DSH_HOME }
$cands += "$env:USERPROFILE\.dsh"
$dsh = Get-Command dsh -ErrorAction SilentlyContinue
if ($dsh) {
$dir = Split-Path $dsh.Source
$cands += @((Join-Path $dir ".dsh"), (Join-Path (Split-Path $dir) ".dsh"), (Join-Path (Split-Path (Split-Path $dir)) ".dsh"))
}
$cands += @("$env:APPDATA\DeepSeek Harness\dsh-home", "$env:LOCALAPPDATA\DeepSeek Harness\dsh-home")
$cands | Select-Object -Unique | Where-Object { $_ -and (Test-Path (Join-Path $_ "profiles")) }
2. Put the plugin at $DSH_HOME/plugins/dsh-purge (folder must be named dsh-purge, with a package.json whose "name" is dsh-purge).
git clone https://github.com/YuJunZhiXue/dsh-purge.git "$DSH_HOME/plugins/dsh-purge"
Without git: download master.tar.gz, extract, rename dsh-purge-master → dsh-purge, and place it under plugins. If you already have a clone, copy the whole tree — not a few .js files.
3. Edit only that profile's package.json — back it up first. Web → $DSH_HOME/profiles/web/package.json; desktop → $DSH_HOME/profiles/desktop/package.json. Add only two things, keeping every existing dependency and bundle:
dependencies, add "dsh-purge": "file:../../plugins/dsh-purge"dsh.profile.bundles, append "dsh-purge" (skip if already there){
"name": "dsh-profile-web",
"private": true,
"dependencies": {
"dsh-purge": "file:../../plugins/dsh-purge"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-purge"
],
"patchReload": "live"
}
}
}
Keep JSON valid (comma before the new item, none after the last). Do not switch file:../../plugins/dsh-purge to an absolute path, do not touch patchReload or other plugins, and do not list "dsh-purge" twice. On desktop, if there is no dsh-web-app row, do not add one.
4. Run pnpm install in that profile only (cd into the profile dir, not the repo root or $DSH_HOME):
cd "$DSH_HOME/profiles/web" # or profiles/desktop
pnpm install
Success: profiles/<web|desktop>/node_modules/dsh-purge/package.json exists. If pnpm is missing, use the Node / pnpm shipped with official dsh; on Could not resolve, re-check the file: path; on a JSON error, fix commas or restore the backup.
5. Fully quit that host, reopen it, then Apply — same three steps as above. The card appears beside the session title; click Apply (or /purge apply) on that host only. If the card is missing, you likely edited the other .dsh — go back to step 1.
dsh-purge beside the session title → Clean → Uninstall. Confirm the dialog: it reverts any applied patches, restores the original Harness, and restarts the current host.
# or from a terminal / chat
dsh-purge --uninstall
# /purge uninstall
Plugin config lives in cordis.patch.yml (postPrompt is empty by default):
- insert:
- id: dsh-purge
name: 'dsh-purge'
config:
enabled: true
autoApplyOnStart: true
autoUpdateOnStart: false
autoRevertOnMissing: false
verbose: false
postPromptOrder: 5100
postPrompt: ""
dsh-purge sits beside the session title. It opens a right-hand dock with two pages: Clean and Drill. 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.
The first time you open Drill you read the notice, wait out the countdown, scroll to the end, and check three boxes. Clean does not need that step. Drill is only for a host you manage, an offline target, or an exercise that already has written authorization.
Clean

Drill authorization

Drill

Patches

Own servers
On the Clean page, under Prompt. One host per line, then Save list. Steps are in Own servers.

| Area | What it shows |
|---|---|
| dsh-purge | button beside the session title; opens or collapses the dock |
| Clean | the old Rules page: patches, prompt, rule sets, skills |
| Drill | assets, skills, and environment after authorization. The tab says Unauthorized until then |
| Patches | grouped status, Apply, Restore, or Uninstall |
| Prompt | edit prompt-inject.md as the session override |
| Own servers | one IP or exact hostname per line, saved to $DSH_HOME/net-scope-allow.txt |
| Rule sets | multiple AGENTS.md / CLAUDE.md; Enable writes under $DSH_HOME, Delete removes the row |
| Skills | import a zip or folder into this host’s official $DSH_HOME/skills/<id>/SKILL.md (web and desktop each use their own home; no drive letter is hardcoded); DSH owns match, load, and /name. You can also delete that folder yourself |
bin/ is the CLI, lib/ is patches and the drill console, presets/redteam/ is the red-team preset, skills/redteam/ is the bundled skills, and client.js is the dock.
Runtime files live under $DSH_HOME: prompt-inject.md, rules/, skills/, net-scope-allow.txt, redteam/. If DSH_HOME is unset, the launcher-adjacent .dsh wins over ~/.dsh. Web and the desktop app each use their own home. Skills are not part of the inject section and do not replace the prompt.
dsh-purge --status
dsh-purge --apply
dsh-purge --revert
dsh-purge --uninstall
dsh-purge --edit
/purge status | apply | revert | uninstall | edit | help
/rules list | use <id> | create <id> | delete <id> | reset | help
/skills list | import <zip-or-folder> | create <id> [description] | delete <id> | help
/rewind
purge_status purge_apply purge_revert
After a successful Apply, the host restarts so patched packages load; you can also click Restart manually. Under the patch title are the stable release and the test release. The test release follows the beta branch. Switch to stable installs master and clears any pin. Picking an older stable version pins it; click Update to return to the latest. Old test tags are not listed.
The composer Undo once and Undo last round follow official DSH session.fork({ atSeq }): the withdrawn turn is cut off, a new session keeps the earlier context, the old session is archived, and the line returns to the input so send again re-injects. /rewind does the same.
If the same task works in standard but fails in minimal or PTC, preset run_code, sandbox, or plan intercept text is often still uncleared, or built-in minimal is missing agent-instructions. Use 1.1.61+, then quit the host fully → Apply in Clean → restart → start a new chat. Switching preset alone does not reload patches in the running process.
DSH runs Bash calls in a tool batch one at a time. Older dsh-purge releases raised the default foreground wait from 60 seconds to 10 minutes, so one slow command could hold up later calls for that long. Patch #21 now restores marked plugin values to the official 60-second default. Unmarked timeouts and other custom values are preserved; an unmarked 10-minute value cannot reliably be distinguished from a user setting.
For a shorter wait in dsh web on macOS/Linux, add this entry to $DSH_HOME/profiles/web/cordis.patch.yml (normally ~/.dsh/profiles/web/cordis.patch.yml). Edit an existing entry with the same id instead of adding a duplicate. This profile layer is applied after the bundled configuration, so future plugin applies keep the override.
- id: bash-sandbox
config:
timeoutMs: 10000
With the standard jobs service and promoteOnTimeout: true, an unfinished command returns a background job id after 10 seconds and keeps running. Read it with job_output or stop it with job_kill. This changes the foreground wait, not the command's speed. Without that service or with promotion disabled, the timeout kills the command. A per-call timeoutMs overrides this default; run_in_background: true returns a job id immediately.
For routine tasks, you can also opt into Low reasoning for new sessions:
- id: agent-default-model
config:
provider: deepseek-official
model: deepseek-flash
reasoningEffort: low
Restart dsh web to load the profile. The model and reasoning defaults apply to newly created sessions; select Low in the composer for an existing session. The plugin does not change these model preferences automatically. Keep High when the task needs deeper reasoning, and narrow file searches rather than recursively scanning every application directory.
Addresses in mainland China, Hong Kong, and Macau stay forbidden unless that one host was registered first. Saying “this is my server” in chat does not allow it. A key or a password does not allow it either.
The box sits under Prompt. If the dock does not show it yet, quit DeepSeek Harness completely and open it again.
203.0.113.10 — one IP.my-vps.example.com — one exact hostname. After you save, the addresses that hostname resolves to at lookup time are allowed too.[email protected] — the account only identifies this form. It does not prove the machine is yours.$DSH_HOME/net-scope-allow.txt.203.0.113.10 and example.com above are only examples of the form. Replace them with your own host before you save.
node --check lib/index.js
node --check lib/core.js
node --check lib/surface.js
node --check lib/web.js
node --check lib/desktop.js
node --check lib/host.js
node --check lib/rewind.js
node --check lib/skills.js
node --check client.js
Apply, on start or when you click Apply:
flowchart TD
A["Start or click Apply"] --> B{"Patch already in place?"}
B -->|yes| C["Skip"]
B -->|no| D["Back up the original as .dshpurge.bak"]
D --> E["Replace the matched files"]
E --> F["Override the shim"]
F --> G["Inject the encrypted prompt shipped in the plugin, the text the prompt box shows by default"]
Override on each session:
flowchart TD
A["Restart or new session"] --> B["Inject the plugin's encrypted default. No save click, and no host prompt file"]
Prompt injection and ruleset decision at every turn. The three inputs on the left are what you control in the dsh-purge panel; the dotted edges show which decision each one drives:
flowchart TD
L["Rule library: activate a set → writes prompt-inject.md"]
W["Local rules: check AGENTS.md / CLAUDE.md in the current dir"]
P["Workspace policy: strict / fallback / always"]
A["Turn start"] --> B{"prompt-inject.md non-empty?"}
B -->|yes| C["Inject = prompt-inject.md (A)"]
B -->|no| D{"Any checked local md in the current dir, non-empty?"}
D -->|yes| E["Inject = selected workspace md (B)"]
D -->|no| F["Inject = plugin encrypted slot default (D)"]
C --> G{"Workspace baseline policy (C)"}
E --> G
F --> G
G -->|strict| H["Drop DSH workspace baseline section"]
G -->|fallback default| I{"User inject present above? (A or B)"}
G -->|always| J["Keep DSH workspace baseline section"]
I -->|yes| H
I -->|no| J
H --> K["Final system prompt"]
J --> K
L -.-> B
W -.-> D
P -.-> G
Skills stay out of the inject section:
flowchart LR
A["Settings import or /skills import"] --> B["Write into the official skills directory"]
B --> C["DSH loads it"]
C --> D["Uninstall does not delete user skills"]
<file>.dshpurge.bak before the first apply./purge revert copies backups back and deletes them. With no backup, shim lines written by this plugin are stripped.prompt-inject.md is a user file and is kept.The host surface is detected first: web / desktop (gui / tui are reserved and still fall back to web).
Web:
DSH_HOME / DSH_BASE.dsh next to the dsh launcher (portable install, any drive)npm prefix -g / npm root -g@deepseek-ai/dsh/node_modules/@deepseek-ai~/.dshOfficial desktop EXE: the running official Harness install (resources/app or the unpacked package). The drive letter is not hard-coded. A successful Apply restarts once.
Community Desktop is not maintained.
Official npm-global is not patched. Sealed host-commands / runtime-commands are scrubbed, never injected.
If nothing is found, set DSH_BASE / DSH_DESKTOP_INSTALL. No files are changed.
What changed, and the zip, are on Releases. To publish, bump the version in package.json, write Chinese and English notes in release-notes.md, and push master. Pushing the same version again does not publish another package.
@deepseek-ai/* packages, plus override files and rule sets under the harness home.@deepseek-ai are left alone (CMD silence may best-effort patch installed doctor / market / liangshen / mnemon at runtime).dsh-purge: dsh plugin --profile web add dsh-purge or dsh plugin --profile desktop add dsh-purge. From this repo, add .. If the registry is blocked, add the master.tar.gz URL instead. Hub one-click uses the same npm package.Thanks to the LINUX DO community
63 followers · starred Oct 2026
689 followers · starred Oct 2026
8 followers · starred Sep 2026
8 followers · starred Sep 2026