We make one of the tools below. Brownie is ours. The tools it is set against here are real and several of them are good — where one does something we do not, the table says so, and each links to its own site so you can check.
A reminder, a task, a line in a personal CRM. Completely reliable, and they contain exactly the promises you already knew about. The step that fails — noticing, at eleven at night, that the sentence you just sent was a commitment — happens before any of them start.
Gmail nudges a thread you have not answered and a sent message nobody replied to. Boomerang will bring one back if no reply arrives. Both work and both are automatic. Both can also only see email, and they watch the thread rather than the sentence — a reply closes the nudge whether or not it was about the thing you promised.
WhatsApp. iMessage. Telegram. The channels where you actually say “tonight”, to the people most likely to remember that you did. There is no API into any of them, so almost nothing is watching, and what is watching is usually a transcript dump rather than anything that understands a commitment.
That third column is not an accident, and it is the same wall we ran into counting Obsidian plugins: of 9,759 in the community registry, not one mentions iMessage. Email has an open protocol anyone can build against. The messaging apps have local databases on your own machine and nothing else, which means the only thing that can read them is a program running on that machine with your permission. It cannot be a web service, so almost nobody builds it.
| Tool | How a promise gets in | Channels it can see | Tracks what you are owed | How it closes |
|---|---|---|---|---|
| Reminders, Things, Todoist | You type it in | Any — you are the input | Only if you type that in too | You tick it off |
| Gmail nudges | Automatic | Gmail only | Yes — “sent, no reply yet” | Any reply stops the nudge, on the thread not the promise |
| Boomerang | You set it per message, before sending | Gmail and Workspace; Outlook separately | Yes — that is the whole feature | A reply arrives, or the timer returns it to you |
| Monica | You log the interaction yourself | Any, by hand | Only what you recorded | You mark it done |
| followup-debt | Automatic — reads your Sent mail and finds real commitments | Gmail only | No — your own commitments only | Counts it resolved when you follow up again, not when they answer |
| Brownie | Found in the message itself, on both sides of it | WhatsApp, iMessage, Telegram, IMAP mail, Slack, Teams | Yes — kept as its own side of the ledger | The next night reads the replies and closes it |
Checked 1 November 2026, from each tool’s own documentation. The dedicated promise-tracker apps on the iOS and Chrome stores are left out rather than guessed at: their listings describe manual logging, but we have not run them, and a row we cannot stand behind is worse than no row. Correct something by opening an issue.
The obvious way to build this is to match phrases — “I’ll”, “by Friday”, “tonight” — and the obvious result is a list of three hundred items, most of them pleasantries, which you abandon on day two. A promise tracker is only worth having if it is short enough to read.
So there is a test, and it is in the code rather than in a prompt: an entry has to have a deliverable that could be seen done. Sentiments do not qualify. Plans to make a plan do not qualify. Promises to nobody in particular do not qualify. “We should get dinner” never enters the ledger; “I’ll send the scan report tonight” does, because a later message can settle it either way.
Every person’s note carries a small ledger: ⏳ what is open — they asked you, or you promised them — ✅ what has been answered, shown for a fortnight and then folded into a one-line history, and ⌛ what has been let go. What you owe and what you are owed are different problems and they are tracked as different things, which almost no task manager does, because a task manager assumes every item is yours.
“What did I promise Meera?” is a question you can type into the app, and the answer comes out of your own notes with a citation on every claim — a chip that opens the actual message, in WhatsApp or Messages or Mail. Not a model’s impression of your life. The sentence you really sent, with its date. Claude Desktop and Cursor can ask the same question through MCP, on that Mac only.
Loops is not a separate app you have to visit. At an hour you choose, a four-billion-parameter model on your own GPU reads everything new — messages, mail, notes, files, calendar — and almost all of it is thrown away. What survives becomes notes, and the promises in it become the ledger. In the morning there are a handful of cards, ranked: Amma has been waiting since Tuesday for a scan report that has been sitting in your Downloads since Monday. Karan said he would send his share of the villa on Friday and nothing has come. Each card shows why it is there, the message it came from, and a draft in your own voice.
Raw messages never leave the machine. Only short summaries go to whichever model you chose, and the app lists every byte that left, kept thirty days. Choose “This Mac only” and the figure is zero — no key, no account, nothing out. It drafts, and then it stops: there is no setting anywhere that lets it send on your behalf.
Free, AGPL-3.0, developed in the open, so the behaviour described here is readable rather than promised. Apple silicon, macOS 14 or later, 8 GB of memory, one 3.7 GB model download.
Related, if you are comparing more broadly: local AI assistants for Mac, and an AI assistant for Obsidian — where these notes live, and why nothing else fills a vault. And Apple Intelligence vs Brownie — it can search every promise you ever typed, the moment you think to ask.