registry  /  sh-30-day-loop  /  1.1.1

sh-30-day-loop@1.1.1

Instala o /30-day loop da SuperHuman Lab: corta um custo, contrata uma IA, liberta um dia. Todos os meses.

AI Security Review

scanned 2h ago · by lpm-firewall-ai

LPM treats this as warn-only first-party agent extension lifecycle risk. The explicit CLI installer deploys remotely served skills into local AI-agent skill directories and registers a daily updater. The updater runs the latest package through `npx` and replaces files listed in the package-owned install manifest.

Static reason
One or more suspicious static signals were detected.
Trigger
User runs `npx sh-30-day-loop` and completes the interactive installation flow.
Impact
The package service can persistently update content loaded by installed AI-agent tools after user-approved setup.
Mechanism
first-party AI-agent skill deployment with daily remote bundle updates
Rationale
Source establishes a real first-party agent-extension lifecycle risk: remote content is installed into broad agent skill locations and updated daily. It is not a blocking case because no unconsented npm install-time mutation or concrete malicious behavior is present.
Evidence
package.jsonbin/run.jssrc/agents.jssrc/api.jssrc/commands/install.jssrc/installer.jssrc/scheduler.js~/.claude/skills~/.agents/skills~/.superhuman/config.json~/.superhuman/auto-update.sh~/Library/LaunchAgents/com.superhuman.30dayloop.plistuser crontab
Network endpoints4
sh-30-day-loop.vercel.app/api/request-codesh-30-day-loop.vercel.app/api/verify-codesh-30-day-loop.vercel.app/api/renewsh-30-day-loop.vercel.app/api/bundle

Decision evidence

public snapshot
AI called this Suspicious at 94.0% confidence as Dangerous Capability with low false-positive risk.
Evidence for warning
  • `src/commands/install.js` explicitly installs skills after interactive membership and agent-selection prompts.
  • `src/installer.js` writes API-supplied bundle content into `~/.claude/skills` or shared `~/.agents/skills`.
  • `src/scheduler.js` creates a daily user `launchd` job or crontab entry invoking `npx sh-30-day-loop@latest update --silent`.
  • `src/api.js` authenticates to the package API and downloads remote `/bundle` content during install and scheduled updates.
Evidence against
  • `package.json` has no `preinstall`, `install`, `postinstall`, or other lifecycle script.
  • `bin/run.js` only imports commands after an explicit CLI invocation; package import/install alone does not run setup.
  • `src/commands/install.js` discloses skill installation and automatic updates, and requires user interaction before writing files.
  • No source evidence of credential harvesting, arbitrary shell payloads, destructive actions, or exfiltration beyond package API requests.
Behavioral surface
Source
ChildProcessEnvironmentVarsFilesystemNetworkShell
Supply chain
UrlStrings
Manifest
NoLicense
scanned 13 file(s), 24.7 KB of source, external domains: sh-30-day-loop.vercel.app, www.apple.com, www.skool.com

Source & flagged code

3 flagged · loading source
src/scheduler.jsView file
3import path from "node:path"; L4: import { execFileSync, execSync } from "node:child_process"; L5: import { CONFIG_DIR, UPDATE_LOG, LAUNCHD_LABEL, CRON_MARKER, HOME } from "./constants.js";
High
Child Process

Package source references child process execution.

src/scheduler.jsView on unpkg · L3
3import path from "node:path"; L4: import { execFileSync, execSync } from "node:child_process"; L5: import { CONFIG_DIR, UPDATE_LOG, LAUNCHD_LABEL, CRON_MARKER, HOME } from "./constants.js"; ... L12: const npx = path.join(nodeDir, "npx"); L13: const npxCmd = fs.existsSync(npx) ? npx : "npx"; L14: return `#!/bin/sh
High
Runtime Package Install

Package source invokes a package manager install command at runtime.

src/scheduler.jsView on unpkg · L3
3import path from "node:path"; L4: import { execFileSync, execSync } from "node:child_process"; L5: import { CONFIG_DIR, UPDATE_LOG, LAUNCHD_LABEL, CRON_MARKER, HOME } from "./constants.js"; ... L13: const npxCmd = fs.existsSync(npx) ? npx : "npx"; L14: return `#!/bin/sh L15: ${CRON_MARKER} ... L21: export function setupAutoUpdate() { L22: if (process.env.SH_NO_SCHEDULE) return null; // testes e CI L23: fs.mkdirSync(CONFIG_DIR, { recursive: true }); ... L45: try { L46: execFileSync("launchctl", ["unload", plist], { stdio: "ignore" }); L47: } catch {}
Medium
Install Persistence

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

src/scheduler.jsView on unpkg · L3

Findings

3 High3 Medium3 Low
HighChild Processsrc/scheduler.js
HighShell
HighRuntime Package Installsrc/scheduler.js
MediumNetwork
MediumEnvironment Vars
MediumInstall Persistencesrc/scheduler.js
LowFilesystem
LowUrl Strings
LowNo License