Privacy Policy
Effective 14 October 2026 · Covers the Termpolis desktop app, the Termpolis Remote phone app, and the pairing relay.
The short version. Termpolis runs on your computer. Your code, your terminal sessions and the memory it builds from them stay there. We do not operate an account system, we have no server that stores your work, and we cannot read what you do with it. The phone app is a remote control for the desktop app, end-to-end encrypted, and it stores nothing but its keys, a record of each desktop it is paired with and whether your relay subscription is active.
1. Who we are, and how to reach us
Termpolis is built by CodeDev LLC. The fastest way to reach us about anything in this policy is GitHub issues. For something you would rather not raise in public, write to [email protected] — the same address given on the phone app's support page, and the same person either way.
2. The desktop app
What stays on your computer
Everything you work on. Termpolis is a terminal: it runs agents on your machine, against your files, using the model account you are already signed in to. The following live in your user data directory and are never uploaded by us:
- Terminal sessions, scrollback and command history.
- The shared memory ("Mneme") built from your sessions and code — its text, its embeddings and its graph. The memory store itself is encrypted at rest with AES-256-GCM, under a key protected by your operating system's keychain; where there is no keychain, or on a computer still syncing memory through a folder an earlier version set up (1.53 can’t turn sync on), it can be plain text. Its link graph and its corrections log (the text of any amended memory, and why) are not encrypted, and memories that versions before 1.53 moved to the archive of older, little-used ones can still be plain text; since 1.53 the archive is written under the same key as the store.
- Your settings, workspaces, shell configuration and keybindings.
- Any credentials the CLI agents you use store for themselves. Termpolis does not read them and does not copy them anywhere.
- The original text of whatever Termpolis's token compression shortened, so an agent can ask for it back. This store is capped at 200 MB and, unlike the memory, is not encrypted.
- If you turn on Linked machines, a job history (
linked-jobs.jsonl, andlinked-jobs.prev.jsonlonce it passes 2 MiB): one line when another of your computers starts a job on this one, one when the job ends and one when a request is refused (more refusals of that computer within the same minute share one more line, with their count), with that computer's name, the agent, read-only or edit, the folder, the first line of the prompt (at most 80 characters, with anything that might be a credential taken out), the credential rules it matched, how the job ended and why a request was refused. Never the rest of the prompt, or the answer.
Termpolis also changes your coding agents' own settings, but only if you connect
them. The first step of the first-run tour shows exactly what it would change for each
agent installed on your computer, and nothing is written until you finish or skip the
tour; both of its boxes start ticked, and you can clear either. Versions before 1.49
connected them without asking, so after an update from one they stay connected until
you answer the one-time question Termpolis then asks. Connected, Termpolis
adds its local MCP server to the Claude Code, Codex and Gemini settings (for Gemini, the
Antigravity CLI's ~/.gemini/config/mcp_config.json and the older Gemini CLI's
settings.json). In Claude Code and the Antigravity CLI it also lets its read-only
and memory tools run without asking (tools that run commands or type into a terminal still
ask), in Codex its memory tools, and in Claude Code and Codex it
marks folders you open the agent in as trusted — never your home folder, a folder
above it, a drive root or the root of a network share. The second box adds a Claude Code start-up
hook that loads your project memory whenever a Claude Code session starts, including
sessions started outside Termpolis. Settings → Agent Integration lists every change
and lets you connect or disconnect at any time. Disconnect removes
what Termpolis wrote, and so do uninstalling on Windows and removing the Linux .deb package. Folder trust that a version
before 1.49 added can't be told apart from trust you gave yourself, so that stays.
What leaves your computer, and to whom
| Goes to | What | When |
|---|---|---|
| Your model provider (Anthropic, OpenAI, Google) | The prompts, files and terminal context you send an agent — under your account and their terms, exactly as if you ran their CLI yourself. | Whenever you use an agent. We are not in this path and never see it. |
| Anthropic, through a proxy on your own computer | Claude Code's requests, after a compression proxy running on your machine has shortened tool results and pasted images. What Claude asked a tool to do (a command, a file edit) is never rewritten. | By default, for Claude Code sessions Termpolis launches. It forwards only to
api.anthropic.com, steps aside if you already route Claude Code
yourself, and one switch in Settings → Token Savings turns it off. We never see
this traffic either. |
| GitHub | A version check, and the release you download. | On update checks and downloads. |
| Groq | The audio you dictate with voice input, sent under your Groq API key and their terms to be transcribed. | Only if you connect a Groq key in Settings → Voice and dictate. We are not in this path. |
| Us (Sentry) | Crash reports (the error message from a crash can also be filed automatically as an issue in the public Termpolis GitHub repository); and, separately, one anonymous launch event a day carrying the app version. | Only what you turn on. Two separate switches, both off by default. |
Our pairing relay (relay.termpolis.com, unless you set your own in Settings → Remote) |
End-to-end encrypted frames: what your phone and this computer send each other (Termpolis Remote), and job prompts and answers between two of your computers (Linked machines). The relay cannot read them; section 4 lists what it does see. | Only while Remote or Linked machines is switched on in Settings. Both are off by default. |
Telemetry, if you enable it
There are two switches, Send crash reports and Send anonymous usage statistics. Both are off until you tick them — on the last step of the first-run tour, in the one-time question an update from an older version asks, or in Settings → General → Privacy, where either can be changed at any time. If Termpolis cannot find a choice you made, both stay off and it asks again.
- Crash reports carry the error, its stack trace and the app
events just before it, the app version and basic system details (OS, Electron
version, CPU, memory, screen size). The same switch covers update failures, unclean
exits and swarm errors. Before a report is sent, your home-folder paths become
<home>, your user name becomes<user>, and the machine name, your locale and your time zone are removed. A report never includes a memory dump, a screenshot, local variables, the source code around the error or console output. - Usage statistics are one "launched" event a day that carries only the app version, so we can count active installs. Short app events (that a swarm started, say) are recorded only while this is on, and leave your computer only inside a crash report.
When a switch is off, its reporting path is a no-op — not "buffered", not "sampled" — and nothing saved up is sent after you turn it off.
3. Termpolis Remote (the phone app)
Termpolis Remote is a remote control for a Termpolis desktop that is already running. It runs no agent, holds no memory and holds no model credentials. On its own it does nothing at all.
What the phone stores
- Its own private key, in the operating system's keystore (iOS Keychain / Android Keystore), marked as available only while the device is unlocked and not backed up to another device.
- One pairing record per desktop: that desktop's public key, when it was paired, a session identifier, the relay address, a device id and the name shown for it in the app.
A phone can be paired with several desktops at once — a work machine and a home one, say. Each pairing has its own private key and its own record, written to the keystore separately, so no two desktops see the same phone identity and forgetting one leaves the rest untouched.
The phone also keeps, in the same keystore, the App Store's last answer on whether your relay subscription is active, so the app can still let you in when the App Store cannot be reached. That is the whole list. Terminal output reaches the phone encrypted, is held in memory while the app is open, and is never written to disk. Unpairing erases the key and the record for that desktop, and it works whether or not the relay is reachable.
The camera
Used for one thing: scanning the pairing code your desktop displays. Frames are decoded on the device and discarded. Nothing from the camera is stored or transmitted.
What the phone app collects
Nothing. There is no account, no analytics SDK, no crash reporter, no advertising identifier, and the only server of ours that the app talks to is the pairing relay described below, which cannot read what it forwards. The dependency list is short on purpose and is checked by a test on every push, so this claim cannot drift quietly.
4. The pairing relay
The phone and the desktop (or, with Linked machines, two of your computers) are usually on different networks, so they meet at a relay we run. The relay is deliberately built so that trusting it is not required.
- Every message is encrypted end to end between your phone and your desktop, or between two linked computers. The keys are derived when you pair, from both devices' identities, and never exist anywhere else. The relay does not hold them and cannot derive them.
- What the relay can see: the IP addresses of both ends, which end is the desktop, when each connects, an opaque room identifier, each frame's unencrypted header (its type, public keys while pairing and connecting, a counter), the size of each message, and its timing. Not the contents, not your terminal, not what you typed.
- Cloudflare, which hosts the relay, keeps connection metadata (IP addresses, times and room ids) in its request logs. The relay itself writes no logs and stores no messages. It forwards a frame to the other end of the room and forgets it. A room with nobody in it is discarded.
- Transport is TLS, and the payload inside it is sealed separately. Both layers would have to fail to expose anything.
When you pair, both screens show the same eight words. They are derived from the two device keys, so they match only if nothing is sitting in the middle. Comparing them takes a couple of seconds. A phone pairs by scanning a code shown on your desktop's screen, which carries the desktop's public key and a one-time pairing secret, so treat that code like a password for the 90 seconds it is valid.
5. What we never do
- We do not sell or share personal information, in the sense the CCPA and CPRA use those words. There is nothing to sell: we do not hold it.
- We do not use your code, prompts or sessions to train anything.
- We do not track you across apps or websites, and the app requests no tracking permission because it has no use for one.
- We do not run an advertising network or embed one.
6. Your choices and rights
Because your data stays on your devices, most rights are exercised directly rather than by asking us:
- Erase everything on the phone: forget each desktop in Settings, which destroys its key and record. Deleting the app is not a reliable way to erase them, because iOS can keep an app's Keychain items after it is deleted. Nothing in the app erases its cached answer on whether your relay subscription is active.
- Cut the phone off from one desktop: revoke the device in that desktop's Remote settings. Either end is enough — the channel cannot be re-opened without both. Any other desktops the phone is paired with are unaffected.
- Erase everything on the desktop: delete the app's user data directory (and, if you ever chose a memory sync folder, that folder too).
- Stop telemetry: Settings → General → Privacy has one switch for crash reports and one for usage statistics. Both are off by default.
- Turn the compression proxy off: untick Route new Claude Code sessions through the local compression proxy in Settings → Token Savings. New Claude Code sessions then go straight to Anthropic.
- Undo the agent connection: Disconnect in Settings → Agent Integration removes the changes Termpolis made to your coding agents' settings. Uninstalling on Windows or removing the Linux .deb does the same; on macOS, or with the AppImage, disconnect before you remove the app.
If you are in the EEA, the UK, California or another region with statutory data rights and you believe we hold something about you, write to us and we will answer. In almost every case the honest answer will be that we hold nothing, because the architecture does not give us anywhere to put it.
7. Children
Termpolis is a developer tool and is not directed to children under 13. We do not knowingly collect information from them, and there is no mechanism by which we could.
8. Security
The memory store is encrypted at rest with AES-256-GCM where the operating system provides a keychain (see section 2 for the exceptions); its link graph and corrections log are not, and memories archived by a version before 1.53 may not be. The remote channel uses X25519 key agreement, HKDF-SHA256 key derivation and ChaCha20-Poly1305 authenticated encryption, with the safety-word comparison above as the defence against a substituted key. The phone's private key sits in the platform keystore, not in application storage. The wire format is documented in the open, and the two independent implementations of it are tested against each other on every push.
No system is perfect. If you find a weakness, please tell us before you tell anyone else — [email protected], or GitHub issues if it is safe to say in public.
9. Changes to this policy
If this policy changes materially, the date at the top changes with it and the previous versions remain in this site's git history, so you can see exactly what changed and when.