Help & Reference

Data and privacy

Last updated: 2026-08-24

Your recipes, pantry, shopping list, and menu history stay inside your kitchen. This page covers the narrow exceptions: an aggregate signal about ingredient names that the operator uses to grow the shared ingredient catalog, and counts about how well ingredient matching did on the recipes you import.

What stays in your kitchen

The operator can’t read these through the admin console:

What the operator sees

When you type an ingredient name that isn’t in the shared catalog yet, Mirepoix saves it as a pending discovery in your kitchen. The operator’s admin view collects those pending names across every kitchen. It shows two things drawn from kitchen data — yours and everyone else’s — per name:

The view also shows a suggested USDA food match for each name — found by looking that same name up against the bundled USDA reference data, offered as a starting point for a new catalog entry. The lookup uses only the name shown above; the match itself — its description, nutrients, everything about it — is USDA’s own public data, nothing pulled from your kitchen or anyone else’s.

The view leaves out anything that could tie a name back to you:

That last threshold is a floor, not a setting. A name has to show up in at least three separate kitchens before it’s visible to the operator at all.

Getting to the admin view takes a separate admin sign-in that times out every twelve hours. Every page load lands in the security log.

What it’s used for

One thing: deciding which entries to add to the shared ingredient catalog. New entries give future kitchens nutrition data and the right unit handling out of the box.

The aggregate isn’t fed into any machine-learning model or training pipeline — it’s a read-only signal a person reads and acts on. Adding entries to the shared catalog is a separate, reviewable change to the project’s source, not a click in this view. Names drop off the view once the catalog can resolve them.

Imported ingredient matches

When a recipe arrives by import — saved from one of Mirabel’s import steps, or restored from a file or a backup archive — Mirepoix records what its ingredient matcher decided about that recipe’s ingredient names shortly after the recipe is created, weighed against the shared catalog only. One record per distinct name in that recipe: the name as the recipe wrote it, which catalog ingredient the matcher picked or that it had no candidate at all, whether it was confident, and how far ahead of the runner-up its pick was. Recipes you type in the editor yourself aren’t recorded this way, and editing an imported recipe afterward doesn’t add more records.

If you later match one of those names to a catalog ingredient in the Review ingredients dialog, or clear a match, that correction is stamped onto the record — which ingredient you chose, or that you removed the match, and when. Only the first correction for a name is kept; a later change to the same name doesn’t overwrite it. A match is kitchen-wide, so the stamp lands on every uncorrected record of that name in your kitchen.

These records stay inside your kitchen. There’s no admin page for them — the operator’s admin console doesn’t show them at all. They’re deleted when the recipe is deleted, and nothing else expires them: they last as long as the recipe does.

What leaves your kitchen is counts. The operator can run a report on the server that groups these records by which import path a recipe came in on and shows, per path: how many kitchens, how many ingredient lines, how many the matcher was confident about, how many it was unsure about, how many had no candidate, and how many were later corrected. No ingredient name, no recipe, no kitchen identity — and a path shows up only when at least three separate kitchens have imported through it, the same floor the catalog-gaps view uses. That report can also print the records line by line, ingredient names included, for a single kitchen the operator names by hand when running it. That’s a command on the server, not a page in the admin console.

Each import also writes one line to the server’s own log carrying those same counts for that import — how many ingredient lines, how many confident, how many unsure, how many with no candidate — along with which import path it came in on and which kitchen it happened in. Counts only: no ingredient name reaches that log.

It’s used for one thing: measuring how well ingredient matching does on recipes it has never seen before, so the matcher and the shared catalog can be improved. A correction is the only honest signal that a match was wrong, which is why it’s recorded. None of it is fed into a machine-learning model or a training pipeline — the matcher is ordinary code working against the shared catalog, and a person reads these numbers and acts on them.

AI features and third-party processing

Two features send content outside your kitchen, and both run only when you choose to use them. In each case the content goes to Anthropic, the company that provides Mirepoix’s AI, and nowhere else.

AI import. When you start an AI import, the recipe text and any photos you submit are sent to Anthropic to generate the recipe. So the new recipe can be filed under one of your existing headings, your kitchen’s category and tag names are sent along with it. The request is made with settings that keep your content from being used to train any model. The text you submit is stored on Mirepoix’s servers only briefly — kept with your recent conversation for about three days, then deleted automatically; the photos go sooner, deleted as soon as the draft is made. Even while it’s stored, it’s never used to train a model, and the text you type isn’t written to logs. Photos are downscaled in your browser before anything leaves your device, and camera metadata such as location is stripped in the same step. Only the resized image is sent.

Mirabel. When you ask Mirabel, the in-app help assistant, a question, the text you type — along with the recent back-and-forth of your current conversation, so she can follow what you mean — is sent to Anthropic to generate her reply. If your conversation has been inactive for an hour, Mirepoix starts a fresh one instead of sending the earlier back-and-forth. When you ask about your own recipes, she can also search your recipe collection: the matching recipe titles and their page addresses, categories, and tags are included in that request so she can answer. When it comes to importing a recipe, what reaches Anthropic depends on how you hand her the recipe, so the two ways are described separately here. Through her import steps — the sources behind Add Recipe (I’ll paste the text, From a website, From a file), a web address you paste into the box on its own and then tap Import this recipe on, or the import bookmarklet and the phone Share sheet — what you give her goes to Mirepoix’s own server, which tries to read it there with no AI at all; nothing goes to Anthropic unless that read doesn’t come out cleanly, or you tap Use AI instead. When it does, the text is sent the way AI import sends it, along with your kitchen’s category and tag names so the draft can be filed correctly, and with the same no-training settings. In an ordinary message to her, there is no read-it-first step: everything you type or paste into the Message Mirabel box is sent to Anthropic to generate her reply, recipe text included, before any import decision is made — and if she goes on to build a draft from it, that text is sent again to do the extraction. If you ask her to import recipe text from the recent conversation, or ask her to revise or condense the draft she made, that text and the draft are sent to Anthropic the same way, with the same no-training settings. A backup archive, or several files at once, is a different thing again: Mirepoix’s server restores those itself and nothing about them goes to Anthropic. The same split applies to a link. Either way Mirepoix’s server fetches the page for you, and that fetch is a request to the site, not to Anthropic; but only on the import steps is the page read on Mirepoix’s server first, with what it found reaching Anthropic just when the page is too messy to read cleanly or you ask for AI. A link you raise in an ordinary message goes to Anthropic with that message, and the page text goes too when she builds the draft. Pages are fetched only when you ask, are not stored, and each fetch is recorded by site name only. When the page offers a recipe photo, Mirepoix’s server fetches that image too and holds it briefly — until you save the recipe, or the conversation is cleaned up after about three days — so it can be added to the recipe if you save; like any recipe photo, its location metadata is stripped before it’s stored. You can also attach a photo of a recipe — a cookbook page, an index card, a handwritten note — and she’ll read it to build the draft. Reading a photo always takes AI; there’s no version of it Mirepoix’s server can do on its own, so a photo has no read-it-first step. It doesn’t ride along with your message either: your message tells Anthropic only that you attached a photo, and the image itself is sent when she builds the draft. Photos are downscaled in your browser and camera metadata such as location is stripped before anything leaves your device; only the resized image is sent to Anthropic, and it’s held just long enough to build the draft — deleted as soon as the draft is ready. If you ask her to change one of your saved recipes, that recipe’s text is sent to Anthropic — along with your kitchen’s category and tag names, the same way AI import sends them — so she can draft the edit, and nothing in your kitchen changes until you review the proposed edit and apply it yourself. When you ask her what to cook — a weekly plan or tonight’s dinner — she draws on your menu history (how many weeks each recipe has spent on your menu, and how long since it was last there), how many of each recipe’s ingredients you’d still need from your pantry, and roughly how long each takes to make, and those figures are sent to Anthropic as part of generating her reply, so she suggests from recipes that have earned a spot on your menu before and what you have on hand. When you chat with her on a recipe page, your recipe list, your Menu, your Groceries, or your Pantry, a short note about that page rides along with your message — the kind of page and its name, plus a recipe’s own page address — so references like “this recipe” point at the right thing. It’s the page’s type and name only, never anything on the page, and only while you’re chatting with her. If your kitchen has saved cooking preferences in Settings — how many people you usually cook for, any diets your kitchen follows, and ingredients to avoid — a short summary of them rides along with your message too, every time you chat with her, so her suggestions and drafts respect them. It’s what’s saved in Settings and nothing more, visible and editable there rather than a hidden profile, and it uses the same no-training settings as the rest of what she sends. She can offer to save one of these preferences for you, but nothing is saved unless you tap to confirm, and only a kitchen owner can change settings. When you ask her about the rest of your kitchen, she can look at four more things, each only when your question calls for it: whether particular ingredients are on hand and what’s running low in your Pantry, what’s on your Menu right now, what’s already on your shopping list, and what one of your saved recipes still needs from the store, worked out against your Pantry and your shopping list together. What she finds in the first three — the ingredient names, the on-menu recipe titles with their page addresses and the category each is filed under, the on-menu QuickBite titles and their categories, the item names — is sent to Anthropic as part of generating her reply, with the same no-training settings as everything else she sends. The last of the four sends a combination those three don’t: that recipe’s title and its page address, the names of the ingredients it still needs to buy — the ones your Pantry lacks that aren’t already on your list, up to twenty of them, plus up to twenty more the recipe marks optional and filtered the same way, with a note telling her the list was trimmed if it ran longer — and three counts: how many are left to buy, how many more your Pantry lacks that your list already holds, and how many the recipe needs from the store in all. Looking changes nothing, and nothing is stored beyond her conversation. She can also offer to add, on two surfaces that confirm differently. Ask her to put items on your shopping list, or saved recipes on your Menu, and she shows a confirm chip listing exactly what she’d add — up to twenty item names, or up to five recipes, and nothing is added unless you tap to confirm. The other is the workshop pane that holds what a saved recipe still needs: under the list it just showed you sits one button naming that count — Add 3 items to your list — and tapping it puts that whole list on your shopping list. That one is not a chip and has no second confirm step; the tap under the list is the confirm. It is also not capped — it adds the whole of that list, however long it runs, the same way the Groceries page’s own add is uncapped — and it adds only what the recipe requires and your list doesn’t already hold, never what it marks optional. What lands is worked out again at the moment you tap, so it’s what’s missing and not already on your list then, rather than the number the button named. Either way the tap is what writes, and she has no way to make the change herself: the chip posts to the same shopping-list and Menu actions those pages’ own buttons use, and the pane has an address of its own but makes the same underlying shopping-list write, with no more reach than the Groceries page’s own button has. Nothing new is sent to Anthropic for either: the chip’s item names are her own words from your conversation, the recipe titles are the same ones already sent when she searches your recipes, and the pane’s list was composed on Mirepoix’s own server — tapping to add sends none of it back. After you tap, a short note of what actually landed joins the conversation — a count of items for the list, the recipe titles for the Menu — so she can’t claim a change that didn’t happen, and it rides along with your next message the way the rest of the conversation does. She still can’t change your Pantry, check an item off your list, or take anything off your Menu. Apart from what you ask her to look up, plan, add, or edit — that note about which page you’re on, and your kitchen’s saved cooking preferences — she reads nothing else in your kitchen, and nothing tied to your account. The request uses the same no-training settings as AI import. Your recent conversation is now kept on Mirepoix’s servers for a short time — about three days — so Mirabel can pick up where you left off after a reload or on another device, then it’s deleted automatically.

How long this is kept. Mirabel conversations — and the drafts and import text in them — are kept on Mirepoix’s servers for about three days, then deleted automatically. Each of her answers also carries two small bookkeeping notes, kept and deleted on that same schedule. The first is a pointer to whichever pane the answer opened, so a reload or another device reopens the same one: it records which kind of pane it was — her recipe draft, a comparison of a proposed edit, your saved cooking preferences, or what a saved recipe still needs from the store — and, for two of those four, one address apiece: the recipe’s page address for the store-list pane, and an identifier for the answer that made the draft for the draft pane. The other two record nothing but the kind. The second note applies only when an answer failed, and records whether trying again could help, so Mirepoix can leave out a Try again button that couldn’t work. Neither holds anything you typed or anything else from your kitchen, and neither is sent to Anthropic — both are written on Mirepoix’s own server after the answer is made. That’s long enough to recover a request you started on another device or after closing the tab, not a lasting record. An encrypted backup may keep an older copy until it rotates out.

Both features draw on your kitchen’s monthly AI allowance, which they share.

Recipe photos

When you add a photo to a recipe, Mirepoix removes its location metadata before storing it. That covers the GPS a camera records and the location a photo editor can add. Stored recipe photos carry no location.

This matters most when you share. A recipe holds one photo, and a shared link shows it as the preview — the full-size photo, not a thumbnail. Because the location is already gone, the link can’t reveal where the photo was taken.

Adding a recipe to your menu records when it joined, and taking it off records when it left. Those stretches — which weeks a recipe has spent on your menu — power Mirabel’s meal-planning suggestions, like forgotten favorites, and a few touches on your Recipes page: the small note on a recipe card saying how many days ago it was last on the menu, or how many times it’s been on the menu in the last year; one of the signals that can lift a recipe to the top of a large category instead of behind the fold; and the order recipes take within a folded list. Those page touches are for your kitchen’s own members: someone who opens a published kitchen’s link without being a member of it sees the recipes themselves, in full — no card notes, no working set, and no fold. The record itself stays inside your kitchen too: the operator can’t read it through the admin console. It’s kept for 13 months after a recipe leaves the menu and then deleted automatically, so suggestions can reach back across the seasons without keeping the record indefinitely. (When you ask Mirabel what to cook, figures derived from it are sent to Anthropic to generate her reply, as described under “AI features and third-party processing.”)

Pending imports

When you capture a page with your own recipe-import bookmarklet, Mirepoix holds what it harvested on the server — the page’s structured recipe markup, a short text excerpt, and its title and address — tied to the kitchen member who captured it, in that member’s pending-imports tray. It’s kept so you can import it at your leisure instead of finishing the import the moment you capture, until you import or dismiss it — dismissing deletes it right away, and importing deletes it once the import has gone through. One you never touch is deleted automatically after 30 days. Nothing about a pending capture is sent to Anthropic until you choose to import it — reaching Mirabel’s import steps then follows the same path already described above under “AI features and third-party processing.”

Sign-in and security logs

Mirepoix writes short lines to a security log so the operator can spot abuse like a password-guessing run. Most lines record a refusal at a security checkpoint — a sign-in, an invitation or join code, an email change, or an incoming payment-provider message that didn’t pass. Others record a security event that succeeded, such as a sign-in completing, a new device appearing, a passkey being registered, sessions being ended or revoked, an invitation or join code being used, or a kitchen transfer completing. These lines never contain your recipes or anything else in your kitchen. Which details a line carries depends on which checkpoint wrote it. Some note only what happened; others also record the network address (IP) the request came from, an email address, an identifier for the account, kitchen, or sign-in the request belonged to, or some combination of these:

You already see your own request’s IP address and browser in the sign-in, new-device, and passkey-change emails Mirepoix sends you. What this section adds is that the IP address is also kept in the server’s security log — the browser is not — alongside the admin catalog-gaps page views described above.

Enforcing those limits also means counting recent attempts, and unlike the log lines above — written only when one of the events described there occurs — a counter is written on every attempt. The sign-in and sign-in-code counters are filed under the email address that was typed together with the request’s IP address. The rest are filed under the request’s IP address alone, or under your account or your kitchen — no other counter pairs an address with an IP. Pairing the two is deliberate: it keeps someone else’s attempts from using up the allowance for your own sign-in.

To enforce these limits, Mirepoix temporarily stores counts of recent attempts using the identifiers described above. Each counter stops affecting access when its rate-limit window ends; the sign-in and sign-in-code windows last 15 minutes. The counters are removed later through routine cache cleanup.

These logs don’t expire on a set schedule — what clears them is a new release. Each time Mirepoix is updated the server starts fresh with an empty log, and updates ship every few days, so a line usually survives days rather than months. A storage budget of about 300 MB caps the log as well, but at the rate these lines are written it has never been reached, so it isn’t what removes them. The few previous server copies keep their own logs until they’re cleaned up several releases later, so a line’s real life is longer than a single release — usually a couple of weeks, and longer than that whenever releases are further apart. There’s no fixed ceiling here: how long one of these lines survives tracks how often Mirepoix is updated.

What never happens

Your kitchen’s content — your recipes, tags, pantry, shopping list, menu history, and the link between any of those and your account — never:

The one exception is the k-anonymized ingredient-name aggregate described above under “What the operator sees.” That aggregate is used solely by a human operator to decide which entries to add to the shared catalog. It isn’t sold, isn’t shared with third parties, isn’t used for machine-learning training, and contains no link back to your kitchen.

The import-matching counts described above under “Imported ingredient matches” are the second carve-out, and a narrower one: they carry no ingredient name at all, and the cross-kitchen report shows a figure only once at least three kitchens stand behind it. The one place a kitchen identity does appear is the server’s own log line for an import, which records which kitchen the import happened in beside those counts — never an ingredient name, and nothing else from the recipe. Like the aggregate above, none of it is sold, shared with third parties, or used for machine-learning training.

The other carve-out is the content you choose to send through the AI features, described above under “AI features and third-party processing.” That happens only when you start an AI import or ask Mirabel a question, applies only to what you submit in those moments, and is made with settings that keep your content from being used to train any model. The content you send through the AI features is now kept briefly on Mirepoix’s servers — about three days — to deliver and recover your request, associated with your kitchen and account for that window, then deleted automatically. It’s still not sold, not shared, not used to train any model, and still kept out of logs.

Changes

See also

Last updated August 24, 2026