Dangerous exec
- Finding
- Shell command execution detected (child_process).
Security checks across static analysis, malware telemetry, and agentic risk
The skill is not clearly malicious, but it needs review because its dashboard can read unrelated local agent transcripts and its stop controls use broad shell commands to terminate processes.
Use this only in a trusted development environment. Before installing, be aware it can start autonomous Claude processes, read local Clawdbot session history, archive loop data, and terminate processes or sessions. Review and restrict transcript access and process-kill behavior before using it on sensitive projects.
64/64 vendors flagged this skill as clean.
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Private conversation or task history from unrelated Clawdbot sessions may be listed or viewed through the Ralph dashboard.
The dashboard intentionally includes all available transcript sessions rather than only sessions launched by Ralph loops.
const availableTranscripts = this.transcriptReader.getAvailableTranscripts(); ... // Add ALL transcript sessions ... // Return ALL sessions, not filtered
Restrict transcript collection to Ralph-created session IDs, require explicit opt-in before reading other transcripts, document the exact local paths read, and avoid displaying sensitive or thinking content unless the user requests it.
A dashboard action could potentially affect active agent sessions beyond the Ralph loop the user intended to manage.
The code uses Clawdbot gateway authority to list and abort sessions, and the visible code does not show Ralph-only scoping.
const { stdout } = await execAsync('clawdbot gateway call status --json'); ... const command = `clawdbot gateway call chat.abort --params '{"sessionKey":"${sessionKey}"}'`;Filter gateway actions to sessions created by this skill, show the exact session being aborted, require confirmation, and avoid constructing gateway commands through shell interpolation.
Stopping a loop could terminate unrelated matching processes, and tampered loop state could make the shell commands unsafe.
The stop logic searches and kills processes using shell commands built from loop state values instead of using stored child PIDs or validated arguments.
const patterns = [ sessionId, hash, loopId ].filter(Boolean); ... execSync(`pgrep -f "${pattern}" 2>/dev/null || true`); ... execSync(`kill ${pid} 2>/dev/null`); ... execSync(`pkill -f "${sessionId}" 2>/dev/null || true`);Store and kill exact child PIDs created by the loop runner, validate IDs strictly, avoid pgrep/pkill string matching, and use execFile/spawn with argument arrays instead of shell command strings.
Loops may continue running after the initial request and can consume tokens, CPU, or make development changes depending on the prompt.
The skill openly instructs the agent to start autonomous background loops.
Start the loop with `node ralph-loop.mjs ...` (runs in background) ... The loop is autonomous — that's the whole point.
Use explicit max-iteration/time limits, monitor the dashboard, and run this only in a development workspace where autonomous changes are acceptable.
Setup changes the local toolchain and pulls third-party packages, including a global CLI downgrade/pin.
The documented setup installs a global Claude Code CLI version and dashboard npm dependencies even though no install spec is declared.
npm install -g @anthropic-ai/claude-code@2.1.25 ... cd skills/ralph-loops/dashboard npm install
Install in an isolated development environment, review the package-lock and dependency provenance, and ensure the required binaries are declared in metadata.