Worklog
A personal time-tracking system.
Worklog provides a simple mechanism for logging in and out of accounts which are billed for time elapsed. The author, a professor, uses it to bill time to various commitments. Some really are paid hourly (e.g. consulting), but most are not. The primary use is to track and analyze how time is spent.
Installation
Worklog can be easily installed using pipx:
pipx install worklog-cli
or, if you use uv:
uv tool install worklog-cli
You will also need to install hledger.
Usage
If you are just getting started, make a list of the ways you spend time (or at least those you want to track). If you want to nest accounts, separate them with colons. For example, here are a few of my accounts:
research:grants
research:projects
research:pubs
research:reading
research:lab
teaching:planning
service:advising
identity:website
identity:network
overhead:email
overhead:waste
overhead:admin
Now run work. You will be asked to log in to an account, and then to enter a
description of the work you are doing. (Accounts can be auto-completed using tab.)
% work
Log in to account: research:reading
Work description: Writing the Worklog README
[Enter to log out]
Press enter when you finish that work session, and you will be prompted to log in to another account. Press Control + C when you are finished. That's it!
While entering an account name, press Tab to autocomplete; if there's more than one match, press Tab again to list the possibilities.
Commands
The base command is work, which enters a loop for logging in and out of
accounts. There are several other modes available:
work report(orwork r) shows work statistics and quits. By default it shows daily balances for the past week, but this can be adjusted:- Append an account name to restrict the report to that account, e.g.
work report research:reading. -b/--beginand-e/--endset the date range (hledger date syntax), e.g.work report -b 2026-01-01 -e 2026-02-01.--daily,--weekly,--monthly, or--yearlychange how balances are grouped, e.g.work report --monthly.
- Append an account name to restrict the report to that account, e.g.
work edit(orwork e) opens the current worklog for editing. Sometimes I find I need to edit the worklog to add a work session or change times (for example, if I forgot to log out before going to bed).work archive FILENAME(orwork a FILENAME) archives the current worklog at the given filename and starts a new worklog. If you plan to log your work over time, I suggest you keep your log files in version control.
Configuration
Worklog follows the XDG Base Directory
convention. A configuration file is automatically created at
$XDG_CONFIG_HOME/worklog/config (~/.config/worklog/config by default), and
worklog data is stored at $XDG_DATA_HOME/worklog/worklog.timeclock
(~/.local/share/worklog/worklog.timeclock by default). If you have an existing
~/.worklog directory from an older version of Worklog, it will automatically be
migrated to these locations the first time you run work.
[WORKLOG]
logfile = /Users/me/.local/share/worklog/worklog.timeclock
editor = vim
Formats
Worklog relies on hledger, a Haskell implementation of ledger, for double-entry bookkeeping which regards time as a resource just like money. One main design goal of this system is a human-readable ledger format which can also be parsed by scripts.
Development
This project uses uv for dependency management and packaging.
uv sync # create a virtualenv and install dependencies
uv run work # run the CLI from source
uv build # build the sdist and wheel into dist/
uv publish # upload to PyPI
Metadata
Release files for worklog-cli 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| worklog_cli-2.1.0.tar.gz | 7.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| worklog_cli-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.7 kB
Release files / worklog_cli-2.1.0.tar.gz
| Download URL | worklog_cli-2.1.0.tar.gz |
|---|---|
| Size | 7.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4672deef387b943468306d392e0e99e70f7b7f66897bb45d82c04aeb4841c21a
|
|
BLAKE2b-256 checksum How to use checksums |
d4524ff4a3e6a438d78608e40bc335834adcf42be4d5f2baa69bdc41c666912d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.4 {"installer":{"name":"uv","version":"0.11.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / worklog_cli-2.1.0-py3-none-any.whl
| Download URL | worklog_cli-2.1.0-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6b55a8824e6a4bf93fcbcd4f1279f0f670fa43073eedcdca8a5a2765527282d5
|
|
BLAKE2b-256 checksum How to use checksums |
4dee0832c98dbc6c0c107187eb08aacfee101ff5e45deebef60434f612258098
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.4 {"installer":{"name":"uv","version":"0.11.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|