Reference
Privacy
Envidence is built around one rule: evidence stays on the machine that produced it. There is no account, cloud sync, telemetry, analytics, remote error reporting, or LLM call.
The CLI and dashboard do not contact a remote service. Network activity can only happen in two cases: a command you run with evd watch uses the network, or evd rollback --apply runs a package manager that downloads something.
The local store
<store>/
config.json settings, retention, and the per-store salt
db.sqlite snapshots, runs, cases, baselines, rollbacks, events
objects/ compressed snapshot and config blobs
logs/ local operational logsThe default location is %LOCALAPPDATA%\Envidence on Windows and $XDG_DATA_HOME/envidence or ~/.local/share/envidence on macOS and Linux. Use --store or ENVIDENCE_HOME to choose a different directory. See Configuration.
A report created with evd report is a separate HTML file. Reports are self-contained and have no remote assets.
What a snapshot can contain
| Data | Examples |
|---|---|
| Host identity | Hostname, username, OS, build, architecture, timezone, uptime, clock. |
| Environment | User, machine, and effective variable names and values. |
| PATH | Entries, order, duplicates, and missing directories. |
| Tools and runtimes | Node, npm, Python, Rust, .NET, Go, Java, PowerShell, Git, and others. |
| Global packages | npm, pip, cargo, dotnet, and VS Code packages. Optional winget, choco, and scoop. |
| Services and startup | Service names, state, start mode, executable paths, startup entries, and scheduled tasks. |
| Network | Listening ports, owning processes, DNS, proxy settings, and hosts entries. |
| Config files | Selected Git, npm, Cargo, shell, editor, and tool files. Content is redacted and hashed. |
| Disks, time, WSL | Capacity, free space, clock, and distribution names and state. |
| Project metadata | Manifests, lockfile hashes, scripts, dependency names, environment key names, references, likely ports, Compose services, and Git branch and commit details. |
Environment values and secret-like names
Envidence stores variable names and, for ordinary variables, values. Values whose names look secret-like are handled differently:
- The raw value is not stored.
- A salted SHA-256 hash is stored so changes can still be detected.
- A short masked preview is stored for recognition. Values longer than four characters show the first two and last two characters. Shorter values show
****. - The salt is generated per store in
config.json.
The name check is heuristic. It catches forms such as TOKEN, SECRET, PASSWORD, API_KEY, AUTH, CREDENTIAL, PRIVATE_KEY, SESSION, and COOKIE. A secret stored in a variable with an ordinary name is not automatically hashed. Known token shapes and URL credentials are stripped from reports, but the original snapshot value may remain in the store.
Use a secret manager
Config files
Only a fixed candidate set is read: Git config, .npmrc, Cargo config, shell profiles, .editorconfig, pip config, VS Code user settings and keybindings, the hosts file, and a handful of project-local tool configs. This is not a general file crawler.
For a readable config file up to 256 KiB, secret-looking assignment lines are replaced, known token shapes are stripped, the redacted text is stored as a gzipped blob, and a hash of the original file is stored. Files that needed redaction are marked restorable: false.
Binary files and files over 256 KiB are hashed but their content is not stored. SSH private keys, cloud credential directories, browser profiles, cookies, and keychains are not collector candidates.
Project scanning
Project collection is scoped to the current project root. It stores manifest and lockfile hashes, package dependency names and scripts, environment variable key names, environment variable references and line numbers, likely ports, Compose services, and config hashes. It does not store source file contents.
The scan skips node_modules, .git, dist, build, and other dependency or output directories. It does not read personal document folders or browser profile data.
Command output
evd watch stores the command, its arguments, exit code, timestamps, and bounded tails of stdout and stderr. Output can contain paths, usernames, internal hostnames, or secrets printed by the command. Known token shapes are removed by report redaction. If you do not want output retained, use the default bounded capture and do not pass --capture-output.
Closing a case does not delete the underlying run. Commands that print secrets should not be run under evd watch unless you accept that risk.
Network
- No telemetry endpoint, crash reporter, update check, analytics SDK, CDN, remote font, or remote image.
- No LLM or network-based inference.
- No account or login from the CLI.
evd report --openandevd uiopen local browser pages.evd rollback --applymay run package managers, with their own network and lifecycle scripts.
Retention and deletion
The default policy keeps 50 snapshots and snapshots younger than 30 days. Pins, baselines, snapshots referenced by runs or cases, and safety snapshots are protected.
evd prune
evd prune --keep 30 --days 14 --yesTo delete the entire local evidence store:
# Windows, project-local store
Remove-Item -Recurse -Force ./.envidence
# Windows, default store
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\Envidence"# macOS and Linux
rm -rf ./.envidence
rm -rf "${XDG_DATA_HOME:-$HOME/.local/share}/envidence"Deleting the store is irreversible and removes the evidence needed for evd why, evd case show, and rollback. Delete generated reports separately.
Sharing a report
Use standard or strict redaction before sharing:
evd report --case CASE-... --out case.html --redact strictnone is for local viewing. It keeps paths, host and user names, project identifiers, and non-secret values. Even with none, secret-marked values and recognized token shapes are redacted, but that is not a guarantee that the report contains no sensitive information.
Read Security before sharing a report outside your machine.