Telemetry

As of v0.9.2, Ollama Herd sends an anonymous daily usage summary. This page lists every field, and it was published before the feature existed.

Status: shipped in v0.9.2, 16 August 2026. It is on by default. This page went up months before the code did, so that anyone could argue with the contract while changing it was still cheap, and it changes in the same release as the behaviour rather than after it.

Why we want this at all

Ollama Herd is a free, open-source hobby project. Nobody is selling your data because nobody is selling anything. But we are genuinely flying blind: we do not know how many people run it, which models they actually use, or which errors they actually hit. That means we guess at what to fix, and we guess badly.

A small amount of usage data makes the project better for everyone who uses it. And we intend to give it straight back: aggregate statistics published publicly, so the community that generated the numbers can see them too.

It will be on by default, and anonymous

Anonymous usage reporting will be enabled by default, with a notice on first start telling you it is on and how to turn it off. One line in your shell turns it off permanently:

FLEET_NODE_TELEMETRY=false

Why on by default? Because when it is off by default, roughly nobody turns it on, and the handful who do are not a representative herd. We would end up guessing. Homebrew and a lot of other open-source tools land in the same place for the same reason.

On by default does not mean public. Left alone, your install is a number in a total. No name, no row, nothing anyone can point at and say that one is yours. Giving your herd a name is a separate thing you have to go and do, and we are never going to do it for you.

We said opt-in here first and then changed our minds, before writing any of the code. Nothing has ever been sent by any release, so nobody got surprised. Leaving the old wording up would have been tidier for us and worse for you.

One herd, not one machine

A fleet reports once, from the router, not once per Mac. The router is the only part that knows your three Macs are one herd, so it is the part that sends. That fixes a counting problem: a 3-Mac fleet used to look like three separate people, and "active installs" quietly meant "active machines".

Inside that one report, each machine gets a line of its own, so we can tell one big herd from three small ones. Totals like machine count and memory are added up from those lines rather than sent as a number we have to take on faith.

Exactly what would be sent

One request per day, containing a daily summary of the previous day. Nothing streams in real time, and nothing is sent per request.

FieldExampleWhy
install_ida random UUIDCount active herds and retention without knowing who you are
agent_version0.9.2Know which versions are in use before changing or deprecating anything
day2026-08-14Day granularity only, never timestamps
modelqwen3.6:27bWhich models people actually run, so testing targets reality
request / token counts412Rough scale of real-world use
latency summaryp50, p95Whether routing is helping on real hardware
error counts by categorycontext_too_long: 3Which failures are common enough to prioritize

Then one line per machine in the herd:

FieldExampleWhy
device_ida1b2c3d4e5f6a7b8Tell your Macs apart from each other. Not a hostname: see below
chipApple M3 UltraWhich Apple Silicon people actually run on
memory_gb512The single number that decides which models fit
cores32Rough sense of the hardware mix
ollama_version0.32.13Whether we can require a newer Ollama without stranding people
mlx_version0.31.3Same question for MLX. Absent if you do not have it installed
requests7494Whether routing spreads work or piles it on one Mac

Those runtime versions are the honest reason this exists. "Can we require Ollama 0.32.7?" is a question we currently answer by guessing, and guessing wrong means breaking someone's setup for no reason.

Error categories are a fixed list (context_too_long, vram_exceeded, connection_error, and similar). Raw error text never leaves your machine, because raw errors contain paths, model names, and occasionally prompt fragments.

What is never sent

  • Prompts and completions. Not sampled, not hashed, not truncated. Never.
  • Your hostname. Machines get named things like johns-macbook. A random install_id is used instead, and there is a test that fails the build if a hostname ever appears in a payload.
  • Anything a machine could be recognized by. The per-machine device_id is a hash of your herd's random install_id plus the node name, cut to 16 characters. It cannot be turned back into a name, and because your herd's own random id is mixed in, the same Mac in someone else's herd produces a completely different value. It identifies a machine within your herd and is meaningless outside it. Our server rejects anything that is not 16 hex characters, so a bug on the sending side gets an error rather than quietly filing your hostname.
  • File paths, IP-derived identity, account details. There are no accounts.
  • Raw error strings, per above.
  • Request tags, unless separately enabled.

This is enforced structurally, not by good intentions: the payload builder filters against an explicit allow-list of field names, and the test suite fails if a contributor adds a field without adding it to that list and to the test.

Nicknames, and the leaderboard

You can give your herd a name. That is the one thing that ever shows up in public, it is entirely your call, and we will tell you it is going public before you set it.

Names are capped at 30 characters and limited to letters, numbers, spaces and - _ . A longer name is shortened and anything outside that set is dropped, rather than the whole day's report being thrown away over it. Your usage data is the part that matters; the name is decoration.

Most of what we publish back is aggregate: total installs, which models are popular, common error categories. Anonymous installs only ever appear inside those totals.

Then there is the leaderboard, which is just for fun. Biggest herd, most machines, that sort of thing. It ranks on hardware rather than how much you use it, partly because anyone can point curl at our endpoint and claim a billion requests, and partly because "I bought more Macs" is a funnier thing to compete over. Names appear as soon as you set one, and we remove anything that turns out to be unpleasant. None of it is verified, so enjoy it in that spirit.

Those hardware totals are added up from your machines' individual lines, so the total always matches the parts. A Mac you retire stops reporting and leaves the total within 30 days, without you having to tell us.

Not interested? Do nothing. Staying anonymous is the default and the leaderboard will never know you exist.

How to say no, and how to change your mind

Set this before starting a node and nothing is ever sent, including the first run:

FLEET_NODE_TELEMETRY=false

The install_id lives in a plain file under ~/.fleet-manager/ on whichever machine runs the router. Delete it and you are a new herd; delete it and opt out and you are simply gone. Because every device_id is derived from that file, deleting it also makes every machine in the herd unrecognizable, which is the useful side effect of salting them with it. We will also honor deletion by install_id on request, which is the practical upside of a random identifier: it is easy to find and easy to remove.

How long it is kept

Daily rows, both per-herd and per-machine, for 365 days, then aggregated and the raw rows dropped. Aggregates carry no herd or machine identifier.

Why we say pseudonymous, not anonymous

A random UUID that persists across runs is not truly anonymous, because it links one day's data to the next. Under European data-protection guidance that makes it pseudonymous data, and calling it anonymous would be a convenient overstatement. So we do not. We hold no way to connect an install_id to a person, and we do not want one.

Tell us if this is wrong

This page exists before the code so it can be argued with. If a field here should not be collected, if the opt-in flow is unclear, or if something looks like a mistake, please open an issue. It is far easier to change a plan than a shipped default.

See also the privacy policy, which describes what the website and this project collect today.