# My day tracker: screenshots every 2 minutes, plus a nightly review of Git commits, edited Google Docs, sent emails, etc

Published: 2026-09-21T00:00:00.000Z
Canonical: https://wow.pjh.is/journal/day-tracker

Every two minutes, my Mac takes screenshots of my displays and asks Gemini to caption them. Each day, I end up with rich data about what I've been working on. This feeds into my daily briefings and weekly reviews (and perhaps some future attempts to automate myself...).

The system has four parts:

1. **Screenshots.** A scheduled job captures each display every two minutes. It skips locked or sleeping screens and filters out sensitive windows, blank desktops, and apps I never want captured (e.g. Apple TV, Spotify).

2. **Context.** It collects active-window titles, recent app and browser-tab focus, recently modified file paths and active Claude/Codex session context. My global `projects.yaml` helps it tag the project I'm working on.

3. **Captions.** Gemini 2.5 Flash-Lite receives the screenshots and context, then returns a short caption, a fuller description, a category and an inferred project. It looks for sensitive content (API keys, passwords, etc.) and deletes screenshots with those.

4. **Daily recaps.** A nightly job collects Git commits, agent sessions, calendar events, edited Google Docs, sent emails and completed Todoist tasks. It then generates a structured summary of the day. My briefing and review workflows read these records.

The code is [here](https://github.com/HartreeWorks/skill--day-tracker). As usual: some is idiosyncratic, much could be improved. Shared as inspiration.

## Example output

Screenshot:

![A captured display showing the TYPE III AUDIO text-to-speech preview, with a voice selector, sample text and audio player.](https://wow.pjh.is/static/images/blog/day-tracker-capture-example.png)

The data:

```json
{
  "timestamp": "2026-09-05T18:01:56.441445",
  "screens": [
    "screen-1.webp",
    "screen-2.webp",
    "screen-3.webp",
    "screen-4.webp"
  ],
  "active_window": {
    "app": "stable",
    "title": "[DEV] TTS preview || T3A: Internal"
  },
  "visible_apps": [
    "Google Chrome",
    "Warp",
    "Obsidian",
    "Signal",
    "Todoist",
    "Roughdraft"
  ],
  "analysis": {
    "description": "The user is viewing a TTS preview tool for \"TYPE III AUDIO\" in a local development environment. They are testing the synthesis of text, specifically \"Discovery of a new OpenAI agent message board\", with an Echo Turbo Multilingual voice. Simultaneously, they are reviewing search results related to the \"OpenAI-Hugging Face incident\" in Google Chrome and referencing code snippets in a Warp terminal, likely for the \"TYPE III AUDIO\" project.",
    "category": "coding",
    "oneline": "Testing TTS preview for TYPE III AUDIO project.",
    "sensitive": false,
    "sensitive_reason": null,
    "confidence": 0.9,
    "urls": [
      "[REDACTED]"
    ],
    "file_paths": [
      "[REDACTED]"
    ],
    "is_meeting": false,
    "meeting_app": null,
    "people": [],
    "organizations": [
      "OpenAI",
      "Hugging Face"
    ],
    "is_work": true,
    "inferred_project": "type-iii-audio",
    "project_confidence": 0.9,
    "input_tokens": 2479,
    "output_tokens": 503,
    "model": "gemini-2.5-flash-lite"
  },
  "auto_project": null,
  "manual_project": null,
  "excluded_blank_screens": [],
  "excluded_incognito_screens": [],
  "focus_history": [
    {
      "app": "Google Chrome",
      "title": "Audio narrations of the OpenAI–Hugging Face incident",
      "pct": 41
    },
    {
      "app": "Google Chrome",
      "title": "Audio narrations of the OpenAI–Hugging Face incident 🔊",
      "pct": 33
    },
    {
      "app": "Warp",
      "title": "HF feed search",
      "pct": 16
    },
    {
      "app": "Google Chrome",
      "title": "[DEV] TTS preview || T3A: Internal",
      "pct": 9
    }
  ]
}
```
