No screenshots. Ever.

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.

1On your machine

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.

Tracking · this machine only
09:12Code.exeinvoice.ts — billing-service
09:12→ sqlite~/.standup/local.db
09:42Code.exetax.ts — billing-service
10:041Passwordexcluded — not written
10:04→ sqlite(no row)
  • 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.
2Before anything is sent

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.

Tuesday, 11 August
4h 10m across 5 entries
  • 09:1210:40
  • 10:4011:25
  • 11:2611:26commit
  • 11:3012:12
  • 13:0514:20

Try it — rename an entry, merge two, delete one.

3At the time you set

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.

Team standup — AugustA2:D2
Date
Name
Summary
Hours
2026-08-11
Priya R.
Prorated mid-cycle plan changes…
6.2

Reads back the range the append returned — never “the last row”, which a colleague’s concurrent append would corrupt silently.

From your GmailSent 21:00 IST

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…

The part that matters

A tracker your team will actually install is one that reports to you first.

Surveillance software fails for a simple reason: the person being measured has no reason to keep it running. Standup inverts that. The evidence is yours, it stays on your disk, and nothing is reported that you did not read first.

01

No screenshots. No keystrokes.

The agent samples which application is in front and what its window is called. There is no screen capture in the product — not disabled, not gated behind a setting. It does not exist.

02

Raw samples never leave your machine.

No endpoint accepts them. Not behind a feature flag, not for support, and not “for AI context” — which is the version somebody will eventually propose, because it would genuinely produce better reports.

03

Excluded apps are never written down.

Exclusions are evaluated before the row is stored, never redacted afterwards. Not writing is a property you can verify; redacting after storage is a promise, and by then the title already reached the disk and the backup.

04

Window titles are never logged.

Not to a log file, not to a crash report, not to telemetry — on either side. One helpful console line while debugging would undo the entire model, so the error paths deliberately swallow the object they were reading.

05

Your manager sees the day. Never the detail.

There is no permission that grants anyone a view of another person’s activity entries, because there is no screen, export or endpoint that renders them. An admin can see that Tuesday was missed. Never what Tuesday held.

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.

Google SheetsGmailGitHubGoogle GeminiOpenAIAnthropicLocal gitGoogle Workspace

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.

Credentials at restAES-256-GCM

Versioned envelope, per-record IV. OAuth tokens are ciphertext in the database — a dump contains no usable key.

SchedulingIANA zones only

A fixed offset is rejected outright. An offset works until the region next changes its clocks, then fires an hour wrong forever.

PipelineCheckpointed

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.

Duplicate runsImpossible

One unique constraint on (schedule, date), and the row is inserted before the job is enqueued. A second dispatcher loses the race quietly.

A day nobody submittedRecorded, not skipped

It becomes a `missed` row with a reason, and you are told. Skipping quietly is the failure a broken agent would hide behind.

CorrectionsUpdate, never append

Amending a sent day rewrites the existing sheet row and threads the correction onto the original email. One row per person per date, always.

The questions people actually ask.

Install it on your own laptop.

Track a day. Look at what it collected. Delete anything you do not want anyone to see. Then decide whether to submit it.

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.

Already have it running? Sign in to the web companion to check today from your phone.