Stalkrr
Privacy

Privacy

Every network connection the app can make.

Stalkrr records meetings, calls, your screen, and (optionally) your messages. The only honest privacy policy for software like this is one you can check against the code, so this document lists every network connection the app can make, what crosses it, what turns it on, and where it lives in the source. If you find any byte leaving the machine that this page doesn't account for, that's a security bug — report it per SECURITY.md.

Default posture: nothing you captured leaves this Mac. Out of the box, transcription runs on-device (vendored whisper.cpp), extraction runs on a local model (auto-managed Ollama on localhost), and the archive is a local SQLite file under ~/.stalkrr/.

Outbound connections that can carry captured data

These exist only if you explicitly select a cloud provider (a paid Premium feature — the deliberate friction is the point), and they receive only what the stage needs:

What is sent Where When Code
Meeting audio (transcoded m4a) api.groq.com or api.openai.com Only when you set the transcription engine to Groq/OpenAI in Preferences (default: local Whisper). The Preferences card says "audio is uploaded" whenever this is on. app/Sources/StalkrrPipeline/CloudWhisperTranscriber.swift
Meeting audio (transcoded m4a) api.soniox.com Only when you set the transcription engine to Soniox (Premium; the card says "audio is uploaded"). The uploaded file is deleted from their storage right after transcription. app/Sources/StalkrrPipeline/SonioxTranscriber.swift
Redacted transcript text (post-PII-redaction) api.anthropic.com, api.openai.com, generativelanguage.googleapis.com, or api.groq.com Only when you set the text/vision provider to that cloud (default: local Ollama). app/Sources/StalkrrPipeline/Providers/Providers.swift, Providers/Vision.swift
Redacted transcript text (text-extraction backup) same as above Only when "If local AI fails" is set to a named provider in Settings (default Off). app/Sources/StalkrrApp/BackupExtractor.swift
Screen/camera frames (JPEG) — the whole display or a webcam still, not redacted same as above Only when you explicitly select a cloud vision provider (default: local Ollama, nothing uploaded). app/Sources/StalkrrPipeline/Providers/Vision.swift

The redaction stage (app/Sources/StalkrrPipeline/Redact.swift) masks PII in transcript text before it is sent. It does not touch images — frames are sent as captured.

Outbound connections that never carry captured data

Purpose Where What is sent Code
Update check github.com (StalkrrOS/stalkrr-releases) A plain GET for appcast.json; downloads the signed update zip. No identifiers, no telemetry. Toggle: "Install updates automatically" in Preferences. app/Sources/StalkrrApp/UpdateChecker.swift
Whisper model download huggingface.co A GET for the model file, once per model. app/Sources/StalkrrPipeline/WhisperTranscriber.swift
Local-AI runtime download github.com (ollama releases) + the Ollama model registry GETs for the pinned Ollama build and the local model, once. app/Sources/StalkrrApp/OllamaManager.swift
Self-hosted inference (optional) your own localhost/LAN URLs for Ollama or vLLM Redacted text, to servers you run. endpoint prefs in app/Sources/StalkrrApp/PreferencesWindow.swift

Things that are local by construction

How to audit this yourself

  1. Enumerate every URL in the code: bash grep -rhoE "https://[a-zA-Z0-9./_-]+" app/Sources --include="*.swift" | sort -u Compare against the tables above. (URLSession is the only HTTP client; there are no third-party networking dependencies to hide in — the dependency list is app/Package.swift, and the single vendored library is whisper.cpp.)
  2. Build it yourself (cd app && swift build && ./scripts/build-app.sh) and run your own bundle — see app/README.md.
  3. Watch it live with Little Snitch/LuLu: with default settings you should see only the update check and one-time model downloads listed above.