activitywatch-integration
Comprehensive guide for ActivityWatch setup, configuration, watchers, integrations, API usage, and automation. Covers aw-qt, aw-watcher modules, aw-client libraries, aw-sync, data export, MCP server integration, and package managers. Use when working with ActivityWatch components, creating custom watchers, querying data, setting up sync, integrating with analytics dashboards, or using the ActivityWatch API.
Best use case
activitywatch-integration is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Comprehensive guide for ActivityWatch setup, configuration, watchers, integrations, API usage, and automation. Covers aw-qt, aw-watcher modules, aw-client libraries, aw-sync, data export, MCP server integration, and package managers. Use when working with ActivityWatch components, creating custom watchers, querying data, setting up sync, integrating with analytics dashboards, or using the ActivityWatch API.
Teams using activitywatch-integration should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/activitywatch-integration/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How activitywatch-integration Compares
| Feature / Agent | activitywatch-integration | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Comprehensive guide for ActivityWatch setup, configuration, watchers, integrations, API usage, and automation. Covers aw-qt, aw-watcher modules, aw-client libraries, aw-sync, data export, MCP server integration, and package managers. Use when working with ActivityWatch components, creating custom watchers, querying data, setting up sync, integrating with analytics dashboards, or using the ActivityWatch API.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# ActivityWatch Integration Guide
## Purpose
Complete reference for working with ActivityWatch, its ecosystem of tools, watchers, client libraries, and integrations. Provides guidance for setup, configuration, custom watcher development, data analysis, and automation.
## When to Use
Activate this skill when:
- Setting up or configuring ActivityWatch
- Creating custom watchers or integrations
- Querying ActivityWatch data via API
- Integrating with external tools (Grafana, InfluxDB, AI agents)
- Troubleshooting ActivityWatch components
- Working with aw-client libraries
- Setting up multi-device sync
- Analyzing time-tracking data
## Table of Contents
- [Current Installation](#current-installation)
- [Core Components](#core-components)
- [Quick Start Guide](#quick-start-guide)
- [Tool Reference](#tool-reference)
- [Common Tasks](#common-tasks)
- [Troubleshooting](#troubleshooting)
- [Resources](#resources)
---
## Current Installation
**Status:** ✅ Installed and Running
**Details:**
- **Location:** `/Applications/ActivityWatch.app`
- **Version:** v0.13.2
- **Server:** http://localhost:5600
- **Installation Method:** Homebrew (`brew install --cask activitywatch`)
**Active Components:**
- `aw-qt` - System tray application (menu bar)
- `aw-server` - API server
- `aw-watcher-afk` - AFK detection
- `aw-watcher-window` - Window tracking
**Data Location:** `~/Library/Application Support/activitywatch/`
**Access:**
- Web UI: http://localhost:5600
- API: http://localhost:5600/api/0/
---
## Core Components
### 1. aw-qt (Desktop Application)
The main desktop tray app that manages everything.
**Key Features:**
- Autostart integration
- Watcher toggling
- Real-time activity views
- Settings management
**Access:** Menu bar icon (look for ActivityWatch icon)
### 2. aw-server (API Server)
REST API server for data storage and querying.
**Endpoints:**
- `/api/0/info` - Server information
- `/api/0/buckets` - List data buckets
- `/api/0/buckets/{id}/events` - Get/create events
- `/api/0/query` - Execute AQL queries
**See:** [API_REFERENCE.md](API_REFERENCE.md) for complete API documentation
### 3. aw-watcher Modules
Watchers are "agents" that track specific activities:
**Built-in:**
- `aw-watcher-window` - Active window/app tracking
- `aw-watcher-afk` - Keyboard/mouse activity (AFK detection)
**Optional:**
- `aw-watcher-web` - Browser tabs (install browser extension)
- `aw-watcher-vscode` - VS Code activity
- `aw-watcher-vim` - Vim/Neovim sessions
**Creating Custom Watchers:** See "Custom Watcher Development" section below
### 4. aw-client Libraries
Official SDKs for programmatic access:
**Available:**
- Python: `pip install aw-client`
- JavaScript: `aw-client-js`
- Go: `aw-client-go`
- Rust: `aw-client-rust`
**Use Cases:**
- Query and analyze data
- Create custom integrations
- Build automation scripts
- Export data to other formats
**See:** [API_REFERENCE.md](API_REFERENCE.md) for Python client examples
---
## Quick Start Guide
### Verify Installation
```bash
# Check if running
ps aux | grep activitywatch
# Test API
curl http://localhost:5600/api/0/info
# List buckets
curl http://localhost:5600/api/0/buckets
```
### Access Web UI
1. Open http://localhost:5600 in browser
2. View today's activity on Activity page
3. Configure settings in Settings page
### Enable Browser Extension
1. Visit https://activitywatch.net/downloads/
2. Install extension for your browser (Chrome, Firefox, Edge)
3. Extension will auto-connect to localhost:5600
### Python Client Setup
```bash
# Install
pip install aw-client
# Test
python3 -c "from aw_client import ActivityWatchClient; print(ActivityWatchClient().get_buckets())"
```
---
## Tool Reference
### aw-sync (Multi-Device Sync)
**Purpose:** Sync data across multiple devices via shared folder
**Installation:**
```bash
git clone https://github.com/ActivityWatch/aw-sync.git
cd aw-sync
pip install .
```
**Usage:**
```bash
# Sync to Dropbox
aw-sync --folder ~/Dropbox/ActivityWatch
# Automated sync (add to cron)
0 * * * * aw-sync --folder ~/sync/aw
```
**Cloud Options:**
- Dropbox
- Google Drive (via rclone)
- Syncthing (recommended for privacy)
### activitywatch-exporter (Analytics Integration)
**Purpose:** Export data to InfluxDB for Grafana dashboards
**Installation:**
```bash
pip install activitywatch-exporter
```
**Usage:**
```bash
activitywatch-exporter \
--aw-url http://localhost:5600 \
--influx-url http://localhost:8086 \
--influx-db activitywatch
```
**See:** [INTEGRATIONS.md](INTEGRATIONS.md) for Grafana setup
### ActivityWatch MCP Server (AI Integration)
**Purpose:** AI agent interface for LLMs (Claude, Cursor)
**Installation:**
```bash
git clone https://github.com/Auriora/activitywatch-mcp.git
cd activitywatch-mcp
npm install
```
**Configuration for Claude Code:**
```json
{
"mcpServers": {
"activitywatch": {
"command": "node",
"args": ["/path/to/activitywatch-mcp/dist/index.js"],
"env": {
"AW_URL": "http://localhost:5600"
}
}
}
}
```
**Example Queries:**
- "Summarize my coding hours this week"
- "What websites did I visit most yesterday?"
- "Show my most productive hours"
### Codewatch (Developer Focus)
**Purpose:** IDE-specific tracking with Git integration
**Features:**
- Multi-editor support
- Git commit analysis
- Project-based tracking
- Language statistics
**Installation:** Download from GitHub releases
---
## Common Tasks
### Query Data with Python
```python
from aw_client import ActivityWatchClient
from datetime import datetime, timedelta
client = ActivityWatchClient()
# Get today's window events
today = datetime.now().replace(hour=0, minute=0, second=0)
bucket_id = f"aw-watcher-window_{client.client_hostname}"
events = client.get_events(bucket_id, start=today)
# Calculate time per app
by_app = {}
for e in events:
app = e["data"].get("app", "Unknown")
by_app[app] = by_app.get(app, 0) + e["duration"]
# Print results
for app, duration in sorted(by_app.items(), key=lambda x: x[1], reverse=True):
print(f"{app}: {duration/3600:.1f}h")
```
**See:** [API_REFERENCE.md](API_REFERENCE.md) for more examples
### Create Custom Watcher
```python
from aw_client import ActivityWatchClient
from datetime import datetime
import time
# Initialize
client = ActivityWatchClient("my-custom-watcher")
bucket_id = f"{client.client_name}_{client.client_hostname}"
# Create bucket
client.create_bucket(bucket_id, event_type="custom.activity")
# Send events
while True:
event = {
"timestamp": datetime.now(),
"duration": 0,
"data": {
"label": "Custom activity",
"value": get_custom_data()
}
}
client.heartbeat(bucket_id, event, pulsetime=60)
time.sleep(30)
```
### Export Data to CSV
```python
import pandas as pd
from aw_client import ActivityWatchClient
client = ActivityWatchClient()
bucket_id = f"aw-watcher-window_{client.client_hostname}"
events = client.get_events(bucket_id, limit=10000)
# Convert to DataFrame
df = pd.DataFrame([
{
"timestamp": e["timestamp"],
"duration": e["duration"],
"app": e["data"].get("app"),
"title": e["data"].get("title")
}
for e in events
])
# Export
df.to_csv("activitywatch_export.csv", index=False)
print(f"✅ Exported {len(df)} events")
```
### Backup Data
```bash
#!/bin/bash
# backup-activitywatch.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR=~/backups/activitywatch
mkdir -p $BACKUP_DIR
# Stop server
pkill -f aw-server
# Backup
tar -czf $BACKUP_DIR/aw-backup-$DATE.tar.gz \
~/Library/Application\ Support/activitywatch/
# Restart
/Applications/ActivityWatch.app/Contents/MacOS/aw-server &
echo "✅ Backup created: aw-backup-$DATE.tar.gz"
```
### Set Up Automation
**Daily Summary (cron):**
```bash
# Run at 6 PM daily
0 18 * * * /usr/bin/python3 /path/to/daily_summary.py
```
**Weekly Report (cron):**
```bash
# Run Sunday at 8 PM
0 20 * * 0 /usr/bin/python3 /path/to/weekly_report.py
```
**See:** [INTEGRATIONS.md](INTEGRATIONS.md) for Slack, email, and calendar integration examples
---
## Troubleshooting
### Server Not Starting
```bash
# Check if port in use
lsof -i :5600
# Kill existing process
pkill -f aw-server
# Start manually with debug
/Applications/ActivityWatch.app/Contents/MacOS/aw-server --verbose
# Check logs
tail -f ~/Library/Application\ Support/activitywatch/aw-server/aw-server.log
```
### Watchers Not Recording
```bash
# Check watcher status
curl http://localhost:5600/api/0/buckets
# Restart watchers
pkill -f aw-watcher
/Applications/ActivityWatch.app/Contents/MacOS/aw-watcher-afk &
/Applications/ActivityWatch.app/Contents/MacOS/aw-watcher-window &
```
### Database Issues
```bash
# Location
cd ~/Library/Application\ Support/activitywatch/aw-server/
# Check integrity
sqlite3 peewee-sqlite.v2.db "PRAGMA integrity_check;"
# Vacuum (reduce size)
sqlite3 peewee-sqlite.v2.db "VACUUM;"
```
### Permission Errors
```bash
# Fix permissions
chmod -R 755 ~/Library/Application\ Support/activitywatch/
```
---
## Configuration
### Server Settings
**Location:** `~/.config/activitywatch/aw-server/config.toml`
```toml
[server]
host = "127.0.0.1" # Localhost only (recommended)
port = 5600 # Default port
cors_origins = "*" # CORS settings
```
### Watcher Settings
**aw-watcher-afk:**
```toml
# ~/.config/activitywatch/aw-watcher-afk/config.toml
[aw-watcher-afk]
timeout = 180 # AFK timeout (seconds)
poll_time = 5 # Check interval
```
**aw-watcher-window:**
```toml
# ~/.config/activitywatch/aw-watcher-window/config.toml
[aw-watcher-window]
poll_time = 1 # Update interval
exclude_title = false # Privacy: hide window titles
```
### Web UI Settings
Access via: http://localhost:5600/#/settings
**Categories:**
- Create rules to categorize activities
- Pattern matching on app, title, URL
**Example:**
```json
{
"name": "Programming",
"rule": {
"$type": "regex",
"regex": "VSCode|Terminal|vim"
}
}
```
---
## Resources
### Official Documentation
- **Main Docs:** https://docs.activitywatch.net/
- **API Reference:** https://docs.activitywatch.net/en/latest/api/
- **Writing Watchers:** https://docs.activitywatch.net/en/latest/examples/writing-watchers.html
### Community
- **Forum:** https://forum.activitywatch.net/
- **Discord:** https://discord.gg/vDskV9q
- **GitHub:** https://github.com/ActivityWatch/activitywatch
### Related Projects
- **Browser Extension:** https://github.com/ActivityWatch/aw-watcher-web
- **VS Code Extension:** Marketplace → "ActivityWatch"
- **MCP Server:** https://github.com/Auriora/activitywatch-mcp
### Reference Files
- **[API_REFERENCE.md](API_REFERENCE.md)** - Complete REST API and AQL documentation
- **[INTEGRATIONS.md](INTEGRATIONS.md)** - Integration examples (Slack, Grafana, Sheets, etc.)
---
**Installation Status:** ✅ v0.13.2 via Homebrew
**Server:** ✅ http://localhost:5600
**Watchers:** ✅ afk, window activeRelated Skills
Advanced React Clean Integration
Integrate React with clean architecture without framework leakage using hooks as adapters and presenters. Use when connecting React to domain logic, designing hook-based DI, or isolating UI from business rules.
add-integration
Build a new API integration for Nexus. Load when user mentions "add integration", "new integration", "integrate with", "connect to [service]", or "build [service] integration". Interactive workflow that discovers API endpoints, plans the integration, and creates a project for implementation.
adaptive-temporal-analysis-integration
Integrate adaptive temporal analysis for drift detection.
accessibility-object-model-integration
Programmatic manipulation of the accessibility tree to support complex custom controls in React.
acc-create-integration-test
Generates PHPUnit integration tests for PHP 8.5. Creates tests with real dependencies, database transactions, HTTP mocking. Supports repositories, API clients, message handlers.
a2a-mcp-integration
Integration patterns for combining Agent-to-Agent (A2A) Protocol with Model Context Protocol (MCP) for hybrid agent communication. Use when building systems that need both agent-to-agent communication and agent-to-tool integration, implementing composite architectures, or when user mentions A2A+MCP integration, hybrid protocols, or multi-agent tool access.
Build Your Agent Integration Skill
Create your agent-integration skill from OpenAI SDK and LiteLLM documentation before learning framework integration
stripe-integration
Guides consistent, correct implementation of Stripe payment processing including payment flows, webhooks, subscriptions, and customer management. Use when integrating Stripe payments, setting up subscriptions, implementing webhooks, or managing customer billing.
302ai-api-integration
ALWAYS use this skill when user needs ANY API functionality (AI models, image generation, video, audio, text processing, etc.). Automatically search 302.AI's 1400+ APIs and generate integration code. Use proactively whenever APIs or AI capabilities are mentioned.
1k-defi-module-integration
Interactive guide for integrating new DeFi modules or protocols into OneKey. Use when adding new DeFi features like staking protocols, lending markets, or entirely new DeFi modules. Triggers on DeFi, protocol, integration, Earn, Borrow, staking, lending, supply, borrow, withdraw, repay, claim, new module, Pendle, Aave, Compound.
academic-data-integration
When the user needs to integrate multiple data sources (Canvas API, user memory, file systems) to create comprehensive academic reports. This skill combines course information, assignment details, submission status, and user context to generate actionable insights. Triggers include requests that involve cross-referencing multiple data sources or creating consolidated academic reports from disparate systems.
lets-go-rss
A lightweight, full-platform RSS subscription manager that aggregates content from YouTube, Vimeo, Behance, Twitter/X, and Chinese platforms like Bilibili, Weibo, and Douyin, featuring deduplication and AI smart classification.