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 both on the always-on machine as your hub; install collector on 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

macOSLinuxWindows
Python 3.9+built-inbuilt-inwinget install Python.Python.3.12
Gitxcode-select --installapt install gitwinget 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, default latest
  • PDL_INSTALL_DIR — install dir, default ~/.polars-daily-log
  • PDL_ROLEserver / collector / both / ask
  • PDL_SERVER_URL — the server URL the collector should talk to
  • PDL_COLLECTOR_NAME — display name for this collector on the hub

Option B: manual tarball (Windows, or offline)

  1. Download polars-daily-log-<version>.tar.gz from the Releases page
  2. Extract: tar xzf polars-daily-log-0.2.0.tar.gz && cd polars-daily-log-0.2.0
  3. 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

WhatCommand
Start everythingpdl start
Start server onlypdl server start
Start collector onlypdl collector start
Statuspdl status
Stoppdl stop
Restartpdl 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

ThingPath
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_urls are respected strictly — matching activities are never recorded.
  • Anti-introspection apps (e.g. WeCom) listed in hostile_apps_applescript skip 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

SymptomCheck / 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
WhatCommand
Rebuild after pull./pdl build --restart
Frontend only./pdl build --no-python
Run tests.venv/bin/python -m pytest tests/ -q
Frontend hot-reloadcd web/frontend && npm run dev, open localhost:5173

Cutting a release: see docs/release.md. Project principles: see AGENTS.md.