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.

WhatWhere toOff by default?How to stop it
The daily countPostHog (us.i.posthog.com)On in releases; never in builds from sourceSettings → Privacy, DO_NOT_TRACK=1
Update checks, release notes, the partner list, iconsusemagpie.aiOnnoAutoUpdate for update checks; the rest are needed by the app
Model catalog and exchange ratemodels.dev, open.er-api.comOnNot switchable; nothing of yours is sent
OTLP exportA collector you nameOffLeave 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:

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):

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:

POST https://us.i.posthog.com/batch/
{
  "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:

A change in Settings takes effect at the next hourly look; no restart is needed. settings.json sits in magpie’s folder (see below):

settings.json
{
  "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

FileWhat it is
install-idThe random id, made the first time the count is sent
stats-sentThe 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.

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.