Light Stats reads system data locally and shows it on your device. Optional features contact only the service needed to perform the action described below.
Data collection
Light Stats does not collect or send data to the developer. System metrics are read locally and shown on your device. The app reads, for display or user-requested actions:
- CPU load and per-core utilization
- GPU utilization (supported Macs)
- Memory pressure, used, available, swap
- Disk capacity and disk I/O throughput
- Network up/down throughput and local proxy configuration
- Battery, temperature, and fan RPM (supported Macs)
- Running applications and their memory footprint (Memory tab)
- Credentials and local state already stored by each AI provider's CLI, or an API token pasted in Settings, only when the matching AI provider is enabled
- Selected Finder paths and Finder-menu preferences, only when the Finder extension is enabled
Local processing
Metric sampling and scoring happen on your device through macOS system APIs (Mach, IOKit, SMC, CFNetwork, Network). App preferences and Finder-menu configuration are stored locally in UserDefaults and the app group. The app does not upload system metrics or process lists.
Exit-node detection
When enabled, this feature sends a request to a public geo-IP service and caches the result briefly to avoid repeated lookups. It transmits no personal data beyond the network request itself, which necessarily reveals your IP to that service, the same as visiting any website. Disable it and no such request is ever made.
AI usage and optional warmup
When an AI provider is enabled, Light Stats contacts that provider's own usage endpoint using credentials already stored by its CLI or an API token pasted in Settings. Claude Code and Codex also have separate, off-by-default warmup switches; after a rolling window resets, warmup sends the minimal headless prompt “ok” through the selected provider's CLI, discards normal output, and uses a temporary empty working directory. Gemini has no warmup.
Update checks
A manual update check, or the off-by-default automatic update setting, reads the Cloudflare R2 channel marker and falls back to GitHub Releases. The update channel can be Stable (final releases only) or Beta (also considers prereleases such as v1.9.0-beta.N); Beta is off by default. Downloaded updates must pass SHA-256 (R2), codesign, notarization, and Team ID verification before installation.
Local diagnostic journal
A structured fault journal is always written locally under the app's support directory (and to Unified Logging). There is no Off / Errors / Full switch. Continuous metrics are time-throttled; capability and probe records write on first observation and on change. You can export a diagnostic ZIP (system context, hardware probes, 7 days of logs, 50 MB cap). Serial numbers, credentials, usernames, and home paths are redacted. Logs are never uploaded to the Light Stats developer.
Performance recording
A separate, off-by-default 48-hour session records this app's CPU, memory, wakeup, and disk plus companion system load. It uses its own schema and directory, is never mixed into the diagnostic journal, and is not included in the exported report.
Third parties
Depending on the switches you enable, requests may go to the selected geo-IP service, Anthropic, OpenAI, Google, Cloudflare R2, or GitHub. Credentials are never sent to a different provider or to the Light Stats developer.
Open source
The full source is on GitHub. You can inspect exactly what the app does, including every network call.
Changes
Any change to this policy will appear here and in the app's release notes. Data handling will never change silently.
Last updated: September 13, 2026