registry  /  @ninemind/agentgem  /  0.4.0

@ninemind/agentgem@0.4.0

A local web UI that introspects your coding-agent config, redacts secrets at capture, and builds a portable, composable Gem.

Static Scan Results

scanned 2h ago · by rust-scanner

Static analysis flagged 15 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
ChildProcessCryptoDynamicRequireEnvironmentVarsFilesystemNetworkShell
Supply chain
HighEntropyStringsUrlStrings
ManifestNo manifest risk signals triggered.
scanned 101 file(s), 3.50 MB of source, external domains: 127.0.0.1, agentgem.ai, api.agentgem.ai, api.github.com, app.agentgem.ai, developer.mozilla.org, github.com, schema.agentcore.aws.dev, set-public-url.invalid, skills.sh, stackoverflow.com, vercel.com, www.apple.com

Source & flagged code

7 flagged · loading source
dist/goldmine/mcpServer.jsView file
10029// packages/base/dist/acpSession.js L10030: import { spawn } from "node:child_process"; L10031: import { mkdirSync } from "node:fs";
High
Child Process

Package source references child process execution.

dist/goldmine/mcpServer.jsView on unpkg · L10029
1Cross-file remote execution chain: dist/goldmine/mcpServer.js spawns dist/index.js; helper contains network access plus dynamic code execution. L1: #!/usr/bin/env node L2: import { createRequire as __cr } from 'module';import { fileURLToPath as __f } from 'url';import { dirname as __d } from 'path';const require = __cr(import.meta.url);const __filena... L3: var __create = Object.create; ... L2685: if (typeof node_buffer.Buffer === "function") { L2686: return node_buffer.Buffer.from(src, "base64"); L2687: } else if (typeof atob === "function") { ... L5362: yield* this.next(token); L5363: yield* this.end(forceDoc, endOffset); L5364: } ... L5366: *next(token) { L5367: if (node_process.env.LOG_STREAM) L5368: console.dir(token, { depth: null });
High
Cross File Remote Execution Context

Source spawns a local helper that also contains network and dynamic execution context; review data flow before blocking.

dist/goldmine/mcpServer.jsView on unpkg · L1
dist/pickFolder.jsView file
16return { L17: cmd: "powershell", L18: args: [
High
Shell

Package source references shell execution.

dist/pickFolder.jsView on unpkg · L16
dist/index.jsView file
8627const port = Number(process.env.PORT ?? 41241); L8628: const baseUrl = process.env.PUBLIC_URL ?? \`http://localhost:\${port}\`; L8629: const API_KEY = process.env.A2A_API_KEY; // when set, require \`Authorization: Bearer <key>\` on the RPC/REST routes ... L8865: try { L8866: writeFileSync(file, JSON.stringify(kf), { mode: 384, flag: "wx" }); L8867: } catch (we) { ... L11042: // packages/base/dist/acpSession.js L11043: import { spawn } from "node:child_process"; L11044: import { mkdirSync as mkdirSync6 } from "node:fs";
High
Remote Agent Bridge

Source exposes local file and command tools to a remote model endpoint.

dist/index.jsView on unpkg · L8627
1997"use strict"; L1998: var node_process = __require("process"); L1999: function debug3(logLevel, ...messages) {
Medium
Dynamic Require

Package source references dynamic require/import behavior.

dist/index.jsView on unpkg · L1997
1import { createRequire as __cr } from 'module';import { fileURLToPath as __f } from 'url';import { dirname as __d } from 'path';const require = __cr(import.meta.url);const __filena... L2: var __create = Object.create; ... L82: const envComment = `// Reads ${spec.secrets.join(", ")} from the environment (set them as project env vars). L83: // See https://vercel.com/docs/eve/concepts#channels L84: `; ... L112: twilio: { platform: "twilio", label: "Twilio", eveImport: "eve/channels/twilio", factory: "twilioChannel", secrets: ["TWILIO_ACCOUNT_SID", "TWILIO_AUTH_TOKEN"] }, L113: github: { platform: "github", label: "GitHub", eveImport: "eve/channels/github", factory: "githubChannel", secrets: ["GITHUB_APP_ID", "GITHUB_APP_PRIVATE_KEY", "GITHUB_WEBHOOK_SECR... L114: }; ... L280: const upstream = new Client({ name: "agentgem-proxy", version: "1.0.0" }, { capabilities: {} }); L281: await upstream.connect(new StdioClientTransport({ command: ${JSON.stringify(command)}, args: ${JSON.stringify(args)}, env: process.env })); L282: ... L294: const app = express();
Low
Weak Crypto

Package source references weak cryptographic algorithms.

dist/index.jsView on unpkg · L1
dist/warm/service.jsView file
15const LABEL = "ai.ninemind.agentgem.warm"; L16: export function launchdPlist(execArgs, label = LABEL) { L17: const args = execArgs.map((a) => ` <string>${a}</string>`).join("\n"); ... L53: render: (e) => launchdPlist(e), L54: loadCmd: `launchctl load ${join(home, "Library", "LaunchAgents", `${LABEL}.plist`)}`, L55: }; ... L63: export function installService(deps = {}) { L64: const platform = deps.platform ?? process.platform; L65: const home = deps.home ?? homedir(); L66: const exec = deps.exec ?? defaultExec();
Medium
Install Persistence

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

dist/warm/service.jsView on unpkg · L15

Findings

4 High5 Medium6 Low
HighChild Processdist/goldmine/mcpServer.js
HighShelldist/pickFolder.js
HighRemote Agent Bridgedist/index.js
HighCross File Remote Execution Contextdist/goldmine/mcpServer.js
MediumDynamic Requiredist/index.js
MediumNetwork
MediumEnvironment Vars
MediumInstall Persistencedist/warm/service.js
MediumStructural Risk Force Deep Review
LowNon Install Lifecycle Scripts
LowScripts Present
LowWeak Cryptodist/index.js
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings