Zephr

Governance / Privacy mode

Local mode:zero egress, no training.

Privacy mode is the whole product running against one SQLite file on your disk, behind a loopback-only gateway, with no account and no sync. This page states exactly what Zephr reads, what it stores, what leaves, and — where a control is specified but not yet built — says so at the same size as everything else.

Shipped · local modeNo account required (local)SQLite + sqlite-vecADR-027 · zero training
The boundary

Local mode is a different product path from managed cloud.

Local mode needs no account, is zero-egress, and never trains on your content. Managed cloud is a separate, opt-in path with live signup. Toggle the two paths below — the map re-reads the same facts, it does not hide either one.

Local modeA schematic of Local mode. The same evidence-ledger semantics and signed Continuity Format apply on both sides.your device127.0.0.1SQLite+ sqlite-vecnothing leaves

Local mode

SQLite + sqlite-vec on your disk

  • Loopback-only gateway (127.0.0.1)
  • No account, telemetry, or deferred sync
  • Content never used to train a model (ADR-027)

The same evidence-ledger semantics and signed Continuity Format apply on both sides.

Two product paths, one data shape — a schematic, not a live topology.

The security review

Twelve questions, answered in order.

These are the questions a security reviewer asks before installing a tool that reads a codebase. Each answer states what is true, and places any limitation beside the claim rather than in a footnote.

  1. 01

    What does it read?

    Only what an agent or a human explicitly hands to a Zephr tool call, the file paths, line ranges, and content digests for the anchors a claim cites, and the Git metadata (commit SHAs, branch, worktree identity) for the admitted worktree. The project boundary is approved once, and nothing outside it is read.

    Zephr does not silently read arbitrary files, your terminal history, clipboard contents, or secret values. There is no background indexer in local mode — if no tool call was made, nothing was read. Fleet holds references to secrets, never the values themselves.

  2. 02

    What does it store, and where?

    Local evidence and semantic data live in a single SQLite file on your disk, default path ~/.local/share/zephr/zephr.sqlite, with sqlite-vec for vector search. The store also creates the standard -wal and -shm sidecars at runtime.

    Managed cloud is a separate, opt-in path: there the same ledger shape lives in Postgres with pgvector. Signing key material is held locally at POSIX 0600, owner-checked, and exactly 32 bytes.

  3. 03

    What leaves the machine?

    Nothing leaves the machine on the local path.

    The local gateway binds to127.0.0.1 loopback only — it is not reachable from another host on your network. There is no telemetry beacon, no usage ping, no deferred sync queue draining later, and no account requirement on this path.

    The evidence ledger, source code, raw file paths, secret values, continuity payloads, and the signing key material that seals them all stay on the machine that produced them.

    The limitation sits beside the claim: Zephr’s zero-egress guarantee describes Zephr, not your coding agent. Claude Code, Cursor, Codex, or another host agent each talk to their own model provider, and whatever they send is governed by that provider’s terms, not by this page. Zephr not transmitting your ledger does not make your agent local.

  4. 04

    Is content used for training?

    No.

    Your content is never used to train a model. Zephr trains no models — there is no Zephr model to train — and every provider on the checked-in allowlist is qualified on contractual zero-training and zero-or-short-retention terms (ADR-027). A provider that trains on submitted content does not get on the list.

    The allowlist fails closed: a provider that is not on it receives nothing, returning a structured provider_unavailable or policy_denied refusal instead of silently falling back. The local embedding lane runs on-device and sends nothing out.

  5. 05

    Can it cross project boundaries?

    No. A connection admits exactly one installation, project, and worktree, once, before any tool call — and that binding is immutable for the connection’s lifetime. A claim recorded in one worktree is invisible to a session admitted into another.

    Foreign-scope reads are refused at the MCP transport before the tool executes, not filtered out after retrieval. Inclusion is the explicit act; exclusion is the default.

  6. 06

    Who holds the keys?

    In local mode, the Ed25519 signing key is generated on your machine and never transmitted. It is stored at POSIX 0600, owner-checked, exactly 32 bytes, and verifiable with zephr key-check without printing key bytes.

    There is no Zephr-held recovery copy, no escrow, and no second copy anywhere. The lost-key consequence sits beside the custody fact: a lost key is genuinely lost.

    Managed cloud is a separate, opt-in path with per-tenant envelope encryption, and signup is live at app.zephr.ai.

  7. 07

    How is a handoff verified?

    When you move an evidence bundle between tools or machines, Continuity Format seals it. The receiving side authenticates before it parses — the packet is proven intended for that installation before any of its content is interpreted.

    An Ed25519 source signature proves which pinned source signed the canonical payload; a destination-bound HMAC-SHA-256 proves the packet was intended for the receiving installation; manifest roots are recomputed from canonical bytes, never trusted from the packet’s own fields; and one-time consumption is enforced by an atomic ledger, so a replayed packet is rejected outright.

  8. 08

    How do export and erase work?

    Continuity export is available: the open continuity format means your ledger is machine-readable and portable, so leaving is a supported operation.

    The current deletion limitation sits directly beside it. Lifecycle uninstall removes the primary SQLite store file after a readiness check and an explicit confirmation. The full governed purge of WAL/SHM sidecars, temporary files, caches, staged exports, and OS-held key material remains incomplete according to docs/security/local-privacy-operations.md. Calling the current command full erasure would be a claim without an artifact.

  9. 09

    Can Zephr staff access local data?

    No — for local mode, as an architectural consequence rather than a policy promise. The file is on your disk, the gateway is loopback-only, and there is no account linking it to us. We never receive it, so there is nothing for staff to access.

    The same-UID process-isolation residual sits beside that fact: stock POSIX does not isolate two processes running as the same user, so another program running as you can reach the same files you can. It is an open residual, stated plainly.

  10. 10

    Which subprocessors receive local content?

    None, on the local path. The default embedding lane runs on-device and sends nothing out. There is no provider fan-out: a request goes to the one selected allowed provider, and provider events record the model, region, prompt digest, and policy decision — never the prompt or response content.

    Managed-cloud services are a separate, opt-in path. For the broader provider list, retention terms, and forbidden data classes, see /security and /privacy.

  11. 11

    What protects against poisoned memory?

    Four structural controls reduce the authority and propagation of injected text: provenance is required before a claim carries weight (a memory with no source is an unanchored opinion, not a fact); review state is a separate, attributable human step (capture never confers trust); contradiction surfaces rather than silently resolving (recall returns the contradiction, not the newer or more confident-sounding text); and foreign-scope exclusion keeps a poisoned repository from reaching across a binding boundary.

    These controls reduce authority and propagation; they do not claim immunity from prompt injection. Model-assisted injection containment is a precondition for T3 judgement in ADR-Z-07, and T3 is not built — there is no shipped control there and no measured resistance to report.

  12. 12

    What can be excluded?

    Project and worktree boundaries: only approved projects are admitted, and trust rules are configured per worktree (capture limits, required provenance, permitted review states, contradiction handling). A path you never bound is unreachable.

    Secret-value exclusion: Fleet holds references, never values, so secret material never enters the ledger. Hosted processing is optional: the local on-device embedding lane is the default, and hosted embedding providers stay disabled until an organisation explicitly opts in.

Local mode needs no account. Managed cloud is a separate, live path.

Local mode runs the whole product against one SQLite file on your disk with the network removed. Managed cloud — the same ledger shape, hosted — is a separate, opt-in path, and signup is live right now.