Claude Code, Skill
Solidforge Pi
SolidForge for the Pi coding agent — an independent, pi-native implementation of the SolidForge Loop Engineering system: the converge → specify → implement pipeline plus two additive outcome-axis layers (cited-source verif
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
NETWORK_HOST_FROM_INPUT
Why this grade
- NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
agents/web-claim-verifier.agent.md, line 69
{"kind": "tool", "tool": "bash", "input_head": "<optional short target - e.g. curl URL head>"}
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
extensions/sf-hooks/index.ts, line 343
fs.rmSync(dir, { recursive: true, force: true });
extensions/sf-subagents/index.ts, line 547
fs.unlinkSync(tmpPromptPath);
skills/cross-source-review/infra/scripts/csr_progress.py, line 190
os.remove(tmp)
Show more
skills/cross-source-review/infra/scripts/hetero_doc_review.py, line 202
# subprocess.run buffers it again, so a 20-minute run was indistinguishable from
skills/cross-source-review/infra/scripts/hetero_doc_review.py, line 811
proc = subprocess.Popen(
skills/cross-source-review/infra/scripts/hetero_doc_review.py, line 1366
# subprocess.run(None). Same footgun pre-existed in pd for --dry-run-malform; carried over.
skills/cross-source-review/infra/scripts/converge_fixtures/verify.py, line 78
r = subprocess.run(
skills/parallel-development/infra/hooks/counters.py, line 42
proc = subprocess.run(
skills/parallel-development/infra/hooks/fast_gate.py, line 25
proc = subprocess.run(argv, capture_output=True, text=True, timeout=timeout)
skills/parallel-development/infra/hooks/fast_gate.py, line 282
proc = subprocess.run(
skills/parallel-development/infra/install/arm.py, line 62
subprocess.run(
skills/parallel-development/infra/install/arm.py, line 1083
os.remove(os.path.join(project_dir, name))
skills/parallel-development/infra/install/arm.py, line 1117
os.remove(os.path.join(project_dir, name))
skills/parallel-development/infra/install/arm.py, line 1158
shutil.rmtree(p, ignore_errors=True)
skills/parallel-development/infra/install/arm.py, line 1165
os.remove(p)
skills/parallel-development/infra/install/arm.py, line 1186
os.remove(dst)
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
agents/web-claim-verifier.agent.md, line 69
{"kind": "tool", "tool": "bash", "input_head": "<optional short target - e.g. curl URL head>"}
skills/parallel-development/infra/scripts/arch_contract_api.py, line 237
# fetch("..."), axios.get("..."), axios.post(`...`), ... - first string/template arg.
skills/parallel-development/infra/templates/cold-start-patterns/async-concurrency-baseline.md, line 15
return requests.get(url).json()
Show more
skills/parallel-development/references/e2e-patterns.md, line 80
├─ curl API → returns data?
skills/parallel-development/references/e2e-testing.md, line 46
curl -I http://localhost/dianginx/
skills/parallel-development/references/python-patterns.md, line 638
result = requests.get(url) # synchronous HTTP in async handler
skills/parallel-development/references/agent-patterns/devops-engineer.md, line 32
CMD curl -f http://localhost/health || exit 1
skills/primary-source-verification/infra/scripts/fetch_source.py, line 33
def fetch(url: str, timeout: int = 30) -> tuple[str | None, str]:
skills/primary-source-verification/infra/scripts/fetch_source.py, line 37
with urllib.request.urlopen(req, timeout=timeout) as resp:
skills/primary-source-verification/infra/scripts/fetch_source.py, line 58
body, status = fetch(args.url, args.timeout)
skills/prior-art-search/infra/scripts/search_prior_art.py, line 75
with urllib.request.urlopen(req, timeout=timeout) as resp:
agents/web-claim-verifier.agent.md, line 80
This contract's OWN extension (the exemplar is per-claim verdict only). NO top-level `verdict`; a `findings[]` array whose every element carries the grounding block (`quote`, `url`
docs/intent-blueprints/_templates/cold-start-patterns/async-concurrency-baseline.md, line 15
return requests.get(url).json()
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
extensions/sf-hetero/index.ts, line 146
"Providers/caps resolve exactly as the CLI: HETERO_DOC_PROFILE from <cwd>/.env.solidforge; budget/turns/bytes/timeout stay wrapper-owned env defaults.",
extensions/sf-hetero/index.ts, line 147
"Run from the project root (the wrapper self-loads .env.solidforge).",
extensions/sf-providers/index.ts, line 43
* three-harness .env.solidforge, upstream filename convention); the legacy
Show more
extensions/sf-providers/index.ts, line 70
// SolidForge env precedence: .env.solidforge loads first, then .env; shell wins
skills/cross-source-review/infra/scripts/hetero_doc_review.py, line 39
wrapper loads .env.solidforge/.env before spawn, shell wins).
skills/cross-source-review/infra/scripts/hetero_doc_review.py, line 76
pins the model id explicitly from .env.solidforge,
skills/cross-source-review/infra/scripts/hetero_doc_review.py, line 464
"""HETERO_THINKING (shared csr+pd name; shell > .env.solidforge > .env via
skills/cross-source-review/infra/scripts/hetero_doc_review.py, line 488
<cwd>/.env.solidforge (the host workspace's arm-env IF present - the solidforge arm
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read.
OBFUSCATION_FILE_OVER_READ_CAP
skills/parallel-development/references/design-decisions.md, line 1
# Design Decisions (ADR)
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 fd2f31529054. can delete files. accepts a host from input, with no fixed list in this file. reads a credential or environment file. a file was over the read cap and was not fully read.
Date and source
Date checked:
github.com
Commit graded: fd2f31529054262a6d3c64cb2427e8ec5bf1a2ea
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.