User Guide
Help
Install, set up, run day-to-day, and troubleshoot — all in one page. This is a personal tool: one install per person, and your data stays on your own machines.
1. What it is
Polars Daily Log is a locally-hosted work-activity aggregator. It silently tracks foreground activity on every machine you use (app, window title, URL, optional OCR) plus your Git commits, asks an LLM to summarize your day, and can push the result to Jira as a worklog with one click.
One install per person. It isn't SaaS and isn't multi-tenant. Each user runs their own server + collectors, and your data never leaves your network.
Which scenario is you?
- One computer only: install
both(server + collector in one) on it. - Multiple machines to aggregate: install
bothon the always-on machine as your hub; installcollectoron the others and point them at the hub. - Want to hack on the code: clone the repo and use dev mode — see §8.
2. Install
Prerequisites
| macOS | Linux | Windows | |
|---|---|---|---|
| Python 3.9+ | built-in | built-in | winget install Python.Python.3.12 |
| Git | xcode-select --install | apt install git | winget install Git.Git |
Option A: one-liner (recommended, macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/Conner2077/polars-daily-log/master/bootstrap.sh | bash
What it does: fetches the latest release → extracts to ~/.polars-daily-log → runs install.sh interactively.
Non-interactive (installing a collector on a second machine)
curl -fsSL https://raw.githubusercontent.com/Conner2077/polars-daily-log/master/bootstrap.sh | \
PDL_ROLE=collector \
PDL_SERVER_URL=http://your-hub:8888 \
PDL_COLLECTOR_NAME=my-laptop \
bash Optional env vars
PDL_VERSION— pin a version, defaultlatestPDL_INSTALL_DIR— install dir, default~/.polars-daily-logPDL_ROLE—server/collector/both/askPDL_SERVER_URL— the server URL the collector should talk toPDL_COLLECTOR_NAME— display name for this collector on the hub
Option B: manual tarball (Windows, or offline)
- Download
polars-daily-log-<version>.tar.gzfrom the Releases page - Extract:
tar xzf polars-daily-log-0.2.0.tar.gz && cd polars-daily-log-0.2.0 - Run the installer:
# macOS / Linux bash install.sh # Windows (PowerShell) powershell -ExecutionPolicy Bypass -File install.ps1
3. First-time setup
Pick a role
The installer asks:
0. What are you installing?
1) server — central API + Web UI
2) collector — activity collector
3) both — install both on this machine Mapping:
- One machine only: pick
3(both) - This machine is your hub: pick
3(both) - This machine just pushes to the hub: pick
2, then fill in Server URL and Collector name
Start it
# If installed via bootstrap (~/.polars-daily-log)
~/.polars-daily-log/pdl server start # server role
~/.polars-daily-log/pdl collector start # collector role
~/.polars-daily-log/pdl start # both (start server + collector) Adding pdl to PATH makes this nicer:
echo 'export PATH="$HOME/.polars-daily-log:$PATH"' >> ~/.zshrc
source ~/.zshrc
pdl status Open the Web UI
Browse to http://127.0.0.1:8888 (or the hub's IP). First thing, open Settings:
- LLM — choose Kimi / OpenAI / Claude / Ollama and paste your API key (leave blank for the built-in Kimi default)
- Jira (optional) — if you want daily logs to sync as Jira worklogs, scan the QR to sign into Jira SSO
4. Daily use
Start / stop
| What | Command |
|---|---|
| Start everything | pdl start |
| Start server only | pdl server start |
| Start collector only | pdl collector start |
| Status | pdl status |
| Stop | pdl stop |
| Restart | pdl restart |
View logs
pdl server logs 100 # last 100 lines of server backend
pdl server logs -f # follow live
pdl collector logs 50 # last 50 lines of collector Windows equivalents
Windows uses Scheduled Tasks for autostart (the installer asks whether to enable login autostart):
Start-ScheduledTask -TaskName AutoDailyLogServer
Stop-ScheduledTask -TaskName AutoDailyLogServer
Get-ScheduledTaskInfo -TaskName AutoDailyLogCollector Report a bug
Click the 💡 button in the top-right of the Web UI. Write a few words; it attaches the current page + UA automatically.
5. Where data lives & privacy
| Thing | Path |
|---|---|
| Database (activities, logs, config) | ~/.auto_daily_log/data.db |
| Screenshots | ~/.auto_daily_log/screenshots/YYYY-MM-DD/ |
| Server log | ~/.auto_daily_log/logs/server.log |
| Standalone collector log | ~/.auto_daily_log_collector/logs/collector.log |
| Server config | <install-dir>/config.yaml |
| Collector config | <install-dir>/collector.yaml |
When you overwrite the tarball to upgrade, nothing under ~/ is touched — upgrades don't lose data.
Privacy notes
monitor.privacy.blocked_apps/blocked_urlsare respected strictly — matching activities are never recorded.- Anti-introspection apps (e.g. WeCom) listed in
hostile_apps_applescriptskip deep AppleScript introspection. - If OCR catches something sensitive (passwords, card numbers), deleting it in the UI hard-deletes from the recycle bin too.
6. Upgrade & uninstall
Upgrade (bootstrap install)
Rerun the same curl command. It upgrades in place — bootstrap runs pdl stop first, and data under ~/ is untouched.
Upgrade (manual install)
cd <your extracted dir>
./pdl stop
tar xzf polars-daily-log-0.2.0.tar.gz --strip-components=1
./pdl build --restart If a version requires config migration, it'll be called out at the top of CHANGELOG.md.
Uninstall
./pdl stop
rm -rf ~/.polars-daily-log # code + venv + config
rm -rf ~/.auto_daily_log # data + logs (skip to keep them)
rm -rf ~/.auto_daily_log_collector # standalone collector creds + offline queue Windows extras:
Unregister-ScheduledTask -TaskName AutoDailyLogServer -Confirm:$false
Unregister-ScheduledTask -TaskName AutoDailyLogCollector -Confirm:$false 7. Troubleshooting
| Symptom | Check / fix |
|---|---|
No module named aiosqlite on startup | venv not activated / install.sh was skipped. Rerun bash install.sh. |
Daily summary contains only Activity summary: ... lines | LLM call failed → in Web UI Settings verify engine / URL / API key. |
| Jira submission returns 500 "Internal Server Error" | Comment contained an emoji. Latest version scrubs automatically — upgrade. |
| WeCom auto-exits after 2–4 minutes | Make sure monitor.hostile_apps_applescript in config.yaml includes wechat/wecom/企业微信. |
| Frontend blank page | pdl server logs 50 to see the backend; hard-reload browser (Cmd/Ctrl+Shift+R). |
| Windows collector idle | Check %USERPROFILE%\.auto_daily_log_collector\logs\collector.log and the Scheduled Task status. |
| macOS collector can't read window titles | System Settings → Privacy & Security → Accessibility: grant permission to Terminal / iTerm2. |
8. Developers
If you cloned the repo instead of unpacking a tarball:
git clone https://github.com/Conner2077/polars-daily-log.git
cd polars-daily-log
bash install.sh # auto-detects no wheel → dev mode
./pdl server start | What | Command |
|---|---|
| Rebuild after pull | ./pdl build --restart |
| Frontend only | ./pdl build --no-python |
| Run tests | .venv/bin/python -m pytest tests/ -q |
| Frontend hot-reload | cd web/frontend && npm run dev, open localhost:5173 |
Cutting a release: see docs/release.md. Project principles: see AGENTS.md.