DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

@jiesou/dsh-stream-rules

Stream Rules

Inject rules when needed, without wasting context. DSH port of opencode-stream-rules.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add @jiesou/dsh-stream-rules@0.1.12
READMECompatibilityVersions
-6336866371853030306_121

Compatibility and provenance

Stream Rules is published as @jiesou/dsh-stream-rules and currently resolves to version 0.1.12. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
npm
Registry updated
11/4/2026

Versions

0.1.12stable
10/3/2026
0.1.11stable
10/3/2026
0.1.10stable
9/30/2026
Show 4 more versionsCollapse versions
0.1.9stable
9/27/2026
0.1.8stable
9/10/2026
0.1.7stable
8/16/2026
0.1.6stable
8/14/2026

Related plugins

Loading related plugins…

Latest
0.1.12
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
18.4 kB
Files
8
Surface
any
License
MIT
Source
npm
GitHub
★ 4
Weekly downloads
51
Last push
10/3/2026
View source ↗Project homepage ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in developer-tools.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Sdk Minimal@deepseek-ai/dsh-sdk-minimalThe standalone minimal SDK profile bundle: JSON-RPC, one DeepSeek adapter, persistent shell, and JSONL sessionsSdk App@deepseek-ai/dsh-sdk-appThe dsh SDK profile bundle: stdio JSON-RPC serving and process lifecycle over dsh-baseExperimental Inspector@deepseek-ai/dsh-experimental-inspectorExperimental cross-realm CDP hub for Host debugging and Client Runtime inspection

README

dsh-stream-rules

简体中文

Inject rules when needed, without wasting context.

-6336866371853030306_121

You can write custom streaming rules for the agent.

These rules are injected only as a steering notice after a pattern match, then agent retry from the same point. This allows you to control the boundaries of agent behavior, without wasting context.

Port of my jiesou/opencode-stream-rules to DSH. Similar to oh-my-pi's "Time-traveling stream rules", but with a very simple and compact code implementation.

How it works

A rule fires when its match returns true, against:

  • the tool call — tool name + flattened arguments (numbers included, e.g. timeoutMs), before dispatch.
  • the settled result — after dispatch, the tool's content, status markers ([timed out after 600000ms], [exit code: 1], …) and error text join the match string, so rules describing outcomes (a crash, a full disk, a timeout) can match there too. Matching after dispatch can only steer, never deny.

On a match:

  • default — injects a SYSTEM NOTICE steering message into the agent (pre-dispatch via agent.inject(), post-dispatch as additionalContexts on the tool result — DSH's non-waking "queue model-facing context for the next pre-step"). The agent retries from the same point, now knowing the rule.
  • reject: true — denies the FIRST tool call ({ kind: 'deny' }); later attempts are allowed. Steering without over-restricting, e.g. letting pip install through when it's already in a container.

Each rule fires at most once per session (per agent), mirroring the original's notified dedup.

Install

From npm (prebuilt, recommended):

dsh plugin --profile <name> add @jiesou/dsh-stream-rules

Or from GitHub (runs prepare to build on install):

dsh plugin --profile <name> add github:jiesou/dsh-stream-rules

Or add the row to your profile's cordis.patch.yml:

- id: stream-rules
  name: '@jiesou/dsh-stream-rules'

After installing

You need to write the rules in your own .js file. This plugin won't work by default until you edit the rules.

  1. Locate the plugin's path:
$DSH_HOME/profiles/<name>/node_modules/@jiesou/dsh-stream-rules

where $DSH_HOME defaults to ~/.dsh.

  1. Write rules:
mv rules/rules.js.example rules/rules.local.js
  • Files starting with _ are skipped.
  • To point at a different rules directory: config.rules:
- id: stream-rules
  name: '@jiesou/dsh-stream-rules'
  config:
    rules: /path/to/your/rules
  • A rule with reject: true will only be rejected on the first toolcall; subsequent attempts by the agent will be allowed. This provides steering while avoiding overly restricting the model (e.g., allowing pip install if it's already in a container).

Writing rules

// rules/rules.local.js
export default [
  {
    match: (v) =>
      v.includes('pip') &&
      v.includes('install') &&
      !v.includes('uv pip') &&
      !v.includes('uvx'),
    reject: true,
    prompt: 'Use `uvx` or `uv venv` + `uv pip` instead of `pip install` directly',
  },
  {
    match: (v) => v.includes('curl') && v.includes('api.github.com'),
    prompt: 'Prefer using `gh` cli over `curl https://api.github.com/...`. gh offers more requests limits.',
  },
  {
    match: (v) => v.includes('pdf'),
    prompt: 'Use the `markitdown` skill to read PDF files.',
  },
  // add your rules here
]
fieldrequireddescription
match✅(v: string) => boolean; every tool call is flattened to a string and matched — plus, after dispatch, the settled result's content, markers and error text
prompt✅The prompt for steering
rejectIf true, prevent the tool call first, instead of just steering

Compatibility

Declared in package.json under dsh.compatibility: DSH >=0.1.7-alpha.1 <0.2, Node.js ^22.19.0 || >=24.0.0, profiles web / headless.

>=0.1.7-alpha.1 is a hard floor, not a preference: that release retires the { kind: 'plugin', plugin: … } message source (session format v4), so the steering notice declares its own MessageSourceMap entry.

Per-release evidence (each release installed into a disposable profile with dsh plugin add <tarball>): the profile composes and cold-starts, the tool-call hook is exercised directly against that release's tools/pre-execute waterfall and agent.inject() (steering notice delivered, reject: true denies the first call and allows the retry), then the plugin is uninstalled and the profile boots again. The rows below are the evidence collected for the >=0.1.0-rc.6 declaration; the range declared above is not re-verified release by release yet.

DSH versioninstallstarthookuninstall
0.1.5-alpha.1passedpassedpassedpassed
0.1.5-alpha.2passedpassedpassedpassed
0.1.5-rc.1passedpassedpassedpassed

Implementation notes

  • A single src/index.ts (~80 lines).
  • Uses DSH's tools/pre-execute waterfall (deny), tools/post-execute (failure-text matching + additionalContexts) and agent.inject() (steering), the documented native extension points. No core changes, no monkey-patching.