Duly blog Get early access

Why I'm building Duly

Duly is a small Mac app that keeps track of what people owe you. Here's why I think it needs to exist, where it helps, and how I'm building it.


Duly keeps track of what people owe me. When I ask someone for something in Slack, email or WhatsApp, Duly notes it, watches for the reply that delivers it, and tells me when it arrives. If it hasn't arrived and I open a chat with that person, Duly reminds me. It lives in the Mac menu bar.

I'm building it because a lot of my week is spent waiting on other people: investors, customers, lawyers, teammates, and now AI agents. I ask, I move on to the next thing, and then I have to remember to check. None of the tools I use follow those asks through to the end.

Where the idea came from

Duly started with a sticky note. To-do lists never stuck for me because I had to remember to open them. A note on the edge of my screen worked better, because I saw it every time I looked up. But it went out of date the moment someone replied, and it couldn't tell me Priya had already sent the file.

Inbox assistants didn't fix it either. They're good at email, but my asks also live in Slack, WhatsApp, calls and terminals, and most of them want to chat with me rather than keep track of anything.

So I wanted a sticky note that updates itself: something small in the corner of my screen that knows what I'm waiting on, changes when the answer comes in, and stays out of the way the rest of the time.

Where Duly earns its keep

In every case below, something I need is with someone else, and if nobody follows up it sits there.

Fundraising. An investor says they'll take it to Monday's partner meeting and come back to me. Another offers to introduce me to a partner who knows the space. A third asks for the data room and promises feedback by Friday. I don't want to chase any of them too early, and I can't afford to forget. Duly logs each promise, and when I open that investor's thread or join a call with them, it shows what they still owe me and how long it's been.

Closing customers. Before a deal closes I usually need several things from the customer: the signed MSA, a PO number, answers to their security questionnaire. Each one blocks revenue, and most of them sit with someone other than my champion. Duly tracks each item separately, so "waiting on Acme" becomes three specific things, each with a date.

Pilots. In a B2B pilot the slowest step is often the customer: credentials, a list of sites, sample files, an IT approval. Duly tracks what the customer owes the pilot, which is the part that slips.

Warm intros. "I'll intro you to Sarah" might be the most common promise in startups, and one of the most often forgotten. Duly picks it up from the chat and reminds me the next time I'm talking to that person.

Hiring. Scorecards from my own interview panel, references from the candidate, the signed offer. Duly shows me which interviewers haven't filed feedback yet.

Lawyers, accountants and government. Redlines from counsel, year-end documents from the accountant, a program officer who said they'd confirm eligibility. These come back on someone else's schedule, and weeks can go by before I notice.

My own team and AI agents. A PR review I asked for, a design sign-off, a coding agent I left running. Same loop, different counterpart.

If I had to pick one, the promises other people make to me matter most: intros, feedback, signatures. People make them in good faith, then forget, and chasing them feels awkward. That's where Duly saves me the most.

Each open ask costs a little. Added up, it's a deal that slips a week because nobody followed up, an intro that never happens, a pilot that stalls waiting on a login.

What Duly does

  1. It notices the ask. When I ask someone for something, Duly picks it up. If it's sure, it adds it and gives me a few seconds to undo. If it isn't sure, it draws an orange frame around the message and asks me to confirm with one click.
  2. It watches for the answer. When a reply delivers the thing, the orange dot in my menu bar lights up and Duly offers to clear it. A reply like "on it" gets noted, but the item stays open. And most asks go back and forth first: if Ben comes back with a question, that's my move too. Duly flags it, and once I answer, the ask goes back to waiting on Ben.
  3. It reminds me at the right moment. When I open a chat with Marcus, a small card next to my cursor says he still owes me the signed SOW.

When it misses something, I add it myself. I tap ⌥D and drag over the part of the screen, or hold ⌥D and say it. Duly uses those catches to learn what it missed.

And asks rarely come one at a time. The Acme meeting needs a one-pager from Aisha and a case study date from Ben; the pilot needs logins from the customer and a config from my own team. Duly groups those into one loop, so I see the thing I actually need and who is holding it up, and the nudge goes to that person.

Duly won't manage my tasks, write my emails, summarise my inbox, plan my day or do the work for me. Before adding any feature I ask whether it helps close an ask someone made. If it doesn't, it stays out.

Control first, more autonomy as it earns it

The hardest design question is how much Duly should do without asking me. If it does too little, it's another list. If it clears an ask that wasn't delivered, I lose something I cared about and stop trusting it.

So Duly starts cautious and does more on its own as it proves itself, one person and one app at a time.

How sure Duly isWhat Duly doesWhat I do
Very sureAdds or clears the item on its ownNothing, or undo
Fairly sureFrames the message on screenOne click, yes or no
Not sureStays quietGrab or say it, if it mattered

Every confirm, dismiss, undo and manual catch teaches it something. If I dismiss every frame on one person's messages, it stops framing them. If it keeps getting Slack deliveries right, it starts clearing them on its own there.

For now it never sends a message for me and never reads an app I haven't allowed. It drafts nudges, and I decide whether to send them.

Growing with the technology

The parts people see (the menu bar, the dot, the frame and the tap) should stay the same while the models underneath improve. What should change over time is how often Duly gets it right without asking me.

Today the everyday judging runs on Apple's on-device model, so my messages stay on my Mac. That model is small, so I can switch on Claude for the things I grab or say, or for the cases the small model isn't sure about. A side-by-side mode shows me where the small model falls short.

As Apple's on-device models get better, more of the judging moves onto the Mac and I need Claude less. Accuracy goes up without sending more data off the device.

As my history builds up, Duly learns who reliably delivers, how long each person usually takes, and which of my messages are real asks. That history stays on my Mac.

As AI agents do more of the work, they'll be on both ends of the loop. I'll hand work to agents and they'll hand work back. Duly should track those the same way it tracks people: a coding agent that finished, a research agent waiting for my approval.

So I'm designing around the job rather than around a particular model. When a better model ships, Duly gets more accurate and nobody has to relearn how to use it.

How work tools got here

Slack moved team conversation out of email and into channels. Work got faster, and asks started getting made in threads that scroll away by the afternoon.

Notion gave teams flexible docs and wikis. It knows what someone wrote down and kept up to date, and nothing else.

Superhuman showed that people will pay a premium for a fast, focused tool they use all day, and it onboarded users one by one. It covers email only.

AI assistants are now built into most of these apps, and agent platforms connect to thousands of tools. Most of them start with a chat window, and few of them follow a handoff to the end.

Each of these tools sees its own app. My asks start in one app and get answered in another, so Duly sits across all of them in the menu bar instead of inside one. From Superhuman I want the craft, the personal onboarding and the willingness to charge for quality.

Where this goes

  1. Duly for one person. It catches my asks and the promises people make to me, knows when they're delivered, and can optionally connect to Slack, Gmail and Outlook to catch replies I haven't opened.
  2. Duly for both sides. When the person I asked also uses Duly, my "waiting on Marcus" shows up as his "you owe me," and delivering clears it for both of us. Over time that becomes a shared record of who owes whom, across people and companies.
  3. Duly where money is waiting. Some open asks cost real money: a signed contract, a client approval, a document holding up a deal, an invoice. That's where Duly goes deeper, with workflows and integrations for that kind of work.

How I'm building it

  1. One job. Duly tracks what people owe me until it's delivered. Anything else waits or gets cut.
  2. It stays quiet. No chat window, no feed. A dot when something's back, a tap when it's useful.
  3. It asks before it acts, and acts on its own only after it has proven itself.
  4. Nothing goes out without me. Duly drafts, I send.
  5. It runs on my Mac and reads only the apps I allow. Anything that leaves the device is optional and shows up in a log.
  6. It works where I already work: Slack, email, WhatsApp and whatever comes next. There's no new app to live in.
  7. It's designed around the job, so better models make it more accurate without changing how it works.

Try it

Duly is in early access for the Mac. If you hand off a lot of work and you're tired of chasing from memory, I'd like you to try it. Founding members pay $15 a month, locked in for life, and I'll set you up personally.

Get early access