Privacy policy
Everything stays on your Mac.
Gisti handles your clipboard and your screen. That demands a stricter standard than a marketing promise. This page is specific on purpose.
The principle
All data is stored locally on your Mac. Gisti has no accounts, no sync service, no telemetry, and no analytics – not "disabled by default", but not implemented in the code at all.
What is stored on disk
Notes, clipboard history, screenshots, OCR text, chats, and the embeddings index live in a local SwiftData database, inside Gisti's sandboxed App Store container:
~/Library/Containers/com.gisti.app/Data/Library/Application Support/com.gisti.app/Settings → Storage → Location opens it directly in Finder. It's your file – back it up, export it (Settings → Storage), or delete it. Gisti keeps no copy anywhere else.
What is never collected
- No analytics or telemetry of any kind.
- No crash reporting to remote servers.
- No device identifiers, no fingerprinting.
- No account, no email, no registration.
Not just a claim on this page
Everything above is written on the app's own website, by the person who wrote the app. The App Store privacy label is not: it is declared by me and then reviewed by Apple against the app that was submitted. For Gisti it reads "Data Not Collected" – "the developer does not collect any data from this app" – and you can read it yourself in the App Privacy section of the App Store listing.
AI is opt-in
AI features are off until you configure a provider. Your choice defines where content goes:
- A model on your Mac (Ollama, LM Studio, MLX): nothing leaves the machine.
- Your own endpoint (Custom): the selected text or image is sent to the address you entered, and only when you invoke an AI action. Whatever runs at that address decides what happens next.
- Topics and semantic search always run locally (MLX embeddings), regardless of the chat provider.
API keys
If your endpoint requires a token, it is stored in the macOS Keychain. It is sent only to the address you entered, over TLS, and appears in no logs or config files.
Network requests
Gisti's own code goes to the network in three cases, all of them yours to control:
- An AI request, to the endpoint you configured, only when you invoke an AI action. With a local model it never leaves the machine.
- The embedding model, downloaded once (~350 MB, from Hugging Face) the first time you turn on semantic search. It is the model that is fetched, never your content, and nothing is downloaded at all if you leave the feature off.
- An image a note points at. Remote images in Markdown (
) are fetched so they can be drawn, which tells that host the note was opened – worth knowing when the Markdown isn't yours, such as a clipped page or a model's answer.markdown.loadRemoteImages: falseinadvanced.yamlturns the fetch off and leaves every remote image a placeholder. The same downloader handlesgisti://image?path=with anhttpaddress, on your command.
That is the whole list. Gisti never checks for updates or phones home. It's distributed on the Mac App Store, which delivers and installs updates on its own, outside the app's code.
Clipboard and screenshots
Clipboard content and screenshots never leave the device except by your explicit action: an AI request you invoke, an export, or a share. Apps you add to the ignored list are never recorded at all.
Passwords are skipped without any setup. A copy marked org.nspasteboard.ConcealedType or TransientType – the cross-app nspasteboard.org convention that 1Password, Bitwarden, KeePassXC and Apple Passwords use – is recognised by its type before its content is read, and the copy is skipped entirely: it reaches neither the history, nor the previews, nor the search index. AutoGeneratedType, which marks content produced by a clipboard utility rather than by you, is skipped the same way, and managers that use a private marker of their own instead are covered by the type list in advanced.yaml.
Screen recording and screenshots
Gisti asks for the macOS Screen Recording permission because macOS requires that permission for any screen capture at all, including a single still screenshot – which is the only thing Gisti does. Gisti does not record your screen: no video, no audio, no capture in the background, on a timer, or while you are away. A capture happens only when you press ⇧⌘X (or choose Screenshot in the menu) and then select a region or a window. One still image is taken at that moment; nothing is captured before it or after it.
A capture produces, on your Mac and nowhere else: the image as a PNG file, the date and time, the name of the app that was in front (a label in your library), and the text recognized in the image so you can search it. Recognition runs on the device through Apple's Vision framework. If you turn on semantic search, an embedding computed on the device is stored alongside it.
This data exists for your own reference and for nothing else. It is never sent anywhere – Gisti has no server to send it to – and it is never shared with third parties, sold, or used for advertising, analytics, or training any model. It leaves your Mac only by an action you take on a specific item: exporting it, sharing it, or invoking an AI action after you have configured an endpoint. With a local model (Ollama, LM Studio, MLX) even that stays on the machine.
Screenshots are kept until you delete them. Settings → Storage → Auto-delete can remove them after 30 days, 90 days, or a year, and Settings → Screenshots → Max images caps how many are kept. Deleting a screenshot deletes both the database record and the PNG file.
Permissions
- Screen Recording: required for ⇧⌘X screenshots – see above for what that permission is and is not used for – and the only permission Gisti asks for in System Settings. It is requested the first time you take a screenshot. Revoke: System Settings → Privacy & Security → Screen Recording; Gisti keeps working without it, minus screenshots. Global hotkeys work with no permissions at all. Gisti never listens to your keyboard.
- Clipboard access: recent macOS versions ask, on their own, whether an app may read what another app copied. Answering Always Allow is what lets clipboard history run without a prompt each time. This is a macOS prompt about reading the pasteboard, not a permission Gisti requests, and what it reads goes into the local database and nowhere else.
Browser extensions
The Gisti Web Clipper extension (Safari and Chromium browsers) follows the same rules as the app: no analytics, no tracking, no remote code. It reads a page only when you explicitly save it, and the extracted content goes to the Gisti app on the same Mac, via the browser's native messaging channel, never over the network.
This website
gisti.app is a static site on Cloudflare Pages. No analytics, no cookies, no fingerprinting, no external fonts or scripts. It remembers three things, all of them in your own browser's localStorage and none of them ever sent anywhere: your theme choice, which tab of the documentation sidebar you had open, and which steps of the getting-started path you ticked off.
If you write to hi@gisti.app – a bug report, a question, a note about how you use Gisti – your message sits in a normal mailbox and nothing about it is stored anywhere else: no mailing list, no ticket system, no analytics. Ask and it is deleted.
Closed source, open architecture
Gisti's source code is not public. Privacy is enforced by design rather than by audit: data is written only to the local database, network calls exist only for the purpose above, and telemetry mechanisms are not present in the code. There is no "I promise not to enable it"; there is nothing to enable.
Questions: hi@gisti.app.