Plugin directory / Developer / dsh-rules-paths
dsh-rules-paths
Verified · install-tested on dsh Temoa
What it does
Claude Code-style paths: rule injection for DeepSeek Harness (DSH).
Works — verified, early-stage project
Claude Code-style paths: rule injection for DeepSeek Harness (DSH). It installs cleanly and boots without issues in our testing. It's early-stage but functional.
“Verified” means our automated CI actually ran dsh plugin add in a clean profile and it booted — nothing more. Feature descriptions and version compatibility are the author’s claims. This is not a security audit and not an endorsement of third-party code.
README
dsh-rules-paths
Claude Code-style paths: rule injection for DeepSeek Harness (DSH): when the model successfully reads a file that matches a rule's paths: glob, the rule body is injected into the model context at the next step boundary. It follows the official @deepseek-ai/dsh-agent-instructions mechanics (tools/result hook, agent.inbox.nextStep inbox, agent/pre-step folding, SHA-1 dedup, byte budget).
Features
- Path rules 锟斤拷 a rule file declares
paths:glob patterns; a successfulreadof a matching file injects the rule body at the next step boundary. - Global rules 锟斤拷 a rule without
paths(or with no frontmatter at all) is injected into the first entering step of the session, independent of any file read (likeAGENTS.md). - Project rules 锟斤拷 optional scan of
<projectRoot>/.dsh/rulesand<projectRoot>/.claude/rules(Claude Code convention), keyed on the.gitproject root. - Dedup & budget 锟斤拷 each rule is injected once per session unless its content changes (SHA-1 digest 锟斤拷
replace); the rendered message never exceedsmaxBytesand reportsRules budget 锟斤拷when rules are dropped or truncated. - Guidance, not authority 锟斤拷 injected content is a user-role message that does not override system, developer, or direct user instructions; literal
</system-reminder>is escaped.
Install
Requires DSH 0.1.0-rc.x (Web profile).
From GitHub
dsh plugin --profile web add git+https://github.com/Temoa/dsh-rules-paths.git
pnpm pins the package by commit with a full integrity hash. Because the package declares dsh.bundle.patch (cordis.patch.yml), the reconciler appends it to the profile's dsh.profile.bundles automatically 锟斤拷 the plugin mounts at the PROFILE level and rules apply to every session on that profile, no preset edit needed.
To scope the rules to one agent preset instead, add this row to a user preset (a copy of standard):
- id: rules-paths
name: '@temoa/dsh-rules-paths'
config:
rulesDir: "~/.dsh/rules"
rulesDirProject: true
From a local checkout
dsh plugin --profile web add ./dsh-rules-paths
After changing plugin code, fully restart the harness 锟斤拷 the module is cached per process URL; preset config is re-read per session mount, but the plugin file is not re-imported. Rule files themselves never need a restart. Never edit the shipped presets (
standard/code/minimal/cordis); add the preset row above to a copy instead.
Uninstall
dsh plugin --profile web remove @temoa/dsh-rules-paths
Restart dsh after removing. The hook is torn down with the plugin; rule files under ~/.dsh/rules and the project rule directories are left untouched.
How it works
Rules live in ~/.dsh/rules/*.md (configurable via rulesDir), one rule per file:
---
paths:
- "**/*.dart"
- "lib/**/*.ts"
description: Dart conventions (optional, metadata only)
---
Rule body: guidance the model follows after reading a matching file.
On every successful read (and once at session start for global rules), the plugin:
- Lists the configured rule directories 锟斤拷 the user-level
rulesDir, plus<projectRoot>/.dsh/rulesand<projectRoot>/.claude/ruleswhenrulesDirProjectis on. - Matches the read path against each rule's
pathsglobs, against both the absolute path and the cwd-relative path (Windows\normalized to/), so**/*.dartmatches bothD:/lab/proj/lib/main.dartandlib/main.dart. Rules withoutpaths(or without frontmatter) are treated as global. - Renders the matched bodies into a single user-role message 锟斤拷 SHA-1 dedup per session, unchanged rules never re-sent, changed ones sent as
replace锟斤拷 bounded bymaxBytes, then folds it into the enteringagent/pre-stepright after the last claimed message.
paths present but neither a string nor a list skips the file with a warning; files over maxSourceBytes are skipped. Rule bodies are untrusted input: text only, delimiters escaped, never executed. No file watcher: rule edits take effect at the next reconciliation (global) or the next successful read (path rules).
| Key | Default | Meaning |
|---|---|---|
rulesDir |
~/.dsh/rules |
User-level rules directory (~ expands) |
maxBytes |
65536 |
Byte budget per injected message |
maxSourceBytes |
1048576 |
Max bytes read per rule file (larger files skipped) |
triggerTools |
["read"] |
Tool names whose successful executions trigger matching |
rulesDirProject |
false |
Also scan <projectRoot>/.dsh/rules and <projectRoot>/.claude/rules |
Repository layout
dsh-rules-paths/
锟斤拷锟斤拷锟斤拷 package.json # dsh.bundle.patch manifest
锟斤拷锟斤拷锟斤拷 cordis.patch.yml # composition layer: appends the plugin to profile bundles
锟斤拷锟斤拷锟斤拷 lib/
锟斤拷 锟斤拷锟斤拷锟斤拷 index.js # Host half: rule loading, matching, injection
锟斤拷 锟斤拷锟斤拷锟斤拷 types/index.d.ts
锟斤拷锟斤拷锟斤拷 test/
锟斤拷 锟斤拷锟斤拷锟斤拷 index.mjs # 50-assertion test suite
锟斤拷锟斤拷锟斤拷 README.md
锟斤拷锟斤拷锟斤拷 README.zh.md
锟斤拷锟斤拷锟斤拷 LICENSE
Development
npm install # fetches the devDependencies (peers + js-yaml + picomatch)
npm test # node test/index.mjs 锟斤拷 50 assertions
Tests cover: config validation, frontmatter parsing, budget rendering (omit/truncate/escape), message construction, dedup + replace, zero injection, global rules, project rules (.dsh/rules + .claude/rules), and the pre-step fold position.
License
Install
Install the catalog once, then DeepSeek Harness can find and install any plugin from this site automatically:
dsh plugin add dshbase-catalog Then say "install dsh-rules-paths for me" — your agent finds it in the directory and installs it. Docs: dshbase-catalog · verified packs.
This plugin is GitHub source (not published to npm) — install it straight from the repo:
Web profile:
dsh plugin --profile web add github:Temoa/dsh-rules-paths Headless (CLI) profile:
dsh plugin --profile headless add github:Temoa/dsh-rules-paths Test report
Verified: L1 install + L2 load + L3 runtime from GitHub source on dsh 0.1.0-rc.6.
When to use it
Extend the agent's coding surface — give it a new tool, workflow, or integration so it handles a dev task it couldn't before.
Who it's for
Developers who want dsh to behave like a teammate on real codebases — editing, running, and verifying changes rather than just answering.
For developers — extending it
The tool/command surface is the seam: expose more of the SDK, add smarter context wiring, or tighten the loop between code changes and verification.