For AI agents: this page as Markdown · llms.txt · JSON Schema

Privacy

Rerail runs on your machine. Each claim below names the file in this repository that implements it.

What Rerail never does

Rerail sends nothing about you or your work unless you add a remote, and calls no hosted model.

Details and source files

What goes over the network

Only npm traffic to your configured registry, carrying package names and versions; rule evaluation needs no network.

npm runs for updates, setup, listing and adding packs, and SQLite rebuilds (src/runtime/npm.ts).

When npm runs
When What npm fetches
rerail update, rerail update check Latest @neralabs/rerail on your channel, then that version
rerail setup from a non-managed copy (e.g. npx) The managed @neralabs/rerail install
Set-up, rerail start, rerail packs list, rerail packs recommend Every rule pack, matched to your repository locally; nothing about it is sent
rerail packs add, packs confirmed in set-up The chosen packs
SQLite binding fails its load check npm rebuild better-sqlite3; may fetch a prebuilt binary or Node headers through that package's own tooling

Two internal-testing features also send to endpoints you supply.

Remote sink and signed customer profiles

Your coding agent's provider

Steers reach your agent's model provider through your agent, never through Rerail.

Rerail steers by adding messages to the agent's session. The agent's next request sends that session to its provider, under the provider's terms. Steers can hold paths, line numbers, rule messages quoting matched code, suggested fixes and your rules' text.

What Rerail keeps on your machine

Rerail stores rules, history and every agent event unencrypted, in ~/.rerail/, ~/.cache/rerail/ and each repository's .rerail/sessions/.

Storage locations
Where What
~/.rerail/ (or $RERAIL_HOME) rerail.sqlite: rules, repositories, sessions, audits, findings, steer feedback, and all agent events (prompts, replies, tool inputs and outputs). Also daemon state and log, consent answer, rule packs, managed installs
~/.cache/rerail/ content-v1.sqlite: compressed source files Rerail read, with syntax trees and check results
<your repository>/.rerail/sessions/ One ledger per session: events and pre-edit file text. Its .gitignore of * keeps it out of Git

Steer feedback is the agent's one-line reason for ignoring a steer (rerail feedback). It is sent nowhere; rerail feedback list prints it for an issue.

Secrets

Rerail redacts recognized secrets before they reach disk and skips output of secret-like files; unknown formats can still be stored.

rerail scrub redacts older history, then rewrites the database file.

How redaction works

Redaction covers stored events, session ledgers, findings and daemon.log. Rules and steers still see the original text in memory (src/engine/secret-scrub.ts).

Hashes, UUIDs, lockfile integrity strings and code are kept. Secrets in unknown formats can still be stored. rerail scrub covers the database, its pre-update copy, recorded checkouts' ledgers and daemon.log.

Secret-like files

Secret-like file names match SENSITIVE_FILE_NAMES in src/engine/path-boundary.ts (.env, id_rsa, secrets.yaml) or sit in folders like .ssh. Hidden names alone, like .github/, are not.

Permissions

Rerail's files are private to your user: directories 0700, files 0600.

What is covered and repaired

This covers ~/.rerail/, ~/.cache/rerail/, the databases, daemon state, capability and log files, and ledgers. SQLite side files inherit the database's mode.

On macOS and Linux, Rerail removes group and other access from these when it opens one your user owns, fixing old releases or loose umasks. Covered: home and cache folders, rerail.sqlite* (pre-update copies too), content-v1.sqlite*, harness.sqlite*, daemon.json, access-token, daemon.log. It never follows symlinks or touches other users' files.

Rerail refuses to write session records through a symlink at .rerail, .rerail/sessions or anything below.

Why, and the .gitignore exception

A repository controls its own .rerail/ folder, so this stops it redirecting your records. Rerail names the path in the error and log; the agent continues without Rerail.

Exception: a symlinked or edited .rerail/sessions/.gitignore is overwritten with *, so a committed !* cannot make git add -A commit your records.

The local dashboard and API

The daemon serves the dashboard, API and an MCP endpoint on loopback, behind an access capability.

Status codes, capability scope and remote exposure

The browser keeps the capability in that page's storage, unreadable by other sites or local servers.

This blocks other users and sandboxed programs that reach localhost from reading your history or changing your rules. It does not block programs running as you; they can read the file.

--allow-remote or --public-host exposes the daemon with a fresh capability per start. It serves HTTPS with --tls-cert and --tls-key, and refuses plain HTTP without --insecure-http. Rerail's clients verify the certificate's recorded fingerprint before sending the capability.

Support bundles

rerail support-bundle writes one local file for an issue, only when run, and sends nothing (src/cli/support-bundle.ts).

It leaves out prompts, replies, tool data, source code and rule text. Read it before attaching (what it holds); issues are public.

What the bundle holds

Other absolute paths remain, patterns miss some secrets, and steers can quote code.

/rerail-bug-report reads the file with your agent, so it reaches the agent's provider (above). To find an existing issue, it searches GitHub with a shipped rule's id or error words, never your rule ids, paths or project names. Nothing is filed until you submit the form or ask it to.

Deleting your data

Three commands remove data, each reaching further.

Exactly what each command removes

Questions: open an issue. Report vulnerabilities per SECURITY.md.