# ActivityWatch

Local automated time tracker with a documented REST API and a query language.

ActivityWatch records active windows, browser tabs and away-from-keyboard time on your own machine. A local server stores the events and exposes a REST API for buckets, events, heartbeats, queries, settings and export. The docs include a guide for feeding summaries to an AI assistant.

Alternative to: RescueTime, WakaTime

- Capabilities: adaptable, operable
- Vertical: scheduling-staffing
- Shape: product
- Form factor: desktop
- Execution model: deterministic
- Provenance: unknown (recorded, never ranked)
- Repo: https://github.com/ActivityWatch/activitywatch (MPL-2.0), 19530 stars, last commit 2026-11-06
- Last activity: 2026-11-06
- Page: apps/ActivityWatch--activitywatch.html
- JSON: apps/ActivityWatch--activitywatch.json

## Use it when

- you want your agent to summarize what you worked on today from local activity data
- you want to write standup notes or find uncategorized time from your own computer use

## Gotchas

- The API has no authentication by default, so any local process can read, write and delete all data; the opt-in api_key works only in aw-server-rust
- Window titles and URLs are sensitive; the docs advise sending aggregated summaries, not raw events
- Personal time tracking, not team scheduling
- MPL-2.0 is file-level copyleft
- The REST docs warn the API is under development and error bodies are unreliable
- Community MCP servers exist (for example 8bitgentleman/activitywatch-mcp-server, 74 stars) but are not official

## Editions

- Free: Free, open source
  - source: https://github.com/ActivityWatch/activitywatch
  - binary: https://github.com/ActivityWatch/activitywatch/releases

## Adaptable: make it yours

Effort: config-only (4 things to edit), surface kind admin-ui

Categories and their regex rules are set in the web UI Settings page and stored as server settings, which the Settings API can also write. Toml files change what gets recorded: aw-watcher-afk.toml (timeout, poll_time) and aw-watcher-window.toml (poll_time, exclude_title). Server files aw-server.toml and aw-server-rust config.toml set host, port, CORS and an optional [auth] api_key. New data sources mean writing a watcher with aw-client.

- Env vars: none
- Config files: aw-server/aw-server.toml, aw-server-rust/config.toml, aw-watcher-afk/aw-watcher-afk.toml, aw-watcher-window/aw-watcher-window.toml
- Prompt files: none
- Accounts you'll need: none

## Operable: what an agent can drive

Operability: official. Interface: api at https://docs.activitywatch.net/en/latest/api/rest.html (published by the builder, local).

### Reach (partial coverage)

- Read recorded events: reachable. GET /api/0/buckets/&lt;id>/events in docs api/rest.rst
- Summarize and filter activity: reachable. POST /api/0/query/ and the aw-client canonical command in docs examples/agents-and-ai
- Write events and heartbeats from custom watchers: reachable. POST /api/0/buckets/&lt;id>/events and /heartbeat
- Manage buckets: reachable. GET, POST, DELETE /api/0/buckets/
- Export and import data: reachable. GET /api/0/export and POST /api/0/import
- Edit categories and rules: reachable. POST /api/0/settings/classes: generic key-value route on aw-server and aw-server-rust; aw-webui writes that key and aw-client get_classes reads it
- Delete sensitive events: reachable. DELETE /api/0/buckets/&lt;id>/events/&lt;event_id>
- Start, stop and install watchers: not reachable. Managed by the aw-qt or aw-tauri tray app; no such route in aw-server rest.py or aw-server-rust endpoints/mod.rs
- Sync across devices: not reachable. aw-sync runs as its own tool over a shared folder; no route for it in either server
- Dashboards and timeline views: not reachable. aw-webui is a visual interface; an agent reads the same data through queries

## Code stack

- Languages: Python, Rust, TypeScript
- Frameworks: Vue, Tauri
- Package manager: poetry, cargo, npm
- Database: SQLite
- Hosting target: Windows, macOS, Linux, Android

## Evidence and confidence

- formFactor: README: desktop app bundle with local server, watchers and web UI (confidence 0.9)
- executionModel: no model in the stack (confidence 0.95)
- operability: docs api/rest.rst and examples/agents-and-ai.rst in ActivityWatch/docs; security.rst for auth. Ruling 1 excludes session-cookie-only auth; this API needs no browser session, so official stands (confidence 0.85)
- effort: docs configuration.rst lists toml options including timeout and exclude_title; categorization.rst places categories in the Settings page. No code edit is needed for either, so light-edit did not apply (confidence 0.7)
- editions: Free open source with GitHub release downloads. activitywatch.net/subscribe lists support plans from $5 a month but says 'Subscribing doesn't unlock anything', so no paid edition is recorded (confidence 0.9)
- active: gh api: pushed 2026-11-06; release v0.14.1 on 2026-10-10; packaging and release fixes in October
- alternativeTo: activitywatch.net calls it 'a great alternative to services like RescueTime, ManicTime, and WakaTime'; the README compares both in its feature tables
- reach:  (confidence 0.9)
- provenance:  (confidence 0.3)

## Open questions

- The vertical is a loose fit; should this sit in a personal-productivity vertical if one opens?

## Sources

- https://activitywatch.net/ (sourcing:scheduling-staffing:github)
- https://activitywatch.net (sourcing:scheduling-staffing:curated)
- https://docs.activitywatch.net/en/latest/api/rest.html (analysis)
