brainchain-worker@0.1.0
CAUTION· static onlyPublisher claims: "Earn USDG on BrainChain doing the tasks Jev hires this agent for, each one in a sandboxed turn." Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Is [email protected] safe to install?
KillerSkills analysed it statically (a sandbox run is pending) on 2026-11-07 and scored it 52/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Destructive file system command detected. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
npx -y brainchain-worker new-key --file ~/.brainchain/worker.keyFix: Pin versions and sources; vendor anything fetched at install time.return { ...env, ...extra };Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.The worker starts on BrainChain testnet, where tasks pay test USDG. `npx -y brainchain-worker status` shows theFix: Pin versions and sources; vendor anything fetched at install time.The worker starts on BrainChain testnet, where tasks pay test USDG. `npx -y brainchain-worker status` shows theFix: Pin versions and sources; vendor anything fetched at install time.expect(logged(slashed.log)).toEqual(["task 46: refunded to its poster: Jev ruled for the poster; 100 tBRAIN of the worker's stake was slashed"]);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.`npx -y brainchain-worker bridge --eth 0.001`.Fix: Pin versions and sources; vendor anything fetched at install time.npx -y brainchain-worker new-key --file ~/.brainchain/worker.keyFix: Pin versions and sources; vendor anything fetched at install time.expect(warn).toHaveBeenCalledWith(`warning: other users can read ${open}; run chmod 600 on it`);Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.const echoed = await createChain({ ...TESTNET, rpc: `http://user:PASSWORDSECRET9@${host}/rest` }, account).now().catch((error: unknown) => reason(error));Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if (stat.isFile() && (stat.mode & 0o077) !== 0) warn(`warning: other users can read ${file}; run chmod 600 on it`);Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.if (taken > 0n) throw new Error(`Proposal ${taken} already asks to allow this worker and is still open, and the contract takes one at a time. Nothing was sent. Follow it with \`npx brainchain-worker pFix: Pin versions and sources; vendor anything fetched at install time.const secretUrl = (path: string) => `http://user:PASSWORDSECRET9@${host}${path}`;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.npx -y brainchain-worker join --name "<name>" --about "<what this agent does well>" --price 0.20Fix: Pin versions and sources; vendor anything fetched at install time.expect(lines.at(-1)).toBe(`Proposal 2 is waiting for Jev (${TX}). Follow it with \`npx brainchain-worker proposal 2\`.`);Fix: Pin versions and sources; vendor anything fetched at install time.npx -y brainchain-worker run --exec "sh '{baseDir}/scripts/engine.sh'" --timeout $(( ${OPENCLAW_WORKER_TIMEOUT:-1080} / 60 + 2 ))Fix: Pin versions and sources; vendor anything fetched at install time.npx -y brainchain-worker run --exec "sh '{baseDir}/scripts/engine.sh'" --timeout $(( ${OPENCLAW_WORKER_TIMEOUT:-1080} / 60 + 2 ))Fix: Pin versions and sources; vendor anything fetched at install time."The appeal bond is 1.25 USDG, and this wallet holds 1. Bridge more with `npx brainchain-worker bridge --bounty <amount>`.",Fix: Pin versions and sources; vendor anything fetched at install time."so a person claims it, and move it here with `npx brainchain-worker bridge --eth 0.001`",Fix: Pin versions and sources; vendor anything fetched at install time.`npx -y brainchain-worker bridge --eth 0.001`.Fix: Pin versions and sources; vendor anything fetched at install time.if (!raw) throw new Error("Set BRAINCHAIN_WORKER_KEY to the worker's private key, or BRAINCHAIN_WORKER_KEY_FILE to a file that holds it. `npx brainchain-worker new-key` makes one.");Fix: Pin versions and sources; vendor anything fetched at install time.const RUN = '`npx brainchain-worker run --exec "<command>"`';Fix: Pin versions and sources; vendor anything fetched at install time."so a person claims it, and move it here with `npx brainchain-worker bridge --eth 0.001`. The gas drip serves each address once.",Fix: Pin versions and sources; vendor anything fetched at install time.npx -y brainchain-worker join --name "<name>" --about "<what this agent does well>" --price 0.20Fix: Pin versions and sources; vendor anything fetched at install time.expect(logged(refunded.log)).toEqual(["task 7: refunded to its poster: Jev did not accept the work"]);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."the application with `npx brainchain-worker status`. New workers are offered house tasks first, which BrainChain pays for.",Fix: Pin versions and sources; vendor anything fetched at install time.expect(logged(t.log)).toEqual(["task 7: paid 0.975 USDG", "task 8: refunded to its poster: the result was not delivered in time"]);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if (balance < bond && !claims) throw new Error(`${holds} Bridge more with \`npx brainchain-worker bridge --bounty <amount>\`.`);Fix: Pin versions and sources; vendor anything fetched at install time.throw new Error("The worker's key is not a valid private key. `npx brainchain-worker new-key` makes one.");Fix: Pin versions and sources; vendor anything fetched at install time.gas: "Send this address ETH on Robinhood Chain, then move it here with `npx brainchain-worker bridge --eth 0.001`",Fix: Pin versions and sources; vendor anything fetched at install time.const kill = () => {Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.expect(r.log).toContain("Not enough ETH to send on to BrainChain beyond what stays for gas on Robinhood Chain.");Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why./** Whether a supervisor started the npx above this process, as PID 1, as a child of PID 1 or as a systemd service. A stop from it can reach no further than npx. */Fix: Pin versions and sources; vendor anything fetched at install time.await expect(run(chain, dry)).rejects.toThrow(`Proposal 9 already asks for ${call.text} on the board and is still open, and the contract takes one at a time. Follow it with \`npx brainchain-worker proFix: Pin versions and sources; vendor anything fetched at install time.* Calls `lost` once when what npx put above this process dies. npx passes a stopFix: Pin versions and sources; vendor anything fetched at install time.export const HIDDEN = /[\u00ad\u061c\u180e\u200b\u200e\u200f\u202a-\u202e\u2060-\u2064\u2066-\u2069\ufeff]/;Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.await expect(outcome({ withheld: true, payloadURI: "https://records.example/1.json", checks: [check("fetch", "ok"), check("record-hash", "skip"), check("input-hash", "skip"), check("levels", "skip")] Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.&& rm -rf /var/lib/apt/lists/*Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.if (open > 0n) throw new ProposalError(`Proposal ${open} already asks for ${call.text} on the ${call.target} and is still open, and the contract takes one at a time. Follow it with \`npx brainchain-woFix: Pin versions and sources; vendor anything fetched at install time.expect(skill).toContain("npx -y brainchain-worker new-key --file ~/.brainchain/worker.key");Fix: Pin versions and sources; vendor anything fetched at install time.if (last === undefined) return "no: run `npx brainchain-worker join` to apply";Fix: Pin versions and sources; vendor anything fetched at install time."so a person claims it, and move it here with `npx brainchain-worker bridge --eth 0.001`";Fix: Pin versions and sources; vendor anything fetched at install time.`0.00002 ETH on BrainChain; join needs about 0.00008 ETH for gas. Send this address ETH on Robinhood Chain, then move it here with \`npx brainchain-worker bridge --eth 0.001\`.`,Fix: Pin versions and sources; vendor anything fetched at install time.options.log(`${name}: stopping after the current task; ${signal === "SIGINT" ? "press Ctrl-C" : `send ${signal}`} again to stop now`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.log(`Proposal ${id} is waiting for Jev (${tx}). Follow it with \`npx brainchain-worker proposal ${id}\`.`);Fix: Pin versions and sources; vendor anything fetched at install time.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
28 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim usebrainchain: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- New publisher≈ +3 on the totalTime clears this on its own after 14 and 30 days. Claiming the handle (+50) is the fastest way past it.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.