How CleanSignals works

In one sentence#

CleanSignals is a small Mac app that notices how you use your computer, turns that into simple, private facts called signals, and sends only those facts to a server you choose.

The idea#

Most tools that study computer work record everything: screenshots, every key you press, what you copy. Then they try to hide the private parts.

CleanSignals does the opposite. It never records the private parts in the first place. It looks at what is happening, works out a short fact such as "Excel was used for 12 minutes", and keeps only that fact.

Installing#

  1. Download CleanSignals.dmg from the website and open it.
  2. In the window that appears, drag CleanSignals onto the Applications folder.
  3. Open CleanSignals from your Applications folder, not from the installer window.
  4. The welcome screen asks for one permission, Accessibility. Turn it on in System Settings → Privacy & Security → Accessibility. The welcome screen ticks itself off when it is done.

The app needs macOS 14 or later and works on Apple silicon and Intel Macs. It is signed and notarised by Apple.

How it works, step by step#

  1. You install the app from the website and give it one permission in System Settings, called Accessibility. This lets it see which app and window are in front.
  2. You choose your settings: which signals to send, which apps and websites to ignore, and where to send the data.
  3. The app watches quietly from the menu bar. It notices small moments called events, like "you switched to Mail" or "you stopped typing". Events stay on your Mac.
  4. The app builds signals from those events, such as "45 minutes of focused work in Excel". Signals contain only times, counts, categories and coded ids. Never text, never pictures.
  5. The app sends signals to the server every minute, in a signed package so the server knows they are genuine.
  6. You can see everything sent in the Activity log in the menu bar, and you can pause at any time.

What the app never sends#

Events: what the app notices (15, never sent)#

Event What it means
app.activated You brought an app to the front.
window.changed A different window or document came to the front.
title.changed The same window changed its title, like a new browser tab.
url.changed The browser went to a different web address.
typing.started You started typing after a pause. Keys are not recorded.
typing.paused You stopped typing for two seconds.
click You clicked. The position is not recorded.
scroll You scrolled.
copy.detected You copied something. Only its type, size and app are noted.
paste.detected You pasted something, and into which app.
idle.started No keyboard or mouse use for three minutes.
idle.ended You came back.
screen.locked The screen was locked or the Mac went to sleep.
screen.unlocked The screen was unlocked or the Mac woke up.
heartbeat A "still working" tick every minute while you are active.

Signals: what the app sends (15 designed, 12 in the first version)#

Time and activity

Signal What it tells First version
activity.presence When you were active, idle or away. Yes
activity.intensity How busy each five minutes was, as counts of keys, clicks and scrolls. Yes
work.day.summary When your day started and ended, active time, breaks, longest focus. Yes

Apps

Signal What it tells First version
app.focus Which app was in front, from when to when, and its category. Yes
app.usage.summary Time per app per hour or day, and how often you switched. Yes
window.context The kind of window, such as document or ticket, and the website name. Yes

How work flows

Signal What it tells First version
app.switch You moved from one app to another, and how long you stayed in the first. Yes
task.episode One continuous piece of work: how long, which apps, how many switches and pastes. Yes
handover Something was copied in one app and pasted in another. Not what it was. Yes
process.step Each single action inside a task, for process-mapping tools. Later

Working style

Signal What it tells First version
input.pattern Your typing rhythm. Off unless you switch it on, because it is sensitive. Off
interaction.friction Signs of struggle, like undoing many times. Later

Understanding the work (uses a small classifier built into the app)

Signal What it tells First version
work.category The kind of work, such as email, data entry or analysis. Yes
task.label A name for each task from your own list, such as "payroll". Yes
document.ref A coded id for each file, so shared files can be spotted without names. Yes

Telling activities apart in the same app#

A web browser can be email one minute and a budget document the next. The app tells them apart without pictures. Through the Accessibility permission it can read the web address, the tab title and the text on the page, on your Mac. For example:

What the app reads on your Mac What is sent
mail.google.com, "Inbox (3)" work.category = communication
docs.google.com, "Q3 budget" work.category = documentation
company.atlassian.net, "PROJ-142 Fix login" work.category = ticketing

A few apps, such as Figma or remote desktops, show very little text this way. For those you can switch on the optional screenshot reader. It takes a picture of the window, reads the words in it with Apple's built-in text reader, and deletes the picture straight away. It is off unless you turn it on, and pictures are never kept or sent.

The classifier, simply#

Two signals need to understand what the work is about. For those, the app uses Apple's language tools that are already part of macOS, so there is nothing extra to download. It reads the text in the window for a moment, compares it with the descriptions of your categories, picks the closest one, and forgets the text. Only the label is sent. On Macs with Apple Intelligence switched on, it can use Apple's own built-in AI for a better answer.

Because the categories are matched by meaning, you can edit the list in Settings and the app uses your new list straight away.

Where the data goes#

You decide, in Settings → Delivery. There are three choices:

The app remembers the address and secret for each choice, so you can switch back and forth without losing anything. Signals collected before you connected are sent once you do.

The website and the download never need an account.

The free dashboard#

Knowing it is working#

The CleanSignals icon in the menu bar has a small coloured dot:

Dot Meaning
Green Connected: collecting and delivering.
Yellow Connecting: waiting for the first delivery to succeed.
Red Delivery problem: recent sends failed and will be retried.
Orange Needs permission: Accessibility is not allowed yet.
Blue Not connected: signals are kept on this Mac.
Grey Paused.

Click the icon to see where signals are going, when the last delivery was, and today's numbers. Activity Log shows every event the app noticed (never sent), the latest signals, and every batch sent, with its exact content.

Settings at a glance#

Page What you see or set
Overview Status at a glance, today's numbers, permissions, and which classifier is running.
Signals Which signals to send, each with an on/off switch.
Privacy Apps, websites and title words to keep out completely, idle and task timing, and how long data stays on your Mac.
Categories Your list of work categories and task names, and whether to use Apple Intelligence.
Delivery Where signals go (dashboard, your own webhook, or this Mac), how often to send, and a "Send test batch" button.
Identity Your organisation id, an optional employee reference, this Mac's id and its coded subject.
General Start at login, pause, the optional screenshot reader, import and export of the settings file, and deleting local data.

Your settings are saved in a file on your Mac: ~/Library/Application Support/CleanSignals/deployment-config.json. You can export it and import it on another Mac. It contains your webhook secret, so keep it private.

For companies#

The same app can be customised for large deployments: settings locked by the company, installation on many Macs at once, company-specific signals, and delivery straight into HR, analytics or AI platforms.