Upkeep

Say it once. Confirm it. Done.

Talk the way you'd tell a person — "dentist tomorrow at 3, and the furnace filter every three months". Upkeep works out which parts are appointments, which are reminders, and which are chores, then shows you its reading before anything touches your calendar.

One sentence in, typed items out

Say "dentist tomorrow at 3, pick up the prescription Thursday, and the furnace filter every three months" and Upkeep sorts it into four kinds, each with the fields that kind actually needs. An appointment with no stated end gets an hour; a reminder with no stated time lands at 9:00 am. Because dates are resolved by ordinary arithmetic rather than left to the model, "next Tuesday" means next Tuesday, and Jan 31 plus a month lands on the last day of February.

EventDentist — starts tomorrow 3:00 pm, ends 4:00 pm
ReminderPick up prescription — due Thursday 9:00 am
ChoreFurnace filter — every 90 days from completion

Nothing is written until you say so

Every captured item lands in a review inbox first, with a confidence score, the fields Upkeep extracted, and the sentence it came from. One function in the codebase is allowed to write to Calendar and Reminders — it re-reads the item first and refuses anything you haven't confirmed.

CaptureSpeak it, or type it. On macOS, transcription runs on the device.
ExtractThe transcript becomes typed items — event, reminder, chore or note — then a deterministic pass repairs the dates.
ReviewYou see exactly what it understood, next to what you actually said. Confirm, or reject. Confirm all if it got everything right.
WriteThe one trust gate: it re-reads the row and throws for anything whose status is not confirmed.

Chores that count from when you did them

Set a repeating reminder to change the oil every 90 days and it fires every 90 days whether or not you did it — so it drifts, you start ignoring it, and eventually you turn it off. An Upkeep chore is due 90 days after you actually finished it. Tick it off and the next one is scheduled from that moment. Every time you open the app, Upkeep reconciles: if you completed the reminder in Reminders.app it records the completion and schedules the next, and if you deleted it, it notices the orphan and puts a fresh one back.

Upkeep chores list showing furnace filter, watering plants and an overdue oil change, each with last done and next due

A read-back of what's coming

A short briefing over the day, week or month you pick, built from a fact sheet of your real events and reminders — so it can summarise them, not invent them. Overlapping events are detected and called out by name, so a double-booking surfaces before the day does.

Works without a key

No API key, or the call fails? The digest falls back to a plain deterministic summary rather than showing you nothing.

Your keys, your device

Bring your own LLM provider key. It's held in the system Keychain, and your data stays in a local database on the machine.