Recalo
By Fishteen LLC
Overview
Save anything from anywhere—recipes, movies, books, places, people, trips, notes, todos, and more. Recalo turns every save into a structured, searchable item instead of another forgotten bookmark. Save reels from Instagram or TikTok, links and photos from the web, and useful notes or todos from ChatGPT, Claude, Gemini, and other AI assistants. Use Recalo inside ChatGPT to search, open, and act on what you’ve saved. Ask ChatGPT to plan meals from your recipes, turn the ingredients into a grocery checklist, share the list, and add reminders. When it’s time to cook, open the recipe in the Recalo app for Cook Mode with step tracking, built-in timers, serving scaling, unit conversion, and notes for next time. Recalo also brings everything you’ve saved back into the conversation. Pull up a trip itinerary and add new hotel bookings, find a five-minute todo, update a checklist, or remember who recommended something and what you thought. Everything stays organized in your private Recalo library and synced across iPhone, iPad, the web, ChatGPT, Claude, Gemini, and other AI assistants.
Tools
recalo-create-event
ChatGPTnounId the event is about, a verbSlug (e.g. "do", "watch", "read"), and tense ('past' or 'future'). Optionally attach a date via eventLocal + datePrecision, free-text notes, a subject (who did it) and companions. Dates use the user's timezone unless you pass timezone. To CHANGE an event that already exists (e.g. reschedule a reminder), do not record a new one — fetch the noun to get the event id and use recalo-update-event.recalo-create-noun
ChatGPTnounTypeSlug is one of the types in the Recalo type catalog. The type's schema, fetched with recalo-fetch recalo://noun-type/<slug>, defines the required fields (e.g. cover_emoji), field shapes, and date formats that data must match, so fetch it before a direct data create. Provide either data (a plain entry matching that schema) or canonicalNounIds (movies, shows, books and places: the ids chosen from a lookup; the first is the primary, the rest are merged into it). A movie, show or book the lookup can't find is saved with data, as is a new recipe. Returns a link to the new entry. A new variation of a recipe the user holds: remixed_from (its id) + remix_prompt + either patch (JSON Patch ops against its data) or full data. To change an existing entry, fetch it and use recalo-update-noun instead. Pass the links it came from in sources.recalo-create-page
ChatGPTsources.recalo-fetch
ChatGPTfiles (when any): refs of the images the app read to write it, whether or not they appear in its content — pass any /api/files/<uuid> ref to recalo-get-file-urls to open it. It also lists sources (when any): the links it came from, each {url, role}, plus the post's author, summary and post_type when known. A noun fetch also returns its events (when any) — past and future, each with its id — plus a hint on how to change them (and, for a checklist, how to show it): for most entries pass an event id to recalo-update-event; for a checklist, edit the item via recalo-update-noun instead (that keeps its reminders in sync). Each noun fetch reports permission: owner or edit means you may change it; view means it is read-only and any write will be refused.recalo-get-access
ChatGPTrecalo-get-file-urls
ChatGPT/api/files/<uuid> refs from any fetched entry — an image in a page, a photo on an event, an entry's files — into temporary URLs you can open or show. Pass the refs verbatim. Each URL is valid for 24 hours; refs that are not the user's own ready images come back as unavailable.recalo-lookup-metadata
ChatGPTnounTypeSlug and a query (a title or name). Returns candidates each with a canonical_noun_id — pick the right one(s) and pass them to recalo-create-noun. Subject to a daily limit.recalo-revoke-share
ChatGPTtarget is one of: a share_id (a person who has access, or one sub-page grant of theirs from recipients[].scope), an invite_id (an invite not yet accepted), or { link: true } to turn off the general-access link. Ids come from recalo-get-access. With cascade (default true) removing a person also removes their access to the sub-pages that were shared with it; a sub-page share_id removes just that one. Turning off a link does not remove people who already joined through it.recalo-search
ChatGPTrecalo-share
ChatGPTto is one of: an email address, one of the user's person cards (person_noun_id from recalo-search), or { link: true } for a general-access link. permission is view or edit. child_noun_ids adds sub-pages to the share (ids from recalo-get-access); it only ever adds, and to stop sharing one use recalo-revoke-share with that sub-page's share_id. Calling it again for the same recipient updates their permission and sub-pages instead of sending a second invite, so it can lower edit to view; calling it again for a link replaces the old link, which stops working. Returns what happened (delivered directly, emailed, pending acceptance, or a link) and the item's url.recalo-show
ChatGPTrecalo-update-event
ChatGPTid and the fields to change. To change the date, pass both eventLocal and datePrecision. Get the id by fetching the noun the event belongs to (recalo-fetch returns its events with ids). Do NOT use this for a checklist item's reminder — change those by patching the item's date via recalo-update-noun, which keeps the reminder in sync (creating, updating, or removing it as needed).recalo-update-noun
ChatGPTid, the version you fetched (optimistic concurrency — stale → you'll be told to fetch again), and a patch array (or only sources). Ops: add, remove, replace, move, copy. Paths are JSON Pointer against data: "/title", "/ingredients/2/quantity", "/ingredients/-" (append). Checklists: address an existing item or section by its id, not its position: "/items/<id>/checked", "/items/<id>", the same form for an item inside a section. Append with "/items/-", or "/items/<sectionId>/items/-" for a section. A position works only as an insert point ("/items/2", the path of add/move/copy); any other positional path is rejected. Replacing a whole entry must keep its id (copy it from data) or its reminder is lost. Several ops in one patch are fine: each id is looked up after the ops before it. Reorder with move ("from": "/items/<id>"); if you must remove+add, copy the existing item's id into the added value verbatim (omitting it mints a new id and cascade-deletes that item's reminder); brand-new items should omit id so the server assigns one. Movies, books and other entries saved from a lookup can't be edited; recipes, notes, checklists and entries saved with data can. Record personal data on a looked-up entry as events instead. To add a link, pass it in sources (a patch is optional then).recalo-update-page
ChatGPTsources.Capabilities
Example Prompts
Click any prompt to copy it.






