Install verification: sandbox install ok, web smoke failed (L5) · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it does
YuanGe (元阁) — orchestration and routing for the YottaMeta skill family, packaged as an Agent Plugin.
Installation
dsh plugin --profile web add @yottameta/yotta-skills-pluginInstall method: npm · sandbox install ok, web smoke failed (L5)
Verification & Compatibility
Grouped by plugin version: each card lists the dsh versions actually tested against that artifact version and their install verdicts (L5 wins). Untested combinations are omitted — absence means untested, never assumed compatible. L1–L3 are a plugin-level static archive (independent of the dsh version — the same verdict on every dsh row): they sit in each row's level grid next to L4/L5, marked "static", while their evidence is stored once per plugin inside that row's "checks & evidence" instead of being duplicated per version.
External credentials (plugin-level): none detected
○ The author declares no dsh version requirement — install is not blocked by version.
| plugin \ dsh | dsh 0.2.1-rc.2 current |
|---|---|
| 0.30.4 | · |
| 0.30.3 | ✗ |
0.30.4npm2026-10-21
@yottameta/yotta-skills-plugin
No runtime install test for this version (static scan only) — compatibility unknown, never assumed.
0.30.3npm1 failed2026-10-19
@yottameta/yotta-skills-plugin
✗dsh 0.2.1-rc.2current2026-10-19L5 · failed
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • Plugin artifact: npm · @yottameta/yotta-skills-plugin@0.30.3
ID: yotta-skills-plugin@0.30.3@dsh0.2.1-rc.2 · profile: l4-sandbox
Issued: 2026-10-19 · expires: 2026-10-26
View checks & evidence
↳ carried from earlier record yotta-skills-plugin@0.30.4@dsh0.2.1-rc.2 (l3-fullscan)
↳ carried from earlier record yotta-skills-plugin@0.30.4@dsh0.2.1-rc.2 (l3-fullscan)
↳ carried from earlier record yotta-skills-plugin@0.30.4@dsh0.2.1-rc.2 (l3-fullscan)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
Only the latest 3 published versions are shown; source-snapshot (commit hash) groups, unstated groups and older versions are omitted — the full archive stays in the data layer (snapshot/unstated groups appear only when a plugin has no published version).
Author badges
Embed the official badges in your README to showcase security & install-test status:
`[](https://www.dsh.so/artifact/yotta-skills-plugin/)`Security Report
Two automated layers, neither a manual review: a static scan (per-plugin rule checks) and a model-driven dynamic security audit that covers only the subset static-flagged at warn or above and never executes plugin code.
Static low, dynamic medium — stricter wins → overall medium.
v0.30.4dsh manifest0.30.4npm2026-10-210.30.4same versionclean · npmVet is an AST static scan (npm artifact or git source).
show static findings (5)
- warningchildProcess · code-exec
skills/yotta-skills/lib/hub-scan.js:41const r = spawnSync(c, ['--version'], { encoding: 'utf8', timeout: 10000 }); - warningfsWrite · files
skills/yotta-skills/lib/install-evidence.js:14fs.appendFileSync(file, JSON.stringify(entry) + '\n', 'utf8'); - warningchildProcess · code-exec
skills/yotta-skills/lib/install-lifecycle.js:57proc = spawn(process.execPath, argv, { - warningfsWrite · files
skills/yotta-skills/lib/m1-features.js:95fs.writeFileSync(tmp, JSON.stringify(report, null, 2) + '\n', 'utf8'); - warningfsWrite · files
skills/yotta-skills/lib/update-check.js:45fs.writeFileSync(tmp, JSON.stringify(cache, null, 2) + '\n', 'utf8');
show 3 audit findings
- mediumPackage-declared lifecycle scripts run with full user privileges after only path/extension checks
skills/yotta-skills/lib/install-lifecycle.js:57Any installed skill package whose skill-manifest.json declares install.setup / install.doctor / install.rollback gets arbitrary Node.js executed with the invoking user's rights. The only gates are isSafeRelativePath plus an inside-package check and a .js/.cjs extension test (lines 41 and runPhase); manifest trust may be 'unknown' and the file is executed before any behavioural sandboxing, so a malicious registry package gains local code execution once the user adopts it.
- lownpm pack spawns with shell:true while args contain registry-derived spec and env-supplied flags
skills/yotta-skills/lib/npm-pack.js:70When npm.shell is true (typical on win32 where npm resolves to npm.cmd), Node joins argv into a single command line, so whitespace or shell metacharacters inside the package spec (from specOf/skill metadata) or YOTTA_SKILLS_NPM_FLAGS are re-interpreted by the shell. YOTTA_SKILLS_NPM_FLAGS is user-controlled and therefore self-inflicted, but spec originates from registry metadata and would be attacker-influenced there.
- lowAuto-started Python MCP server is outside the reviewed source
cordis.patch.yml:16The true DSH runtime entry point executes on every harness start with the user's privileges and exposes MCP tools (the CLI surface implies install/link/purge capabilities), yet it was not included in the harvested files, so its behaviour, network use and tool authorization could not be audited. This is an assurance gap, not an observed malicious behaviour.
Yotta-skills bundle: verifier pinning and purge guards are solid, but install lifecycle scripts and npm pack with shell:true can execute third-party code with user privileges.
Rule: the dynamic audit can only raise risk, never lower it (raise-only, never an exemption); a wrong raise is withdrawn by human review and the tier falls back to the static verdict. Overall verdict = the stricter of the two layers.
Disclaimer: the static scan and the dynamic security audit are both automated analysis, not a security guarantee. Always review what you install.
Activity
Last commit 2026-10-20 · activity: Active
• Repo created: 2026-09-01
• Stars: ★ 0 · Forks: 0
• Health: Active — committed within last 30 days
Source
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
