forge-delegate@1.2.4
BLOCKED· startup onlyPublisher claims: "MCP server that lets Claude Code, Codex or opencode hand coding work to cheaper models run by opencode." Observed in sandbox: reads credential files, sends data to opencode.ai.
Coverage
Startup only; authenticated tool behavior not tested.- Tested
- install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · server startup over stdio (initialize sent) · every file read, file written and host contacted by what ran
- Not tested
- the tool list (the server exited before answering) · what the tools do when called with real credentials
What this means for the label: Blocked here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Revoked: guards refuse to launch this version
confirmed incident: read ~/.npmrc; contacted opencode.ai (undeclared) Every machine running vet-skills guard stops starting it at the next launch; the state clears when the honeypot re-run or a reviewer clears it.
Before you give it your token
- It will ask for
- no credential variables read in the code
- Where it talks to
- no vendor host named in the codeAlso opencode.ai, models.dev — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- read ~/.npmrc · contacted opencode.ai (undeclared)
- What we could not test
- the tool list (the server exited before answering) · what the tools do when called with real credentials
Do not connect it. The honeypot or a critical finding blocked this version; the evidence is below.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (3 scenarios; startup only; authenticated tool behavior not tested) on 2026-11-12 and scored it 26/100 (Blocked). Do not install it: the sandbox observed behaviour consistent with credential theft, exfiltration or persistence. Notable findings: Auto-update or dynamic fetch configuration; Pipe-to-shell pattern; Pipe-to-shell pattern. Summary: reads credential files, sends data to opencode.ai.
Behavior trace
Honeypot run · 26 s · 3 scenariosStatic findings
versionNote = " (npx install — manual updates)";Fix: Pin versions and sources; vendor anything fetched at install time.versionNote = state?.autoUpdate === false ? " (auto-update off)" : " (auto-update on)";Fix: Pin versions and sources; vendor anything fetched at install time.curl -fsSL https://opencode.ai/install | bash || trueFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# From a pipe: curl -fsSL <raw-url> | bash -s -- [options...]Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return { command: "npx -y forge-delegate serve", array: ["npx", "-y", "forge-delegate", "serve"] };Fix: Pin versions and sources; vendor anything fetched at install time.console.log("\nThis npx install never refreshes itself.");Fix: Pin versions and sources; vendor anything fetched at install time.console.log(` '${input}' isn't in opencode's list; using it anyway.`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.`forge-delegate: delegate-work skill ${SKILL_STATUS.detail}. Run: npx -y forge-delegate setup\n`Fix: Pin versions and sources; vendor anything fetched at install time.# npx -y forge-delegate setup --model ... --targets ... --scope ...Fix: Pin versions and sources; vendor anything fetched at install time.if [[ "$NO_NPX" -eq 0 ]] && command -v npx >/dev/null 2>&1; thenFix: Pin versions and sources; vendor anything fetched at install time.echo "· installing via npx (published package)..."Fix: Pin versions and sources; vendor anything fetched at install time.# From a pipe: curl -fsSL <raw-url> | bash -s -- [options...]Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.// npx goes through cmd.exe. It is passed as one command string because Node 24Fix: Pin versions and sources; vendor anything fetched at install time.} else console.log(` No model matches '${input}'.`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.# --no-npx skip the npx route, force clone/checkoutFix: Pin versions and sources; vendor anything fetched at install time.curl -fsSL https://opencode.ai/install | bash || trueFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.const skill = SKILL_STATUS ? `\nskill (delegate-work): ${SKILL_STATUS.detail}${SKILL_STATUS.state === "ok" ? "" : " — run: npx -y forge-delegate setup"}` : "";Fix: Pin versions and sources; vendor anything fetched at install time.const npx = process.platform === "win32" ? "npx.cmd" : "npx";Fix: Pin versions and sources; vendor anything fetched at install time.console.log("Switch to automatic updates: npx -y forge-delegate@latest setup");Fix: Pin versions and sources; vendor anything fetched at install time.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
54 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%An override rule (credential_read_plus_egress) caps this verdict regardless of the score. The first item below has to go before anything else counts.
- Reads credential files≈ +27 on the totalThe sandbox saw reads under ~/.ssh, ~/.aws, ~/.npmrc, ~/.config or similar. Read only files inside the project, and only the ones the task needs.
- Contacts a host you did not declare≈ +23 on the totalList every host you talk to in SKILL.md frontmatter (`network: [api.example.com]`), or stop contacting the ones you cannot justify.
- Pipe-to-shell pattern≈ +9 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- Unclaimed publisher≈ +8 on the totalClaim muhamadbarzani: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Touches files outside the project≈ +7 on the totalKeep reads and writes inside the working directory, or declare the exact paths in `filesystem:` and explain why in the README.
- Auto-update or dynamic fetch configuration≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.