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:

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 toWhatWhen
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.

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

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.

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

6. Your choices and rights

Because your data stays on your devices, most rights are exercised directly rather than by asking us:

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.