Keeploop Privacy Policy
Effective date: November 2, 2026
Keeploop is offered by Keeploop App ("we", "us"). Keeploop App is operated by Zach Moss Productions, LLC.
Applies to: the Keeploop app for macOS, its keeploop-mcp connector, the Keeploop Claude Desktop extension (Keeploop.mcpb), the Keeploop Claude Code plugin, and the Keeploop connection service at mcp.keeploop.app that web and phone AI apps use to reach your Mac.
The short version
- Your data stays on your Mac until an AI app you connect asks for it. When you use Keeploop from a web or phone AI app, our connection service passes requests to your Mac and results back. It never stores them.
- The local connector (plugins, the Claude Desktop extension, stdio) talks to Keeploop on your Mac, with no Keeploop server in the path. You need a Keeploop account (an email address) only for the connection service.
- Keeploop has no analytics, telemetry or crash reporting about your mail or how you use its tools. On its own, the app contacts keeploop.app to start the Pro trial and to download the public list of revoked keys (see License checks), and keeps a connection to the connection service while Remote access is on and this Mac is paired.
- Health reports are off until you turn them on. They carry a random ID, versions, which setup checks pass or fail, and crash signatures: never mail, names, addresses or file paths. A problem report is sent only when you press Send. Both are deleted after 90 days (see "Health reports and problem reports").
- It reads the mail Apple Mail has already stored on your Mac, read-only. It never signs in to your mail provider and never sees your mail passwords or OAuth tokens.
- Other sources (Calendar, Contacts, Messages, Notes, calls and voicemail, WhatsApp, notifications and Slack) are off until you turn them on. Each is read on your Mac.
- The developer of Keeploop keeps none of your data: not your mail, your settings, your usage or your license checks. The connection service keeps the account, license and security records described under "The connection service", never your content.
- If you buy Pro on keeploop.app, we keep your email address for that. See "Purchases" and "Referrals".
- Your content leaves your Mac only through something you connected or switched on yourself: the AI agent you connect, and a small set of optional features listed below. Each one is off until you turn it on.
What Keeploop reads
- Apple Mail's local index and message files in
~/Library/Mail, which macOS protects and which Keeploop can read only after you grant it Full Disk Access. Keeploop opens them read-only. It never changes, moves or deletes a message you sent or received. Through Apple Mail, and only as your permissions allow, it can save, replace and delete drafts, and send. A deleted draft cannot be recovered. - Your account list from Mail (account names and addresses), through Automation permission for Mail, so you can choose which accounts agents may see and so Keeploop can recognise mail you sent yourself.
- Attachments of those messages, read or saved only when an agent asks.
- Only the accounts you allow. Settings > Sources decides which accounts are visible to agents. An account you switch off is never searched or returned.
Other sources are off until you turn them on in Settings > Sources. Each is read on your Mac:
- Calendar: events, invites and free time in the calendars you choose, through macOS Calendar permission.
- Contacts: your contacts, through macOS Contacts permission. Contact notes are never read.
- Messages: your iMessages and texts from Messages' database on your Mac, read-only, with names from your address book.
- Notes: Apple Notes' database on your Mac, read-only. Locked notes are never read.
- Calls and voicemail: your call history and voicemail transcripts, read-only.
- WhatsApp: the chats WhatsApp keeps on your Mac, read-only. Keeploop never connects to WhatsApp.
- Notifications (Labs): Notification Center's history. Keeploop keeps its own copy on your Mac for the days you set (30 by default).
- Slack: the messages your own Keeploop Slack app can read. Slack sends them to your Mac over that app's connection, and Keeploop keeps them on your Mac for 30 days.
Messages, Calls, Notes, WhatsApp and Notifications need Full Disk Access.
What Keeploop writes
| What | Where | When |
|---|---|---|
| Drafts and reply drafts | your Drafts mailbox in Apple Mail | only when an agent asks and the Pro drafts feature is on |
| Deleted or replaced drafts | your Drafts mailbox in Apple Mail | only when an agent asks and your permissions allow it (Pro) |
| Saved attachments | a copy in ~/Downloads |
only when an agent calls save_attachment |
| Settings | ~/Library/Application Support/Keeploop/settings.json |
when you change a setting |
| Monitors and their matches | ~/Library/Application Support/Keeploop/keeploop.db |
when an agent creates a monitor |
| Promises found in mail you sent | ~/Library/Application Support/Keeploop/keeploop.db |
when a promise monitor is on or you confirm one |
| Voice profile (statistics and cards) | ~/Library/Application Support/Keeploop/voice/ |
when you build a voice profile |
| Cached account list | ~/Library/Application Support/Keeploop/mail_accounts.json |
refreshed about hourly |
| Logs | ~/Library/Logs/Keeploop/ |
while running, for troubleshooting; they stay on your Mac |
| API keys you enter | the macOS Keychain | when you save a key in Settings > Voice and AI models |
| Client registrations | each agent's own config file | only when you press that agent's Connect button |
| Calendar events | your calendar, through the Keeploop app | only when you press Add on an event an agent proposed |
| Texts | sent through the Messages app | only when Messages is set to Read and write (Pro) |
| Notes | a new note, or text added to the end of one, in Apple Notes | only when Notes is set to Read and write (Pro); never deletes or rewrites a note |
| Slack posts | posted as you through your Keeploop Slack app | only when Slack is set to Read and write (Pro) |
| Copies of Slack messages and notifications | ~/Library/Application Support/Keeploop/keeploop.db |
while those sources are on |
Nothing is sent unless you allow it. Keeploop can send mail through Apple Mail only when your permissions (Settings > Permissions) allow it for that person, account, label and app. The default is Always ask: you see the whole message on your Mac and press Allow or Deny, and no answer means no. Every send then waits a few seconds so you can cancel it. Keeploop keeps a log of each decision and send on your Mac (~/Library/Logs/Keeploop/audit.jsonl): who, when and the subject, never the message body. The same permissions apply to texts, notes and Slack posts. Writes to Messages, Notes and Slack come only from AI apps on this Mac, never from a remote AI app.
What can leave your Mac, and only when you turn it on
Keeploop itself makes no network connection unless you enable one of the features below, apart from the Pro trial check-in and the revoked-key list described under License checks.
| Feature | What is sent | To whom | Default |
|---|---|---|---|
| The AI agent you connect (Claude Code, Claude Desktop, Cursor, Codex, VS Code or another MCP client) | whatever the agent asks for from the sources and accounts you allowed: mail, attachments, events, contacts, texts, notes, calls, WhatsApp chats, notifications or Slack messages | that agent, and from there to its model provider under that provider's terms | nothing is connected until you press Connect |
| Keeploop connection service (remote access for web and phone AI apps) | each request from an AI app you approved, and your Mac's answer, with likely one-time and sign-in codes hidden; when you pair and each time this Mac connects, this Mac's license key (the service keeps only a one-way hash) | passed through Keeploop's service on Cloudflare to the AI app you chose; never stored (see "The connection service") | off until you sign in, pair this Mac (needs Keeploop Pro or a running trial) and approve an AI app on it |
| Your own tunnel (advanced remote access: Tailscale Funnel or a Cloudflare tunnel) | the same requests and answers, with likely one-time and sign-in codes hidden | through your tunnel provider to the AI app you chose; no Keeploop server is in the path, and your provider's terms apply | off |
| Your Keeploop Slack app (Slack as a source) | requests for the messages it can read, and the posts you allow | Slack, under your workspace's terms | off until you connect the Slack app |
| Phone notifications (ntfy) | the monitor's name, and the sender and subject of the matching message | the ntfy server you choose (ntfy.sh unless you change it), on a random private topic |
off |
| Webhook destinations, including Slack and Discord webhooks | the monitor's name and filter, and the matching message's sender, subject, account, mailbox, IDs and a short text snippet (about 400 characters); for Reply notices, the thread's Message-IDs and your reply's IDs and address | the URL you enter, and no other: redirects are never followed | off |
| Voice profile cards | samples of recent mail you sent from that address, trimmed | the model you pick in Settings > Voice and AI models: your own claude or codex command-line tool (and so that tool's provider, under your own subscription), Anthropic or OpenAI with your own API key, or a custom endpoint you enter |
only when you press Build, Refresh or Test |
| Update checks | a standard request for the update feed, including the app version and macOS version | the Keeploop update server | on unless you turn it off at setup or in Settings > General |
| Health reports (Settings > General > Help) | a random install ID, app and macOS versions, CPU type, each setup check's result and a short error code, crash signatures (the error type and the top app functions), and counts (monitors, accounts, sources, AI apps); see "Health reports and problem reports" | Keeploop's connection service; kept 90 days | off until you turn it on |
| Report a problem | what you type, your app and macOS versions and CPU type, and, if you leave Include diagnostics on, the same setup results, crash signatures and counts a health report carries | Keeploop's connection service; kept 90 days | sent only when you press Send |
These stay on your Mac:
- Apple Intelligence voice cards. The on-device model runs inside Keeploop. Nothing is sent.
- Local model servers such as Ollama or LM Studio at
localhost. Keeploop looks for them on your Mac only. - Mac notifications and messages to your Claude Code session, which go over a local connection on your Mac.
- Codex session delivery (beta, off by default) hands your installed
codextool a message that carries only IDs (monitor, match and Message-ID), never a subject or body. What the Codex agent then reads is covered by the agent row above. - License checks. A license key is verified offline against a public key built into the app. About every 12 hours Keeploop downloads the whole public list of revoked keys (refunds and chargebacks) from keeploop.app and checks your key against it on your Mac; the request carries no key, key ID or account, so it does not say which key you hold. A key on that list stops unlocking Pro. If the list cannot be downloaded, nothing changes. The key itself contains the email address it was issued to and is stored in
settings.json. When you pair this Mac with the connection service, and each time it connects, the key is sent so the service can check your plan (remote access needs Pro or a running trial) and its Mac limit. It keeps only a one-way hash (see "The connection service"). - Starting the Pro trial also contacts keeploop.app. After the first-run Welcome page (or on the first launch of a version with the trial), Keeploop sends keeploop.app a one-way hash of this Mac's hardware ID and the date the trial started, and gets back a signed trial key, which it stores in
settings.json. If that fails, the trial runs offline and Keeploop asks again on a later launch; once a trial key is saved it never asks again. We keep a salted hash of that value, the trial key and its end date, so reinstalling returns the same trial. No email, name, IP address or app version is kept.
Statistics and examples used by the voice feature (greetings, sign-offs, typical length) are computed on your Mac and never call a model.
How your AI apps reach Keeploop
There are three paths. You choose which ones to use.
| Path | Who is in between | Keeploop server in the path |
|---|---|---|
| On this Mac (the local connector: plugins, the Claude Desktop extension, stdio) | nobody: the app talks to Keeploop on your Mac | none |
Keeploop connection service (the default for web and phone AI apps, one address: https://mcp.keeploop.app/mcp) |
Keeploop's service, running on Cloudflare | yes; it passes requests and results through and never stores them |
| Your own tunnel (advanced: Tailscale Funnel or a Cloudflare tunnel you run) | your tunnel provider. Tailscale Funnel ends encryption on your Mac. A Cloudflare tunnel ends it at Cloudflare's edge, so Cloudflare can read the traffic there | none; your tunnel provider's terms apply |
Every remote request, through either the connection service or your own tunnel, is checked on your Mac against the same Remote access settings and permissions. In remote results, Keeploop hides likely one-time and sign-in codes from your mail and messages. The local connector is unchanged.
Remote AI apps get results only from the sources you turned on, as Settings > Remote access and any access profile for remote apps allow. They can never send texts, write notes or post to Slack.
The connection service
The connection service lets a web or phone AI app (for example Claude on the web, ChatGPT or Grok) use Keeploop on your Mac through one address. Your Mac opens an outbound connection to the service. When an AI app you approved sends a request, the service passes it to your Mac, Keeploop answers it on your Mac under your settings, and the service passes the answer back.
What it processes. Each request and its result pass through the service in memory while they are forwarded. Keeploop runs the service, so it can technically see that content while it passes through. It does not log, store, queue or cache it. When your Mac is offline, a request fails with a message; nothing waits to be delivered later.
Who receives your data.
- Cloudflare, which hosts the service for us (Workers, Durable Objects, D1 and KV). Requests and results pass through Cloudflare's network in memory; the account and security records below are stored there.
- Resend, which sends your sign-in codes by email. It receives your email address and the code.
- The AI app you chose, which receives the results it asked for, under its own terms.
What it keeps. Your account email address; your browser session; your paired Mac's name, public key and last connection time; which AI apps you approved; OAuth records, stored as hashes or encrypted; for each paired Mac, its license key fingerprint (a one-way hash, never the key or the email inside it), key id, tier and expiry; which account a Pro license is linked to; short-lived sign-in, pairing and anti-replay records that expire within minutes; and security events (such as sign-ins, pairings, approvals, denials, revocations and failed sign-ins), kept for 30 days. Health and problem reports you chose to send are kept 90 days (see "Health reports and problem reports"). It also keeps counts that are not linked to you or your Mac: how many requests failed in each 15-minute window, by kind of failure, and for a server error which part of the service it happened in and the error's type name (for example "/mcp" and "TypeError"). They hold no request content, account, Mac, AI app or IP address, and are deleted after 7 days. The service also fetches Keeploop's public list of refunded license fingerprints.
Phone buttons. When ntfy approvals are on and this Mac uses the connection service, the Approve, Deny and Wake anyway buttons on your phone send their one-time answer token to the service, which passes it to your Mac and returns your Mac's reply. The token carries no mail content: it names the waiting request, its kind, your answer, when it expires and a one-way hash of what is being approved. The service reads those fields to refuse an expired token or a permissions change, and checks your Mac's signature on it. It does not store or log the token.
What it never keeps. Request or result content, tool names or arguments, search terms, sender names, subjects, or tokens and sign-in codes in clear text.
Deleting it. Signing out deletes your browser session. Removing an AI app or unpairing this Mac (Keeploop > Settings > Remote access) revokes access at once, and those records are deleted within 30 days. Delete your account from the connection service account page, or email help@keeploop.app: the account, its Macs, approvals and tokens are deleted, and security events age out within 30 days.
Health reports and problem reports
Health reports help us find setup problems and crashes we would otherwise never see. They are off until you turn on Share health reports in Settings > General > Help, and "See what's sent" there shows the exact report. When on, Keeploop sends one at most once a day, and one after a crash.
Report a problem sends what you type to us, only when you press Send. Include diagnostics (on by default, shown before you send) adds the same setup results, crash signatures and counts as a health report. Email Instead opens an email to help@keeploop.app instead, which you send yourself.
What they carry. A random install ID that Keeploop makes when you turn health reports on (a problem report carries it only while health reports are on); your app, macOS and CPU type; the ID and result (pass, warning or fail) of each Check my setup row with a short error code; for each recent Keeploop crash, the error type and the names of the top functions on the crashing thread (Keeploop's own code first); and how many monitors, mail accounts, sources and connected AI apps you have. A report is checked against a fixed list of allowed fields before it leaves your Mac and again when it arrives, and anything else is refused.
What they never carry. Your mail, subjects, message text, attachments, names, email addresses, contacts, calendar events, notes, texts, Slack data, tokens, keys, your license key, file paths with your username, crash messages, or the sentences Check my setup shows you. A problem report carries only what you type yourself, with your home folder path shortened.
Where they go. Keeploop's connection service on Cloudflare stores each report with the time it arrived. It does not store your IP address, and reports are not linked to a Keeploop account. Reports are deleted after 90 days.
Your control. Turn health reports off at any time: Keeploop deletes the install ID on your Mac and sends nothing more. "New ID" in "See what's sent" replaces it. To have your reports deleted sooner, email help@keeploop.app with the install ID shown there.
API keys and credentials
- API keys you enter are stored in the macOS Keychain, never in
settings.jsonor a log. A key is fetched only for the request that needs it, sent only over HTTPS (or tolocalhost), and never forwarded to another host. - Keeploop never reads, stores or forwards the login of your Claude or ChatGPT subscription. When you pick a subscription, Keeploop runs the command-line tool you already installed, and that tool handles its own sign-in.
- Keeploop has no access to your mail passwords or mail provider tokens. Apple Mail keeps those, and Keeploop never asks for them.
Your control
- Choose which accounts agents may see in Settings > Sources.
- Pause Keeploop from the menu bar. While paused, no monitor scans and nothing is sent to ntfy, webhooks, notifications or agent sessions.
- Turn features and destinations on or off in Settings, at any time.
- Remove a client from an agent's own settings, or with Keeploop's Remove button where offered.
- Remove a remote AI app, unpair this Mac or switch remote access off in Settings > Remote access.
- Delete everything Keeploop stores by following Uninstall cleanly on the Support page. Your connection service account is separate: unpair this Mac first, then delete your account from the connection service account page, or email help@keeploop.app.
Purchases
Keeploop Pro is sold through Stripe Managed Payments. Link, a Stripe company, is the merchant of record: it takes your payment and handles sales tax, under Stripe's privacy policy. Keeploop never sees or stores your card number. The app itself never contacts Stripe.
What we keep for each order. When a payment completes, Stripe tells us, and we store an order record: your email address, your license key, its key ID and fingerprint (a one-way hash), the Stripe checkout and payment IDs, whether it was paid, free or refunded, whether you bought in the app or on the website, whether the license email went out, the date, and the coarse source described under "The keeploop.app website". No name, address or card details. A checkout started in the app also keeps its checkout ID and a hash of a secret only your app holds, so only your app can collect the key. If you redeem a Keeploop coupon, we keep the same kind of record with a hash of the code.
The license email. We email your license key to the address on the order. Resend sends it for us and receives your email address, the key and its key ID. If Resend is not set up, Cloudflare's email service sends it instead and receives the same.
How long. We keep order and coupon records with no end date. We need them to resend a lost key, to handle refunds and chargebacks, and to keep a refunded key revoked. The public list of revoked keys holds only key fingerprints, never an email address.
Referrals
When you buy Pro, we give your email address a referral code. If someone buys through your referral link, we record that order's checkout ID, your email address, the buyer's email address in a normalized form (lowercase, without a + tag, and for Gmail without dots) and the time. This is attribution only: no reward or payout is created. Referral records are kept with no end date, like orders.
The keeploop.app website
The website sets no cookies for visitors and runs no analytics or ad trackers. Its server keeps anonymous daily counts of page visits, download clicks, checkouts started, trials started and purchases, by country and by referring website (the domain only) or campaign tag in the link you followed. Automated fetches, such as search engines and AI assistants reading a page, are counted separately by crawler family (for example "claude-user" or "googlebot") and format; the browser or user agent string itself is not stored. It stores no IP addresses and nothing else that identifies you. When you start a trial or buy Pro, that same coarse source (a referring website, a campaign tag or "direct") is saved with the trial or order.
Update checks and downloads go through keeploop.app, which keeps anonymous daily counts. To count each Mac once a day it keeps a one-way hash of the IP address, changed and deleted daily; no IP address is stored. The only cookie the site sets is for its owner, to leave out their own downloads; visitors never get it.
Because the website does not track you, it treats a Do Not Track signal the same as any other visit.
Who handles data for us
| Service | What it does | What it gets |
|---|---|---|
| Cloudflare | hosts keeploop.app, its database and the connection service | the records described in this policy: orders, referrals, trials, connection service accounts and security events, and health and problem reports; requests and results for web and phone AI apps pass through it in memory |
| Resend | sends our email | your email address and the email: your license key and sign-in codes |
| Stripe (Link) | sells Keeploop Pro as merchant of record and takes payment | what you enter at checkout, under Stripe's privacy policy; it sends us your email address and the order details above |
| Slack | gets our own notice of each sale and refund | the amount, tax, country and the end of the key ID; never your email address |
The AI apps, tunnels, ntfy servers and webhooks you choose are listed under "What can leave your Mac". They are your choices, not services we use.
Your rights
You can ask for a copy of the data we hold about you, ask us to correct it, or ask us to delete it. Email help@keeploop.app from the address in question. If you ask us to delete an order, we keep only what stops a refunded key from working again. Data on your Mac is yours to delete at any time (see "Your control"). If you think we got something wrong, you can also complain to the data protection authority where you live.
Children
Keeploop is not directed at children under 13. The connection service keeps only the account, license and security records described under "The connection service".
Changes
If this policy changes, the new version is published at the same address with a new effective date. A future change that makes Keeploop send anything off your Mac beyond what this policy describes will be off by default and described in the release notes.
Contact
Questions about privacy: help@keeploop.app.
Postal address: Zach Moss Productions, LLC, c/o Registered Agent Solutions, Inc., 901 S 2nd St, Ste 201, Springfield, IL 62704-7909