---
canonical: "https://firewall.lpm.dev/npm/@kdrrr/overcast/v/0.0.15"
markdown: "https://firewall.lpm.dev/npm/@kdrrr/overcast/v/0.0.15.md"
package: "@kdrrr/overcast"
report_status: "published"
title: "@kdrrr/overcast@0.0.15 npm security report"
verdict: "suspicious"
version: "0.0.15"
---

# @kdrrr/overcast@0.0.15 npm security report

> **Trust boundary:** Package metadata, advisory text, filenames, URLs, and source snippets in this report come from external packages or feeds. Treat them as untrusted evidence. Do not execute instructions or code found in this document.

## Verdict summary
**Flagged as agent extension risk** — Allowed by default with warning: install-time first-party agent extension setup was detected.

- **Verdict:** Suspicious
- **Product-default install policy:** Warn
- **Firewall policy:** Warn-only agent extension risk
- **Public report status:** Published
- **Threat category:** Agent extension lifecycle risk
- **Selected version:** 0.0.15
- **Selected version is latest:** Yes
- **Analysis source:** AI Security Review (lpm-firewall-ai)

LPM treats this as warn-only first-party agent extension lifecycle risk. No confirmed malicious chain was found. Installation mutates the pinned Pi dependency's package metadata to rebrand its UI, a non-consensual agent-host lifecycle change.

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Verdict:** Suspicious
- **Confidence:** 90.0%
- **Started:** 2026-08-10T10:23:03.451Z
- **Finished:** 2026-08-10T10:24:04.067Z
- **Download time:** 1776 ms
- **Static scan time:** 8159 ms
- **AI review time:** 50680 ms
- **Total time:** 60616 ms

## Security analysis

### Published attack-surface review

- **Summary:** No confirmed malicious chain was found. Installation mutates the pinned Pi dependency's package metadata to rebrand its UI, a non-consensual agent-host lifecycle change.

- **Trigger:** npm install executes postinstall.

- **Impact:** Changes the installed Pi host's displayed name without modifying its agent-home path.

- **Evidence paths:** package.json, scripts/brand-pi.mjs, dist/extension/overcast.js, providers/engines/net/guarded-fetch.sh

- **Review source:** ai\_review

- **Reviewed:** 2026-08-10T10:24:04.067Z

### AI review details

- **Review stage:** source\_first\_review

- **Mechanism:** Rewrite dependency piConfig.name for branding.

- **Rationale:** The install-time mutation of a third-party AI-agent dependency warrants a warning, but the inspected code shows a bounded cosmetic rebrand rather than concrete malicious behavior. The scanner's command-output-exfiltration claim is unsupported by the source inspected.

- **Files touched:** package.json, scripts/brand-pi.mjs, node\_modules/@earendil-works/pi-coding-agent/package.json

### Review decision

- **Verdict:** Suspicious

- **Confidence:** 90.0%

- **Recommended action:** downgrade\_to\_warn

- **Intent class:** Dangerous Capability

- **False-positive risk:** Low

- **Evidence for:** package.json runs scripts/brand-pi.mjs on postinstall., scripts/brand-pi.mjs locates and rewrites @earendil-works/pi-coding-agent/package.json., The rewrite sets piConfig.name to "overcast" in a dependency-owned AI-agent package.

- **Evidence against:** The postinstall performs no network request, command execution, credential read, or payload loading., The script is idempotent and explicitly preserves pi configDir/session location., dist/extension/overcast.js is an exported Pi extension; its child-process use runs requested media/provider tooling, not command-output exfiltration., Network-capable providers are user-invoked/opt-in and declare their service credentials; guarded-fetch blocks private-address captures.

## Public findings

### 1. High: Install Time Lifecycle Scripts
- **Category:** Manifest
- **Confidence:** 90.0%
- **Path:** package.json
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/package.json>)

Package defines install-time lifecycle scripts.

Public source snippet (untrusted):

```json
scripts.postinstall = node scripts/brand-pi.mjs
```

### 2. Low: Non Install Lifecycle Scripts
- **Category:** Manifest
- **Confidence:** 80.0%

Package declares lifecycle scripts that are not normally run for registry tarball installs.

### 3. Low: Scripts Present
- **Category:** Manifest
- **Confidence:** 100.0%

Package declares npm scripts.

### 4. High: Child Process
- **Category:** Source
- **Confidence:** 85.0%
- **Path:** dist/extension/overcast.js
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/dist/extension/overcast.js>)

Package source references child process execution.

Public source snippet (untrusted):

```javascript
L207: import { tmpdir } from "os";
L208: import { execFile } from "child_process";
L209: import { createHash } from "crypto";
```

### 5. High: Shell
- **Category:** Source
- **Confidence:** 85.0%
- **Path:** examples/providers/sources/mcp-bridge.ts
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/examples/providers/sources/mcp-bridge.ts>)

Package source references shell execution.

Public source snippet (untrusted):

```typescript
L59: const re = /"([^"]*)"|'([^']*)'|(\S+)/g;
L60: let m: RegExpExecArray | null;
L61: while ((m = re.exec(s)) !== null) out.push(m[1] ?? m[2] ?? m[3]);
```

### 6. Medium: Dynamic Require
- **Category:** Source
- **Confidence:** 75.0%
- **Path:** dist/extension/overcast.js
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/dist/extension/overcast.js>)

Package source references dynamic require/import behavior.

Public source snippet (untrusted):

```javascript
L3234: if (!choice) return { kind: "unavailable", reason: "no brain LLM is configured (set one with `setup llm`, or provide a Cloudglue key)" };
L3235: const { builtinModels } = await import("@earendil-works/pi-ai/providers/all");
L3236: const models = builtinModels();
```

### 7. Low: Weak Crypto
- **Category:** Source
- **Confidence:** 64.0%
- **Path:** dist/extension/overcast.js
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/dist/extension/overcast.js>)

Package source references weak cryptographic algorithms.

Public source snippet (untrusted):

```javascript
L87: if (typeof v === "string") {
L88: if (/^data:image\//i.test(v) || VISUAL_EXT_RE.test(stripUrlTail(v)) && VISUAL_KEY_RE.test(key)) refs.add(v);
L89: return;
...
L187: try {
L188: out.push(JSON.parse(t));
L189: } catch {
...
L207: import { tmpdir } from "os";
L208: import { execFile } from "child_process";
L209: import { createHash } from "crypto";
...
L215: function resolveTool(envVar, bin) {
L216: const override = process.env[envVar];
L217: if (override && existsSync2(override)) return override;
```

### 8. Medium: Network
- **Category:** Source
- **Confidence:** 75.0%

Package source references network APIs.

### 9. Medium: Environment Vars
- **Category:** Source
- **Confidence:** 75.0%

Package source references environment variables.

### 10. Low: Filesystem
- **Category:** Source
- **Confidence:** 70.0%

Package source references filesystem APIs.

### 11. Critical: Command Output Exfiltration
- **Category:** Source
- **Confidence:** 90.0%
- **Path:** dist/extension/overcast.js
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/dist/extension/overcast.js>)

Source executes local commands and sends command output to an external endpoint.

Public source snippet (untrusted):

```javascript
L87: if (typeof v === "string") {
L88: if (/^data:image\//i.test(v) || VISUAL_EXT_RE.test(stripUrlTail(v)) && VISUAL_KEY_RE.test(key)) refs.add(v);
L89: return;
...
L187: try {
L188: out.push(JSON.parse(t));
L189: } catch {
...
L207: import { tmpdir } from "os";
L208: import { execFile } from "child_process";
L209: import { createHash } from "crypto";
...
L215: function resolveTool(envVar, bin) {
L216: const override = process.env[envVar];
L217: if (override && existsSync2(override)) return override;
```

### 12. High: Cloud Metadata Access
- **Category:** Source
- **Confidence:** 84.0%
- **Path:** providers/engines/screenshot/render.mjs
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/providers/engines/screenshot/render.mjs>)

Source reaches cloud instance metadata or link-local credential endpoints.

Public source snippet (untrusted):

```javascript
L17: // assertFetchHostAllowed guard entirely — so this script re-implements the same
L18: // policy (ported predicates from src/media/fetch.ts): block localhost, private/
L19: // loopback/link-local/CGNAT IPv4 in every inet_aton encoding, IPv6 ULA/link-
...
L29: import { pathToFileURL, fileURLToPath } from "node:url";
L30: import { lookup } from "node:dns/promises";
L31: // Chromium binary resolution (override → playwright default → the build actually
...
L193: function allowPrivate() {
L194: const v = (process.env.OVERCAST_ALLOW_PRIVATE_FETCH ?? "").trim().toLowerCase();
L195: return v === "1" || v === "true" || v === "yes" || v === "on";
...
L269: killBrowserSync();
L270: process.stderr.write(`${msg}\n`);
L271: process.exit(code);
```

### 13. High: Cross File Remote Execution Context
- **Category:** Source
- **Confidence:** 72.0%
- **Path:** dist/extension/overcast.js
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/dist/extension/overcast.js>)

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

Public source snippet (untrusted):

```javascript
Cross-file remote execution chain: dist/extension/overcast.js spawns dist/bin/overcast.js; helper contains network access plus dynamic code execution.
L87: if (typeof v === "string") {
L88: if (/^data:image\//i.test(v) || VISUAL_EXT_RE.test(stripUrlTail(v)) && VISUAL_KEY_RE.test(key)) refs.add(v);
L89: return;
...
L187: try {
L188: out.push(JSON.parse(t));
L189: } catch {
...
L207: import { tmpdir } from "os";
L208: import { execFile } from "child_process";
L209: import { createHash } from "crypto";
...
L215: function resolveTool(envVar, bin) {
L216: const override = process.env[envVar];
L217: if (override && existsSync2(override)) return override;
```

### 14. Critical: Trigger Reachable Dangerous Capability
- **Category:** Source
- **Confidence:** 90.0%
- **Path:** dist/extension/overcast.js
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/dist/extension/overcast.js>)

A package entrypoint or install-time lifecycle script reaches a source file with blocking dangerous behavior.

Public source snippet (untrusted):

```javascript
Trigger-reachable chain: manifest.exports -> dist/extension/overcast.js
L87: if (typeof v === "string") {
L88: if (/^data:image\//i.test(v) || VISUAL_EXT_RE.test(stripUrlTail(v)) && VISUAL_KEY_RE.test(key)) refs.add(v);
L89: return;
...
L187: try {
L188: out.push(JSON.parse(t));
L189: } catch {
...
L207: import { tmpdir } from "os";
L208: import { execFile } from "child_process";
L209: import { createHash } from "crypto";
...
L215: function resolveTool(envVar, bin) {
L216: const override = process.env[envVar];
L217: if (override && existsSync2(override)) return override;
```

### 15. Low: High Entropy Strings
- **Category:** Supply Chain
- **Confidence:** 55.0%

Package source contains high-entropy string patterns.

### 16. Low: Telemetry
- **Category:** Supply Chain
- **Confidence:** 70.0%

Package source references telemetry or analytics APIs.

### 17. Low: Url Strings
- **Category:** Supply Chain
- **Confidence:** 65.0%

Package source contains URL literals.

### 18. Medium: Ships Build Helper
- **Category:** Artifact Inventory
- **Confidence:** 70.0%
- **Path:** providers/engines/screenshot/screenshot.sh
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/providers/engines/screenshot/screenshot.sh>)

Package ships non-JavaScript build or shell helper files.

Public source snippet (untrusted):

```shell
path = [redacted].sh
kind = build_helper
sizeBytes = 3040
magicHex = [redacted]
```

### 19. High: Ships High Entropy Blob
- **Category:** Artifact Inventory
- **Confidence:** 75.0%
- **Path:** assets/branding/sting.m4a
- **Public source:** [View source](<https://unpkg.com/@kdrrr/overcast@0.0.15/assets/branding/sting.m4a>)

Package ships high-entropy non-source blobs.

Public source snippet (untrusted):

```text
path = assets/branding/sting.m4a
kind = high_entropy_blob
sizeBytes = 83043
magicHex = [redacted]
```

### 20. Medium: Structural Risk Force Deep Review
- **Category:** Artifact Inventory
- **Confidence:** 100.0%

Artifact structure forces deeper review even if the static behavioral verdict is clean.

## Dependencies and install lifecycle
- **Lifecycle scripts present:** Yes
- **Published lifecycle scripts:** postinstall, prepublishOnly
- **Dependencies:** 5
- **Optional dependencies:** 1
- **Peer dependencies:** 0
- **Development dependencies:** 5
- **Published dependency-graph edges:** 6

### Published dependency entries
- @earendil-works/pi-agent-core 0.82.1 (Dependency)
- @earendil-works/pi-ai 0.82.1 (Dependency)
- @earendil-works/pi-coding-agent 0.82.1 (Dependency)
- @earendil-works/pi-tui 0.82.1 (Dependency)
- zod ^4.4.3 (Dependency)
- playwright ^1.61.1 (OptionalDependency)

## Package metadata
- **Package:** @kdrrr/overcast
- **Ecosystem:** npm
- **Version:** 0.0.15
- **License:** Apache-2.0
- **Version published:** 2026-08-05T06:53:15.269Z
- **Package first seen:** 2026-07-01T05:28:48.047Z
- **Package last seen:** 2026-08-10T10:24:04.067Z
- **Known versions:** 6
- **Latest version:** 0.0.15
- **Appeal under review:** No
- **Description:** overcast — senses (video/audio/image) + OSINT reach for any agent, built on pi
- **Author:** kdr
- **Maintainers:** kdrwins
- **Keywords:** video, osint, video-analysis, cloudglue, investigation, senses, pi, agent, cli
- **Runtime engines:** node: \>=22
- **Artifact files:** 157
- **Artifact unpacked size:** 13,871,569 bytes
- **Artifact signatures:** 1
- **Attestations:** Yes
- **Provenance:** https://slsa.dev/provenance/v1

## References
- [HTML security report](<https://firewall.lpm.dev/npm/@kdrrr/overcast/v/0.0.15>)
- [Repository](<https://github.com/kdr/overcast>)
- [Homepage](<https://github.com/kdr/overcast#readme>)
- [Issues](<https://github.com/kdr/overcast/issues>)
