Thrum

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

Thrum Free needs no account. Install Thrum free.

Words used on this page

How data flows

Where Thrum data goes The Web UI, Daemon, Agents and stored files sit inside a box labelled Your machine. The Agents reach your AI provider directly. The Daemon makes a daily licence check with my.thrum.team on licensed machines. Dashed lines show optional parts: email and Telegram bridges, and paired machines. Licence check (licensed machines, daily) my.thrum.team Daily check, licensed machines only Your machine Your machine Web UI Web UI In your browser, on this machine Daemon Daemon The hub on your machine Agents Agents Your coding sessions Stored files Stored files Messages and notes, in your .thrum folder Your AI provider Your AI provider Agents reach it directly, not through Thrum Optional bridges Optional bridges Email and Telegram, off until you set up Optional paired machines Other machines Optional: paired machines you own
Solid lines are always there. Dashed lines are optional or apply only on a licensed machine. The Web UI, the daemon, your agents and the stored files sit on your machine.

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.

To services you choose

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:

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.

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:

To pair machines, see Work across multiple machines. Only pair machines you own and trust. For what each part does, see How Thrum works.