Not another pomodoro
A timer doesn't know you're on a call.
That's the whole thing. One of these reads a clock. The other reads a room.
14:02, nineteen minutes into a Slack huddle
A traditional timer
Time's up
Take a break.
It read a clock. That is everything it read.
Fires mid-sentence in your standup. You dismiss it. You dismiss the next one out of habit. You uninstall it on Thursday.
sigstop
Nothing arrives.
- clock45 min continuous. A break is due.
- signalSlack is frontmost.
- vetoThe microphone is live.
- outcomeWithheld. Not queued, not counted against you.
It read the clock too. Then it read the room.
Meetings
Nothing lands in your Slack huddle.
Or your Google Meet, your Zoom, your Teams call, or the standup you are already halfway through. While a microphone or a camera is live, nothing is drawn on your screen, and nothing is waiting in a queue for the second you hang up. Here is a whole call, minute by minute.
- microphonein use by anything
- camerain use by anything
- fullscreena shared window
A yes or no bit on the device. Reading one is not opening a stream, so macOS asks you for nothing and neither does this.
Call starts
prompt withheldMicrophone goes live.
A break comes due
prompt withheldIt is not delivered, and it is not queued. A prompt already on screen when the call started would have been withdrawn.
You mute
still withheldMuting and leaving look identical from here, so the app does not guess between them. The hold continues.
Call ends
grace, still withheldThe meeting app is still open, so the hold runs on rather than stopping the instant the device goes quiet. Never longer than twenty minutes.
Released
prompt allowedThe work clock was paused for the whole call, so none of it counted towards a break you had not taken.
The case it misses, said out loud
A screen share with the microphone muted and the camera off. Knowing a display is being captured needs the Screen Recording permission, which is the one permission that would let this app read your screen, and it is not going to ask for it. The menu has a line for that: I'm in a meeting.
Same work, redistributed
It's the same eight hours.
This isn't a productivity claim and it isn't a health claim. It's a shape. The work gets done either way, one version just has seams in it.
Without
One block.
- span
- 9h 00mspan
- unbroken
- 9h 00munbroken
- 09:00Start
- 10:00, Still going
- 11:30, Deep in the debugger
- 13:00Notice your back5h 00m unbroken
- 14:00Keep going anyway7h 00m unbroken
- 16:00Reading the same line8h 30m unbroken
- 17:30Diminishing returns9h 00m unbroken
18:00
With sigstop
The same block, with seams cut into it, and two it deliberately refused to cut.
- span
- 9h 00mspan
- seams
- 7seams
- away from the desk
- 1h 10maway from the desk
- held back
- 2held back
- 09:00Start
- 09:45SIGTSTP, a good seam5m
- 09:50, SIGCONT
- 10:35SIGTSTP5m
- 10:40, SIGCONT
- 11:25Skipped, you're on a call25m
- 11:50SIGTSTP, call ended5m
- 11:55, SIGCONT
- 12:40Lunch. Away from the desk.40m
- 13:20, SIGCONT
- 14:05SIGTSTP5m
- 14:10, SIGCONT
- 14:55Held, your camera is on35m
- 15:30SIGTSTP, the camera went off5m
- 15:35, SIGCONT
- 16:20SIGTSTP5m
- 16:25, SIGCONT
18:00
- Running
- A process doing what it is supposed to be doing.
- Still running
- The same work, hours later. Nothing in the loop notices the difference.
- Seam
- SIGTSTP, then SIGCONT. The stack is still there when you get back.
- Held
- A break came due and was deliberately not fired. This is the feature, not a miss.
Where this sits
We are not the first thing that tells you to take a break.
Here is the honest version, including the parts we lose.
| sigstop | timers | wellness | nothing | |
|---|---|---|---|---|
| Knows which app you are in | yes | no | sometimes | no |
| Knows you are on a call and shuts up | yes | no | no | yes |
| Tells you why it believes that | yes | ·not applicable | no | ·not applicable |
| Admits when it does not know | yes | ·not applicable | no | ·not applicable |
| Works with zero permissions granted | yes | yes | no | yes |
| Its only connection is an update check you triggered | yes | sometimes | no | ·not applicable |
| Verifies every update against a key inside the app | yes | sometimes | sometimes | ·not applicable |
| Source you can read and fork | yes | sometimes | no | ·not applicable |
| Free, no account, no tier | yes | sometimes | no | yes |
| Escalates instead of nagging identically | yes | no | no | no |
| Runs on Windows and Linux | no | yes | yes | yes |
| Keeps a streak you can lose | no | no | yes | no |
| Tracks anything for your manager | no | no | sometimes | no |