A local-first personal work review tool that records context, helps you review your day, and generates daily reports.
Automatically organizes the apps you used, websites you visited, window titles, usage time, and optional screenshots into a timeline you can review, analyze, and ask questions about.
All data is stored locally by default and never uploaded to any server. AI features are entirely optional; the app works fine with them turned off.
🔒 For personal use only — all data stays on your device.
Work Review is designed for personal work review and helps answer questions like these:
- What did I actually do today?
- What have I been focusing on over the past few days?
- Roughly how much time did a particular task take?
- Which pages, windows, and context did I look at back then?
- How can I quickly put together today's daily report?
The focus is not "monitoring". It is helping you recall, organize, and review your own work process.
- Automatic work context recording — Records foreground apps, browser pages, window titles, usage time, optional screenshots, and OCR text, reducing manual note-taking
- Unified timeline and statistics — Overview, timeline, work assistant, and daily report share the same local records, so you can inspect trends and drill into context
- Questions over local records — Use the basic template or your configured model to answer "What did I do today?", "How long did this task take?", and "What have I been focused on?"
- Daily report generation and export — Generate structured daily reports with Markdown export, auto-export, paragraph editing, pin/hide controls, and cached AI section ordering
- Privacy-first and locally controllable — Data is stored in local SQLite by default; AI is optional, and model calls use your own API key without third-party relay
- Desktop Avatar Beta — Shows work status through a desktop avatar and is gradually expanding toward proactive reminders and context assistance
Work Review is designed for personal use from the ground up. It is not intended for: employee monitoring · team attendance · performance evaluation · covert tracking
You can control the recording scope as needed:
- Per-app settings: Normal / Anonymize / Ignore — anonymize mode automatically skips screenshots and OCR
- Automatic sensitive keyword filtering · domain blacklist
- Auto-pause on screen lock · manual pause/resume
- AI only activates after you configure a model; disabled by default
- Foreground apps, window titles, browser URLs, usage duration, and category records
- Optional screenshots and OCR with multi-display strategies
- Keyboard/mouse activity + screen-change idle detection to reduce false records
- Timeline review for pages, windows, and context from any time period
- Work assistant based on local records, with basic template and AI-enhanced modes
- Duration statistics, category filtering, trend comparison, and natural-language time ranges
- Fragments grouped into continuous work sessions
- Extracts potential follow-up to-dos from pages, window titles, and context
- Structured daily reports, historical review, Markdown export, and auto-export
- Report blocks for hourly activity, time distribution, app usage, website visits, and more
- Paragraph-level pin/hide/restore controls, with cached AI section ordering
- AI-enhanced prompt attachments and custom model settings
- Website semantic categorization: changing a domain category automatically backfills history
- Multi-segment work time: e.g. morning + afternoon, break time excluded
The core of Work Review is always local recording. AI's role is to make records easier to read and review, not a prerequisite for usage.
| Mode | Description |
|---|---|
| Basic Template | Zero configuration, outputs stable structured results |
| AI Enhanced | Calls your self-configured model service for more natural Q&A and summaries |
Supported providers: Ollama (local) / OpenAI compatible / DeepSeek / Qwen / Zhipu / Kimi / Doubao / MiniMax / SiliconFlow / Gemini / Claude
- Download the installer for your platform from Releases
- On macOS, grant Screen Recording and Accessibility permissions
- Let it run in the background for a while
- Check the Overview / Timeline / Daily Report to see your recorded activity
| Platform | Installer |
|---|---|
| macOS (Apple Silicon / Intel) | .dmg |
| Windows | .exe |
| Linux x86_64 (X11 / Wayland) | .deb / .AppImage |
| Linux ARM64 (aarch64) | .deb |
macOS: Screenshots require the "Screen Recording" permission, and avatar linkage requires "Accessibility + Input Monitoring". If you see a "damaged" warning on first launch: sudo xattr -rd com.apple.quarantine "/Applications/Work Review.app"
Windows: Depends on Microsoft Edge WebView2 Runtime.
Linux: Screenshots and window tracking depend on the current session type and toolchain.
Dependency details
# Base
sudo apt install xprintidle tesseract-ocr
# X11
sudo apt install xdotool x11-utils scrot
# Wayland: gdbus (GNOME) / kdotool (KDE) / swaymsg (Sway) / hyprctl (Hyprland)
# Screenshots: grim / gnome-screenshot / spectacleUbuntu 24.04 / 24.10 Wayland (GNOME 46–47) users experiencing screenshot flash or shutter sound can use the one-click install script to fix it automatically:
bash scripts/deb/reinstall.sh # deb method (recommended)
bash scripts/deb/reinstall.sh --dry-run # preview operationsSee scripts/ubuntu-wayland-README.md for details.
Desktop Avatar
Uses a standalone desktop pet window to reflect idle / working / reading / meeting / music / video states.
Still being actively refined — interaction linkage, state expression, and preset details will continue to improve.
Bot Integration (Telegram / Feishu)
Query records and generate daily reports remotely from Telegram / Feishu via local API + multi-device registration. Supported commands: /devices, /report, /generate, etc. Restricted to personal and own multi-device use only.
Localhost API
After Localhost API is enabled, the app exposes a local HTTP API (default 127.0.0.1:47831), authenticated with a Bearer Token (auto-generated on first launch, saved in localhost_api_token.txt in the data directory).
All requests (except /health and Feishu callbacks) must carry the token:
Authorization: Bearer <token>
Or via query parameter: ?token=<token>
| Method | Path | Description |
|---|---|---|
| GET | /health |
Health check (no auth) |
| GET | /v1/device |
Device info |
| GET | /v1/timeline/{date} |
Timeline (date format YYYY-MM-DD, supports ?limit=&offset=) |
| GET | /v1/activities/{date} |
Activity list (supports ?limit=&offset=&category=) |
| GET | /v1/stats/today |
Today's stats |
| GET | /v1/stats/overview |
Overview stats (`?mode=today |
| GET | /v1/stats/daily/{date} |
Stats for a given date |
| GET | /v1/reports |
Report list (?limit=) |
| GET | /v1/reports/{date} |
Report for a given date (?locale=) |
| GET | /v1/reports/generate |
Generate report (?date=&locale=&force=true) |
| POST | /v1/reports/export-markdown |
Export report as Markdown (body: { date, locale }) |
| GET | /v1/apps/recent |
Recently used apps |
| GET | /v1/apps/category-overview |
App category overview |
| GET | /v1/categories |
App category list |
| GET | /v1/categories/semantic |
Semantic category list |
| GET | /v1/hourly-summaries/{date} |
Hourly summary |
| GET | /v1/hourly-app-breakdown/{date} |
Hourly app breakdown |
| GET | /v1/weekly-review |
Weekly review (?date_from=&date_to=&limit=) |
| GET | /v1/storage/stats |
Storage stats |
# Get today's timeline
curl -H "Authorization: Bearer $(cat ~/work-review/localhost_api_token.txt)" \
http://127.0.0.1:47831/v1/timeline/2026-05-20
# Generate a report
curl -H "Authorization: Bearer $(cat ~/work-review/localhost_api_token.txt)" \
"http://127.0.0.1:47831/v1/reports/generate?date=2026-05-20"MCP Server
Connects work records to AI coding tools (Claude Code / Cursor / VS Code Copilot, etc.) via the stdio protocol.
cargo build --release -p work-review-mcp-server{
"mcpServers": {
"work-review": {
"command": "/path/to/work-review-mcp-server",
"env": {
"WORK_REVIEW_DB_PATH": "/path/to/work_review.db",
"WORK_REVIEW_CONFIG_PATH": "/path/to/config.json"
}
}
}
}npm install
npm run tauri:dev # Development
npm run tauri:build # BuildRequires: Node.js 18+ / Rust stable / Tauri 2 CLI · Tech stack: Tauri 2 + Rust + Svelte 4 + SQLite
WeChat Group
If the QR code has expired, follow the official account below for the latest group invitation, or join the TG group
WeChat Official Account
- Thanks to the linux.do community for discussion and feedback
- Desktop Avatar BongoCat resources adapted from ayangweb/BongoCat (MIT License), see THIRD_PARTY_NOTICES.md
MIT © 2026 wm94i



