Pistachio

Privacy Policy

Last updated

Pistachio is operated by New York AI Labs. This policy explains how we handle your information when you use our app and website. Contact us at theandrewsiah@gmail.com.

Recording and transcription

When capture is on, the microphone on your Apple Watch or iPhone records audio in approximately 30-second chunks. A sound filter keeps most silence on your device; a small sample of silent chunks is uploaded for quality checks. With each recording upload, the Watch app also sends its battery level and app build, to keep recording reliable.

Audio is sent over TLS to our backend on Cloudflare. Speech is transcribed by Groq or, as a backup, Cloudflare Workers AI. Audio waits on your devices only until it's transcribed, then it's deleted. Our servers keep the text, not the audio. Groq may retain limited provider logs as described below.

The resulting text transcript is stored in your private account in Cloudflare D1. Cloudflare encrypts this database at rest.

Onboarding answers and voice

Uploading onboarding answers requires a separate explicit, versioned processing consent. A short-lived secret protects your draft; an anonymous analytics id does not grant access. You can keep your name and answers on your device. If you choose to save typed answers, we store their text, your selected languages and any vocabulary you supply in Cloudflare D1, separately from analytics.

Drafts expire 24 hours after creation, including after you connect an account. Expired drafts cannot be read; cleanup removes their content on the next onboarding request or scheduled cleanup, normally within 15 minutes. Revoking onboarding consent or deleting the draft removes its answers immediately. Connecting a draft to your account uses your profile answers to personalize your Pistachio: selected languages, your typed name as vocabulary, and short context about your role, day, pain points, useful moments and things you forget. Existing account preferences take priority. This account profile remains until you change or delete it; the draft still expires after 24 hours. Your role, day and things you forget are sent to OpenAI as short context with Moment summaries. Analytics never include the words you type or say in these answers, only the choices described under Analytics and crash reports; profile answers are not included in logs or cards. Your typed first name can be added to the transcription prompt as a vocabulary term to help recognize it; your other profile answers (role, day, pain points, useful moments and things you forget) never enter transcription prompts. Deleting your data clears the profile; deleting your account removes it.

When the iPhone app, in versions that offer it, sets you up before you sign in, it creates a Pistachio account without an email or name, on the Free plan, from a random device key that the app keeps in your iPhone's Keychain. We store only a keyed one-way code of that key, which we can't turn back into the key, with the app version, build and when the device first and last checked in, and deleting your account removes it; if the app sends its analytics id, that id and its earlier events are linked to the account.

Spoken answers to setup questions can be transcribed on our servers. While you speak, the iPhone app can show live words made on your iPhone by Apple's speech recognition, where supported. After you agree to onboarding processing, the recording of a spoken answer (never your name) is sent through our Cloudflare backend to Groq or, as a backup, Cloudflare Workers AI, only to transcribe that answer. If you chose a single language, it can go with the recording as a hint, along with any vocabulary already saved to your draft or account. Our servers don't store the recording; they pass it to the provider and then discard it. The transcript goes back to the app, and if it becomes your answer, it is handled like a typed answer, as described above. Onboarding transcription has per-session, daily and monthly limits. Groq may retain limited provider logs as described below. AI understanding of onboarding answers is off, so no onboarding answer is sent to an understanding provider. We do not promise zero provider retention or end-to-end encryption.

On /try, what you type to set up a reminder goes through our backend to OpenAI to read the date and time; we don't store it on our servers unless you sign in and save the reminder.

On /try, you can answer two of the questions, what you forgot recently and one thing you need to do this week, by talking, in a browser with its own speech recognition, such as Chrome or Safari. The mic turns on only when you tap it, for up to 30 seconds, and turns off after each answer. The page turns your voice into text with your browser's speech service, which may send your audio to the browser's maker, for example Apple for Safari or Google for Chrome, under that company's privacy policy. Our servers never receive the audio. Your words go into the answer field on the page, where you can change them before you continue, and are then handled like typed answers, as described above. The page's usage events include which version of the first screen you saw, a rough device type (phone, tablet or computer), roughly how long the first screen took to appear, whether the browser says it is run by automation, whether you arrived through an invite link and, if you leave that screen without starting, roughly how long you stayed on it and whether you scrolled. These usage events can also show that an answer was spoken and whether you allowed the mic, never your words or audio. In browsers without their own speech recognition, such as Firefox, you type your answers.

Summaries, suggestions and chat

Ask in the app is one conversation, shared by the iPhone app and the website. Texting Pistachio in iMessage is a separate conversation. Each conversation shows only its own messages, and its history and summary come only from that conversation. When you ask Pistachio a question in the app, we send OpenAI your question, your recent messages in that conversation (about the last 12 exchanges), with the ids and descriptions of the notes, reminders and undos Pistachio proposes in the chat, a short summary of that conversation's older messages, parts of your transcript from the last 24 hours and parts that match your question, the titles, statuses and times of your suggestion cards, your name, the current time and your time zone, with your Pistachio account id. As a conversation grows, about every 20 messages, we also send OpenAI its previous summary and its older messages, with your account id, so it can update that summary. We store your chat messages and each conversation's summary with your account in Cloudflare D1. Clear Conversation in the chat menu deletes the app conversation, including Pistachio's replies, and its summary; it doesn't delete your iMessage conversation, your Moments or your Decisions. We also send relevant transcript text to OpenAI for proactive Catch-up suggestions. If you previously supplied your own OpenAI API key, it remains encrypted and may still be used for your chat requests. If you connect your own ChatGPT account in Advanced settings, your chat (in the app and by iMessage), Ideas questions and card replies, with the same content described above, are sent to OpenAI through that account, so that account's settings and OpenAI's terms for it apply. If that fails, the request uses your own OpenAI API key if you saved one, otherwise ours, as usual. Background processing never uses it, except to answer a question you asked that waited for a limit to reset. The sign-in is stored encrypted and deleted when you remove it, delete your data or delete your account. Once you've connected an app (see Connected apps), your chat and Ideas questions always use our OpenAI account instead of your ChatGPT account or OpenAI API key, even after you disconnect.

Pistachio also automatically sends bounded groups of your transcript text to OpenAI to generate Moment titles, summaries and suggested items. This background processing uses our service API key, including when you have supplied a personal key for chat. Generated text is stored with your account and may be inaccurate; the original transcript remains available. Deleting your data removes the stored Moments and their source links.

Apps: Ideas, Intros

Ideas maps your Moments by topic. Cloudflare Workers AI, which already runs our backup transcription, turns each Moment's title and summary into an embedding, a list of numbers that places similar Moments near each other. Your transcripts are not embedded. Embeddings are stored with your account in Cloudflare D1, and Delete all my data or Delete my account removes them. When you ask Ideas a question, Workers AI turns your question into an embedding, and we send your question with the closest Moment titles, summaries and dates, plus your time zone, to OpenAI to write the answer, as with chat. To name topic groups on the map, we may send OpenAI short lists of Moment titles. Both requests include your Pistachio account id.

Intros suggests introductions between two people from your own Moments and notes things you may be looking for. It reads only your own Moments; it never matches you with other Pistachio users and doesn't use your contacts.

When your recent Moments change, at most once an hour in the background or once a minute when you refresh, we send OpenAI the titles, shortened summaries and start times of up to 40 of your Moments from the past 14 days, with the names of the people listed in them. If you ask for a draft intro, we send OpenAI only the two names and the short reason. Both requests include your Pistachio account id.

Suggestions, their reasons and up to two short quotes from your own transcripts are stored with your account in Cloudflare D1 and shown only to you; Delete all my data or Delete my account removes them. Pistachio never sends an intro or an ask itself: it opens a draft in your own Messages app or copies the text, and you choose who gets it. An ask includes your first name and what you're looking for.

Texting Pistachio (iMessage)

You can text Pistachio in iMessage after you link your phone number or Apple ID email. Texting Pistachio is in limited testing and isn't open to every account yet. iMessage is Apple's service; Pistachio's iMessage lines are run by Photon (photon.codes). To link, you sign in to Pistachio and enter your phone number in Settings > iMessage, plus, if you text from an email address, the email of your Apple ID. We send your number, and that email if you add it, to Photon to register you. Tapping Text Pistachio then opens Messages to the number Photon assigns you, with a one-time link code already typed in; sending it links your account. The code works once and expires after 10 minutes. Pistachio only replies to your texts from a linked number or email; it doesn't text you first, and it doesn't reply to texts it can't match to a linked account.

Photon and Apple carry your number (and your email, if you add it), your messages and Pistachio's replies, which can mention things from your Moments. Photon also receives any photos or other attachments you send; Pistachio ignores them and reads only text. A small bridge program on our own server passes texts between Photon and our backend; it logs only whether each message was delivered, never your number or the text. We store keyed hashes of your number and of any email you add, not the number or email themselves, plus a short hint of the one you linked with (its last 4 digits, or the first letter and domain of the email) so Settings can show it, and a keyed hash of the link code. We keep your iMessage conversation with your account in Cloudflare D1, apart from your app conversation: it has its own history and its own summary of older messages, made only from your texts and Pistachio's replies. As with chat, to write the reply we send OpenAI your message, recent messages from your iMessage conversation, the short summary of its older messages, your name, the current time and your time zone, parts of your transcript from the last 24 hours and parts that match your message, and the titles, statuses and times of your suggestion cards, with your Pistachio account id.

Unlinking removes the link and asks Photon to delete your registration; your stored iMessage conversation stays in your account until you delete your data; Clear Conversation in the app doesn't delete it. Delete all my data or Delete my account removes the link, its hashes and hint, and the conversation, and asks Photon to delete your registration. Photon and Apple may keep copies under their own policies; see Photon's privacy policy.

Connected apps

When you connect Gmail, Google Calendar, Google Drive, Slack, GitHub or Linear in Settings > Connections, you sign in and grant access on that service's own page; nothing is connected until you do. Pistachio connects these apps through Composio, a service that stores each connection's sign-in, keeps it working and makes the requests to the app for us. During the alpha, every connection uses Composio's own app, so the service's permission screen can ask you to give access to Composio instead of Pistachio.

Pistachio reads from a connected app only to answer something you asked; it doesn't sync or copy the app in the background. It creates or posts nothing in a connected app until you tap Approve on that action, which shows its full content and where it goes. What Pistachio does with each connection:

The access you grant is much broader than this. During the alpha, Composio's apps ask for: in Gmail, full access to your mail, including sending and permanently deleting it, and access to read your Google contacts and profile details such as your birthday, addresses and phone numbers; full access to all your Google Drive files and all your Google calendars; in Slack, broad read and write access, including direct messages and files; in GitHub, full access to your repositories, including private ones, and access to your profile, gists, notifications, projects, workflows and codespaces; and in Linear, read and write access. Pistachio uses only what's listed above; the rest of the access stays granted, held by Composio, until the connection is deleted or you remove it on the service.

To answer you, Pistachio sends what it read to OpenAI with your question, the same way as chat: for example email subjects, senders, snippets and the text of a thread you ask about, event titles, times and places, file names and links, Slack messages, or issue titles and excerpts. Each result is first cut down to a fixed set of fields and at most about 6 KB. What Pistachio reads from a connected app goes to OpenAI only through our OpenAI API account: once you've connected an app, your chat and Ideas questions always use our account, even if you set up your own ChatGPT account or OpenAI API key, and even after you disconnect. If you ask by iMessage, the reply, which can quote what Pistachio read, goes through Photon and Apple, as described in Texting Pistachio (iMessage).

Composio, not Pistachio, stores each connection's sign-in and uses it to make requests to the app; Pistachio doesn't receive it. Pistachio gives Composio an id made from your account id, never your email, so it can match your connections to you, and keeps Composio's id and the status of each connection. Composio sees what it fetches or sends for you and keeps it in a log (see Our service providers). We don't store what Pistachio reads from your apps; Pistachio's replies, which can quote it, are stored with your chat as described in Summaries, suggestions and chat, and a proposed draft, event, message or issue is stored with your account with its full content. Pistachio's own logs of these requests record only which operation ran, whether it worked and how long it took.

You can disconnect an app anytime in Settings > Connections: Pistachio starts no new requests to it (one already under way can still finish) and asks Composio to delete the connection and revoke its access at the service. Delete all my data and Delete my account ask Composio to do the same for every app you connected. Revoking at the service can take a while and depends on the service, so you can also remove the access yourself, where it can be listed under Composio's name: for Google at myaccount.google.com/permissions, for Slack in your workspace's Manage apps page, for GitHub at github.com/settings/applications, and for Linear in Settings > Security & access.

We use your Gmail, Calendar and Drive data only to answer you and do what you approve. We don't use it for ads, don't sell it, and share it only with the providers named here to run these features, or when security or the law requires it. We don't use it to train AI models, and it reaches OpenAI only through our OpenAI API account (see Our service providers for OpenAI's terms).

Google sign-in

Google sign-in shares your Google email and name with Pistachio via Cloudflare Access; no other Google data is shared.

Email

If you use email sign-in or email reminders, your email address and the message are sent through Resend. Resend retains email content and delivery logs according to its retention policy: generally 30 days on Free, Pro and Scale plans, with configurable retention for Enterprise plans.

Our service providers

We use Cloudflare to run the backend, store transcripts and, as a backup, transcribe speech (Workers AI), Groq to transcribe speech, OpenAI to answer questions, generate automatic Moment summaries and suggest things to do, OpenRouter and Perplexity to run short yes-or-no checks on some of your text (described below), Photon to carry iMessage conversations with Pistachio, Composio to connect the apps you choose under Connected apps and make requests to them for us, and Resend to deliver email. We send these providers the information needed to perform those services. Moment titles and summaries are turned into embeddings with Cloudflare Workers AI to draw your Ideas map; the embeddings stay on Cloudflare. Topic labels and answers in Ideas use OpenAI, like chat. Intros suggestions and drafts also use OpenAI.

For current capture, chat and automatic summary processing, Groq's and OpenAI's API policies exclude training on API data by default. They may retain abuse-monitoring or reliability logs for up to 30 days, with longer retention where required by law or, for OpenAI, where reasonably necessary to protect its services or others from harm. See Groq’s data policy, OpenAI’s data policy and Cloudflare Workers AI’s data-usage policy for provider-specific terms. Our database deletion does not delete copies retained by providers under their policies.

Composio stores each connected app's sign-in encrypted and makes the requests to that app for us, so it sees what it fetches or sends for you, such as an email, an event, a file or a message. Composio keeps a log of each read or write it makes for us, including what was sent and returned, for up to one year; our Composio plan doesn't let us turn this off, and disconnecting an app or deleting your data doesn't delete these logs. Composio says it doesn't use that content to train AI models and that it is SOC 2 Type II compliant. See Composio's privacy policy, data retention page and security page.

Some features ask a decision model one fixed yes-or-no question about a short piece of text. Perplexity runs the model, and OpenRouter routes our request to it; our requests allow no other provider. We send text only, never audio. We don't add your name, email or account id, but the text is what you or Pistachio said and can include names or anything else in it. We use only the probability the model returns. We may send:

We log each check without its text: when it ran, the model, how long it took, what it cost and its result. Delete my account removes these logs. Delete all my data removes them too, but keeps the time and cost of recent checks with your account until your usage limits no longer count them, at most about a week, so deleting doesn't reset your limits.

OpenRouter says it doesn't use prompts or responses to train models, and doesn't keep them unless the account opts in to logging or to OpenRouter's own use of them (both off by default), the content is flagged as potential child sexual abuse material, or the request goes to a provider OpenRouter marks for safety retention, where OpenRouter or the provider may keep it only to prevent abuse, not for training. It keeps metadata about each request, such as token counts, but not its content. Perplexity's API terms say it doesn't use customer content to train AI models. Its API privacy page says zero data retention isn't on by default, and our requests don't ask for it. See OpenRouter's privacy policy, OpenRouter's data collection docs, Perplexity's API terms and Perplexity's API privacy page.

We never sell your data, share it with other users, or show it to other users. We do not use your data to train models.

Who can see your transcripts

Your transcripts stay in your account and are processed by our service providers. Only the operator’s own account—Andrew, the founder—is connected to his personal assistant. Other users’ accounts are not connected to it.

Actions you approve

Notes and reminders need your approval; transcription and summaries run automatically. You can undo approved actions.

Analytics and crash reports

The app and website record usage events to help us improve Pistachio. They show which screens you see, which choices you tap (like a job you pick from the list) and whether you typed or talked, never what you type or say. In some versions of the iPhone app, when you answer a setup question by talking or typing, the app sorts your answer into a category on your iPhone, such as a kind of job, and only that category is recorded. They may be linked to your account.

The iPhone and Watch apps can also use two outside services: Sentry for crash and error reports, and PostHog for usage stats. They're on only in app versions where we've turned them on, and only after you agree to the app's consent note on that device; until then, nothing is sent to either. When they're on and you allow it, the iPhone app sends Sentry crash reports, reports when the app hangs or iOS stops it, Apple's MetricKit diagnostics (crash, hang, CPU and disk-write reports) and errors the app handles; the Watch app sends Sentry only errors it handles and a note when its last session ended unexpectedly. These reports include stack traces, error codes, the app screen you were on and the names of up to 50 recent app events, such as opening a screen. The iPhone app sends PostHog which of its main screens you open and when you open the app; the Watch app doesn't send anything to PostHog. Both receive your device model, operating system and app version, and technical details such as your language setting, screen size, memory, storage, battery level and network type. They never get your audio or transcripts.

Once you're signed in, both can link what they receive to your Pistachio account id; before that, PostHog uses a random id created on your iPhone. Sentry receives your device's IP address with each report; our Sentry organization is set not to store IP addresses and to scrub data that looks like passwords or card numbers before storing a report. Your IP address also reaches PostHog, which is set to discard it and not look up your location from it. PostHog keeps its data in the US. Sentry doesn't take screenshots or read the layout or text of your screen. PostHog doesn't either, except in the screen recordings described below, and only once we turn them on. Delete my data turns both off on that iPhone, and on its Watch once the Watch next hears from the iPhone, but that alone doesn't delete what Sentry or PostHog already received. Reports the apps were already sending at that moment may still reach Sentry or PostHog. See Sentry's privacy policy and PostHog's privacy policy.

When we turn it on, our website can also send its usage events to PostHog, only after you agree to a consent line that names usage stats. Before you sign in, PostHog ties them to a random id stored in your browser; once you're signed in, to your Pistachio account id.

When we turn it on, our server also sends Sentry a report when a request or scheduled task fails, and timings for about 1 in 100 requests and scheduled tasks, with the addresses involved (ids removed), response codes, error types, error messages cut down to a fixed list of technical words and short numbers, where in our code it happened, our release version, technical details such as times, request methods, runtime version and trace ids and, for signed-in requests, a one-way code made from your account id that we can still match to your account; it never sends request contents, query strings, cookies, sign-in tokens, email addresses, audio, transcripts or chat messages, and because it sends from Cloudflare's servers, Sentry sees Cloudflare's IP address, not yours. When we turn it on, our server also sends PostHog a few account milestones (signing up, your first Moment, your first chat message, the first time you decide on a card, and each week you use chat), each with its time (and week for weekly use), whether it's a Pistachio team account, an event id and a one-way code made from your account id that we can still match to your account; it never sends your words, email address, name, audio, transcripts or chat messages, it asks PostHog not to look up a location, and because it sends from Cloudflare's servers, PostHog sees Cloudflare's IP address, not yours.

Delete my data and Delete my account also ask PostHog to delete the profile the iPhone app linked to your account id, with its events, and ask again about 15 minutes and about a day later to catch anything that arrived late. To finish this, we keep a pending-deletion record for up to about 48 hours: a keyed code made from your account id and the ids to delete, encrypted, never your account id in plain text. Sentry can't delete one person's reports, so we don't ask it to; its reports are scrubbed as described above, can include your account id if they came from the app, and expire after 30 days on our current Sentry plan. The server's milestone events described above can't be deleted one by one, even by Delete my account. Their one-way code can't be turned back into your account id, but anyone who has that id can make the same code and match the events to it.

When we turn them on, PostHog may also make screen recordings of how you use the iPhone app and our website, with your content hidden. They show your taps and scrolls and which screens you see. Everything you type or say, and your Moments, cards, chats, photos and other images, is hidden in those recordings before they leave your device; only our own titles, button labels and answer choices show, so a recording can show which choice you tapped. The recordings never include your audio or transcripts. They start only after you agree to a consent line that names them. The Watch app doesn't make screen recordings. Delete my data turns them off for good on that iPhone, like the rest of PostHog. Delete my data and Delete my account also ask PostHog to delete the screen recordings linked to your account, with your profile and events. Recordings that were never linked to your account, such as visits to the website where you didn't sign in, stay with PostHog until its retention period for them ends. You can email us at the address under Contact to ask us to delete yours.

Deleting your data

Delete your stored transcripts, cards, summaries, chat messages and chat summary in Settings. In the app or on the web, choose Delete all my data or Delete my account. The API also supports DELETE /v1/me/data.

Stored content is deleted immediately from our database, including onboarding drafts that you have explicitly connected to the account. Account details survive data-only deletion. Recordings still queued on a device and provider-retained copies have separate deletion limits. Unconnected drafts can be deleted with their session secret or expire as described above. Any logs retained by our service providers expire according to their policies.

Children

Pistachio is not intended for children under 13.

Changes to this policy

We will update this page when this policy changes and revise the last-updated date above.

Contact

For privacy questions, contact New York AI Labs at theandrewsiah@gmail.com.