Security and privacy
Thrum lets AI coding agents message each other and keep shared context in your repository. You talk to one coordinator agent, and it directs the rest. A background program called the daemon, which Thrum runs on your machine, connects them. This page says what Thrum runs on your machine, what leaves it, and how each kind of traffic is protected. It states only what we have checked. Where the answer depends on how you set Thrum up, it says so.
Pro and the licence check
Pro is Thrum's paid plan. The Thrum pricing page lists everything it adds.
Activating a machine is optional. The licence check below applies only to machines you have activated, on any plan. A machine you never activate does not make this check.
The short version
- The daemon, command line and web UI run on your machines.
- Core messaging stores content on your machines and talks to the peers and Git remotes you configure. It does not need a server run by Thrum to carry your message content.
- A machine you have activated, on any plan, checks in with my.thrum.team once a day and when the daemon starts. The check sends a credential Thrum issued and a random installation ID. It does not send code, file contents, prompts, agent messages or transcripts.
- A machine with no Pro licence skips the check. Unless you ask it to contact us, for example to activate it, the only thing it sends us is a one-time install count. What it sends and how to stop it.
- Thrum sends nothing about a repository until you ask it to register it for Pro free for public repos. It then sends that repository's web address, ID and latest commit when you register it, and when you activate this machine in that repository.
- Thrum works offline until the licence's expiry date.
- Email, Telegram and iPhone push are optional. You turn each one on yourself. When you do, some data goes to the service you picked.
Thrum Free needs no account. Install Thrum free.
Words used on this page
- Daemon: the background program Thrum runs on your machine.
- Web UI: the page in your browser, on your machine, where you talk to your coordinator.
- Peer: another machine you have paired with yours.
- Git remote: a repository on a server, such as GitHub, that your local repository pushes to.
- Listener: a connection point that waits for other programs or machines to connect.
- Tailscale: a private network service that links your own machines.
- Embedded mode: a setting that makes Tailscale run inside Thrum, not as a separate program on your machine.
- TLS: the standard encryption that websites use, the padlock in your browser.
- Certificate: a machine's proof of who it is, which the other side checks.
How data flows
What runs on your machine
The daemon, the command line and the web UI run on your machines. Plugins connect your coding agents to Thrum messaging and saved context. The AI model behind your agent does not run on your machine. Your agent talks to its model provider as it always did, straight from your machine, never through Thrum.
Where your data lives
Messages are stored in a local database inside your repository's .thrum folder.
Saved notes and context are stored locally too. Transcripts are kept in a database on each
machine.
Data can move when you set it up to. A peer can ask the machine that owns saved context or transcripts to send them. Optional Git sync pushes to your own repository's Git remote. The background Git sync is off by default, and syncing saved context is a separate step with its own push.
Connections from other machines
The daemon starts connection points for use on your own machine. By default it also tries to start a listener for your peers on your machine's Tailscale address, so paired machines can reach it. If there is no usable Tailscale address, it carries on without one.
There is one control. Ask your coordinator to set tailscale.mode to
embedded, or run thrum config set tailscale.mode embedded. In
embedded mode Thrum does not open that listener on your machine's own Tailscale address.
Tailscale runs inside Thrum and starts when you configure peers. We do not document a setting
that turns off every connection point. The email and Telegram bridges stay off until you
configure them.
What leaves your machine
To Thrum: the licence check
A machine with no Pro licence skips the check. Unless you ask it to contact us, for example to activate it, the only thing it sends us is a one-time install count. What it sends and how to stop it. A licensed machine, one you have activated on any plan, makes the calls below.
| Call | When | What it sends |
|---|---|---|
| Licence check | Once a day and when the daemon starts, on activated machines. | A credential Thrum issued and a random installation ID. The ID is not derived from your hardware. No repository information. |
| Device activation | One time per machine. You then click Activate in your browser. |
The installation ID and a device-class label, which reads peer. Also a repository's ID and web address, only if you add them to thrum license activate yourself.
|
| Public repository check |
Only when you register a repository for
Pro free for public repos with thrum license oss-register (the command keeps the name OSS; any public repository qualifies), and also when you later activate this machine in that repository.
|
The repository's web address with credentials removed, its ID and a commit hash, with the machine's credential and installation ID. A private or ineligible address is used for the check and not stored. |
Those are the only fields these three calls send. Code, file contents, prompts, agent messages and transcripts are not among them. Services you turn on yourself are a separate matter. They are covered below.
Your IP address is visible to us at the network layer. We use it only for rate limiting, admin access control and abuse protection. It is not stored on your account. Cloudflare keeps it in security logs for up to 7 days.
Offline use, expiry and deactivation
Your licence is a signed token. Thrum verifies it on your machine, so it needs no connection to use it. If a daily check is missed, nothing changes. Thrum keeps working until the licence's expiry date. A company seat's licence runs to the end of the company's contract.
- Expiry: Thrum warns you 7 days, 2 days and on the day your licence expires, at most once a day.
- Lapsed subscription: nothing is switched off remotely before the licence's own expiry date.
- After the licence expires: Thrum falls back to the Free edition. Your data and setup stay as they are. Only the Pro features stop.
- Removed machine: the account owner removes a machine from the account page at my.thrum.team, which deactivates it. Thrum tells you at that machine's next daily check. Removing it stops renewal. It does not pull back a licence already on the machine, which keeps working until its own expiry date and then falls back to the Free edition. Removing it frees one of your allowed machines, and the same machine can be activated again later by signing in.
- Idle machines: a machine that has not checked in for 30 days is marked inactive, which frees one of your allowed machines. It can be activated again the same way.
- Activation: each machine is activated once: you click Activate in your browser, signed in to your account. The machine is then recorded against the account that owns it. On an individual plan, only the account holder can activate a machine. A company licence is set up with Thrum: a colleague who signs in with a verified email address at the company's domain takes a seat when they activate, until the seats are used up. A seat belongs to a person, not a machine. There are no team admin roles.
To services you choose
- Your AI provider. Model traffic goes straight from your machine to your provider. It does not go through Thrum.
- Email and Telegram. If you turn on a bridge, the messages it carries go to that service. Email notifications work the same way: each message addressed to you goes to your mail server. See the email bridge and the Telegram bridge.
- iPhone push. If you turn it on, Thrum sends device registration and routing details to deliver alerts. The send has no field for message text.
- Embedding and analysis integrations. If you enable a remote one, content can go to the provider you selected.
What my.thrum.team keeps
my.thrum.team is the account and licence site. It runs on Hetzner in Hillsboro, Oregon, in the United States, behind Cloudflare. It also uses other service providers, so this page is not a full list of who handles your account data. The account site's Privacy Policy is the document to rely on. It keeps these records:
- Your account: name, email and an optional postal address. Kept while the account is active, then removed or made anonymous when you delete it.
- Your subscription: its status and plan tier. It holds no card data. When buying opens, our payment provider will take the payment and issue receipts for us.
- Each machine: its installation ID, device label and owning account, a hash of its refresh credential (never the credential itself), and its activation and last-seen times and status. A licence record for each machine holds the plan tier and the issue and expiry times. Both are kept as records of service provided.
- Public repository grants: the repository's address linked to the installation, kept while the grant is active.
- iPhone push, only if you turn it on: push token, machine pairing, dates and a record for each alert delivered. Deleted within 30 days, or at once when you opt out.
- Agreement records: which version you accepted, when, and a hash of the text. We keep these indefinitely by design, and your email stays tied to them.
The account site's logs record no IP addresses, email addresses or browser details. They hold errors, notes of what the site did, such as handling a payment notice or finishing an activation, and performance data, such as how long the site took to answer each request. The logs are deleted after 30 days at most, and the performance data after two days at most. The site sets only a session cookie and short-lived security cookies. my.thrum.team loads no third-party fonts or styles. Its sign-in, sign-up and password-reset pages use Cloudflare Turnstile to check that you're not a bot. Its public pages and your account page use Plausible Analytics, without cookies, to count page views, how far people scroll and how long they stay on a page. Pages that carry codes or tokens, and the pages for signing in with Google or GitHub, activating a machine, setting a new password, cancelling and checkout results, the install count page and error pages, never load it.
Encryption, one transport at a time
There is no single answer, because it depends on which path your data takes. Here is each one. If you use Thrum on one machine and haven't turned on email or Telegram, only the first row applies to you.
| Path | What protects it | What to know |
|---|---|---|
| On your machine | The command line reaches the daemon through a connection that only your user account can use (a Unix socket). | The web UI talks to the daemon over localhost, your machine's connection to itself, without encryption (plain HTTP and WebSocket, no TLS). |
| Tailscale | Tailscale encrypts the connection, and Thrum adds its own TLS on top. Paired machines check each other's certificates against the ones saved when you paired them. A machine that hasn't paired that way is refused, never sent plain text. | Pairing, upgrading a machine paired with an older version of Thrum, and a certificate change in progress rely on Tailscale's encryption alone. |
| Local network (LAN) | Connections between paired machines always use TLS 1.3, and there's no setting to turn it off. Each machine checks the other's certificate against the one saved when you paired them (a pinned certificate). The first time two machines pair, each one trusts the certificate it receives. | A machine with no saved certificate is refused, never sent plain text. Plain text is limited to a lookup that returns only a machine's ID and certificate name, and to two rare cases we know of: upgrading a machine that was paired with an older version of Thrum, and a certificate change in progress. In those two cases, the key the machines use to reach each other crosses the network without encryption. |
| SSH | SSH tunnels encrypt traffic between machines. Thrum checks the remote machine against its list of machines it already knows (a managed known-hosts file). | This applies to machines you connect over SSH. |
| Email bridge | Mail goes over an encrypted connection to the mail server you choose, and that server's certificate is checked. | Your mail service can read the messages, and Thrum adds no message-level encryption. We make no promise about later hops between mail servers. |
| Email notifications | Mail goes over an encrypted connection to the mail server you choose, and that server's certificate is checked. | Your mail server can read the messages, and Thrum adds no message-level encryption. |
| Telegram bridge | Messages go through Telegram's bot service over HTTPS, the same encryption websites use. | Telegram can read the message text, and Thrum adds no message-level encryption. |
Telemetry and analytics
The answer is different for each category, so here they are one by one.
- The Thrum software. We found no external product analytics or crash-reporting service when we searched the source. That search was bounded. It does not prove that every dependency or request has been checked. Thrum keeps operational metrics on your own machine.
- The licence check. Licensed machines check in once a day, as described above.
-
Install count.
Thrum sends us at most one install count per machine, and you can turn it off. The details:
- The first time you accept the licence agreement on a machine that has never been activated for Pro, Thrum can send us one install count: a random ID, the Thrum version and your operating system. It's sent once per machine, ever, and never retried.
- On a US time zone, Thrum tells you it will send it. On any other time zone, it asks you first and sends nothing unless you say yes.
- We delete the ID after 30 days. The ID is kept and linked to your account only if that machine gets a paid or complimentary Pro licence, or the free Pro grant for a public repository, within those 30 days. A free trial doesn't count.
- To turn it off, set
DO_NOT_TRACK=1orTHRUM_NO_INSTALL_PING=1before you accept.DO_NOT_TRACKis a common setting that many tools honour, andTHRUM_NO_INSTALL_PINGis Thrum's own. In Thrum, both turn off only the install count. - To delete an ID later, go to my.thrum.team/install-count.
thrum daemon statusshows your ID. Copies may stay in backups for up to 70 days.
- iPhone push (optional). If you turn it on, it sends device registration and routing details, as described above.
- This website. thrum.team uses Plausible Analytics, without cookies. It counts page views, how far people scroll and how long they stay on a page, and clicks on links to other sites, file downloads and form submissions (never what you typed).
Report a security problem
If you find a security problem in Thrum, email leon@thrum.team.
What this page does not answer yet
This page describes how Thrum behaves. It makes no promise about the other services you connect, such as your mail service, Telegram or your AI provider. What they do with your data is up to them. The account site's Privacy Policy covers what my.thrum.team collects and why.
We do not yet have a checked answer to this question, so this page does not give one:
- How to roll Thrum out across a team of machines.
To pair machines, see Work across multiple machines. Only pair machines you own and trust. For what each part does, see How Thrum works.