Skip to main content

SQLite-backed worklog tool with a todo.sh-style CLI

Project description

🌐 English · 中文

worklog

PyPI version Python versions Test codecov License: MIT

A local CLI worklog and task tracker backed by SQLite. Add tasks, log what you did, plan your day — all from the terminal, all in one file.

wl demo — a day in the terminal: plan, log, recap

Why wl:

  • Everything in one place. Time (year → month → week → day) and projects (area → task) share the same tree and the same id space. No switching between apps.
  • A daily rhythm that sticks. Set a goal in the morning, log as you go, recap at night. wl day replays the whole day with stats.
  • Structured and queryable. Every item carries status, priority, tags, props, and relations. Filter with wl ls, track dependencies/splits with wl relation (block / split / related), search by meaning with wl query.
  • AI-ready out of the box. Every command outputs plain text or -o json. There's a bundled Claude Code skill so an AI assistant can drive it directly.
  • Local and transparent. One SQLite file, no daemon, no account. You own the data.

Install

pipx install pyworklog   # or: uv tool install pyworklog
wl init

Requires Python ≥ 3.9. Shell completion:

wl print-completion fish | source        # fish — add to config.fish
eval "$(wl print-completion bash)"       # bash — add to .bashrc
eval "$(wl print-completion zsh)"        # zsh  — add to .zshrc

Quickstart

wl add "write the report" -p A    # add a task, priority A
wl log 1 "drafted the intro"      # log progress → status auto-flips to DOING
wl done 1                         # mark done
wl day                            # replay today: plan + logs + stats

Key workflows

Daily planning rhythm

Start the day with a goal, log as you work, close with a recap. wl day shows the full picture.

wl goal "ship the landing page today"     # morning intent (bare = read back)
wl log 42 "finished the hero section"     # progress note mid-day
wl recap "shipped it, copy still TBD"     # evening summary (bare = read back)
wl day                                    # the whole day: plan, logs, what changed

Real output, from the demo above:

#9 2026-07-10 Fri · workday
  > 🎯 Send out the monthly report [1/1] ✅
     1. [x] #3 Write the report summary
  > 📝 Recap: Summary sent; started the AI tutorial; ran 3km (written at 07-10 00:37)
  work
    ▸ planned
      [x] #3 [# ] Write the report summary
        · Draft written, sent to the team
  personal
    ▸ planned
      [ ] #4 [# ] Do the AI-agents tutorial

  ── 2026-07-10: 1/1 tasks with progress · DONE 1 · planned·not-done 1

wl tree --by project groups the same data by project instead of by time:

▸ #1 [#A] Ship the monthly report  (1)
[x] [# ] #3 Write the report summary
▸ #2 [#A] Learn how AI agents work  (2)
[ ] [# ] #4 Do the AI-agents tutorial
[ ] [# ] #10 Build a tiny agent myself

Schedule and track status

Assign tasks to dates and move them through a status machine.

wl add "review PR" --parent 7             # add under a project
wl sched 42 tomorrow                      # plan for tomorrow; also: next-week, +3w
wl start 42                               # clock in
wl stop 42                                # clock out — elapsed recorded
wl defer 42 next-month                    # push to backlog; also: someday
wl done 42                                # close

Statuses: TODO → DOING → DONE · also LATER (backlog) · WAIT (blocked) · CANCELED

Search

wl find "deploy"                           # full-text, hits highlighted
wl query "follow up with the client"       # finds related even if exact words differ

wl query uses any OpenAI-compatible embedding server. For best results (LanceDB + CJK segmentation): pip install 'pyworklog[semantic]'.

AI-readable output

Every command accepts -o json — place it before or after the verb.

wl -o json ls --para project              # array of open projects
wl show 42 -o json | jq '.logs'           # node detail, pipe to jq
wl -o json active                         # currently running tasks

All commands

# capture
wl add "task" -p A -t work                # new task, priority, tags
wl log 42 "what I did"                    # log progress
wl done 42                                # close; also: defer / cancel / wait

# plan & review
wl goal "deliver X by EOD"                # today's goal  (bare = read)
wl recap "shipped, one blocker left"      # end-of-day summary (bare = read)
wl day                                    # today: plan + logs + stats
wl sched 42 2026-07-01                    # schedule; also: tomorrow / +3w / someday

# navigate
wl show 42                                # full detail + timeline
wl ls --para project -t work              # list open work projects
wl tree                                   # whole structure, top-down
wl summary --week 2026-W25                # weekly aggregate by project

# search
wl find "keyword"                         # full-text search
wl query "follow up with the client"      # semantic + keyword hybrid

Every command has wl <cmd> --help; wl help <topic> browses topic docs inline.

Contributing

CONTRIBUTING.md · DESIGN.md · CHANGELOG.md

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyworklog-0.11.0.tar.gz (728.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyworklog-0.11.0-py3-none-any.whl (360.2 kB view details)

Uploaded Python 3

File details

Details for the file pyworklog-0.11.0.tar.gz.

File metadata

  • Download URL: pyworklog-0.11.0.tar.gz
  • Upload date:
  • Size: 728.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyworklog-0.11.0.tar.gz
Algorithm Hash digest
SHA256 82c66e332a99dc43033c5367a991d38f3daff92aaaee85b8e5ccc1c1601c2634
MD5 dd3ef38d240434fe013cbe1a777362e3
BLAKE2b-256 6c09d8eb78044041a1675926ee07e8e489e398848f4d90a745cf2d2e946353a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyworklog-0.11.0.tar.gz:

Publisher: release.yml on xyb/worklog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyworklog-0.11.0-py3-none-any.whl.

File metadata

  • Download URL: pyworklog-0.11.0-py3-none-any.whl
  • Upload date:
  • Size: 360.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyworklog-0.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b29b71337d94c17191fd0794faff0e4a3dc8acaad2e6220004b18a25fa89e628
MD5 42c9a6358cff88d92750809cca99787e
BLAKE2b-256 05e028727e4d4d52bfc2f6f1b6fe73e3a086471a50f6332861f7d825a055413e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyworklog-0.11.0-py3-none-any.whl:

Publisher: release.yml on xyb/worklog

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page