What was I doing?
It watches which app and window you are in, a small AI model on your own computer labels what you were doing, and at the end of the day you get a timeline, a report and a standup draft. No account, no cloud, no telemetry.
Everything stays on your computer.
What it does
Raw data first, reports built from it on demand.
- Records the focused window
- App, window title and a screenshot of that window (not the whole screen). Idle time without keyboard and mouse is noticed. Recording is off by default until you switch it on.
- Local AI labels each snapshot
- A llama.cpp engine with a Qwen3.5 model runs on your computer and gives every snapshot a category, a description and a task. Or connect your own OpenAI-compatible server (Ollama, LM Studio, vLLM), or turn AI off.
- Reports and timesheets
- A week or a month by day, by activity family and by task. Export CSV, get hours per task rounded to 15 minutes, and copy a standup draft for yesterday and today.
- More sources than the window
- Git commits, browser pages, ActivityWatch, Mattermost, GitHub, GitLab, Jira, YouTrack and Claude Code sessions. Feed anything else with the wtf emit command or your own connector.
- Your AI assistant can ask it
- A built-in MCP server lets Claude, Cursor and other clients search your day, read timelines and build standups or billing. It reads only; it never returns screenshots.
- You decide what is recorded
- Pause any time, skip idle time, exclude apps and window titles (password managers are excluded by default), classify with your own rules, and keep screenshots for a limited number of days.
A day on one screen
Every stretch of the day lands in the lane of its kind of work. The time under each lane name is what the report will say.
Example data
Recorded: 7 h 50 min
Journal of the day, written by the local AI
- 09:20–10:50 Editing token refresh in the API clientCode · 1 h 30 min · Task WTF-12
- 11:20–12:00 Call: sprint planningCalls · 40 min · No task
- 13:20–14:00 Reading the OAuth refresh docsResearch · 40 min · Task WTF-12
- 14:00–16:10 Tests for token refresh, fixing a raceCode · 2 h 10 min · Task WTF-12
Where the time goes
One week, by kind of work. The bar and the rows show the same minutes; the report gives them by day and by task as well.
Example data
Week total: 41 h 40 min
How it works
-
It records
The active window, its title and a snapshot, plus the sources you enabled: git, browser, Jira and others.
-
AI labels
A local model sorts each snapshot into a category and a task. Your own rules always win over the AI.
-
You look back
See the day on a timeline, build a report or a standup, export CSV, or ask your AI assistant over MCP.
How it works
Four stops, all on your computer. Nothing here needs an account.
Your computer
-
It records
The focused window: application, title and a snapshot of that window. Idle time is noticed.
Sources you enable: git, browser, Jira, Claude Code and others.
-
Local AI labels
llama.cpp with a Qwen3.5 model on 127.0.0.1, or your own OpenAI-compatible server.
Each snapshot gets a category, a description and a task.
Your own rules win over the AI.
-
Journal on disk
A SQLite database and encrypted snapshots in your user folder.
Reports are built from it on request, nothing else is stored.
-
You look back
Today: the day as lanes.
Reports: week, month, CSV, standup draft.
MCP: your assistant asks, read-only.
Off until you turn them on: your own AI server, a ClickHouse copy, service connectors.
Ask your day
Your AI assistant calls the app over MCP and answers from your own records. It only reads, and it never gets screenshots.
Example data
-
What was I doing on Tuesday afternoon?
Tool
timelinedateFrom 14:00 to 16:10 you were in code on task WTF-12: tests for token refresh and a race fix. Then 20 minutes of chat and 30 minutes of review.
-
How many hours did WTF-12 take this week?
Tool
time_bygroup_by = task11 h 15 min over 4 days: 8 h 30 min of code, 2 h 15 min of review, 30 min of reading.
-
Write my standup.
Tool
standupYesterday: WTF-12, token refresh in the API client, tests written, one race fixed. Today: finish the review comments.
Changing settings through MCP is off by default and needs your permission in the app.
Nothing leaves your computer until you allow it.
The app has no servers, accounts, telemetry or analytics. Everything below is off until you turn it on.
Snapshots are stored encrypted (AES-256-GCM) and deleted after 30 days by default. Keys go to the system keychain.
What leaves the computer, and when
- Installing the built-in AI
- Ordinary download requests to github.com (llama.cpp) and huggingface.co (the model). After that the AI runs on this computer. The full installer downloads nothing.
- Your own AI server
- The snapshot, title, application, recent context and recognised text go to the server you set. A server that is not on this computer needs your explicit permission.
- Service connectors
- Requests with your token to the address you gave: Mattermost, GitHub, GitLab, Jira, YouTrack, ActivityWatch. The program writes nothing there.
- Copy to ClickHouse
- Copies of the records and AI answers go to your ClickHouse. Snapshots are not sent, only the file name.
- Update check
- Once a day, a request to api.github.com for the latest release, with no data about you. On by default. The installer downloads only when you press the button.
- MCP client
- Whatever your MCP client asks for, on this computer. After that the client and its model handle the data under their own rules.
Everything stays on your computer
Compared by design, not by brand: this app against a tracker that is built around its vendor’s cloud.
No product is named or measured here.
Encrypted, then forgotten
A snapshot is encrypted when it is written and removed after the number of days you set. What you did stays in the journal.
- Encrypted on write
- AES-256-GCM. The key is made on first use and kept in the system keychain when there is one.
- Repeats are not stored
- A snapshot that looks like the previous one of the same window is skipped, and the AI does not see it twice.
- Your choice of days
- The default is 30. Records of the day, the application, the title and the AI answer stay.
Screenshots








Questions and answers
Does my data leave my computer?
No, unless you turn on something that needs it: your own remote AI server, a ClickHouse copy, service connectors (they query the address you set) or the daily update check, which asks GitHub for the latest release. The privacy page lists every case.
Do I need to install or configure AI?
No. On first launch with the built-in AI the app downloads the llama.cpp engine (about 12–33 MB) and a model (about 0.7–3.4 GB, chosen by your RAM) with resume and SHA-256 checks. An offline edition with both inside the installer exists for machines without internet.
Can I use it without AI, or with my own AI?
Yes. There are three modes: built-in, external (any OpenAI-compatible server such as Ollama, LM Studio or vLLM) and off. With AI off nothing is downloaded or started, and data is still collected.
Which systems are supported?
macOS 12 or later, Windows and Linux (.deb, .rpm, AppImage). The built-in AI engine is available for macOS on Apple silicon, Linux x64 and Windows x64; elsewhere use an external AI server.
Can I stop it from recording something?
Yes. Pause recording for a set time, stop after minutes of inactivity, and list apps or window-title words to skip. A skipped window is saved only as private time: no title and no pixels. Password managers are on the list by default.
Why does macOS ask for Screen Recording?
Window snapshots need that permission. Without it the app cannot capture windows. Idle detection on macOS needs no extra permission.
How do I remove everything?
Uninstall the app, delete its data and settings folders (the uninstaller does not touch them) and remove the wtf-im-doing entries from your system keychain. Exact paths for each system are on the privacy page.
Find out where your day went
Download “What was I doing?” and see what you were doing.
On first launch the built-in AI downloads its engine (about 12–33 MB) and a model (about 0.7–3.4 GB, chosen by your memory). You can use your own AI server or switch AI off instead.
Version 0.1.0