# quelltest npm privacy: offline by design

> The quelltest npm package sends no code anywhere and makes no network calls. What each command reads and writes, what verify copies, and what the llm hook runs.

Canonical page: https://quelltest.com/docs/npm/privacy

The quelltest npm package runs entirely on your machine: it makes no network requests, has no telemetry, and sends no code to any service. This page lists what each command reads, writes and runs, so you can judge it for a private repository or a regulated environment. The only code that can reach the network is code you supply yourself: your tests, your `--command`, or the module you pass to `--llm`.

## Does quelltest send my code anywhere?

No. The source of the package contains no HTTP, socket or DNS usage. It uses `child_process` in exactly two places: to call `git` (for `--diff` and `gate`) and to run your tests (for `verify` and `generate --verify`). The MCP server talks to its client over stdin and stdout only.

Network is involved only when you fetch the package itself: `npm install` and the first `npx -y quelltest mcp` download it from the npm registry.

## What does each command read and write?

| Command | Reads | Writes |
| --- | --- | --- |
| `find`, `score` | Source files (`.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`), a coverage file, git history for `--diff` | Nothing except standard output. SARIF and JSON go to standard output; you redirect them. |
| `generate` | Same as `find` | With `--write`: test files and `.todo.md` notes under `tests/quelltest/` (or `--destination`). |
| `verify` | The test and source files, and a copy of the project | A temporary copy of the project in your OS temp folder, removed afterwards; `--handoff FILE` if given. |
| `gate` | Test files in the working tree and their versions at the merge-base (through `git show`) | Nothing. |
| `mocks` | Test and source files, the examples file | Nothing. |
| `mcp` | What the agent asks for through `find`, `verify` and `gate` | Nothing by itself. |

## What does verify copy?

By default `verify` copies the package folder that contains the test and the source into a temporary directory, links `node_modules` instead of copying it, runs your tests there, and deletes the copy. The copy skips `node_modules`, `.git`, `coverage`, `dist`, `build`, `.next`, `.cache` and `.turbo`, but it does include other files in the folder, such as `.env` files, while the run lasts. If a child process still holds the folder after a timeout, deletion is best effort and the operating system cleans the temp folder later. Your real source and test files are not written; if the project is too large to copy it falls back to in-place mutation with a backup, always restored in a `finally` block.

Handoff files and SARIF files contain code excerpts and file paths. Treat them like source when you upload them as CI artifacts.

## What does the --llm hook do?

`generate --llm MODULE` loads an ES module you provide and calls its default export for findings the rules cannot handle. quelltest passes it the finding, the source of the function, an import path, the runner and the export information, and expects a test as a string. That module runs in the same process with your privileges; quelltest sends nothing itself, but if your module calls a model API, the function source goes wherever you send it. The returned test must still parse, pass the security gate, pass on the original code and fail on a source mutant, or it is discarded. Do not pass `--llm` and nothing of this happens.

## What does the security gate on generated tests do?

Generated and hook-supplied tests are parsed and rejected if they import anything other than the unit under test (a relative path) and an assertion or test library (`node:test`, `node:assert`, `assert`, `vitest`, `@jest/globals`), use dynamic imports, touch `process`, `global` or `module`, call `eval` or `Function`, use the network, or use `globalThis` (except the `fetch` stub pattern, which is always restored). This is defence in depth, not a sandbox. When you run `verify`, you run your tests with your permissions, as with `npm test`.

## What runs through my shell?

Only `verify --command`, which is yours. The test path reaches it through an environment variable (`QUELL_TEST`), not through string interpolation. Without `--command`, runners are started directly with Node, with no shell.

## How do I report a security problem?

Privately, through GitHub private vulnerability reporting on the `quelltest-npm` repository or at security@quelltest.com. Running your own tests or `--command` executing your code is expected behaviour, not a vulnerability.

The Python package has its own privacy model, including an opt-in LLM fallback and a cloud connector: see [LLM providers](https://quelltest.com/docs/configuration/llm-providers.md) and [connector privacy](https://quelltest.com/docs/connector/privacy.md).
