How to build trust in a plugin ecosystem
How to build trust in a plugin ecosystem
Summary. Plugin ecosystems die from distrust, not from lack of ideas: supply-chain attacks, broken installs, and unverifiable quality claims chase users away. Over two weeks the DeepSeek Harness community built a trust layer out of four pieces — verification discipline, poison detection, registry contracts, and open diagnostics. This post is the map of that layer and the rules that keep it honest.
The problem
An ecosystem with 900+ plugins is a discovery win and a trust liability at the same time. Users need to answer three questions before they install anything:
- Will it load? (dependency compatibility, build, manifest)
- Is it malicious? (obfuscated exfiltration, hidden shell launches)
- Can I verify the claim? (what does “works” even mean, who checked)
If any of the three is answered by vibes, the ecosystem loses users.
Layer 1: verification discipline
dsh-plugin-doctor turns “will it load” into a machine-checkable question:
manifest → build → pack → fresh profile install → boot → real tool
invocation. The CI template does not stop at “plugin loads”; it calls the
tool’s handler and asserts the result. Exit codes are stable (0 pass / 1
fixable / 2 not a plugin), output is JSON, and the profile-shadow check
catches the #1697 dual-instance trap before users hit it.
Layer 2: poison detection
dsh-poison-guard scans plugins before install with AST parsing (js-x-ray)
plus anti-obfuscation decoding, flagging hidden exfiltration, eval-of-dynamic-
content, and concealed shell invocations. Its scope is stated honestly: a
heuristic review aid, not a sandbox. The sandbox question is an OS boundary
problem (#1863/#1923), and pretending a static scan is a security boundary
would be exactly the kind of claim that destroys trust.
Layer 3: registry contracts
dsh-subscribe is a Steam-style marketplace: browse 900+ plugins, subscribe
in the browser, one command installs everything into the profile. The registry
entry format is a contract (RFC #1846, community registry contract v2):
idstable, owner-suffixed for duplicates;install.specis authoritative, never guessed from the homepage;verified: truemeans “curator exercised CI + release + install + runtime smoke” — not “security audited”;sourcepreserves provenance for mirrored entries.
The narrow definition of verified is the point: a wide claim would be
useless.
Layer 4: open diagnostics
Five independent tools converged on one dsh-doctor/v1 envelope (schema,
lowercase status, checks with names/details), plus a check-lifecycle draft
where “checks are data”. The vocabulary freeze candidate means CI scripts can
match checks[].name across implementations. Diagnostics that admit their
gaps (sandbox denials, approval policy — no offline probe can see them) are
the ones you can build on.
The rules that keep it honest
- Narrow claims beat impressive ones. “verified” never means “audited”; “review aid” never means “sandbox”.
- Rejections are part of the product. Bitbucket was excluded from the catalog because its “public” API returns 404/410 anonymously — the rejection is documented in the README.
- Everything is reproducible. Patches carry root causes + regression tests; the weekly map’s numbers come from live sources; the ledger separates “ready to submit” from “diagnosed, no patch yet”.
- Contracts over chaos. One envelope, one vocabulary, one registry schema — agreed by shipping reference implementations, not by committee.
The ecosystem map (weekly editions) and the patch ledger live in dsh-ecosystem and dsh-docs.
中文摘要
插件生态死于不信任,而不是缺想法。DSH 社区两周内搭了四层信任设施:
① 验证纪律(doctor:manifest→build→pack→新 profile 安装→启动→真实调用 tool,
退出码稳定、输出 JSON);② 投毒检测(poison-guard:AST + 反混淆,明说是审查
辅助不是沙箱);③ 注册表契约(subscribe:900+ 插件一键订阅,
verified 只表示”策展人跑过 CI+安装+运行时冒烟”,绝不等同安全审计);
④ 开放诊断(5 个工具收敛到 dsh-doctor/v1,检查名词表冻结候选,敢承认盲区)。
四条规则:窄而准的声明 > 夸张的声明;拒绝记录也是产品;一切可复现;
用契约而不是争论达成一致。