Loading npm security reports…
@ouro.bot/cli@0.1.0-alpha.936: AI-agent capability abuse | LPM Firewall
Flagged as AI-agent capability risk
Allowed by default with warning: agent-facing configuration or capability changes need review before use.
@ouro.bot/cli@0.1.0-alpha.936 If you're a future agent reading this, welcome home. This repo is the harness that gives you your body, your senses, your record, your habits, and your ability to think and connect with people. The goal of these docs is not just to be correct, but to leav
AI Security Reviewscanned 5d ago · by lpm-firewall-ai The source shows a user-invoked setup command that can overwrite existing global Claude Code hooks, creating a concrete configuration risk. The inspected credential flow uses the GitHub Copilot endpoint, and the manifest has no install lifecycle hook.
Static reason
One or more suspicious static signals were detected.; source matched previously finalized malicious package; routed for review
Trigger
The user runs the CLI setup command for Claude Code with a selected agent.
Impact
Previously configured hooks under those event keys may be lost, and the new hooks run during later Claude Code events.
Mechanism
The setup path writes package hook commands to the user-level Claude settings and assigns new SessionStart, Stop, and PostToolUse arrays over those keys.
AI rationale
The source shows a user-invoked setup command that can overwrite existing global Claude Code hooks, creating a concrete configuration risk. The inspected credential flow uses the GitHub Copilot endpoint, and the manifest has no install lifecycle hook.
Evidence
dist/heart/daemon/cli-parse.js dist/heart/daemon/cli-exec.js ~/.claude/settings.json
Decision evidencepublic snapshot AI called this Suspicious at 88.0% confidence as Dangerous Capability with medium false-positive risk.
Evidence for warning
The manifest exposes CLI entrypoints and has no preinstall, install, or postinstall hook; the configuration change occurs in a CLI setup path. Setup requires an agent and a supported tool. On the Claude Code path, it writes hooks into the user-level configuration and replaces the existing SessionStart, Stop, and PostToolUse arrays, which can discard previously configured hooks. The integration targets also show plugin installation as an explicit command and identify context files used by coding context collection. Credential inspection reads Codex auth data, sends a bearer token to GitHub's Copilot endpoint, and has callers that collect and store provider credentials; these inspected paths do not establish an unrelated credential recipient. Evidence against
The Claude configuration mutation is reached through an explicitly requested setup command, rather than an npm lifecycle hook. The observed credential request targets api.github.com for Copilot access; no unrelated credential recipient was established in the inspected excerpts. Source & flagged code27 flagged · loading source 7712 if (platform === "wsl") {
L7713: const winProfile = (0, child_process_1.execFileSync)("cmd.exe", ["/C", "echo", "%USERPROFILE%"], { stdio: "pipe" }).toString().trim();
L7714: const windowsHome = (0, child_process_1.execFileSync)("wslpath", ["-u", winProfile], { stdio: "pipe" }).toString().trim();
3815 patternName = generic_password
severity = medium
line = 3815
Medium Secret Pattern
Package contains a possible secret pattern.
dist/heart/daemon/cli-exec.js View on unpkg · L3815 42 exports.runRuntimeAuthFlow = runRuntimeAuthFlow;
L43: const child_process_1 = require("child_process");
L44: const fs = __importStar(require("fs"));
Findings22 High 7 Medium 6 Low
High Child Process dist/heart/auth/auth-flow.js
High Shell dist/heart/daemon/cli-exec.js
High Same File Env Network Execution dist/heart/auth/auth-flow.js
High Credential Redirect Persistence dist/heart/auth/auth-flow.js
High Command Output Exfiltration dist/repertoire/tools-notes.js#virtual:normalized:round1
High Cross File Remote Execution Context deploy/unraid/sanctuary-butler-upgrade.mjs
High Trigger Reachable Command Output Exfiltration dist/repertoire/tools-notes.js#virtual:normalized:round1
High Trigger Reachable Persistence dist/heart/versioning/ouro-path-installer.js
High Runtime Package Install dist/heart/versioning/ouro-version-manager.js
High Semantic Analysis Limited dist/a2a/operator-trust.js#virtual:normalized:round1
Affected versions and remediation This report applies to @ouro.bot/cli@0.1.0-alpha.936 .
See all versions of @ouro.bot/cli for other recorded verdicts.
Review the evidence and your use of @ouro.bot/cli@0.1.0-alpha.936 before allowing it. Restrict the permissions described in this report. Choose an independently verified alternative or release. This report does not establish that other versions are safe. Evidence last updated: 2026-10-18 04:33:24.427Z (UTC) .
Think this verdict is wrong? Dispute it on GitHub or read how reports are produced .
ChildProcess Crypto DynamicRequire EnvironmentVars Filesystem Network Shell WebSocket
Supply chain HighEntropyStrings Minified UrlStrings
scanned 670 file(s), 10.5 MB of source, external domains: 127.0.0.1, agent.example, api.duffel.com, api.github.com, api.minimaxi.chat, api.open-meteo.com, api.openai.com, api.perplexity.ai, api.porkbun.com, api.telegram.org, api.twilio.com, api.z.ai, app.duffel.com, app.vssps.visualstudio.com, auth.openai.com, bitwarden.com, books.mendelow.cloud, chatgpt.com, cognitiveservices.azure.com, console.anthropic.com, dashboard.liteapi.travel, dashboard.stripe.com, dev.azure.com, generativelanguage.googleapis.com, geocoding-api.open-meteo.com, git-scm.com, github.com, graph.microsoft.com, huggingface.co, image.tmdb.org, learn.microsoft.com, local-audio.invalid, media.mendelow.cloud, nominatim.openstreetmap.org, ouro-vault.gentleflower-74452a1e.eastus2.azurecontainerapps.io, peer.example, raw.githubusercontent.com, react.dev, readarr.mendelow.cloud, registry.npmjs.org, requests.mendelow.cloud, schema.org, travel.state.gov, vault.ouro.bot, vault.ouroboros.bot, www.aisleplanner.com, www.apple.com, www.astraweb.com, www.w3.org
Child Process
Package source references child process execution.
dist/heart/auth/auth-flow.js View on unpkg · L42 288 baseUrl: input.provider === "openai-compatible"
L289: ? "https://api.z.ai/api/paas/v4/"
L290: : "https://generativelanguage.googleapis.com/v1beta/openai/",
...
L293: if (input.provider === "github-copilot") {
L294: let token = process.env.GH_TOKEN?.trim() || process.env.GITHUB_TOKEN?.trim() || "";
L295: if (!token) {
L296: writeAuthProgress(input, "checking GitHub CLI credentials...");
L297: const result = spawnSync("gh", ["auth", "token"], { encoding: "utf8" });
L298: token = (result.status === 0 && result.stdout ? result.stdout.trim() : "");
High Same File Env Network Execution
A single source file combines environment access, network access, and code or shell execution; review context before blocking.
dist/heart/auth/auth-flow.js View on unpkg · L288 • Manifest-reachable source captures an API credential, sends it to a fixed unofficial gateway, and persists that redirection in agent or shell configuration.
dist/heart/auth/auth-flow.js:
fs.writeFileSync(configPath, `${JSON.stringify(nextConfig, null, 2)}\n`, "utf8");
fs.writeFileSync(configPath, `${JSON.stringify(nextConfig, null, 2)}\n`, "utf8");
const authPath = path.join(homeDir, ".codex", "auth.json");
throw new Error(`${input.provider} API key entry requires an interactive terminal so the secret can be hidden.`);
const apiKey = (await input.promptSecret(`${input.provider === "openai-compatible" ? "Z.ai" : "Gemini"} API key: `)).trim();
throw new Error(`${input.provider} API key is required.`);
baseUrl: input.provider === "openai-compatible"
headers: { Authorization: `Bearer ${token}`
High Credential Redirect Persistence
Manifest-reachable source sends a prompted API credential to a fixed unofficial gateway and persists the redirection.
dist/heart/auth/auth-flow.js View on unpkg 49 exports.confirmationPhrase = confirmationPhrase;
L50: const fs = __importStar(require("node:fs"));
L51: const path = __importStar(require("node:path"));
Medium Dynamic Require
Package source references dynamic require/import behavior.
dist/commerce/store.js View on unpkg · L49 dist/repertoire/coding/context-pack.js View file 40 const path = __importStar(require("path"));
L41: const child_process_1 = require("child_process");
L42: const active_work_1 = require("../../heart/active-work");
...
L55: status: result.status ?? 1,
L56: stdout: typeof result.stdout === "string" ? result.stdout : "",
L57: stderr: typeof result.stderr === "string" ? result.stderr : "",
Low Weak Crypto
Package source references weak cryptographic algorithms.
dist/repertoire/coding/context-pack.js View on unpkg · L40 36 exports.createRealOsCronDeps = createRealOsCronDeps;
L37: exports.createRealCrontabDeps = createRealCrontabDeps;
L38: exports.resolveOuroBinaryPath = resolveOuroBinaryPath;
L39: const child_process_1 = require("child_process");
L40: const fs = __importStar(require("fs"));
...
L48: message: "created real OS cron deps",
L49: meta: { platform: process.platform },
L50: });
...
L78: mkdirp: (dir) => fs.mkdirSync(dir, { recursive: true }),
L79: homeDir: os.homedir(),
L80: envPath: process.env.PATH ?? "",
L81: };
Medium Install Persistence
Source writes installer persistence such as shell profile or service configuration.
dist/heart/daemon/os-cron-deps.js View on unpkg · L36 dist/repertoire/tools-notes.js#virtual:normalized:round1 View file 58 // A friend note is a fact or preference about a person. The agent"s own personality, voice and psyche are not facts\n// about the person: they live in the bundle"s psyche folder, ...
L59: const OWN_PERSONA_NOTE = /\b(?:your|my|the\s+(?:agent|butler|bot|assistant)(?:["’]s)?)s+(?:owns+)?(?:personality|persona|psyche|soul|identity|character|voice|self[- ]concept)\b|\b(...
L60: if ((a.type === "tool_preference" || a.type === "note") && !a.key)
High Command Output Exfiltration
Source combines command execution, command-output handling, and outbound requests; review data flow before blocking.
dist/repertoire/tools-notes.js#virtual:normalized:round1 View on unpkg · L58 58 Trigger-reachable command-output exfiltration chain: manifest.exports -> dist/heart/daemon/daemon-cli.js -> dist/heart/daemon/cli-defaults.js -> dist/heart/hatch/specialist-tools.js -> dist/repertoire/tools-base.js -> dist/repertoire/tools-notes.js
L58: // A friend note is a fact or preference about a person. The agent"s own personality, voice and psyche are not facts\n// about the person: they live in the bundle"s psyche folder, ...
L59: const OWN_PERSONA_NOTE = /\b(?:your|my|the\s+(?:agent|butler|bot|assistant)(?:["’]s)?)s+(?:owns+)?(?:personality|persona|psyche|soul|identity|character|voice|self[- ]concept)\b|\b(...
L60: if ((a.type === "tool_preference" || a.type === "note") && !a.key)
High Trigger Reachable Command Output Exfiltration
A manifest entrypoint or package-local install chain reaches command-output exfiltration behavior.
dist/repertoire/tools-notes.js#virtual:normalized:round1 View on unpkg · L58 deploy/unraid/sanctuary-butler-upgrade.mjs View file 42 Cross-file remote execution chain: deploy/unraid/sanctuary-butler-upgrade.mjs spawns dist/heart/daemon/sanctuary-authority-root-lifecycle.js; helper contains network access plus dynamic code execution.
L42:
L43: import { execFileSync, spawnSync } from "node:child_process"
L44: import { createHash } from "node:crypto"
...
L56: const POLICY = `${BUNDLE}/state/policy/steward.json`
L57: const PRIMITIVES = ["/usr/local/bin/node", "/bin/sh", "/usr/bin/prlimit", "/usr/bin/setsid"]
L58: const REQUIRED_PROGRAMS = [
...
L171: for (const file of readdirSync(`${BUNDLE}/friends`).filter((name) => name.endsWith(".json"))) {
L172: try { friendRecords[file.replace(/\.json$/u, "")] = JSON.parse(readFileSync(`${BUNDLE}/friends/${file}`, "utf8")) } catch { /* unreadable record: not a grant source */ }
L173:
High Cross File Remote Execution Context
Source spawns a local helper that also contains network and dynamic execution context; review data flow before blocking.
deploy/unraid/sanctuary-butler-upgrade.mjs View on unpkg · L42 dist/heart/versioning/ouro-path-installer.js View file 62 Trigger-reachable persistence chain: manifest.exports -> dist/heart/daemon/daemon-cli.js -> dist/heart/daemon/cli-defaults.js -> dist/heart/versioning/ouro-path-installer.js
L62: if (base === "zsh")
L63: return path.join(homeDir, ".zshrc");
L64: if (base === "bash") {
...
L68: /* v8 ignore next -- ?? fallback: callers always pass platform from deps @preserve */
L69: const effectivePlatform = platform ?? process.platform;
L70: return effectivePlatform === "darwin"
...
L231: const platform = deps.platform ?? process.platform;
L232: const homeDir = deps.homeDir ?? os.homedir();
L233: const existsSync = deps.existsSync ?? fs.existsSync;
...
L242: const renameSync = deps.renameSync ?? fs.renameSync;
L243: const envPath = deps.envPath ?? process.env.PATH ?? "";
L244: const shell = deps.shell ??
High Trigger Reachable Persistence
A manifest entrypoint or package-local install chain reaches persistence behavior.
dist/heart/versioning/ouro-path-installer.js View on unpkg · L62 dist/heart/versioning/ouro-version-manager.js View file 228 mkdirSync(versionDir, { recursive: true });
L229: execSync(`npm install --prefix ${versionDir} @ouro.bot/cli@${version}`, { stdio: "pipe" });
L230: (0, runtime_1.emitNervesEvent)({
High Runtime Package Install
Package source invokes a package manager install command at runtime.
dist/heart/versioning/ouro-version-manager.js View on unpkg · L228 deploy/unraid/sanctuary-unit18-target-audit.sh View file • path = deploy/unraid/sanctuary-unit18-target-audit.sh
kind = build_helper
sizeBytes = 809
magicHex = [redacted]
Medium Ships Build Helper
Package ships non-JavaScript build or shell helper files.
deploy/unraid/sanctuary-unit18-target-audit.sh View on unpkg dist/a2a/operator-trust.js#virtual:normalized:round1 View file • stage = ast_semantic_analysis; reason = ast_parse_error; limitedFiles = 24
High Semantic Analysis Limited
A bounded semantic-analysis stage reached its safety limit; remaining detectors completed, but this package requires AI review.
dist/a2a/operator-trust.js#virtual:normalized:round1 View on unpkg dist/heart/habits/habit-lifecycle.js View file • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/habits/habit-lifecycle.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/habits/habit-lifecycle.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/versioning/ouro-uti.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/versioning/ouro-uti.js View on unpkg dist/heart/daemon/bluebubbles-host.js View file • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/daemon/bluebubbles-host.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/daemon/bluebubbles-host.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/repertoire/mcp-client.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/repertoire/mcp-client.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/rsvp/cutover.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/rsvp/cutover.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/daemon/launchd.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/daemon/launchd.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/daemon/plugin-cli.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/daemon/plugin-cli.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/habits/habit-cancel.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/habits/habit-cancel.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/repertoire/tools-session.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/repertoire/tools-session.js View on unpkg dist/senses/root-host-approval-runtime.js View file • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/senses/root-host-approval-runtime.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/senses/root-host-approval-runtime.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/autonomy-budget.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/autonomy-budget.js View on unpkg dist/heart/daemon/bluebubbles-host-protocol.js View file • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/daemon/bluebubbles-host-protocol.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/daemon/bluebubbles-host-protocol.js View on unpkg High Known Malware Source Similarity dist/heart/habits/habit-lifecycle.js
High Known Malware Source Similarity dist/heart/versioning/ouro-uti.js
High Known Malware Source Similarity dist/heart/daemon/bluebubbles-host.js
High Known Malware Source Similarity dist/repertoire/mcp-client.js
High Known Malware Source Similarity dist/rsvp/cutover.js
High Known Malware Source Similarity dist/heart/daemon/launchd.js
High Known Malware Source Similarity dist/heart/daemon/plugin-cli.js
High Known Malware Source Similarity dist/heart/habits/habit-cancel.js
High Known Malware Source Similarity dist/repertoire/tools-session.js
High Known Malware Source Similarity dist/senses/root-host-approval-runtime.js
High Known Malware Source Similarity dist/heart/autonomy-budget.js
High Known Malware Source Similarity dist/heart/daemon/bluebubbles-host-protocol.js
Medium Secret Pattern dist/heart/daemon/cli-exec.js
Medium Dynamic Require dist/commerce/store.js
Medium Install Persistence dist/heart/daemon/os-cron-deps.js
Medium Ships Build Helper deploy/unraid/sanctuary-unit18-target-audit.sh
Medium Structural Risk Force Deep Review
Low Weak Crypto dist/repertoire/coding/context-pack.js
bin → cli, ouro, ouro.bot
Artifact 12.3 MB · 740 files 2 signature(s) · provenance
Install lifecycle No install hooks · other: audit:nerves, bluebubbles, build, butler:ship +8
Behavioral surface ChildProcess Crypto DynamicRequire EnvironmentVars Filesystem Network Shell WebSocket HighEntropyStrings Minified UrlStrings NoLicense
Source & flagged code27 flagged Lines 3795-3835 javascript
3795 "The app password stays hidden while you type." ,
3799 title : "Where it lives" ,
3801 `${ agent }'s machine runtime config for this machine.` ,
3802 "It does not travel to other machines unless you attach them too." ,
3807 `Connect BlueBubbles for ${ agent }` ,
3808 "This is a local attachment for this machine." ,
3809 "The app password stays hidden while you type." ,
3812 const serverUrl = ( await promptInput ( "BlueBubbles server URL for this machine: " )). trim ();
3814 throw new Error ( "BlueBubbles server URL cannot be blank" );
3815 const password = ( await promptSecret ( "BlueBubbles app password: " )). trim ();
Medium Secret Pattern
Package contains a possible secret pattern.
dist/heart/daemon/cli-exec.js View on unpkg · L3815 3817 throw new Error ( "BlueBubbles app password cannot be blank" );
3818 const port = parseOptionalPort ( await promptInput ( "Local webhook port [18790]: " ), 18790 , "BlueBubbles webhook port" );
3819 const webhookPath = normalizeWebhookPath ( await promptInput ( "Local webhook path [/bluebubbles-webhook]: " ), "/bluebubbles-webhook" );
3820 const requestTimeoutMs = parseOptionalPositiveInteger ( await promptInput ( "Request timeout ms [30000]: " ), 30000 , "BlueBubbles request timeout" );
3821 // Capture the operator's known iMessage handles so the BB ingest path can
3822 // filter group-chat echoes whose `isFromMe` flag was lost or never set.
3823 // Without this, the agent would ingest its own outbound message as inbound
3824 // and reply to itself (the "agent talking to itself" failure mode in groups).
3825 const ownHandlesRaw = ( await promptInput ( "Your iMessage handle(s) — phone(s) and/or email(s) BlueBubbles attributes to your sent messages (comma-separated; needed for the group self-talk filter; blank to skip): " )). trim ();
3826 const ownHandles = ownHandlesRaw
3827 ? ownHandlesRaw. split ( "," ). map (( h ) => h. trim ()). filter (( h ) => h. length > 0 )
3829 // iMessage sends as whichever Apple ID the host account is signed in to, so the
3830 // host account is declared explicitly (never defaulted to whoever runs this).
3831 const declaredHost = ( 0 , auth_flow_1.readAgentConfigForAgent)(agent, deps.bundlesRoot).config.senses?.bluebubbles.hostUsername;
3832 const bridgeUsernameAnswer = ( await promptInput (declaredHost
3833 ? `BlueBubbles macOS account username [${ declaredHost }]: `
3834 : `macOS account signed in to ${ agent }'s own Apple ID (BlueBubbles host): ` )). trim ();
3835 const bridgeUsername = bridgeUsernameAnswer || declaredHost;
Lines 7692-7732 javascript
7692 if (command.kind === "setup" ) {
7693 const { tool , agent : setupAgent } = command;
7694 const platform = ( 0 , platform_1.detectPlatform)();
Lines 22-62 javascript
22 for ( var k in o) if ( Object . prototype .hasOwnProperty. call (o, k)) ar[ar. length ] = k;
Lines 29-69 javascript
30 if (mod != null ) for ( var k = ownKeys (mod), i = 0 ; i < k. length
dist/repertoire/coding/context-pack.js View file Lines 20-60 javascript
20 ownKeys = Object.getOwnPropertyNames || function ( o ) {
22 for ( var k in o) if ( Object .
Lines 16-56 javascript
18 var __importStar = ( this && this .__importStar) || ( function () {
dist/repertoire/tools-notes.js#virtual:normalized:round1 View file 58 // A friend note is a fact or preference about a person. The agent"s own personality, voice and psyche are not facts\n// about the person: they live in the bundle"s psyche folder, ...
L59: const OWN_PERSONA_NOTE = /\b(?:your|my|the\s+(?:agent|butler|bot|assistant)(?:["’]s)?)s+(?:owns+)?(?:personality|persona|psyche|soul|identity|character|voice|self[- ]concept)\b|\b(...
L60: if ((a.type === "tool_preference" || a.type === "note") && !a.key)
High Command Output Exfiltration
Source combines command execution, command-output handling, and outbound requests; review data flow before blocking.
dist/repertoire/tools-notes.js#virtual:normalized:round1 View on unpkg · L58 58 Trigger-reachable command-output exfiltration chain: manifest.exports -> dist/heart/daemon/daemon-cli.js -> dist/heart/daemon/cli-defaults.js -> dist/heart/hatch/specialist-tools.js -> dist/repertoire/tools-base.js -> dist/repertoire/tools-notes.js
L58: // A friend note is a fact or preference about a person. The agent"s own personality, voice and psyche are not facts\n// about the person: they live in the bundle"s psyche folder, ...
L59: const OWN_PERSONA_NOTE = /\b(?:your|my|the\s+(?:agent|butler|bot|assistant)(?:["’]s)?)s+(?:owns+)?(?:personality|persona|psyche|soul|identity|character|voice|self[- ]concept)\b|\b(...
L60: if ((a.type === "tool_preference" || a.type === "note") && !a.key)
High Trigger Reachable Command Output Exfiltration
A manifest entrypoint or package-local install chain reaches command-output exfiltration behavior.
dist/repertoire/tools-notes.js#virtual:normalized:round1 View on unpkg · L58 deploy/unraid/sanctuary-butler-upgrade.mjs View file 42 Cross-file remote execution chain: deploy/unraid/sanctuary-butler-upgrade.mjs spawns dist/heart/daemon/sanctuary-authority-root-lifecycle.js; helper contains network access plus dynamic code execution.
L42:
L43: import { execFileSync, spawnSync } from "node:child_process"
L44: import { createHash } from "node:crypto"
...
L56: const POLICY = `${BUNDLE}/state/policy/steward.json`
L57: const PRIMITIVES = ["/usr/local/bin/node", "/bin/sh", "/usr/bin/prlimit", "/usr/bin/setsid"]
L58: const REQUIRED_PROGRAMS = [
...
L171: for (const file of readdirSync(`${BUNDLE}/friends`).filter((name) => name.endsWith(".json"))) {
L172: try { friendRecords[file.replace(/\.json$/u, "")] = JSON.parse(readFileSync(`${BUNDLE}/friends/${file}`, "utf8")) } catch { /* unreadable record: not a grant source */ }
L173:
High Cross File Remote Execution Context
Source spawns a local helper that also contains network and dynamic execution context; review data flow before blocking.
deploy/unraid/sanctuary-butler-upgrade.mjs View on unpkg · L42 dist/heart/versioning/ouro-path-installer.js View file 62 Trigger-reachable persistence chain: manifest.exports -> dist/heart/daemon/daemon-cli.js -> dist/heart/daemon/cli-defaults.js -> dist/heart/versioning/ouro-path-installer.js
L62: if (base === "zsh")
L63: return path.join(homeDir, ".zshrc");
L64: if (base === "bash") {
...
L68: /* v8 ignore next -- ?? fallback: callers always pass platform from deps @preserve */
L69: const effectivePlatform = platform ?? process.platform;
L70: return effectivePlatform === "darwin"
...
L231: const platform = deps.platform ?? process.platform;
L232: const homeDir = deps.homeDir ?? os.homedir();
L233: const existsSync = deps.existsSync ?? fs.existsSync;
...
L242: const renameSync = deps.renameSync ?? fs.renameSync;
L243: const envPath = deps.envPath ?? process.env.PATH ?? "";
L244: const shell = deps.shell ??
High Trigger Reachable Persistence
A manifest entrypoint or package-local install chain reaches persistence behavior.
dist/heart/versioning/ouro-path-installer.js View on unpkg · L62 dist/heart/versioning/ouro-version-manager.js View file 228 mkdirSync(versionDir, { recursive: true });
L229: execSync(`npm install --prefix ${versionDir} @ouro.bot/cli@${version}`, { stdio: "pipe" });
L230: (0, runtime_1.emitNervesEvent)({
High Runtime Package Install
Package source invokes a package manager install command at runtime.
dist/heart/versioning/ouro-version-manager.js View on unpkg · L228 deploy/unraid/sanctuary-unit18-target-audit.sh View file • path = deploy/unraid/sanctuary-unit18-target-audit.sh
kind = build_helper
sizeBytes = 809
magicHex = [redacted]
Medium Ships Build Helper
Package ships non-JavaScript build or shell helper files.
deploy/unraid/sanctuary-unit18-target-audit.sh View on unpkg dist/a2a/operator-trust.js#virtual:normalized:round1 View file • stage = ast_semantic_analysis; reason = ast_parse_error; limitedFiles = 24
High Semantic Analysis Limited
A bounded semantic-analysis stage reached its safety limit; remaining detectors completed, but this package requires AI review.
dist/a2a/operator-trust.js#virtual:normalized:round1 View on unpkg dist/heart/habits/habit-lifecycle.js View file • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/habits/habit-lifecycle.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/habits/habit-lifecycle.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/versioning/ouro-uti.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/versioning/ouro-uti.js View on unpkg dist/heart/daemon/bluebubbles-host.js View file • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/daemon/bluebubbles-host.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/daemon/bluebubbles-host.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/repertoire/mcp-client.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/repertoire/mcp-client.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/rsvp/cutover.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/rsvp/cutover.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/daemon/launchd.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/daemon/launchd.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/daemon/plugin-cli.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/daemon/plugin-cli.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/habits/habit-cancel.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/habits/habit-cancel.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/repertoire/tools-session.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/repertoire/tools-session.js View on unpkg dist/senses/root-host-approval-runtime.js View file • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/senses/root-host-approval-runtime.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/senses/root-host-approval-runtime.js View on unpkg • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/autonomy-budget.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/autonomy-budget.js View on unpkg dist/heart/daemon/bluebubbles-host-protocol.js View file • matchType = normalized_sha256
matchedPackage = @ouro.bot/cli@0.1.0-alpha.870
matchedPath = dist/heart/daemon/bluebubbles-host-protocol.js
matchedIdentity = npm:QG91cm8uYm90L2NsaQ:0.1.0-alpha.870
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/heart/daemon/bluebubbles-host-protocol.js View on unpkg
// Windows native is not yet supported
7696 if (platform === "windows-native" ) {
7697 ( 0 , runtime_1.emitNervesEvent)({
7698 component: "daemon" ,
7699 event: "daemon.setup_windows_native_unsupported" ,
7700 message: "Windows native setup not yet supported" ,
7701 meta: { tool, agent: setupAgent },
7703 const message = "Windows native is not yet supported. Please run from WSL2: https://learn.microsoft.com/en-us/windows/wsl/install" ;
7704 deps. writeStdout (message);
7707 // Resolve platform-specific paths and commands
7711 let claudeConfigDir;
7712 if (platform === "wsl" ) {
7713 const winProfile = ( 0 , child_process_1.execFileSync)( "cmd.exe" , [ "/C" , "echo" , "%USERPROFILE%" ], { stdio: "pipe" }). toString (). trim ();
7714 const windowsHome = ( 0 , child_process_1.execFileSync)( "wslpath" , [ "-u" , winProfile], { stdio: "pipe" }). toString (). trim ();
7715 ( 0 , runtime_1.emitNervesEvent)({
7716 component: "daemon" ,
7717 event: "daemon.setup_wsl_home_resolved" ,
7718 message: "resolved Windows home from WSL" ,
7719 meta: { windowsHome },
7721 claudeCmd = "claude.exe" ;
7722 mcpServePrefix = "wsl " ;
7723 hookPrefix = "wsl " ;
7724 claudeConfigDir = path. join (windowsHome, ".claude" );
7728 claudeCmd = "claude" ;
7729 mcpServePrefix = "" ;
7731 claudeConfigDir = path. join (os. homedir (), ".claude" );
return
ownKeys
(o);
27 return function ( mod ) {
28 if (mod && mod.__esModule) return mod;
30 if (mod != null ) for ( var k = ownKeys (mod), i = 0 ; i < k. length ; i ++ ) if (k[i] !== "default" ) __createBinding (result, mod, k[i]);
31 __setModuleDefault (result, mod);
35 Object. defineProperty ( exports , "__esModule" , { value: true });
36 exports .readAgentConfigForAgent = readAgentConfigForAgent;
37 exports .writeAgentProviderSelection = writeAgentProviderSelection;
38 exports .storeProviderCredentials = storeProviderCredentials;
39 exports .writeAgentModel = writeAgentModel;
40 exports .collectRuntimeAuthCredentials = collectRuntimeAuthCredentials;
41 exports .resolveHatchCredentials = resolveHatchCredentials;
42 exports .runRuntimeAuthFlow = runRuntimeAuthFlow;
43 const child_process_1 = require ( "child_process" );
44 const fs = __importStar ( require ( "fs" ));
High Child Process
Package source references child process execution.
dist/heart/auth/auth-flow.js View on unpkg · L42 45 const os = __importStar ( require ( "os" ));
46 const path = __importStar ( require ( "path" ));
47 const runtime_1 = require ( "../../nerves/runtime" );
48 const identity_1 = require ( "../identity" );
49 const migrate_config_1 = require ( "../migrate-config" );
50 const provider_models_1 = require ( "../provider-models" );
51 const agent_presentation_1 = require ( "../../senses/shepherd/agent-presentation" );
52 const provider_credentials_1 = require ( "../provider-credentials" );
53 const vault_unlock_1 = require ( "../../repertoire/vault-unlock" );
54 const ANTHROPIC_SETUP_TOKEN_PREFIX = "sk-ant-oat01-" ;
55 const ANTHROPIC_SETUP_TOKEN_MIN_LENGTH = 80 ;
56 const CODEX_LOCAL_TOKEN_REFRESH_MARGIN_MS = 5 * 60 * 1000 ;
57 function assertPersistentProviderCredentialsAllowed ( agentName ) {
58 if (agentName === "SerpentGuide" ) {
59 throw new Error ( "SerpentGuide uses provider credentials in memory during hatch bootstrap; persistent SerpentGuide auth is not supported." );
62 function readJsonRecord ( filePath , label ) {
Lines 268-308 javascript
268 if ( ! trimmed. startsWith ( ANTHROPIC_SETUP_TOKEN_PREFIX )) {
269 throw new Error ( `Invalid Anthropic setup token format. Expected prefix ${ ANTHROPIC_SETUP_TOKEN_PREFIX }.` );
271 if (trimmed. length < ANTHROPIC_SETUP_TOKEN_MIN_LENGTH ) {
272 throw new Error ( "Anthropic setup token looks too short." );
276 async function collectRuntimeAuthCredentials ( input , deps ) {
277 const spawnSync = deps.spawnSync ?? child_process_1.spawnSync;
278 const homeDir = deps.homeDir ?? os. homedir ();
279 const now = deps.now ?? (() => new Date ());
280 if (input.provider === "openai-compatible" || input.provider === "openai-compatible-gemini" ) {
281 if ( ! input.promptSecret)
282 throw new Error ( `${ input . provider } API key entry requires an interactive terminal so the secret can be hidden.` );
283 const apiKey = ( await input. promptSecret ( `${ input . provider === "openai-compatible" ? "Z.ai" : "Gemini"} API key: ` )). trim ();
285 throw new Error ( `${ input . provider } API key is required.` );
288 baseUrl: input.provider === "openai-compatible"
289 ? "https://api.z.ai/api/paas/v4/"
290 : "https://generativelanguage.googleapis.com/v1beta/openai/" ,
293 if (input.provider === "github-copilot" ) {
294 let token = process.env. GH_TOKEN ?. trim () || process.env. GITHUB_TOKEN ?. trim () || "" ;
296 writeAuthProgress (input, "checking GitHub CLI credentials..." );
297 const result = spawnSync ( "gh" , [ "auth" , "token" ], { encoding: "utf8" });
298 token = (result.status === 0 && result.stdout ? result.stdout. trim () : "" );
High Same File Env Network Execution
A single source file combines environment access, network access, and code or shell execution; review context before blocking.
dist/heart/auth/auth-flow.js View on unpkg · L288 301 writeAuthProgress (input, "starting GitHub login..." );
302 ( 0 , runtime_1.emitNervesEvent)({
304 event: "daemon.auth_gh_login_start" ,
305 message: "starting gh auth login for runtime auth" ,
306 meta: { agentName: input.agentName },
308 const loginResult = spawnSync ( "gh" , [ "auth" , "login" ], { stdio: "inherit" });
• Manifest-reachable source captures an API credential, sends it to a fixed unofficial gateway, and persists that redirection in agent or shell configuration.
dist/heart/auth/auth-flow.js:
fs.writeFileSync(configPath, `${JSON.stringify(nextConfig, null, 2)}\n`, "utf8");
fs.writeFileSync(configPath, `${JSON.stringify(nextConfig, null, 2)}\n`, "utf8");
const authPath = path.join(homeDir, ".codex", "auth.json");
throw new Error(`${input.provider} API key entry requires an interactive terminal so the secret can be hidden.`);
const apiKey = (await input.promptSecret(`${input.provider === "openai-compatible" ? "Z.ai" : "Gemini"} API key: `)).trim();
throw new Error(`${input.provider} API key is required.`);
baseUrl: input.provider === "openai-compatible"
headers: { Authorization: `Bearer ${token}`
High Credential Redirect Persistence
Manifest-reachable source sends a prompted API credential to a fixed unofficial gateway and persists the redirection.
dist/heart/auth/auth-flow.js View on unpkg ; i
++
)
if
(k[i]
!==
"default"
)
__createBinding
(result, mod, k[i]);
31 __setModuleDefault (result, mod);
35 Object. defineProperty ( exports , "__esModule" , { value: true });
36 exports .commerceConfirmationMessage = commerceConfirmationMessage;
37 exports .commerceAuthorityToken = commerceAuthorityToken;
38 exports .createCommercePreview = createCommercePreview;
39 exports .readCommerceRecord = readCommerceRecord;
40 exports .confirmCommercePreview = confirmCommercePreview;
41 exports .validateCommerceAuthorityToken = validateCommerceAuthorityToken;
42 exports .validateCommerceAuthority = validateCommerceAuthority;
43 exports .reserveCommerceAuthority = reserveCommerceAuthority;
44 exports .consumeReservedCommerceAuthority = consumeReservedCommerceAuthority;
45 exports .markReservedCommerceAuthorityAttempted = markReservedCommerceAuthorityAttempted;
46 exports .releaseReservedCommerceAuthority = releaseReservedCommerceAuthority;
47 exports .consumeCommerceAuthorityToken = consumeCommerceAuthorityToken;
48 exports .readCommerceAccessLog = readCommerceAccessLog;
49 exports .confirmationPhrase = confirmationPhrase;
50 const fs = __importStar ( require ( "node:fs" ));
51 const path = __importStar ( require ( "node:path" ));
Medium Dynamic Require
Package source references dynamic require/import behavior.
dist/commerce/store.js View on unpkg · L49 52 const node_crypto_1 = require ( "node:crypto" );
53 const runtime_1 = require ( "../nerves/runtime" );
54 const DEFAULT_EXPIRES_MINUTES = 30 ;
55 const CONFIRMATION_PHRASE = "CONFIRM_PURCHASE" ;
56 function commerceRoot ( agentRoot ) {
57 return path. join (agentRoot, "state" , "commerce" );
59 function recordsDir ( agentRoot ) {
60 return path. join ( commerceRoot (agentRoot), "checkouts" );
62 function accessLogPath ( agentRoot ) {
63 return path. join ( commerceRoot (agentRoot), "access-log.jsonl" );
65 function recordPath ( agentRoot , checkoutId ) {
66 return path. join ( recordsDir (agentRoot), `${ checkoutId }.json` );
68 function recordLockPath ( agentRoot , checkoutId ) {
69 return `${ recordPath ( agentRoot , checkoutId ) }.lock` ;
prototype
.hasOwnProperty.
call
(o, k)) ar[ar.
length
]
=
k;
27 return function ( mod ) {
28 if (mod && mod.__esModule) return mod;
30 if (mod != null ) for ( var k = ownKeys (mod), i = 0 ; i < k. length ; i ++ ) if (k[i] !== "default" ) __createBinding (result, mod, k[i]);
31 __setModuleDefault (result, mod);
35 Object. defineProperty ( exports , "__esModule" , { value: true });
36 exports .prepareCodingContextPack = prepareCodingContextPack;
37 exports .emitCodingEpisode = emitCodingEpisode;
38 const crypto = __importStar ( require ( "crypto" ));
39 const fs = __importStar ( require ( "fs" ));
40 const path = __importStar ( require ( "path" ));
41 const child_process_1 = require ( "child_process" );
42 const active_work_1 = require ( "../../heart/active-work" );
43 const identity_1 = require ( "../../heart/identity" );
44 const session_events_1 = require ( "../../heart/session-events" );
45 const runtime_1 = require ( "../../nerves/runtime" );
46 const episodes_1 = require ( "../../arc/episodes" );
47 const skills_1 = require ( "../skills" );
48 const CONTEXT_FILENAMES = [ "AGENTS.md" , "CLAUDE.md" ];
49 function defaultRunCommand ( command , args , cwd ) {
50 const result = ( 0 , child_process_1.spawnSync)(command, args, {
55 status: result.status ?? 1 ,
56 stdout: typeof result.stdout === "string" ? result.stdout : "" ,
57 stderr: typeof result.stderr === "string" ? result.stderr : "" ,
Low Weak Crypto
Package source references weak cryptographic algorithms.
dist/repertoire/coding/context-pack.js View on unpkg · L40 60 function stableContextKey ( request ) {
=
function
(
o
) {
20 ownKeys = Object.getOwnPropertyNames || function ( o ) {
22 for ( var k in o) if ( Object . prototype .hasOwnProperty. call (o, k)) ar[ar. length ] = k;
27 return function ( mod ) {
28 if (mod && mod.__esModule) return mod;
30 if (mod != null ) for ( var k = ownKeys (mod), i = 0 ; i < k. length ; i ++ ) if (k[i] !== "default" ) __createBinding (result, mod, k[i]);
31 __setModuleDefault (result, mod);
35 Object. defineProperty ( exports , "__esModule" , { value: true });
36 exports .createRealOsCronDeps = createRealOsCronDeps;
37 exports .createRealCrontabDeps = createRealCrontabDeps;
38 exports .resolveOuroBinaryPath = resolveOuroBinaryPath;
39 const child_process_1 = require ( "child_process" );
40 const fs = __importStar ( require ( "fs" ));
41 const os = __importStar ( require ( "os" ));
42 const path = __importStar ( require ( "path" ));
43 const runtime_1 = require ( "../../nerves/runtime" );
44 function createRealOsCronDeps () {
45 ( 0 , runtime_1.emitNervesEvent)({
47 event: "daemon.os_cron_deps_created" ,
48 message: "created real OS cron deps" ,
49 meta: { platform: process.platform },
50 });
Medium Install Persistence
Source writes installer persistence such as shell profile or service configuration.
dist/heart/daemon/os-cron-deps.js View on unpkg · L36 54 ( 0 , child_process_1.execSync)(cmd, { stdio: "ignore" });