Privacy
What Lumi sends, what it never sends, and what stays on your Mac.
Lumi is a keyboard utility: it watches every keystroke on the machine, reads the text in front of your caret, and can be handed your clipboard and your selection. So it is worth saying plainly where any of that goes.
None of it leaves your Mac. Two things reach the network at all — the updater, and usage data if you switch it on — and neither carries content.
Share usage data
General → Share usage data is a single switch, and it is off unless you turned it on. The first-run tour puts the question on a panel of its own with two choices and neither pre-selected, and will not move past it until one is picked — so reporting is never the result of a default nobody changed. Leaving by Skip or Escape is a no, and an install that predates the question stays off until somebody visits Settings.
What is sent
Counts and switch positions. One report a day, at most.
| About | What the report carries |
|---|---|
| Flows | how many exist, how many are switched on, how many the free plan is capping |
| Snippets | how many exist, and whether snippets are on |
| Shortcuts | how many bindings exist, and whether shortcuts are on |
| Features | whether the Hyper key and Fn are on, whether Lumi starts at login, which appearance |
| Plan | whether this copy is entitled to Pro — one bit |
| Build | Lumi's version and the macOS version |
| Country | two letters, resolved at the edge (below) |
What is never sent
- Content of any kind. A number of snippets, never a snippet. A number of bindings, never a combination. A number of flows, never a name.
- Nothing about your licence — no key, no order, no seat id, no email. The code that builds the report is never handed the licence at all, so there is nothing there to leak by accident; one bit reaches it and the caller worked that out.
- No profile. The report is a count from an installation, not a record about a person, and it says so to the analytics vendor explicitly.
Where it goes
Reports are posted to Lumi's own domain, not the analytics vendor's, and relayed from there. Two things follow, and both are the reason for the indirection:
- A desktop app cannot change a host it has already shipped. Anyone who never updates would keep talking to whatever was compiled in, for ever — so the vendor, the region, or the whole arrangement can change without stranding those copies.
- Your IP address stops at that edge. It is never sent by the app and never reaches the vendor; what is resolved from it there is a two-letter country code, added to the body, which is why a country can be reported at all without the address behind it. Vendor-side geolocation is switched off in the same request.
Turning it off
The switch is in General, one click, and it is deliberately not filed under an Advanced section — a consent that takes two clicks to find is a consent that is hard to withdraw.
Turning it off deletes the install id, so nothing left on disk ties this Mac to anything already sent. Turning it back on starts a new one.
A debug build never reports, whatever the switch says.
What stays on your Mac
Everything else, in a folder of Lumi's own under your Library. Your shortcuts, menus, snippets, flows, profiles, your settings, your licence and your expansion history are all written there, in plain files, and none of them is sent anywhere.
Three things about that are worth knowing:
- Expansion history is stored in plain text, which matters if you generate
passwords with
{{$randomPassword}}. The switch at the foot of Snippets → History stops the recording, and Clear history empties it. - A restore keeps a copy of what it replaced, which is a whole backup of your automations and is never encrypted. It carries no licence and no expansion history, and it stays on this Mac until you delete it — the restore sheet lists them, with a button to show them in Finder.
- A
{{$clipboardText}}expansion is never written to history, whatever the pasteboard says about itself — that is where one-time codes and session URLs end up, and Lumi cannot tell one from a copied paragraph. The same holds for a snippet script that callslumi.clipboardText(), whether or not any of it reached the answer, and its preview in the suggestion panel is left blank for the same reason.
Uninstalling does not remove that directory; see Uninstalling.
Translation
An extension can ask Lumi to translate text with the translator built into macOS, the one the Translate app uses. The text is translated on this Mac and never leaves it. The languages themselves are macOS's: it downloads them once, for every app, and only when you choose to — in its own prompt, or in System Settings. Apple says it may count which languages an app translates between, but never what was translated.
Dictionaries
An extension can ask Lumi to look a word up in the dictionaries built into macOS, the ones the Dictionary app shows. The word is looked up on this Mac and never leaves it. Lumi opens only the dictionaries you turned on in Dictionary › Settings, so a lookup never downloads one; Wikipedia, which the Dictionary app looks up online, is left out. On a Mac where no app has used a dictionary yet, the first lookup has macOS download its default dictionaries, as Look Up does.
Recordings
An extension with the keep-audio permission can record what it hears — the microphone, what your Mac plays, or both — and keep it as audio files. That is not AI: no model hears it, nothing is sent anywhere by Lumi, and Lumi's AI switches do not reach it. While anything records, Lumi's menu bar icon shows a dot and its menu has a row saying who is listening, with Stop.
A recording is the extension's own file, kept in its storage on this Mac, which Lumi encrypts — and the extension holds the sound itself: it can play it, save it where you choose, or, with the network permission, send it on. The review sheet says so before you install it. Uninstalling the extension deletes everything it stored, recordings included — its Uninstall sheet says how much that is.
AI
You choose where AI runs, under Settings → AI (see AI),
and an extension that declares ai can send text only there:
- On this Mac — Apple Intelligence, and models you run in Ollama or LM Studio. The text never leaves the Mac.
- Claude Code, on your own Claude plan. Lumi runs the
claudeyou signed in to, and the text goes to Anthropic as it would from Claude Code itself. Lumi never signs anyone in, and never reads Claude Code's sign-in. - A provider on your own key — Anthropic, OpenAI, Google and others. The text goes to that provider, on your key, and is billed by it. Keys stay in your Keychain, each one only ever sent to the address it was checked against, and no extension ever sees one.
Before an extension's text leaves the Mac, Lumi asks — naming the extension and where the text would go — unless you told it not to ask again for that extension; you can change that, or switch an extension's AI off, under Settings → AI. Only what the extension sends goes: its instructions and its text, never anything else of yours. Lumi keeps no copy of a request or an answer; it counts requests and tokens per provider per month, on this Mac, for the Usage page. The list of providers comes from lumikeys.app, signed, and is checked at most once a day while AI is on.
Things that touch the network
| What | When |
|---|---|
| The updater | on its own schedule, and when you press About → Check for updates |
| Usage data | once a day, only if you switched it on |
| Licence checks | at launch and on window focus, at most once a day, only if a licence is stored — see Pro |
| A feedback report | only when you send one |
An HTTP Request flow node | only when a flow you wrote and armed runs one |
| Fetching a backup from a link | only when you paste an address and press Fetch |
| A Web row icon | only when you press Use on an address in the icon picker. Local addresses are never fetched |
| AI | the provider list from lumikeys.app, at most once a day while AI is on; a provider you set up, when you or an extension asks it something — see AI |
Nothing else. Reading the clipboard, running a command and reading your selection are all local.
The full policy is on the privacy page.