ActivityWatch / ActivityWatch/aw-android

aw-notify: smart anomaly-detection notifications (percentile/sigma above baseline)

Open
#200 7 comments 0 reactions 0 assignees View on GitHub
Dominant language
Kotlin
Stars
265
Forks
57
Avg merge
2d 21h
Merged PRs (30d)
19

Description

## Background

Opened from discussion on #199 (aw-notify Android implementation).

Currently `aw-notify` on both desktop and Android uses fixed user-defined thresholds (e.g. "alert at 60/120/240 min of Work"). Erik's suggestion: replace or supplement these with statistical anomaly detection — no user config needed.

## The Idea

Instead of asking users to set thresholds, detect statistically unusual sessions automatically:

- **>90th percentile** of daily time for a category (based on rolling 30-day history)
- **~2 sigma** above mean for a category
- Examples: "Today's Twitter use is already at your 95th percentile (1h 45m vs your usual 35m)" or "Exceptional focus day — Work time in top 10%"

This makes defaults useful out-of-the-box with zero configuration, avoids threshold fatigue (fixed thresholds get ignored fast once familiar), and provides positive reinforcement not just warnings.

## Scope

- Applies to both `aw-notify` (desktop) and the Android notification worker (#199)
- Requires historical data access (aw-server query API already supports arbitrary time ranges)
- Percentile computation is straightforward; the harder part is choosing the right lookback window and minimum data requirements before anomalies can be computed

## Non-Goals

- This is not a replacement for per-user threshold config (that can coexist)
- Not blocking #199 — the v1 fixed-threshold approach is still useful while historical data accumulates

## Related

- #199 — Android aw-notify implementation (prompted this issue)
- [aw-notify desktop](https://github.com/ActivityWatch/aw-notify)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.