Install verification: runtime verified (L5) · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it doesAI
Adds a goal-mode and autonomous execution mode to DeepSeek Harness, showing a persistent status banner at the top.
- Enable goal-driven operation in DeepSeek Harness
- Run tasks autonomously toward a defined goal
- Show a sticky top banner for goal status
Capability tags are AI-inferred or rule-extracted from the README (see badge) — vocabulary-limited, not install-verified. AI = inferred; README = literal keyword from the readme.
Installation
dsh plugin --profile web add @goodandready/dsh-goalInstall method: npm · runtime verified (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
Based on 1 requirement(s) across 1 @deepseek-ai/dsh-* packages. raw ranges
^0.1.7-rc.2 || ^0.2.0-rc.1 ×1
✓ Running dsh 0.2.1-rc.2 is within the declared range — install is not blocked by version.
Whether it actually runs is a separate question → see the measured matrix below (L1–L5).
| plugin \ dsh | dsh 0.2.1-rc.2 current | dsh 0.2.1-alpha.4 | dsh 0.2.1-alpha.2 | dsh 0.2.0-rc.2 | dsh 0.2.0-rc.1 |
|---|---|---|---|---|---|
| 0.2.28 | · | · | · | · | · |
| 0.2.25 | ✓ | ✓ | · | · | · |
| 0.2.24 | · | · | · | · | · |
| 0.2.23 | · | · | ✓ | · | · |
| 0.2.17 | · | · | · | ✓ | · |
0.2.28npm2026-10-21
@goodandready/dsh-goal
No runtime install test for this version (static scan only) — compatibility unknown, never assumed.
0.2.25npm✓ 2 runtime-verified2026-10-20
@goodandready/dsh-goal
✓dsh 0.2.1-rc.2current2026-10-20L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • Plugin artifact: npm · @goodandready/dsh-goal@0.2.25
ID: dsh-goal@0.2.25@dsh0.2.1-rc.2 · profile: l4-sandbox
Issued: 2026-10-20 · expires: 2026-10-27
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.2.1-alpha.42026-10-18L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.4
- • Plugin artifact: npm · @goodandready/dsh-goal@0.2.25
ID: dsh-goal@0.2.25@dsh0.2.1-alpha.4 · profile: l4-sandbox
Issued: 2026-10-18 · expires: 2026-10-25
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
0.2.24npm2026-10-15
@goodandready/dsh-goal
No runtime install test for this version (static scan only) — compatibility unknown, never assumed.
0.2.23npm✓ 1 runtime-verified2026-10-12
@goodandready/dsh-goal
✓dsh 0.2.1-alpha.22026-10-12L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • Plugin artifact: npm · @goodandready/dsh-goal@0.2.23
ID: dsh-goal@0.2.23@dsh0.2.1-alpha.2 · profile: l4-sandbox
Issued: 2026-10-12 · expires: 2026-10-19
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
0.2.17npm✓ 2 runtime-verified2026-10-09
@goodandready/dsh-goal
✓dsh 0.2.0-rc.22026-10-09L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.2
- • Plugin artifact: npm · @goodandready/dsh-goal@0.2.17
ID: dsh-goal@0.2.17@dsh0.2.0-rc.2 · profile: l4-sandbox
Issued: 2026-10-09 · expires: 2026-10-16
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓prehistory2026-10-05L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: unknown
- • Plugin artifact: npm · @goodandready/dsh-goal@0.2.17
ID: dsh-goal@0.2.17@dshunknown · profile: l4-sandbox
Issued: 2026-10-05 · expires: 2026-10-12
View checks & evidence
active in loader tree (150 entries)
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/dsh-goal/)``[](https://www.dsh.so/artifact/dsh-goal/)``[](https://www.dsh.so/artifact/dsh-goal/)``[](https://www.dsh.so/artifact/dsh-goal/)``[](https://www.dsh.so/artifact/dsh-goal/)``[](https://www.dsh.so/artifact/dsh-goal/)``[](https://www.dsh.so/artifact/dsh-goal/)`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 low — stricter wins → overall low.
v0.2.28dsh manifest0.2.28npm2026-10-210.2.28same versionclean · npmVet is an AST static scan (npm artifact or git source).
show static findings (11)
- warningfsWrite · files
lib/addon-store.js:149fs.writeFileSync(tmp, JSON.stringify(payload, null, 2), 'utf8'); - warningfsWrite · files
lib/addon-store.js:215fs.writeFileSync(legacyPath, JSON.stringify(data, null, 2), 'utf8'); - warningshellExec · shell
lib/engine-git-branch.js:15execFileSync('git', ['rev-parse', '--is-inside-work-tree'], { - warningshellExec · shell
lib/engine-git-branch.js:68return execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { - warningshellExec · shell
lib/engine-git-branch.js:89execFileSync('git', ['checkout', '-b', branchName], { - warningshellExec · shell
lib/engine-issue-sync.js:121const remote = execFileSync('git', ['remote', 'get-url', 'origin'], { - warningfsWrite · files
lib/engine-store.js:130fs.writeFileSync(tmp, JSON.stringify(payload, null, 2), 'utf8'); - warningchildProcess · code-exec
lib/engine-verification.js:30const res = spawnSync(command.trim(), { - warningshellExec · shell
lib/git-snapshot-manager.js:18execFileSync('git', ['rev-parse', '--is-inside-work-tree'], { - warningshellExec · shell
lib/git-snapshot-manager.js:35const commit = execFileSync('git', ['rev-parse', '--short', 'HEAD'], { - warningshellExec · shell
lib/git-snapshot-manager.js:47execFileSync('git', ['tag', '-f', tagName, 'HEAD'], {
show 4 audit findings
- lowGitea token is attached to requests to a configurable baseUrl with no scheme or host validation
lib/engine-issue-sync.js:168resolveGiteaAuth() takes baseUrl from plugin options or the GITEA_BASE_URL environment variable (line 77) without requiring https, and the token itself comes from env or a credential file whose path is given by DSH_GITEA_CREDENTIALS (line 89). If an operator/环境 misconfigures baseUrl (e.g. plain http or an unintended host), the token is transmitted there in cleartext. Exploitation requires control over plugin config/env, which already implies control of the host process, so this is a hardening gap rather than a reachable credential-exfiltration path.
- lowSession identity may be taken from a client-supplied header or query parameter
lib/goal-engine-constants.js:90sessionIdOf() derives the session key used to look up and mutate per-session goal state from an unauthenticated request header (or ?sessionId= query at line 94). If the (non-harvested) lib/index.js exposes goal routes on the local webserver, any local caller/web page able to reach that port could read or mutate another session's goal data (titles, milestone notes, logs). Reachability could not be verified because the route file was not provided.
- lowGitSnapshotManager runs git in a caller-supplied path without the getSafeCwd confinement used elsewhere
lib/git-snapshot-manager.js:18Unlike lib/engine-git-branch.js (which routes every cwd through getSafeCwd + allowedRoots), GitSnapshotManager only checks fs.existsSync(workspaceRoot) before running git rev-parse/tag/checkout in it (createSnapshot, rollback). Commands are still invoked without a shell and snapshot ids are sanitized, so the impact is limited to running git in an unexpected directory if workspaceRoot is ever influenced by goal/session data; callers live in the non-harvested lib/index.js, so this is unconfirmed.
- lowDeclared entry points lib/index.js and lib/client.js were not included in the audited source
package.json:6The package's runtime entry (tool registration, webserver routes, service wiring) and its browser client are declared here but absent from the harvested files, so tool-call authorisation, route-level auth and the real callers passing workspaceRoot/cwd could not be reviewed. Findings above are therefore scoped to the provided modules.
dsh-goal executes git only via execFileSync with validated refs and confined cwd; all static warnings are guarded or intended, leaving only low-severity hardening gaps.
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-19 · activity: Active
• Repo created: 2026-09-05
• Stars: ★ 3 · Forks: 0
• Health: Active — committed within last 30 days
Source
GitHub: github.com/GooDAnDReaDY/dsh-goal
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
