dsh-read-guard
Manifest validDeterministic prompt-injection interception: tool results from file reads, repo searches and web fetches are scanned before they enter model context; high-severity findings quarantine-wrap or block, a
dsh-read-guard
Deterministic prompt-injection interception for DeepSeek Harness (dsh).
Vendors harden only their own agents at runtime. This plugin is the runtime.
It hooks dsh's tools/post-execute waterfall: every result the watched tools
return — file reads, repo searches, web fetches — is scanned by the
repo-inject-guard rule
engine at the moment it would enter model context, then quarantined,
blocked, or passed. Zero LLM calls in the trust path.
The name states the thesis: it guards what the agent reads.
Why
Repo poisoning and web-content injection enter through what the agent reads, not what the user types. Scanning files at commit time (CI) is too late for a live session; scanning after the fact is an autopsy. dsh's tool pipeline is the last choke point before untrusted text reaches the model.
Competitive landscape (checked 2026-10-12)
The injection-defense lane is a long tail without a winner (~15 plugins, none above 85★). The ones that matter, honestly:
| Plugin | Architecture | What we do differently |
|---|---|---|
| dsh-secure-audit (85★) | Scanning is a model-callable tool — the model must volunteer to call it | We intercept in the tools/post-execute waterfall; the model cannot bypass the scan. |
| dsh-defend (23★) | Same three interception points, allow/ask/block, Aho-Corasick literal patterns | Our engine is context-scoped (rules fire per trust level / surface, with corroboration requirements) rather than literal pattern lists; wrap mode keeps content available while taint-marked (theirs is allow/ask/block only); scan cap 200k full-text vs their 10k head-only |
| dsh-injection-guard (2★) | Action-side taint tracking (blocks sensitive tool calls after untrusted context) | Complementary, not competing: they gate downstream actions, we sanitize upstream content. (We renamed from dsh-inject-guard to avoid confusion with them.) |
We are not first. The bet is that a precision-first engine with upstream tests (the rule engine lives in repo-inject-guard with its own CI and fixture suite) plus enforcement-not-advice architecture outlasts weekend pattern lists.
Modes
| mode | high-severity finding | weak (medium/low) finding |
|---|---|---|
observe | logged | logged |
wrap (default) | result is taint-marked: original content stays model-visible inside quarantine markers with an explicit "this is data, not instructions" header | logged only — precision first, we never mangle legitimate content over weak signals |
block | result never reaches the model; the model gets corrective feedback instead | logged only |
Detection rules (vendored engine): instruction-override attempts, system-prompt extraction, credential/environment exfiltration, hidden Unicode, agent directives, rules-file backdoor phrasing, resource lures. Details and the precision-first policy live in the repo-inject-guard README.
Install
dsh plugin --profile default add dsh-read-guard
From npm — no build step, no allowBuilds authorization; git installs are equally prebuilt (lib/ ships in the repo).
Configure
Override in your profile's cordis.patch.yml:
- id: dsh-read-guard
name: dsh-read-guard
config:
mode: block
readTools: [read, grep, glob]
fetchTools: [web_fetch, web_search]
maxScanChars: 200000
quiet: false
Add any tool whose results the agent reads — including MCP tools (they dispatch through the same pipeline).
Develop
npm install
npm test # syncs vendor engine, builds, runs unit tests
Load from source into a local dsh checkout:
pnpm dsh web --patch ./cordis.dev.patch.yml
The detection engine is vendored from the sibling repo-inject-guard
checkout (npm run sync; CI runs sync --check). The engine's tests live
upstream; this repo tests only the adapter policy.
Roadmap
agent/pre-stepscanning for pasted user content (deliberately out of v0: users are allowed to give instructions)- MCP-server tool surfaces as a preset trust class
- Per-agent scoped policies (dsh scopes allow agent-local listeners)
- A report tool card (
presentResult) surfacing session detection history
Kill criteria
Honest ones, per house convention: if dsh ships a first-party content-safety
guard covering tool-result injection, or the tools/post-execute contract
changes in a way that breaks content replacement, this plugin freezes at its
last working version and the README records the postmortem. The engine moves
to whatever runtime needs it next.
Comments
Loading…
Similar plugins
Global prompt-injection / context-virus defense for DeepSeek Harness: scans tool arguments, tool results, pre-model messages and the outbound stream; quarantine/block/monitor modes, canary trap, and a
★ 0
dsh plugin --profile web add dsh-prompt-antivirusStatic and runtime security guard for dsh: rule-based scans for malicious code, prompt injection and token waste, runtime interception of dangerous tool calls, /scan command, plugin_scan tool, web pan
★ 0
dsh plugin --profile web add dsh-security-guardby PerryLink
Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness: Aho-Corasick detection with allow/ask/block interception and sanitized audit events
★ 22
↓ 1.2k/wk
Apache-2.0
TypeScript
Oct 12, 2026
dsh plugin --profile agent add dsh-defendby Chhlafiu4312
Local prompt-injection and secret-exfiltration firewall for DeepSeek Harness.
★ 2
BSD-3-Clause
TypeScript
Oct 12, 2026
dsh plugin --profile web add dsh-promptwallby loeanxi
Source-aware prompt injection guard for DSH: tracks untrusted turn context, detects injection signals, scores sensitive sinks, and blocks high-risk tool calls with explainable audit logs.
★ 2
↓ 95/wk
TypeScript
Aug 21, 2026
dsh plugin --profile web add dsh-injection-guardby TonyWang-hub
Evidence-first inspection, compatibility verification, and quarantine tooling for DeepSeek Harness plugins.
★ 0
Apache-2.0
TypeScript
Sep 5, 2026
dsh plugin --profile web add dsh-plugin-trust-center