Agents run local-first on machines you control. Secrets sit in the Keychain, not in our database. Remote control rides an end-to-end encrypted relay (or your own tailnet). Multi-account is config-isolated. Shared links are server-redacted. Transcripts can be crypto-shredded. Audit logs keep a hash-only trail. On BYOK, Continuum is not a markup proxy.
code + agents on your hosts
relay sees envelopes, not bytes
tokens never in plaintext files
hash-only JSONL on the host
Sessions spawn on a Mac daemon or an enrolled device: your laptop, a Hetzner box, your own cloud account. Continuum orchestrates; it doesn’t become the place your tree lives. The local daemon is the trust root by design. Compromising it compromises everything, and compromising any other tier does not.
Worktrees, PTYs, and agent CLIs stay on that host. Controllers (phone, web, desktop) send commands; they don’t hold the sandbox. The daemon’s listener only accepts peers from loopback and the Tailscale CGNAT ranges, every endpoint requires a bearer token, and non-loopback callers are additionally identity-checked against the tailnet, failing closed if that check errors rather than waving the request through.
Provider CLIs are treated as sandboxed children, not as parts of Continuum. Each one owns its own auth state and its own network egress; Continuum does not proxy or inspect their traffic. If you would rather add a second wall, agents run fine inside a container or on a remote box over SSH, and the control surfaces don’t change.
claude · primary••••••••••••
claude · work••••••••••••
openrouter · byok••••••••••••Provider tokens and OAuth material live in the OS Keychain, with a separate item per account when you run more than one subscription. Config roots hold non-secret state. The multi-account store intentionally stores no secrets, which is also why a corrupted store can never take your default account away: primaries are seeded in memory and never written to that file at all.
Isolation is per config directory, not a swapped HOME. Continuum sets the provider’s own config variable for the account you pinned and leaves HOME alone, because overriding it broke git, ssh, and gh inside worktrees. Before each spawn the environment is scrubbed of inherited credential variables across every provider prefix, and the account’s own secrets are injected after the scrub, so a variable planted in your shell cannot bleed into a child agent.
Pin resolution fails closed. An unknown pin, a provider that cannot be config-isolated, or a second Claude account with no stored token all refuse to spawn rather than quietly falling back to your primary subscription and billing the wrong plan. Log lines name the account, never its config path. Pair with managed env vars for repo secrets that never leave the host, and see where the CLI keeps its own settings.
Paired devices talk through an end-to-end encrypted relay (XChaCha20-Poly1305). The service can see envelope lengths and routing, not prompts, not diffs, not tokens. It never holds the session key, so “trust us not to look” is not part of the design. Prefer zero third parties? Use Tailscale and MagicDNS on your own tailnet and the relay is out of the path entirely.
Every remote write path is rate-limited on the host: roughly one send per second and one configuration swap per five seconds per session, answered with a structured 429 rather than a silent drop. Every one of them is audit-logged. See pairing for the account mesh.
Pairing runs an X25519 exchange between the two devices and derives channel keys with HKDF-SHA256, salted with the session id and given a different info string per channel so a leak in one cannot open the other. Frames are sealed with XChaCha20-Poly1305 and random 24-byte nonces.
The QR exchange uses fresh X25519 key pairs, but paired devices retain the derived traffic key and bearer secrets in the system Keychain so they can reconnect. Account-mesh hosts also keep a durable X25519 identity under owner-only file permissions. Those controls protect key material at rest, but they do not provide forward secrecy after an endpoint compromise: someone who later obtains the retained key material may be able to decrypt traffic they captured earlier.
Replay is blocked by a monotonic counter per direction, and the protocol version is bound into the key derivation, so a downgrade attempt derives a different key and simply fails to authenticate. Each side gets its own bearer token; the service stores only their hashes and compares them in constant time, so a screenshotted QR authorizes at most one side and expires fast. Revoking a pairing drops both, closes the socket, and tombstones the session id.
Some agents don’t touch the filesystem themselves; they ask the client to read and write on their behalf. Continuum does not obey blindly. The file capability is off by default and is only advertised for a repository you have explicitly trusted. An untrusted repository is told the capability does not exist, and every request is refused.
When it is on, every path is canonicalized before any disk touch: .. segments collapsed and symlinks fully resolved, with the resolved result required to sit under the repository root. That defeats traversal, absolute-path escape, and a symlink planted inside the repo pointing at /etc. The handler then operates on the resolved path it was handed rather than re-resolving the agent’s string, which is what closes the gap between check and use.
Reads are byte-capped so a hostile request cannot pin the host, command policy default-denies privilege escalation and catastrophic patterns like recursive deletes and pipe-to-shell, and each operation is logged with a hash of the path rather than the path itself. If you want the same reasoning applied to the agents themselves, read AI coding agent security and how permission modes work.
Bring your own subscriptions and API keys. Continuum drives each provider through its own login path. We don’t sit in the middle reselling tokens at a markup. Optional hosted inference is a separate, explicit product line, and picking it is a decision you make in the model picker rather than something that happens to you.
Multi-account stays config-isolated: work and personal never share a credential store. Wrong pins fail closed instead of billing the primary by accident. See multi-account.
This is the structural difference from a hosted agent product, where your repository is uploaded to the vendor’s sandbox and the vendor holds the model relationship. Compare with Devin, or with a single-vendor CLI in Continuum vs Codex.
your plans · your keys · your hosts
only if you choose Continuum models
Short answers here, long answers in the docs.
No. Code and agent sandboxes stay on hosts you enroll. Cloud paths cover account mesh, optional relay, optional hosted inference, and features you opt into (like share links you publish).
No. Payloads are end-to-end encrypted. The relay routes ciphertext. For zero third-party transport, put controllers and hosts on Tailscale and prefer that path.
Hash-oriented records of sensitive actions (sends, model swaps, mobile commands), not a full transcript dump. Logs rotate by size and age on the host, and live on the host, not in a service you have to trust.
Revoke the pairing. Both bearer tokens are dropped, any open socket is closed, and the session id is tombstoned so it can’t be reused. Re-pairing generates fresh keys and a fresh session; there is no transcript continuity carried across, which is the point. Pairing material also expires on its own after fifteen minutes, so a QR you left on a screen yesterday is already dead.
Not through Continuum. When an agent asks the client to read or write on its behalf, the capability is only advertised for a repository you trusted, and every path is canonicalized with symlinks resolved before the resolved result is required to sit under the repository root. Requests outside it are refused and logged. What the agent’s own process does with its own file access is governed by that CLI’s permission settings, and by the sandbox you run it in.
They’re unlisted with high-entropy IDs and server-side redaction. Anyone with the link can read the published snapshot, so treat links like secrets and shred when you’re done.
Install on a machine you control and pair the rest of the mesh.