Boundary
Privacy & Security Boundary
Praxis is local-first. Compilation runs entirely on your machine, and your source code never leaves it. This document states exactly what stays local, what leaves, and when — grounded in the actual behavior of the CLI, not aspirational policy.
1. The core boundary: your code stays local
praxis build is deterministic, offline, and uses no LLM (ADR-0005). It scans the
repo, extracts an evidence-cited knowledge graph, folds certified skills, and seals a
Company Brain artifact — all on your disk. Raw source is never uploaded, and no
third-party service sees it.
The Company Brain that results is a derivative: evidence-cited claims and certified skills with permalinks back to your source. It is not your source code.
2. What leaves your machine — and only when you ask
Nothing in the table below happens during praxis build. Each is triggered by an
explicit command or an explicit connector choice.
| Action | What is sent | Where | Trigger |
|---|---|---|---|
praxis update |
a GET for latest.txt (nothing about you is sent) |
the release index (eldrion.in/dist) |
running update — there is no background/periodic check |
praxis update (after you confirm) |
a pip install --upgrade against the index |
the release index | confirming the upgrade prompt |
praxis login |
your GitHub identity token | GitHub, then the praxis identity endpoint | running login; login --remote <url> additionally opens a gateway session |
praxis push / pull / connect --remote <url> |
the sealed brain artifact (claims + skills, not raw code) | your praxis gateway | explicit push/pull/remote connect |
praxis ask --connector openai|gemini --live |
your question text | that LLM provider | choosing a third-party connector and passing --live (without --live, ask calls nothing) |
| thread connectors (e.g. GitHub) | API requests to the forge you named | that forge | ingesting threads you configured |
Partner data rule (ADR-0006): private partner data must run deterministic-only or
local Ollama — never a third-party LLM API. praxis build honors this by design (no
LLM at all); the third-party connectors under ask are an explicit, opt-in choice for
public/non-sensitive queries.
3. Telemetry: local-only, never transmitted
Praxis records a few operational counters on your machine — how many builds you ran
and how many times an agent read a certified skill — plus the compiler/brain-health/runtime
structure the service defines. These are written to ~/.praxis/telemetry.json and never
leave the machine: there is no network path, no HTTP client, no endpoint. This is asserted
by a test that fails if any recording path opens a socket, not left to intent (ADR-0008).
No source code, no prompts, no file contents, no tokens, no identities ever collected.
This is stricter than the residency boundary in section 5: ADR-0006 lets the sealed brain cross on explicit push; telemetry crosses never.
Opt out — one authoritative switch, two ways to set it, both reading ~/.praxis/config.json:
praxis config set telemetry off # turn back on with: praxis config set telemetry on
or set PRAXIS_TELEMETRY=0 in the environment. When disabled, no counter is recorded and
~/.praxis/telemetry.json is not created.
4. Local storage
| Path | Contents |
|---|---|
<repo>/.praxis/config.toml |
workspace config (workspace name, default connector, repository path, thresholds) |
<repo>/.praxis/skills/ |
draft and certified skill markdown |
~/.praxis/config.json |
global config (praxis config set writes here) |
~/.praxis/brain/ |
the compiled Company Brain artifact |
~/.praxis/workspace/credentials.json |
GitHub token from login (POSIX 0600 where the OS supports it) |
~/.praxis/workspace/profile.json |
your local identity (name, email, device id) |
~/.praxis/cloud.json |
gateway session token, written by login --remote (only if you use the cloud) |
~/.praxis/skill_reads.jsonl |
one line per certified-skill read served over MCP |
PRAXIS_BRAIN_DIR overrides the brain location. Credentials and tokens live only in
environment variables or these local files — never checked into a repo, never embedded
in the brain artifact.
5. The sealed-artifact guarantee
praxis push publishes the sealed brain artifact to the gateway — the intended step
for cloud serving and team sharing. Note that it also removes the local brain directory
after a successful upload unless you pass --keep. The gateway serves it statelessly, runs no inference,
and never receives a raw repo. The boundary is that your source never leaves your
machine — not that the certified brain doesn't; publishing the brain is exactly how a team
serves the same certified skills to everyone. The seal (a content hash over the artifact)
is verified on load, so a served skill is provably the one that was certified. The gateway
is self-hostable for privacy-max deployments (in which case the brain stays on your own
infrastructure).
6. What this document does not claim
In the spirit of the project's honesty gate, this is an engineering description of current behavior — not a legal or compliance certification. It makes no claim of GDPR, SOC 2, HIPAA, or any formal certification, and no claim of encryption-at-rest beyond your own filesystem's. Treat the boundary above as the accurate, verifiable one.