registry  /  loopwithai-runner  /  0.1.0

loopwithai-runner@0.1.0

Local runner for Loop with AI — executes your project's queued agent jobs (report/implement/drift) on your machine using your own AI CLI (Claude, Antigravity, or a custom agent). No API credits.

Static Scan Results

scanned 2h ago · by rust-scanner

Static analysis flagged 12 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
ChildProcessEnvironmentVarsFilesystemNetworkShellWebSocket
Supply chain
HighEntropyStringsUrlStrings
ManifestNo manifest risk signals triggered.
scanned 2 file(s), 31.1 KB of source, external domains: fpsiszputyiacbvjzytx.supabase.co

Source & flagged code

4 flagged · loading source
pdf.mjsView file
3// It renders nothing and writes no code. Auto-detects a browser; set DOC_BROWSER to override. L4: import { spawn } from 'node:child_process' L5: import http from 'node:http'
High
Child Process

Package source references child process execution.

pdf.mjsView on unpkg · L3
1// Minimal HTML → PDF via headless Chrome/Edge (CDP over the built-in WebSocket). Ported from Dimitra's L2: // browser.cjs — the runner's only job for documents is to PRINT the already-finalized HTML the app sent. L3: // It renders nothing and writes no code. Auto-detects a browser; set DOC_BROWSER to override. L4: import { spawn } from 'node:child_process' L5: import http from 'node:http' ... L10: const CANDIDATES = [ L11: process.env.DOC_BROWSER, L12: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
High
Same File Env Network Execution

A single source file combines environment access, network access, and code or shell execution; review context before blocking.

pdf.mjsView on unpkg · L1
runner.mjsView file
91async function api(method, path, body) { L92: const res = await fetch(API + path, { method, headers: { 'x-api-key': KEY, 'content-type': 'application/json' }, body: body ? JSON.stringify(body) : undefined }) L93: const json = await res.json().catch(() => ({})) ... L96: L97: // Run a command, capture stdout; resolve '' on error (git may not be present / not a repo). L98: function sh(cmd, args, cwd) { L99: return new Promise((resolve) => { L100: const cp = spawn(cmd, args, { cwd, shell: WIN }) L101: let out = ''
High
Command Output Exfiltration

Source combines command execution, command-output handling, and outbound requests; review data flow before blocking.

runner.mjsView on unpkg · L91
29// SYNCEFFORTS_DRY (optional) "1" = don't call Claude; post a stub (for testing the loop) L30: import { spawn } from 'node:child_process' L31: import fs from 'node:fs' ... L35: L36: const API = process.env.SYNCEFFORTS_API_URL || 'https://fpsiszputyiacbvjzytx.supabase.co/functions/v1/se-api' L37: const KEY = process.env.SYNCEFFORTS_API_KEY ... L39: const CLAUDE = process.env.SYNCEFFORTS_CLAUDE_CMD || 'claude' L40: const REPO = process.env.SYNCEFFORTS_REPO || process.cwd() L41: const PERMISSION = process.env.SYNCEFFORTS_PERMISSION || 'bypassPermissions' ... L44: const DRY = process.env.SYNCEFFORTS_DRY === '1' L45: const WIN = process.platform === 'win32' L46: if (!KEY || !PID) { console.error('Set SYNCEFFORTS_API_KEY and SYNCEFFORTS_PROJECT_ID.'); process.exit(1) }
High
Sandbox Evasion Gated Capability

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

runner.mjsView on unpkg · L29

Findings

5 High3 Medium4 Low
HighChild Processpdf.mjs
HighShell
HighSame File Env Network Executionpdf.mjs
HighCommand Output Exfiltrationrunner.mjs
HighSandbox Evasion Gated Capabilityrunner.mjs
MediumNetwork
MediumEnvironment Vars
MediumStructural Risk Force Deep Review
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings