registry  /  merrymen  /  0.4.1

merrymen@0.4.1

Self-hosted autonomous trading agents for Robinhood Chain — your keys, your caps, hard on-chain permission walls, write-your-own strategies.

Static Scan Results

scanned 3h ago · by rust-scanner

Static analysis flagged 11 finding(s) at 72.0% confidence. This version is warn-only unless an AI or security-team review confirms malicious behavior.

Static reason
One or more suspicious static signals were detected.

Decision evidence

public snapshot
Behavioral surface
Source
ChildProcessDynamicRequireEnvironmentVarsFilesystemNetworkShell
Supply chain
HighEntropyStringsUrlStrings
ManifestNo manifest risk signals triggered.
scanned 64 file(s), 390 KB of source, external domains: api.pimlico.io, api.telegram.org, blue-api.morpho.org, cdn.robinhood.com, docs.rialto.xyz, explorer.testnet.chain.robinhood.com, faucet.testnet.chain.robinhood.com, nodejs.org, rialto-trade-api.rialto.xyz, robinhoodchain.blockscout.com, rpc.mainnet.chain.robinhood.com, rpc.testnet.chain.robinhood.com, www.w3.org

Source & flagged code

3 flagged · loading source
worker/src/strategies/custom.tsView file
135const note = opts?.onNote ?? ((l, m) => console.log(`[custom:${l}] ${m}`)); L136: const importer = opts?.importer ?? ((url) => import(url)); L137: const ctx = buildStrategyCtx();
Medium
Dynamic Require

Package source references dynamic require/import behavior.

worker/src/strategies/custom.tsView on unpkg · L135
cli/bin.mjsView file
20L21: import { spawn, spawnSync } from "node:child_process"; L22: import { copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; ... L32: // Where the USER's data lives — settings, grant, ledger, strategies. L33: const HOME = process.env.MERRYMEN_HOME ?? path.join(os.homedir(), ".merrymen"); L34: const SETTINGS = path.join(HOME, "settings.json"); ... L41: L42: const RPC_MAINNET = "https://rpc.mainnet.chain.robinhood.com"; L43: const RPC_TESTNET = "https://rpc.testnet.chain.robinhood.com"; ... L56: try { L57: return JSON.parse(readFileSync(file, "utf8").replace(/^/, "")); L58: } catch {
High
Sandbox Evasion Gated Capability

Source gates dangerous network, credential, or execution behavior behind CI, host, platform, time, or geo fingerprint checks.

cli/bin.mjsView on unpkg · L20
20L21: import { spawn, spawnSync } from "node:child_process"; L22: import { copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; ... L32: // Where the USER's data lives — settings, grant, ledger, strategies. L33: const HOME = process.env.MERRYMEN_HOME ?? path.join(os.homedir(), ".merrymen"); L34: const SETTINGS = path.join(HOME, "settings.json"); ... L41: L42: const RPC_MAINNET = "https://rpc.mainnet.chain.robinhood.com"; L43: const RPC_TESTNET = "https://rpc.testnet.chain.robinhood.com"; ... L56: try { L57: return JSON.parse(readFileSync(file, "utf8").replace(/^/, "")); L58: } catch {
Medium
Install Persistence

Source writes installer persistence such as shell profile or service configuration.

cli/bin.mjsView on unpkg · L20

Findings

1 High5 Medium5 Low
HighSandbox Evasion Gated Capabilitycli/bin.mjs
MediumDynamic Requireworker/src/strategies/custom.ts
MediumNetwork
MediumEnvironment Vars
MediumInstall Persistencecli/bin.mjs
MediumStructural Risk Force Deep Review
LowNon Install Lifecycle Scripts
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings