---
canonical: "https://firewall.lpm.dev/npm/@speranto/speranto"
markdown: "https://firewall.lpm.dev/npm/@speranto/speranto/report.md"
package: "@speranto/speranto"
report_status: "published"
title: "@speranto/speranto@0.4.0 npm security report"
verdict: "policy_finding"
version: "0.4.0"
---

# @speranto/speranto@0.4.0 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
**Soft block: AI-agent control surface** — Warn by default; block when configured. Agent tools reading those files are directed to follow package-provided guidance in future work.

- **Verdict:** AI-agent control-surface policy finding
- **Product-default install policy:** Warn by default; block when configured
- **Firewall policy:** Warn by default
- **Public report status:** Published
- **Threat category:** Soft block: AI-agent control surface
- **Selected version:** 0.4.0
- **Selected version is latest:** No
- **Analysis source:** AI Security Review (lpm-firewall-ai)

This finding concerns changes to an AI agent's instructions or configuration without explicit user action. It does not by itself establish malware intent. The CLI warns by default and blocks when configured for this policy.

AI assessment: malicious; recommendation: publish block. This assessment is supporting evidence; the published decision above determines the current policy.

The package performs unconsented postinstall mutation of consumer AI-agent instruction files, directing agents to follow package-provided guidance. This is a concrete AI-agent control-surface change and meets the blocking policy.

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Recorded final verdict:** Malicious
- **Recorded analysis confidence:** 98.0%
- **Started:** 2026-10-12T11:12:51.607Z
- **Finished:** 2026-10-12T11:13:27.164Z
- **Download time:** 1007 ms
- **Static scan time:** 278 ms
- **AI review time:** 34270 ms
- **Total time:** 35557 ms

The recorded confidence comes from the underlying analysis. Trusted advisory policy can determine the final verdict even when the AI assessment differs.

## Security analysis

### Published attack-surface review

- **Summary:** The postinstall hook alters consumer AI-agent instruction files and installs a package guide without a separate user command.

- **Trigger:** Installing the package as a direct dependency in a project with a detected project root triggers postinstall.

- **Impact:** Agent tools reading those files are directed to follow package-provided guidance in future work.

- **Evidence paths:** package.json, scripts/install-agent-docs.mjs, dist/agent-docs.mjs

- **Review source:** ai\_review

- **Reviewed:** 2026-10-12T11:13:27.164Z

### AI review details

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

- **Mechanism:** The installer calls the agent-docs manager, which adds or replaces a Speranto block in AGENTS.md or CLAUDE.md and writes managed guide files in the consumer project.

- **Attack narrative:** During package installation, the postinstall hook can add a managed Speranto instruction block to the consumer’s AGENTS.md or CLAUDE.md and install a guide under .agents/speranto. This changes AI-agent control instructions without requiring a separate setup command.

- **Rationale:** The package performs unconsented postinstall mutation of consumer AI-agent instruction files, directing agents to follow package-provided guidance. This is a concrete AI-agent control-surface change and meets the blocking policy.

- **Files touched:** AGENTS.md, CLAUDE.md, .claude/CLAUDE.md, .agents/speranto/guide.md, .agents/speranto/manifest.json

### Review decision

- **Verdict:** Malicious

- **Confidence:** 98.0%

- **Recommended action:** publish\_block

- **Intent class:** Dangerous Capability

- **False-positive risk:** Low

- **Evidence for policy risk:** package.json runs the agent-docs installer from postinstall., The installer invokes the manager with postinstall enabled for a consumer project that directly depends on the package., The manager targets consumer AGENTS.md and CLAUDE.md instruction files., It inserts a managed instruction directing agents to read and follow the package guide, then writes changed instruction files and the guide into the consumer project.

- **Evidence against:** The inserted block is bounded by Speranto-specific markers and its instruction concerns localization and Speranto configuration., The installer skips the package’s own project and can be disabled with SPERANTO\_SKIP\_AGENT\_DOCS.

## Affected versions and remediation

This report applies to @speranto/speranto@0.4.0.

- Avoid installing @speranto/speranto@0.4.0. Remove it from direct dependencies and check your lockfile for transitive copies.
- Choose an independently verified alternative or release. This report does not establish that other versions are safe.
- If this version ran, investigate the affected machine and build environment. Rotate credentials it could access and rebuild from a trusted environment.

## Public findings

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

Package defines install-time lifecycle scripts.

Public source snippet (untrusted):

```json
scripts.postinstall = node ./scripts/install-agent-docs.mjs
```

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

Package declares npm scripts.

### 3. Medium: Dynamic Require
- **Category:** Source
- **Confidence:** 75.0%
- **Path:** dist/index.mjs
- **Public source:** [View source](<https://unpkg.com/@speranto/speranto@0.4.0/dist/index.mjs>)

Package source references dynamic require/import behavior.

Public source snippet (untrusted):

```javascript
L20: //#region \0rolldown/runtime.js
L21: var __require = /* #__PURE__ */ (() => createRequire(import.meta.url))();
L22: //#endregion
```

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

Package source references network APIs.

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

Package source references environment variables.

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

Package source references filesystem APIs.

### 7. Critical: Ai Agent Control Hijack
- **Category:** Source
- **Confidence:** 90.0%
- **Path:** dist/agent-docs.mjs
- **Public source:** [View source](<https://unpkg.com/@speranto/speranto@0.4.0/dist/agent-docs.mjs>)

Source creates an unconsented AI-agent control surface through install-time mutation or a default unauthenticated remote skill channel.

Public source snippet (untrusted):

```javascript
Install-time code directly mutates a foreign AI-agent control surface:
L60: await ensureNoSymlinks(projectRoot, targetPath);
L61: await mkdir(dirname(targetPath), { recursive: true });
L62: const temporaryPath = `${targetPath}.${process.pid}.${randomUUID()}.tmp`;
...
L151: async function selectInstructionPaths(projectRoot) {
L152: const agentsPath = join(projectRoot, "AGENTS.md");
L153: const claudePaths = [join(projectRoot, "CLAUDE.md"), join(projectRoot, ".claude", "CLAUDE.md")];
L154: const agentsExists = await pathExists(agentsPath);
...
L191: async function removeAgentDocs(projectRoot) {
L192: const managedDirectory = join(projectRoot, ".agents", "speranto");
L193: const installedManifest = await readOptionalJSON(join(managedDirectory, "manifest.json"));
L194: const candidatePaths = /
```

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

Package source contains high-entropy string patterns.

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

Package source contains URL literals.

### 10. 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.

### 11. High: Suspicious Lifecycle Evidence
- **Category:** Manifest
- **Confidence:** 98.0%
- **Path:** package.json
- **Public source:** [View source](<https://unpkg.com/@speranto/speranto@0.4.0/package.json>)

package.json runs the agent-docs installer from postinstall.

Public source snippet (untrusted):

```json
"postinstall": "node ./scripts/install-agent-docs.mjs",
    "link": "bun run build && bun link",
    "sync:version": "bun run scripts/version.ts sync",
    "bump:version": "bun run
```

### 12. High: Suspicious Lifecycle Evidence
- **Category:** Manifest
- **Confidence:** 98.0%
- **Path:** scripts/install-agent-docs.mjs
- **Public source:** [View source](<https://unpkg.com/@speranto/speranto@0.4.0/scripts/install-agent-docs.mjs>)

The installer invokes the manager with postinstall enabled for a consumer project that directly depends on the package.

Public source snippet (untrusted):

```javascript
const dependencyGroups = [
        projectManifest.dependencies,
        projectManifest.devDependencies,
        projectManifest.optionalDependencies,
      ]
      if (
        dependencyGroups.some(
          (dependencies) => dependencies && '@speranto/speranto' in dependencies,
        )
```

## Dependencies and install lifecycle
- **Lifecycle scripts present:** Yes
- **Published lifecycle scripts:** postinstall
- **Dependencies:** 13
- **Optional dependencies:** 0
- **Peer dependencies:** 0
- **Development dependencies:** 7
- **Published dependency-graph edges:** 13

### Published dependency entries
- @babel/generator ^8.0.5 (Dependency)
- @babel/parser ^8.0.5 (Dependency)
- @babel/traverse ^8.0.5 (Dependency)
- @babel/types ^8.0.5 (Dependency)
- commander ^15.0.0 (Dependency)
- glob ^13.0.6 (Dependency)
- openai ^7.15.0 (Dependency)
- pg ^8.23.0 (Dependency)
- remark-frontmatter ^5.0.0 (Dependency)
- remark-parse ^11.0.0 (Dependency)
- remark-stringify ^11.0.0 (Dependency)
- sql.js ^1.14.2 (Dependency)
- unified ^11.0.5 (Dependency)

## Package metadata
- **Package:** @speranto/speranto
- **Ecosystem:** npm
- **Version:** 0.4.0
- **License:** MIT
- **Version published:** 2026-09-22T08:21:19.589Z
- **Package first seen:** 2026-09-18T16:03:35.378Z
- **Package last seen:** 2026-10-12T11:13:50.888Z
- **Known versions:** 4
- **Latest version:** 0.4.3
- **Appeal under review:** No
- **Description:** A quick and simple machine translation tool for i18n in webapps. Translate JSON, JS/TS, Markdown files and database content using OpenAI, Mistral, or Ollama.
- **Author:** Imre Gelens
- **Artifact files:** 9
- **Artifact unpacked size:** 132,346 bytes
- **Artifact signatures:** 2
- **Attestations:** Yes

## References
- [HTML security report](<https://firewall.lpm.dev/npm/@speranto/speranto>)
- [Repository](<https://github.com/ImreC/speranto.git>)
- [Homepage](<https://github.com/ImreC/speranto>)
- [Issues](<https://github.com/ImreC/speranto/issues>)
