Notchi

Privacy Policy

Last updated: September 10, 2026

The short version. With your own API key there is no account and no telemetry. Your clipboard, conversations and settings stay on your Mac, and your prompts go straight from your Mac to the AI provider you chose. nono, the model Notchi hosts, is the exception: its requests pass through our server, and we keep a record of each one (when, how many tokens, what it cost, which part of the app sent it) but not what you asked or what it answered (§15). Two features need real access to your Mac: reading your selection (§4) and running an agent in a folder you pick (§7). This website runs aggregate analytics (§14).

1Who we are

Notchi is a free, open-source macOS utility from Lofi Lab, a solo indie developer. Every claim on this page can be checked against the source at github.com/cyrus-cai/notchi. It's distributed by direct download and through GitHub, not the Mac App Store.

2What the app doesn't collect

With your own key or a CLI backend: no account, no sign-up, no email, no user or device ID, no fingerprinting. The app ships no analytics or telemetry, no crash reporting, no ad SDKs, and no third-party tracking libraries. The only thing it fetches from us is the list of available AI models (§13), and nothing about you goes with it.

Using nono creates an account on our server, and §15 lists what we record about it. The website runs aggregate web analytics — §14.

3Clipboard access

Reading your clipboard is the core feature: it's what the assistant acts on and what fills the "Recent" list.

  • Clipboard text is read while the panel is open, never written to disk and never stored in Recent.
  • It reaches a provider only when you act on it — your request refers to it ("summarize this") or you tap a clipboard action chip. The preview sent with your question carries at most 1,500 characters; the model's read_clipboard tool (§8) at most 4,000.
  • Close the panel without asking anything and it goes nowhere.
  • Images are the exception to "never written to disk." Attach one — a screenshot, a copied picture, an image file from Finder — and it's downsampled, sent with your question, and saved with the conversation as a JPEG in ~/Library/Application Support/Notch/HistoryImages/. Deleting the conversation deletes it.

4Reading your selection in another app

A prompt shortcut can act on the text selected in whatever app is in front. That needs macOS Accessibility permission, and Notchi asks for it the first time you fire such a shortcut. Nothing else in the app needs it.

  • The read happens only at the moment the shortcut fires. No background monitoring, no keystroke logging.
  • Password fields are detected and skipped.
  • What's read goes to your chosen provider, like anything else you type.

5AI features — bring your own key

You supply an API key and Notchi sends your prompts straight from your Mac to that provider over HTTPS. There is no Lofi Lab relay server for these providers — we never receive, see, or store your prompts or the replies, and can't train anything on them. nono is the one provider we run ourselves; it works differently and has its own section (§15).

One provider is active at a time, and each handles your data under its own privacy policy. Supported: OpenRouter, Vercel AI Gateway, OpenAI, Anthropic, Google Gemini, DeepSeek, Zhipu AI (GLM), Alibaba Qwen, Moonshot (Kimi), MiniMax, Xiaomi MiMo — plus any OpenAI-compatible endpoint you point it at, including a model running locally, in which case nothing leaves your Mac at all.

OpenRouter's one-click connect opens your browser to sign in; the key it returns is scoped to your own account and saved locally like any other.

6Local CLI backends

Codex, Claude Code, Grok and Command Code aren't HTTP APIs. Notchi launches the official CLI you already installed and signed in to, and talks to it over standard input and output. The request runs under your session with that vendor, billed to your plan and governed by their privacy policy — exactly as if you'd typed it in your terminal. Notchi never reads or transmits those credentials, and offers no in-app sign-in for them.

7Agent tasks on a folder

Drop a project folder onto the notch and one of those CLI agents runs the task there. It reads and writes files in that folder and runs shell commands, unattended — each CLI runs in its auto-approval mode so a task doesn't stall on a prompt nobody will answer. Only point it at folders you're willing to have changed.

What the agent reads goes to that CLI's provider, not to us. Each run's output is kept in ~/Library/Application Support/Notch/AgentRunLogs/ and deleted with the task.

8Tools the model can call

These run on your Mac mid-answer, and the call and its result are part of the conversation — so your provider sees what they return.

  • read_clipboard — the clipboard text, up to 4,000 characters.
  • search_history — searches your local archive ("did I ever note anything about X"); matches come back as short excerpts. The archive itself is never uploaded.
  • read_page — fetches a page from your Mac; the site sees an ordinary visit from your IP address.
  • open_url — only on an explicit "open / take me to", and only http(s).
  • manage_app_settings — changes a setting after you confirm it. It can write a search key you dictate, never read one back.
  • date/time and a calculator, both local.

9Web search

By default the model uses the provider's own search (Zhipu's search API for GLM, Moonshot's built-in for Kimi). Pick Exa, Keenable or AnySearch in Settings and that replaces it — Exa and Keenable need your own key, AnySearch works without one. Either way what's sent is a model-written query, not your text, and it goes straight from your Mac to that service.

10Your API keys

Keys are stored on your Mac in the app's preferences (macOS UserDefaults) — in plaintext, not the Keychain. They leave only as the authentication header to the provider they belong to, never to Lofi Lab. Environment variables (OPENAI_API_KEY, EXA_API_KEY, …) override a stored key.

The nono token is the exception: it is kept in the macOS Keychain, our server issued it, and it goes back to our server with each nono request (§15).

11What's stored locally

None of this is uploaded anywhere:

  • Conversations~/Library/Application Support/Notch/history.json: the full thread, a title, a timestamp, and a link back to the Note or Reminder if it made one. Recent shows the latest 50; the rest stay in the Archive window.
  • Attached images…/Notch/HistoryImages/ (§3).
  • Agent run logs…/Notch/AgentRunLogs/ (§7).
  • Keys, model choices and preferences — panel placement, dock icon, translation languages, enabled chips, prompt shortcuts, note destination, proxy, onboarding state, and the last "What's New" you saw.
  • The intent classifier's cache…/NotchGlass/IntentHeads/. Deciding whether a line is a question, a note or a reminder runs on-device and never leaves your Mac.
  • Failure diagnostics…/Notchi/diagnostics.json: the last 50 failures as timestamp, provider, HTTP status and error category. No prompt text, no clipboard content, no keys.

12Permissions

macOS asks once, and only if you use the feature:

  • Accessibility — the selection shortcut (§4).
  • Automation / Apple Events — saving a line to Apple Notes. Filing notes to a Markdown folder instead skips this entirely.
  • Reminders — filing a line in Apple Reminders.
  • Notifications — telling you an answer or agent task finished after you walked away.

Not requested: Screen Recording, Microphone, Camera, Location. The app isn't sandboxed — it has to launch the CLI agents — so it runs with your account's ordinary file access, but touches only the paths in §11 and folders you hand it. If a proxy is set, in Settings or macOS or your shell, the app and the CLI agents both use it.

13Update and model-list checks

Notchi checks GitHub's public releases API for new versions; no identifiers are sent, and updates download from GitHub.

It also asks notch.website for the model list every six hours, so new models appear without an app update. The request carries the app version and a flag marking the first fetch of the day and of the month. We keep that, the macOS version and the country, as daily totals. No IP address, no device id.

14This website

The app has no analytics (nono's request records are in §15). The website does. Pages here load Vercel Web Analytics — page views with referrer, country and device class, cookieless, no cross-site tracking. Clicking the install button records the click, with your browser's language and time zone. Our host keeps standard request logs, which include User-Agent and IP address. None of it touches the app or your prompts.

15nono, the model we host

nono is the one AI provider Notchi runs itself, and the one case where your prompts pass through a Lofi Lab server. Our gateway, on Cloudflare, receives each request, forwards it to a model inference provider, and streams the answer back. Everything in this section applies only if you use nono.

Your account. The first time you use nono, the app asks our server for a token and keeps it in the macOS Keychain (§10). We store only a hash of the token, and the account has no name or email on it. The network address the app registers from is counted until the end of that UTC day, to limit mass sign-ups, and then deleted. If you buy credit, Stripe handles the payment, and we keep Stripe's customer id so later purchases and refunds reach the same balance. Card details never reach us.

What we record for each request:

  • the account (the token's hash), the time, and the model;
  • which part of the app sent it (the notch panel, a prompt shortcut, the Force Touch popup, a conversation window, or naming a new shortcut), and an id shared by the requests one action produced;
  • the token counts, what your balance was charged, what the request cost us, and how long it took;
  • whether it was served, or why not: no credit, a daily limit, a rate limit, or a problem on our side;
  • the app version, and the country Cloudflare derives from your IP address. The address itself is not stored.

What we don't record: what you asked, what the model answered, your clipboard or selection, attached images, tool calls and their results, or files. They pass through the gateway's memory while the request is served and are not written anywhere by us. The inference provider processes them to produce the answer.

Why. To charge the right balance, to stop abuse and runaway spending, to plan capacity, and to see which parts of the app are used. The legal basis is providing the service you asked for (the account and billing) and our legitimate interest in running it (the rest).

Who processes it. Cloudflare runs the gateway and keeps its operational logs. Supabase stores the request records. Stripe processes payments. Model inference providers run nono's models.

How long. Request records are kept for 90 days, then reduced to daily totals per account, which are kept while the account exists. The account also keeps its latest 200 requests (time, model, tokens, charge), readable with its own token. Cloudflare's operational logs last a few days. Payment records are kept as long as tax law requires.

Your choices. If you don't use nono, none of this applies. To get a copy of your records, or to have the account and everything above deleted, email xiikii@outlook.com. If you bought credit, the email on your Stripe receipt is enough for us to find the account. Deletion does not reach the payment records Stripe is required to keep.

16Children

Notchi is not directed to children under 13, and we do not knowingly collect data from them.

17Changes to this policy

When this policy changes, the date at the top moves and the change is listed here.

  • September 10, 2026 — added §15 on nono, the model Notchi hosts: what our server records for each request, what it does not, who processes it, how long it is kept, and how to have it deleted. The summary, §2, §5, §10 and §14 now say where nono differs from bringing your own key.
    Fixed: the Children section said Notchi collects no personal data from anyone. nono accounts and their request records are personal data.
    Added: an email address for privacy requests (§18).
  • August 10, 2026 — realigned with what the app actually does after several releases of new features.
    Fixed: the app does ask for Accessibility permission, for the shortcut that reads your selection — the old text said it never does (§4). Attached clipboard images are saved to disk with the conversation, so "never written to disk" covers text only, and the clipboard tool carries 4,000 characters, not 1,500 (§3). The list of local storage paths was incomplete (§11).
    Added: the local CLI backends (§6); agent tasks in a folder you pick (§7); the tools the model can call, one of which searches your own archive (§8); the Keenable and AnySearch search backends (§9); Vercel AI Gateway and custom endpoints (§5); notification permission and the proxy path (§12); the headers sent with the model-list request (§13); and §14, on this website's analytics.
  • June 28, 2026 — first published.

18Contact

Questions about your privacy? Open an issue on GitHub: github.com/cyrus-cai/notchi/issues. For anything that should not be public, including requests about nono records (§15), email xiikii@outlook.com.