Docs · Privacy
Privacy
Your prompts, replies, keys and accounts go only to the providers you use; magpie has no server of its own in that path. This page lists everything magpie sends by itself, beside those requests, and every switch that stops it. It is written from the code, which is linked in each section.
| What | Where to | Off by default? | How to stop it |
|---|---|---|---|
| The daily count | PostHog (us.i.posthog.com) | On in releases; never in builds from source | Settings → Privacy, DO_NOT_TRACK=1 |
| Update checks, release notes, the partner list, icons | usemagpie.ai | On | noAutoUpdate for update checks; the rest are needed by the app |
| Model catalog and exchange rate | models.dev, open.er-api.com | On | Not switchable; nothing of yours is sent |
| OTLP export | A collector you name | Off | Leave it off |
The daily count
Once a day (UTC), a running release of magpie (the app, or magpie serve) sends one batch to PostHog, so we know how many people use it and which agents, providers and models to look after first. It is sent at start and then looked at every hour; a day already sent is skipped. Builds from source never send it.
The batch has one magpie active event with:
- a random id made up on your computer (32 hex characters, tied to nothing about you or the machine), sent as
distinct_id; - magpie’s version,
kind(apporserve), your system ($os) and architecture; - how many agents, providers and models it is used with, and how many routing groups (left out when you turn off sharing what you use).
Unless you turn that part off, one magpie uses event follows for each agent, provider and model, by magpie’s own ids only (at most 50 of each):
- agents connected to magpie:
claude,codex. A WSL distro or an omp profile name is cut off (omp). - providers that are on: a preset’s id (
deepseek), a subscription’s (codex,copilot), a known community plugin’s (plugin:kiro). A provider you added yourself is onlycustom; any other plugin onlyplugin. - models the connected agents are set to, as provider id and vendor model id (
deepseek/deepseek-v4). On a key’s provider, a model id that models.dev doesn’t list (a local model, a fine-tune) is only<provider>/other; a model on your own provider iscustom; a routing group isgroup.
With them go magpie partner events: for each partner listed first in the add sheet, by its id, how many times on a day that has ended the sheet showed it, its row was opened, its key page was opened, and a provider was added from it (what: shown, opened, keys, added; at most 20 a day each, 5 adds). Counts only, never a provider of your own.
Every event carries $process_person_profile: false, so PostHog keeps no person profile for the id. No names, base URLs, accounts, keys, prompts, replies or usage are sent. A whole batch looks like this:
{
"api_key": "phc_nyDyYyrUTRGvNq5U7FBesCyM2j4GdKeqGp8ko7DBerTC",
"batch": [
{
"event": "magpie active",
"distinct_id": "3f9c…(32 hex)",
"timestamp": "2026-10-13T08:00:00Z",
"properties": {
"version": "0.1.1190", "kind": "app", "$os": "Mac OS X", "arch": "arm64",
"agents": 2, "providers": 3, "models": 2, "groups": 1,
"$process_person_profile": false, "distinct_id": "3f9c…"
}
},
{ "event": "magpie uses", "distinct_id": "3f9c…", "timestamp": "2026-10-13T08:00:00Z",
"properties": { "kind": "agent", "id": "claude", "$process_person_profile": false, "distinct_id": "3f9c…" } },
{ "event": "magpie uses", "properties": { "kind": "provider", "id": "custom", … } },
{ "event": "magpie uses", "properties": { "kind": "model", "id": "deepseek/deepseek-v4", … } },
{ "event": "magpie partner", "timestamp": "2026-10-12T12:00:00Z",
"properties": { "id": "<partner id>", "what": "shown", "count": 3, "day": "2026-10-12", … } }
]
}
The api_key is the project’s PostHog key; it can only send events, not read them. The code is internal/stats and partner_events.go.
Turning it off
Each of these switches stops part or all of it:
- Settings → Privacy → Count me as a user off, or
"noStats": trueinsettings.jsonstops the whole daily count. DO_NOT_TRACK=1orMAGPIE_NO_STATS=1in magpie’s environment (any value but empty,0orfalse) stops the whole daily count, whatever the settings say.- Settings → Privacy → Share the agents, providers and models I use off, or
"noUsageStats": trueleaves out themagpie usesandmagpie partnerevents and the counts inmagpie active; the id, version and system are still sent. Partner counts stop being kept too. - Settings → About → Automatic updates off, or
"noAutoUpdate": truestops magpie askingusemagpie.aifor a newer version by itself (it asks every 6 hours otherwise). This is not part of the count.
A change in Settings takes effect at the next hourly look; no restart is needed. settings.json sits in magpie’s folder (see below):
{
"noStats": true,
"noUsageStats": true,
"noAutoUpdate": true
}
MAGPIE_STATS_HOST sends the count to another host instead (it is for testing, and also makes a build from source send).
Files on your computer
| File | What it is |
|---|---|
install-id | The random id, made the first time the count is sent |
stats-sent | The last day (UTC) the count went, so a day is sent once |
partner-counts.json (in the cache folder) | Partner counts not yet sent, at most 14 days |
install-id and stats-sent are in magpie’s folder: ~/.config/magpie on macOS and Linux, %USERPROFILE%\.config\magpie on Windows, $XDG_CONFIG_HOME/magpie when that is set, and the data folder of a portable magpie. partner-counts.json is in ~/.cache/magpie ($XDG_CACHE_HOME/magpie, or cache in a portable magpie’s data folder). You can delete any of them: a deleted install-id is replaced by a new random one at the next send, so you are counted as a new user; with the count off, none of them is written again.
What usemagpie.ai sees
magpie asks its own site for a few things, whatever the privacy settings say, as any app asks its update server. None of these requests carries the install id or an account.
/api/latest: the update feed, every 6 hours unlessnoAutoUpdateis on, with?lang=for the notes in your language./api/notesgives What’s new after an update./api/partners: the add sheet’s partner list, every 6 hours. One fetch in ten is counted as amagpie partners fetchevent, with the country Cloudflare gives, while a partner is listed./go/<partner>/siteand/go/<partner>/keys: a partner’s website and key-page links, opened in your browser, are counted (the partner, which link, a region, a country) asmagpie partner gobefore you are sent on./api/icon?url=…: icons named by a plugin, an import link or the library are fetched through it, so their hosts see Cloudflare’s address, not yours. The worker passes the picture on and counts and keeps nothing.
The site’s own pages (these docs, the home page) carry Cloudflare Web Analytics, which counts page views without cookies. The app doesn’t load it. The code is site/worker.js.
Public lists magpie fetches
To price and name models magpie fetches the models.dev catalog (models.dev/api.json), and for prices in your currency the USD exchange rate from open.er-api.com (kept 12 hours). Plugins and their updates come from the npm registry, and the library’s items from GitHub. These are plain downloads of public data: nothing about you, your providers or your usage is sent, though, as with any request, those hosts see your IP address (or your proxy’s). magpie also asks each of your providers for your allowance and model list, with your own key or sign-in; Settings → Allowances → Allowance reads → When I ask limits those to when you ask.
OTLP export
magpie can export each gateway request to an OpenTelemetry collector of yours (Langfuse, for example). It is off by default, and goes only to the endpoint you set, never to us. When on, it sends per-request spans: agent, provider, model, token counts, status, timing and estimated cost. Optional switches add metrics, local agent conversations, and the request and reply bodies (secrets masked). Turn it on in Settings → Observability, or for magpie serve with MAGPIE_OTEL_ENABLED, MAGPIE_OTEL_ENDPOINT, MAGPIE_OTEL_HEADERS, MAGPIE_OTEL_METRICS, MAGPIE_OTEL_SESSIONS, MAGPIE_OTEL_BODIES and MAGPIE_OTEL_BODIES_WHOLE. An endpoint alone doesn’t turn it on. The reference has the details.
Why the count is on
magpie works with dozens of agents and providers, and is maintained by a small team. The daily count is how we know which of them people actually use, so they are kept working first. It is on in releases because counts from those who turn it on would be too few to tell that. In exchange it is kept small: a random id, built-in ids, numbers; one switch or DO_NOT_TRACK=1 turns it off, builds from source never send it, and this page lists everything that goes.