Activity classification
TimerOS works out whether your current activity counts as productive or idle entirely on your own device. A rule engine with fixed, scored rules goes first. If it can’t decide, a small machine-learning model, also running on your device, makes the call. There is no large language model, no model download and no cloud AI.
About every 5 seconds, the desktop app reads a few signals about the window you are working in and classifies them. The timer then puts that time into one of the five tracked activity states. (The sixth, Offline, only means the timer is stopped.)
The signals it reads
- The active window title: the text in the title bar of the window you are working in, such as a document or page name.
- The running app: the name of the program that window belongs to.
- Time since last input: how long since you last used the keyboard or mouse. This is used to detect idle time and breaks.
One more signal is read only in some cases: the host of the active browser tab (for example example.com), plus the first part of its path if that part is a word (for example console). TimerOS never reads the full URL, the rest of the path or the query string. The value is kept in memory for the current tab only and is never sent anywhere. It is written to disk only if you switch on Diagnostic recording yourself; your employer cannot turn it on for you. When it is on, the raw window title and the address are saved to a file on your own computer and deleted after 30 days.
The tab is read only in two cases: your workspace has set website rules, which mark a site as productive or idle by its domain, or you have automatic task assignment on, which uses the site as a hint about which task you are working on. Task assignment is on by default, and each worker controls it. If you turn it off in Settings → Activity Detection and your workspace has no website rules, the tab is not read at all. It is also never read while tracking is stopped, in Manual mode, while your computer is locked, or during a break you started.
To get the host, TimerOS asks the browser for the current tab’s address through the operating system’s accessibility interface. It does not read it from the title bar. In memory, the address is cut down to the host and the first part of the path before anything is classified. Browser pages (chrome://, edge://) and file:// addresses are always ignored. This works with Chromium-based browsers, though not in every case. When the host can’t be read, classification uses only the app and window title.
How the decision is made
The rule engine adds up weighted signals (app, title, project, role) and picks productive or idle. When the rules can’t reach a confident answer, a small logistic-regression model on your device decides instead. Rules your employer sets can override both. The result is always productive or idle; the timer adds the break, overtime and off-work labels afterwards.
Three tracking modes
- Automatic: rules plus the on-device machine-learning model.
- Rule-based: fixed rules only, with machine learning switched off. This is how you opt out of AI.
- Manual: no app classification at all. You set productive or break yourself from the timer bar.
Each worker chooses their own mode in the desktop app, in Settings → Activity Detection. In all three modes, TimerOS still detects idle time and breaks, and uses your shift hours to decide what counts as overtime.
Transparency for workers
Any worker, whatever their role, can open Settings → Activity Detection. In Automatic and Rule-based modes, a live “Current Activity” card shows the category, source and reason for the current window. (In Manual mode a short hint appears instead, because apps aren’t classified.) The “How your activity is classified” dialog lists all built-in and employer rules. Workers can read them but not change them; employers set the rules. In Automatic mode you can also mark the current activity as productive or idle, and the model learns from it right away, on your device. The monitoring notice sets out our approach to privacy in full, and our blog post on time tracking without surveillance explains the reasoning behind it.