LOCAL SURVEILLANCE' printed in black sans serif font on a pure white background

Build Your Self-Surveillance System: Track Everything Locally on macOS

Taking notes is a waste of time. I set up a self-surveillance system for myself instead. I gave up my privacy to my own machines, and I love it. Manual journaling is tedious and misses the actual context of your work. You forget half of what you did, and the other half is colored by recency bias.

To fix this, I built a personal data collection setup that automatically captures, processes, and synthesizes my daily activities into actionable insights. The system runs continuously in the background on macOS. It gathers data from multiple sources and generates a daily narrative summary integrated directly into Obsidian for personal knowledge management.

Data Sources and Collection

Typeless voice transcription is a major component of this setup. I run continuous dictation capture via the Typeless macOS app, queried through an HTTP API server at localized port 7847. This allows me to search transcriptions by date range, keywords, and natural language. It captures all my spoken thoughts and meeting notes throughout the day. It is highly efficient for voice-to-text input without the manual cleanup constraint. I also use a similar approach on my phone, which you can read about in my Typeless Android Keyboard post.

The system tracks all my AI conversations. I have a local server storing a SQLite database of every interaction with Claude 4.5 Sonnet, Gemini 3, and GPT-5.2. This tracks problem-solving sessions and code discussions objectively.

Visual context comes from automatic screenshot analysis. A background watcher daemon monitors my desktop for new screenshots. It spawns a lightweight subprocess to process each image using the OpenRouter API with a vision model to generate descriptions. These descriptions are stored in a local SQLite database. Performance is optimized with a subprocess architecture to ensure zero impact on my regular work. The watcher idles at just 42MB of RAM.

Other data streams include complete Chrome browsing history from its SQLite database, clipboard copy events tracked via a macOS daemon, and calendar events pulled through icalBuddy. I sync mobile data from my Android phone using Syncthing locally. MacroDroid logs app usage, notifications, and quick notes, which all pull directly into the centralized Mac ecosystem.

Technical Implementation

The technical implementation relies heavily on macOS background services. All monitoring tasks run as persistent launchd daemons. For example, the image describer process runs with a nice level of 15 and enabled low-priority I/O. This prevents the system from bogging down my machine when I am compiling code or running heavy local models. I also avoid native Node modules in these background watchers to maintain stability and prevent version mismatch errors.

FeatureManual JournalingThis System
Effort RequiredHighZero
Data CoveragePartialTotal
Privacy LevelFullLess…
Insights Generatedidk never really tried itAI-synthesized narrative

Quantified Self Obsidian Integration

The endgame for this pipeline is Obsidian. The system drops a structured markdown report straight into my Obsidian daily notes folder. The output uses YAML frontmatter and structured sections for daily accomplishments, technical work, calendar events, and visual context.

Obsidian makes this raw data highly usable. I use bidirectional linking to connect daily summaries to specific projects or topics. The graph view visualizes relationships between activities over time, and full-text search across all collected data means I never lose a snippet of code, a thought, or a resource. It completely replaces the manual burden of tagging and organizing personal knowledge.

Privacy Built In

If you build a self-surveillance system, you need total control over the data. All data in this architecture is stored locally. There is no cloud sync involved, except for the local network Syncthing transfer from my phone. API keys are secured in environment variables, and all access control services are bound to localhost only. You maintain absolute ownership over every tracked activity.

This setup embodies the quantified self principle taken to its logical conclusion. You capture everything, synthesize it automatically, and derive insights based on reality rather than fragmented memory. Over time, this creates a perfectly searchable archive of your work and life.