Your day,
as you approved it.
Standup watches what you actually work on — locally, on your machine — then shows you the day it assembled. You edit it. Only then does a report reach your manager.
Windows 10 or later · x64·macOS 12 or later · Apple silicon & Intel
Linux is not supported. Wayland cannot give window titles to an unprivileged app, and a tracker that silently records nothing is worse than none.
You forget what you did.
You write it up at 9pm, from memory.
Your manager reads fiction.
It watches. You approve. Then it sends.
The middle step is the entire point. Every other tracker goes straight from the first to the third.
It notices what you were doing.
A background agent samples the foreground application and window title every thirty seconds, into a SQLite file on your own disk. Not a server. Yours.
Idle time is recorded as idle — never deleted. A meeting, a phone call and a coffee break look identical to a sampler, so it surfaces them as time for you to explain rather than quietly erasing the part of the day you most need to describe.
- No screenshots. The app never captures your screen — there is no code path that can.
- Exclusions apply before the write. An excluded app produces no row at all, rather than a row that is redacted afterwards.
- Raw samples never leave. There is no endpoint that accepts them — not behind a flag, not for support.
You edit the day it assembled.
At a time you choose, the agent shows you the day it built — alongside any commits still sitting unpushed on that laptop.
Rename things. Merge them. Split them. Delete what is nobody’s business. Add the two hours of whiteboard work no tracker could ever see. What you submit is the report; what you did not approve does not exist.
An empty day is a legal answer. Submitting nothing means nothing gets sent — even if you committed code.
- 09:12 – 10:40
- 10:40 – 11:25
- 11:26 – 11:26commit
- 11:30 – 12:12
- 13:05 – 14:20
Try it — rename an entry, merge two, delete one.
It writes it up and sends it.
Your approved day is merged with the day’s commits, written into a narrative by your own AI key, appended to your Google Sheet, and emailed from your own Gmail with your own template.
Every one of those is a row in a database, not a line of code — which sheet, which columns, which recipients, which prompt, which schedule, in which timezone.
Reads back the range the append returned — never “the last row”, which a colleague’s concurrent append would corrupt silently.
To manager@acme.com
Subject Daily report — Priya R. — 11 Aug
Spent the morning on mid-cycle proration in the billing service, landing a fix for plan changes that previously double-charged…
Your accounts. Your keys.
The report is written with your AI key, appended to your spreadsheet, and sent from your address. Standup holds no shared credential that could send mail as you.
Nothing is hardcoded.
Every value below is a row in a database, not a line of code. Onboarding a new team never means a deploy.
Which sheet
and which tab, and which column holds what
Which repositories
across all branches, by author date
Which recipients
with your own subject and body template
Which AI
your key, your provider, your prompt
Which times
review and send, in your own timezone
Which days
any subset of the week
Under the hood
The boring guarantees.
The ones that decide whether a manager gets one correct report or two contradictory ones.
Versioned envelope, per-record IV. OAuth tokens are ciphertext in the database — a dump contains no usable key.
A fixed offset is rejected outright. An offset works until the region next changes its clocks, then fires an hour wrong forever.
Each stage persists its result. A retry resumes at the first incomplete one — never a second sheet row, a second AI charge, or a second email.
One unique constraint on (schedule, date), and the row is inserted before the job is enqueued. A second dispatcher loses the race quietly.
It becomes a `missed` row with a reason, and you are told. Skipping quietly is the failure a broken agent would hide behind.
Amending a sent day rewrites the existing sheet row and threads the correction onto the original email. One row per person per date, always.