Claude Code 风格的声明式权限规则:按序 allow/deny/ask 的 YAML 规则,在 tools/pre-execute 瀑布上匹配工具名、参数、工作区路径与 agent 身份,带完整会话日志审计、干跑模式与热重载。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-permission-rules
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:PerryLink/dsh-permission-rules
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
🛡️ dsh-permission-rules
- 1024 商店渠道:先
npm i -g dsh1024,再dsh1024 plugin --profile web add dsh-permission-rules(计入 deepseek1024.com 安装排行)。
DeepSeek Harness 的 Claude Code 风格声明式权限规则。
规则裁决已知的。评审模型裁决未知的。
English · 简体中文 · Español · Português · हिन्दी
⭐ 如果它帮到了你
这个插件是 DSH 插件家族的一员(40+ 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
English: part of a 40+ plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.
Compatibility
| Surface | Status |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.7-rc.2(2026-09-22 已适配,完整门禁链):其插件配置即新的 live settings 契约——每个字段都以 .volatile() 声明,Loader 向 apply 逐个交付活引用,保存的编辑直接写入运行中的引用、不重挂插件,越界值在写入前即被 schema 拒绝。Schemastery 早于 volatile()(3.18.3 之前)的宿主仍能挂载并运行本插件——字段退化为普通值、live 配置表单不可用——因为该标记是能力探测而非假定存在。本线的 Session.append 仍无法盖章 ignorable 标记(第三参数是 surface-intent 包,信封字段仅用于存量日志读取),故整条 0.1.7-alpha 线在首次追加前即被预检为未盖章,会话日志审计默认停用;更早的 0.1.5-rc.2(2026-09-09 已适配)与 0.1.3-alpha 线同样沿用 surface-only 追加签名。这些线的日志迁移连已标记的未分类插件事件也拒绝:在 0.1.3-alpha 宿主打开日志前 strip 掉 v1 审计行,在 0.1.5-alpha 宿主迁移前 strip 掉 v2 审计行(v3 原生日志只需 repair)。 |
| Node | `^22.19.0 |
| Platforms | 全部(host + Web 设置客户端) |
| Model | 任意(deny/ask 原因经工具结果呈现) |
What you get
dsh-permission-rules 在 tools/pre-execute waterfall 上为每次工具调用前置一个有序的 allow / deny / ask 规则列表——确定、即时、可审计,由你用纯 YAML 编写:
deny阻断调用;规则的reason成为模型可见的错误。ask走官方审批接缝(挂载dsh-auto-review用第二模型作答,或由人作答;两者皆无时 harness 失败关闭)。allow(及未命中)严格经next()委托——下游监听器绝不会被短路。
每次命中和每次透传都作为 permissionRules/decision 会话事件审计落盘(仅日志——不会向模型上下文额外注入任何内容)。
- 丰富匹配 —— 工具名 glob(含
mcp__*)、agent 身份选择器(main/subagent/preset:*)、参数键/值 glob 或 正则(含!pattern取反与absent键维度)、任意嵌套深度的工作区相对路径 glob、when宿主条件(环境变量、平台),以及 shell 命令分解(argv:命令词、参数 token、管道签名)用于 token 级精确命令匹配。 - 内置高危基线 —— 随附的 deny/ask 规则集(破坏性命令、权限提升、下载即执行、敏感路径),默认开启并追加在用户规则之后(更近的用户规则可覆盖);用
builtin.enabled开关。 - 分层规则文件 —— 可选
searchUp从会话 cwd 到文件系统根合并每个.dsh/rules.yaml,就近优先。 - 试运行上线 ——
enforce: false审计策略会做什么,同时放行每个调用。 - 热重载 —— Chokidar 监听带去抖;损坏的编辑保留旧规则、绝不崩溃。在 WSL 主机上(或规则文件位于
/mnt/<盘符>下时)监听切换为轮询,因为该处的原生变更事件不可靠。 - 失败大声 —— 非法 YAML、未知 action/字段、坏 glob/正则、易回溯模式或超过
maxRules的规则在加载期失败。
Rule syntax
# <project>/.dsh/rules.yaml
rules:
- match: { tools: [bash, pwsh], params: { command: "git push*" }, paths: ["**/secrets/**"] }
action: deny
reason: "No pushes from protected paths"
- match: { tools: [edit, write] }
action: ask
reason: "File writes need confirmation"
- 匹配维度 ——
tools(glob,含mcp__*)、agents(main/subagent/preset:<name>;未知身份永不匹配——失败关闭)、params(键/值 glob 或正则,!pattern取反,absent键维度)、paths(任意嵌套深度抽取的工作区相对 glob)、when(env变量 glob/正则 + 封闭platform列表),以及network(domains/ips/ports/schemes——glob、通配符、CIDR、端口范围)。 - 动作 ——
allow/deny/ask,按文件顺序求值,首个命中胜出。 - 规则元数据 ——
enabled: false(可见但失效)、description、tags;未知字段加载失败。 - Schema —— JSON Schema 见 docs/rules-format.schema.json(编辑器补全
# yaml-language-server: $schema=...);完整词汇表与 5 条安全基线见 docs/rules-format.en.md。
Network policy
Codex 风格的进程级网络策略:shell 子进程流量经内置本地 HTTP/CONNECT 代理,每个连接由有序网络规则或映射到官方沙箱预设的三档模式裁决:
deny-all—— 只读沙箱预设:阻断所有出站。whitelist—— workspace-write 预设:放行列表目标,其余按unlisted: ask(或deny)。allow-all—— danger-full-access 预设:放行一切。auto(默认)—— 跟随沙箱预设;无沙箱策略服务的宿主上解析为autoFallback(allow-all)。匹配 ——
match.network用domains/ips/ports/schemes(glob、通配符、CIDR、端口范围;数值型 YAML 端口可接受)。tools/pre-execute热路径上的 URL 候选抽取作用于 web 工具参数与嵌入 bash/pwsh 命令文本的 URL;回环目标可按loopback策略短路规则。IPv4 映射的 IPv6 字面量在匹配前归一化为 IPv4 形式;代理按裁决到的地址建连,不做二次 DNS 解析——裁决未解析出任何地址的连接以 502 关闭失败,绝不按名字拨号。上游链式 ——
network.upstreamProxy(默认off)把本代理放行的连接送上上游代理:CONNECT 向上游要一条隧道(CONNECT host:port),纯 HTTP 请求以绝对形式转发给它。被拦截的目标永远到不了上游——它照旧收到本插件的结构化 403。即使配置了上游,两类情况也绝不链式:回环目标(本机之外的代理无法路由它的回环),以及由ips作用域规则产生的任何裁决(链式会把主机名交给上游,"连接落在规则看过的地址上"(issue #21)恰恰会在规则真正在意地址的地方不再成立;这些裁决仍按裁决到的地址直连),再加上目标 scheme 没有可用上游的情况。上游自身的主机名是运维配置而非 agent 输入,不参与这些规则的裁决。带凭据的 URL 绝不原样输出:警告、/rules network与设置页快照都会把口令打码(http://user:***@host:port)。上游不可达、超时(10 秒)或返回非 2xx 一律 502——刻意没有静默回退直连,配置错误因此始终可见。审计 —— 被拒连接向所属会话追加
permissionRules/network(同样的自适应ignorable门),块计数器与近期拦截在/rules network与设置页展示。诊断 —— 被拦截的连接带
[network: …]消息,点名被拦目标、做出裁决的模式或规则,以及处置办法。设置页放行 —— 每条近期拦截都提供放行动作:它在真正裁决该连接的最近一个规则文件的最前面(索引 0)写入一条最小的
match: { network: { domains: [<主机>] } }/action: allow规则——被拦截连接所归属工作区的项目文件(配置了绝对rulesFile时即该文件);对无会话归属的宿主级拦截,则写宿主链解析出的文件(绝对rulesFile→ 已存在的<processCwd>/<rulesFile>→ 配置的fallbackPath→<processCwd>/<rulesFile>,不存在则创建)。加载了多个工作区时,页面先提供工作区选择器——任何已加载的工作区链都优先于宿主链。之所以放在索引 0:规则首个匹配生效,追加在既有deny之后只会成为死文本。只写domains:该维度包含子域且与端口/scheme 无关,因此同一主机在下一个端口上不会被重新拦截;既有注释与未改动规则原样保留,文本与手工编辑走同一道校验门。写入即刻生效——缓存的工作区链与无会话宿主链都会重读,无需重启、无需/rules reload——随后重新计算裁决,因此提示报告的是真实结果,绝不在连接仍被拦截时声称成功。以下情况一律拒绝且磁盘文件分毫不动:未知工作区、不在已知规则源内的目标、只读的内置基线、无法读取或解析的文件;连接已被放行时不写入任何内容。network.allowHostAction: false隐藏按钮并让 RPC 拒绝。
Quick start
# 1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#main"
# or from npm (published releases)
dsh plugin --profile web add dsh-permission-rules
# 2. restart and verify the row
dsh --profile web --dump-config | grep -A4 'id: permission-rules'
Install & uninstall
- git channel(最新
main):dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#main"——prepare脚本仅用生产依赖构建。 - npm channel(发布版本):
dsh plugin --profile web add dsh-permission-rules。 - tarball channel:在本仓库执行
pnpm pack,然后dsh plugin --profile web add ./dsh-permission-rules-<version>.tgz。 - uninstall:
dsh plugin --profile web remove dsh-permission-rules。
Configuration
所有可调项均为 Schemastery Config 字段(可在 cordis.yml 中修改)。按 id 覆盖会整行替换——重述你需要的每个键。在 0.1.7-alpha 宿主上每个字段都以 .volatile() 声明,因此还可在 Plugins 设置页就地编辑:编辑直接写入运行中的引用、不重挂插件,运行期在下次读取时取到新值,且改动 network.proxyPort、proxyBind、injectEnv 或 noProxy 会立即重绑本地代理。数值边界声明在 schema 上,配置编辑器在持久化前用该 schema 解析合并后的配置,故越界值在写入时即被拒绝。Schemastery 早于 volatile() 的宿主上,这些字段只能通过 cordis.yml 修改。
| Key | Default | Meaning |
|---|---|---|
rulesFile |
.dsh/rules.yaml |
规则文件位置;相对 = 相对调用会话 cwd 解析,绝对 = 全局并在挂载时校验 |
fallbackPath |
(none) | 按 cwd 发现无果时使用的规则文件;挂载时校验 |
badFilePolicy |
fail |
坏规则文件:fail 响亮地令待处理工具调用出错;ignore-with-warning 警告并空继续 |
maxRules |
256 |
生效源链上规则总数的硬上限 |
maxCachedWorkspaces |
512 |
缓存的工作区规则加载硬上限(LRU 逐出) |
patternMode |
glob |
params/paths/when.env 模式风格:glob 或 regex(工具名始终为 glob) |
watch |
true |
Chokidar 监听 + 变更重载 |
watchStabilityThresholdMs |
200 |
重载去抖窗口(毫秒) |
language |
en |
/rules 输出语言:en、zh、es、pt、hi |
caseInsensitivePaths |
(win32) | paths 模式与工作区根比较忽略 ASCII 大小写;Windows 上为 true |
audit |
all |
审计粒度:all 记录每次命中与透传;hits 跳过透传事件 |
searchUp |
false |
从会话 cwd 向上遍历父目录并合并每个找到的规则文件,就近优先 |
maxGlobStars |
2 |
每个 glob 模式无界 */** 量词的硬上限 |
enforce |
true |
false = 试运行:deny/ask 命中带 dryRun 标记审计,每个调用都透传 |
allowUnmarkedAudit |
false |
前标记宿主丢弃 ignorable 标记;插件以一次性警告禁用会话日志审计。设 true 重新启用 |
network.enabled |
true |
代理、环境注入与 web 工具模式默认的总开关 |
network.mode |
auto |
策略模式:auto 跟随沙箱预设,或 deny-all / whitelist / allow-all |
network.autoFallback |
allow-all |
auto 无沙箱策略服务时使用的模式 |
network.unlisted |
ask |
白名单模式下未命中规则目标:ask 或 deny |
network.proxyBind |
127.0.0.1 |
本地代理绑定地址(仅回环) |
network.proxyPort |
0 |
本地代理端口;0 选空闲临时端口 |
network.proxyMaxRecent |
100 |
设置页保留的近期拦截记录上限 |
network.loopback |
allow |
回环目标:allow(Codex 对齐)或 policy |
network.injectEnv |
true |
是否为子进程注入代理环境变量 |
network.noProxy |
clear |
子进程 NO_PROXY 处理:clear 强制策略或 preserve |
network.upstreamProxy |
off |
本插件放行连接的上游代理:off 直连、inherit 沿用启动环境的代理名,或显式 http(s):// 代理 URL |
network.allowHostAction |
true |
设置页逐条「放行」动作:false 隐藏「放行」按钮并让 permissionRules/allowHost RPC 拒绝(规则编辑器不受影响) |
builtin.enabled |
true |
内置高危基线:false 完全禁用随附的 deny/ask 规则集 |
builtin.path |
(随附) | 替换基线文件(绝对路径,或相对 process.cwd());挂载时校验 |
Tools & surfaces
| Surface | Kind | Notes |
|---|---|---|
tools/pre-execute |
listener | 首个匹配的 allow/deny/ask 规则 + 网络 URL 候选抽取 |
/rules |
command | list · reload · decisions [n] · test <tool> <json> |
permissionRules/decision |
event | 每次命中与透传的仅日志审计 |
permissionRules/network |
event | 被拒连接的代理层审计 |
| HTTP/CONNECT proxy | service | 治理 shell 子进程流量的内置本地代理 |
| settings page | client | 网络模式编辑器、规则编辑器、块计数器、近期拦截(每条可一键放行) |
/rules list the active rules, their source files, and any last-reload error
/rules list explicit alias for the bare listing
/rules reload re-read the rule-file chain for this workspace
/rules decisions [n] show the last n permission decisions of this session (default 10)
/rules test <tool> <json> dry-evaluate the rules against a hypothetical call
/rules test 也接受前置标志:--cwd <dir>、--env KEY=VALUE(可重复)、--agent <selector>(可重复)与 --platform <name>。在多文件链(如 searchUp)中,每条列出的规则行都归属到其自身源文件。
Permissions & data
- Permissions:workshop 清单声明
files:read、files:watch、files:write、session:append与network:outbound。ask决策走官方审批接缝——不重实现、不绕过。 - Data:规则文件从磁盘读取;不写任何规则数据。无模型调用、无评审子代理。
- Session log:
permissionRules/decision绝不注入模型上下文,并以信封的ignorable: true标记追加,任何 harness 构建都能加载日志。
Security boundaries
- 是策略,不是内核。
paths候选只来自一组文档化的参数键(任意嵌套深度、有深度上限),且仅工作区相对路径匹配。 - 这里没有评审者。 插件绝不生成子代理或调用模型——产出
ask决策就是其工作的终点。 - 不改沙箱。 OS 级沙箱策略属于沙箱接缝,与本插件无关。
- 响亮地拒绝错误配置。 未知 YAML 字段、未知 action 与坏模式在加载期被拒绝。
- 回溯界限。 glob 模式以
maxGlobStars限制无界星号展开;正则模式拒绝嵌套无界量词与量化重叠字面交替。 - 关闭失败的拨号。 明文 HTTP 转发与 CONNECT 隧道只连接裁决到的地址;裁决未解析出任何地址的 allow 以 502 关闭失败,而不是按名字拨号(issue #23)。
Known limitations
- 前标记宿主与拒绝型宿主上的审计标记。
permissionRules/decision以ignorable: true追加;Session.append早于该标记的宿主(0.1.0-rc.1–rc.7与0.1.1-rc.1–rc.7线)静默丢弃它,0.1.2-rc线沿用 alpha.5 表面(append 无任何选项能写该标记),0.1.2-alpha线在读取时连已标记的插件事件也拒绝,0.1.3-alpha与0.1.5-alpha线同样沿用 surface-only 追加签名(已在已发布的0.1.3-alpha.1/0.1.5-alpha.1包上核验)——运行时在首次追加前即预检这些线并以一次性警告禁用会话日志审计。跨代迁移同样拒绝已标记的审计行:0.1.3-alpha的 v1→v2 门拒绝未知 v1 事件,0.1.5-alpha的 v2→v3 门拒绝一切未分类事件(其清单冻结为已发布 v2 词汇),故在 0.1.3 宿主打开日志前stripv1 行、在升级到 0.1.5 宿主前stripv2 行。v3 原生日志接受已标记的插件行,只需repair。设allowUnmarkedAudit: true重新启用;用scripts/repair-session-logs.mjs修复已写日志(标记无济于事的宿主用其strip模式移除审计行)。 - 路径候选是启发式的。 只有文档化的参数键参与路径匹配,且工作区相对匹配仅在
caseInsensitivePaths开启时忽略 ASCII 大小写。 - glob 是保守子集。 无花括号展开——写两个模式,或用正则模式。
- 正则回溯守卫是结构性的、非穷尽的。 对不可信文件优先用 glob 模式。
- 宿主自身的出站请求不经过本代理。 注入的代理环境覆盖派生的 shell 子进程(这正是注入的用途),以及在请求时读取代理变量名的消费者;它不覆盖宿主进程自身基于
fetch的流量——launcher 在第一个插件挂载之前就用启动环境装好了 undici 的全局 dispatcher,该 dispatcher 按策略而非按环境路由,且 Node 在启动时采样代理环境,因此后挂载的插件无法改变它。结论:供应商端点不需要允许规则,network.injectEnv: false也不会把宿主进程移出任何东西。2026-09-10 实测于 Node 22;用scripts/host-egress-probe.mjs可复现。 - 链式只覆盖到达本代理的流量。 在
dsh-v0.1.7-alpha.1及之后的宿主上,harness 自身的启动期代理策略与其子进程环境覆盖可能优先于本插件注入的代理名,因此network.upstreamProxy描述的是本代理所处理连接的去向——它不是关于宿主进程每一条出站路径的断言。
Collaborating with dsh-auto-review
dsh-permission-rules产出ask;dsh-auto-review在approval/requestwaterfall 上以只读第二模型裁决作答(或委托给人)。两者都挂载即得完整闭环。- 集成测试:
permissionRules/decision→approval/asked→autoReview/verdict→approval/decided,评审者以脚本化 mock 替换。 - 官方 harness 的
never审批策略与每个失败关闭保证保持不变。
Session log repair
在 ignorable 标记出现之前写入的会话日志可能被较新 harness 构建拒绝(SessionFormatUnsupportedError)。随附的 scripts/repair-session-logs.mjs 仅重写目标审计行以携带 ignorable: true,保帧、带备份:
node scripts/repair-session-logs.mjs scan [--home DIR] # 报告外来行,不改任何内容
node scripts/repair-session-logs.mjs repair [--home DIR] [--dry-run]
node scripts/repair-session-logs.mjs strip [--home DIR] [--dry-run]
--home 默认 $DSH_HOME/sessions(或 ~/.dsh/sessions)。工具按规范基名发现每一代日志——session.jsonl、session.v2.jsonl、session.v3.jsonl,各自可选 .zstd 压缩——请按世代选择模式:
- v3(
session.v3.jsonl,0.1.5-alpha线原生写出) —— 读取路径接受已标记的插件行,repair即可。 - v2(
session.v2.jsonl,0.1.3-alpha线写出) ——repair可让写出它的宿主打开日志,但0.1.5-alpha的 v2→v3 迁移连已标记的未分类事件也拒绝:请在升级到0.1.5-alpha宿主之前对 v2 日志执行strip。 - v1(
session.jsonl) ——0.1.3-alpha的 v1→v2 迁移连已标记的未知 v1 事件也拒绝:请在 0.1.3 或更新宿主首次打开日志前执行strip。
Development
pnpm install # node ^22.19 || >=24
pnpm run typecheck # tsc, src + tests
pnpm run lint # eslint, src + tests + scripts
pnpm test # vitest: 24 spec files
pnpm run test:coverage # coverage gate (90/80/90/90)
pnpm run build # tsc declarations + tsdown bundles (lib/)
pnpm run pack:check # build + pack (the published artifact)
node scripts/check-readme-sync.mjs # five-language README sync gate (also in CI)
无头端到端验证记录见 VERIFICATION.md。
Topics
dsh, dsh-plugin, deepseek-harness, permission, policy, allow-deny-ask, approval, safety, network, network-policy, proxy
Contributors
- @PerryLink —— 创建者与维护者:规则词汇与求值、运行时、HMR 监听、会话日志审计、网络策略 + 代理,以及五语文档。
- @22xuan —— 关于 rc.6 宿主静默丢弃审计事件
ignorable标记的详细报告(#2)与上游 harness 讨论;v0.4.1 的运行时宿主能力检测与文档更正直接源自该分析。 - @sjh9714 —— 提出共享规则语法测试向量语料(#4、#5),已于 v0.5.1 以
docs/rule-test-vectors/落地,并在方案讨论中补充了 AST 分解的边界用例。 - @weipeng1999 —— 提出基于 AST 的命令分解功能(#8),促成该方案讨论。
- @alexchenzl —— DSH 目录收录请求(#7)。
- @zl190 —— 报告并验证了
0.1.0-rc.7harness 兼容性缺口(PR #9)。 - @cuohua —— 报告版本门仅覆盖
0.1.0线后,0.1.1-rc线仍静默丢弃ignorable标记(#11);加宽后的版本门直接源自该分析。
PerryLink DSH Plugin Family
This project is one of the 45 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:
| Plugin | One-liner |
|---|---|
| dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default |
| dsh-autotier | Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command |
| dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt |
| dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
| dsh-catalog | DSH Desktop Market standard catalog source for the PerryLink family |
| dsh-cert-mcp | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence |
| dsh-checkpoint-rewind | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
| dsh-claude-move | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
| dsh-click | Cross-platform native desktop control for DeepSeek Harness — Windows first. |
| dsh-composer-history | Terminal-style input history for the web composer: arrows, Ctrl+R search |
| dsh-data-quality | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) |
| dsh-defend | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review |
| dsh-draw | Unified static-image generation routing for DeepSeek Harness. |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. |
| dsh-fund-research | Deterministic research reports for Chinese public mutual funds |
| dsh-github | GitHub PR/issues integration for DSH, every write gated by approval |
| dsh-industry-research | Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble |
| dsh-laya | Laya typed decisions (noul/choice/score) as a first-class Cordis service and model-visible tools |
| dsh-library | Local document knowledge base for DeepSeek Harness. |
| dsh-local-ai | Local-model (Ollama) integration for DeepSeek Harness. |
| dsh-lsp-actions | LSP diagnostics, formatting, completion, code actions and rename over language servers |
| dsh-mask | PII masking middleware: anonymize at the model boundary, restore at the display layer |
| dsh-mcp-panel | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
| dsh-observe | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. |
| dsh-output-styles | Claude Code outputStyles-equivalent runtime style switching |
| dsh-permission-rules | Claude Code-style declarative allow/deny/ask permission rules with audit |
| dsh-plugin-certification | Community certification registry with repro-checkable grades and badges |
| dsh-plugin-doctor | Zero-dependency static + sandbox smoke detector for DSH plugins |
| dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill |
| dsh-plugin-kit | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins |
| dsh-plugin-upgrade | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card |
| dsh-plugin-upgrade-015 | Merged 0.1.3-alpha.1 → 0.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner |
| dsh-reach | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console |
| dsh-research-report | Verifiable research-report engine: content-addressed evidence ledger and sealed versions |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
| dsh-session-pin | Pin sessions in the Web sidebar with durable ordering |
| dsh-session-sync | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. |
| dsh-skill-pack-security | Security-audit skill pack: secret scan, dependency and supply-chain review |
| dsh-talk | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. |
| dsh-team-rooms | Cross-session team rooms: shared message bus, task board and timeline |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
| dsh-ticktick | TickTick/Dida365 task bridge: session-header panel + 11 tools |
| dsh-translate | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. |
License
Apache License 2.0 © 2026 dsh-permission-rules contributors
从 DSH Desktop 市场安装
所有 PerryLink 插件均可在 DSH Desktop 内置市场中浏览:市场 → 来源 → 添加来源 → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选中。安装仍需通过市场的 npm 身份校验与你的确认。
链接
同类插件
toby-bridges/api-relay-audit★ 861
从 DeepSeek Harness 对 AI API 中转站和 LLM 代理运行本地安全审计,生成 Markdown 报告,覆盖提示词注入、模型替换信号、工具调用改写、错误泄漏、流完整性和按 profile 启用的 Web3 风险。
SeaOf0/dsh-redteam-model★ 646
面向授权安全研究的 DSH 合集:九个工作模式(redteam 总控、渗透测试、代码审计、二进制分析、攻防评估、免杀对抗、应急溯源、云安全攻防、CTF 解题)与十五个运行时插件,设置页管理台支持一键部署、安装、更新与卸载。
howmp/dsh-pentest★ 559
面向 DeepSeek Harness 的授权渗透模式:以探索链路记录目标、线索、资产与漏洞,并在 Web 中可视化展示。
PerryLink/dsh-auto-review★ 212
审批链上的第二模型自动审查:只读审查子代理返回带理由的 allow/deny 结构化裁决,默认 fail-closed。
NanmiCoder/dsh-auto-mode★ 164
在 Workspace Write 与 Full access 之间增加 Auto 权限档:日常操作留在官方 workspace-write 沙箱内,由当前会话模型复核升权与破坏性调用,精确的越界访问按次放行一次,意图不明时询问,命中关键路径则拒绝。
ADWMC/helm-d#helmd★ 85
单包逆向与渗透测试安全分析插件:首轮工具收敛、领域路由与 33 个工具,覆盖 APK、Web、原生二进制、协议、恶意样本与 LLM 场景的逆向分析、加壳脱壳与 License 破解绕过;内置 H-CoT 评估引擎(语义路由、/hcot 命令)、账本驱动的 Web 工作台与工具货架、磁盘案件工作区(证据链自动存证、E 编号结论校验、上下文压缩后恢复)、GitHub 工具检索与 361 篇按需参考文档。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。