Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Workfold

PyPI Latest Release Pepy Total Downloads GitHub License

Workfold folds local Git and filesystem timestamps onto one representative Monday-to-Sunday week. It highlights activity outside your intended working hours without pretending that timestamped events are hours worked.

Workfold terminal output

Workfold is local, private by design, terminal-only, and currently alpha.

Install

pip install workfold
workfold --help

For an isolated installation, use uv tool install workfold or pipx install workfold. Standalone binaries are available from GitHub releases.

Quick start

Run workfold inside a Git repository for the current ISO week:

workfold

Common views:

workfold . -t 2026-W31                         # one ISO week
workfold . -t 2026-W30 -t 2026-W31            # several weeks, folded together
workfold . -t 2026-07-01..2026-07-31          # inclusive date range
workfold . -t all -m fs                        # filesystem metadata
workfold . -t all -m git -p portable           # portable Git-object timestamps
workfold . -t all -m all -p full               # exhaustive local view
workfold . --git-identity jan@example.com      # only that recorded Git identity
workfold . --timezone Europe/Berlin
workfold . --hours 'Mo-Thu 08:00-16:30; Fr 08:00-14:00'
workfold . --list-outside --limit 50

The three main selectors are independent:

Selector Purpose Values
-t, --time Date scope this-week, YYYY-Www, DATE..DATE, all
-m, --mode Evidence source git, fs, all
-p, --profile Collection depth standard, portable, full
  • standardWhat does the ordinary activity pattern look like? Git uses commit author dates reachable from local branches (plus a detached HEAD); filesystem mode uses birth/modified dates for regular files and respects Git ignore rules.
  • portableWhat dated evidence is stored inside Git objects? Includes commit author/committer and annotated-tag tagger dates, excluding local-only evidence.
  • fullWhat dated evidence can this local machine still discover? Enables every supported kind inside the selected time and mode; it does not imply -t all or -m all.

Use --cluster-window 10m, --cluster-window 1h5m, or another duration to tune row clustering. Use --no-color or the standard NO_COLOR environment variable for colorless output.

Reading the chart

  • Circles are Git events; squares are filesystem events.
  • Green and blue are inside the configured schedule; red is outside.
  • One symbol is one event. Busy cells use exact ×N counts.
  • Empty time is omitted. A row reports a compressed gap.

The summary independently splits all events by schedule and by calendar day. Weekend events can therefore also be outside working hours.

Accuracy and privacy

  • Events are discrete timestamp observations, not work sessions or duration.
  • Collection is local: Workfold does not contact a Git host or telemetry service.
  • Git history can be rewritten; reflogs can expire; filesystem metadata is a mutable snapshot and birth time depends on platform and filesystem support.
  • Coverage output accounts for unavailable, filtered, unsupported, and unreadable timestamps in the requested scope.

See the documentation for every CLI option, collector semantics, coverage guarantees, and platform notes.

Development

The Python package lives directly in workfold/; there is no src/ wrapper.

nix develop
uv sync --extra dev
uv run pytest
ruff check .
ruff format --check .
uv run pyright

Use nix run .#docs-dev for the documentation site and nix run .#docs-check to validate it.

Download files

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

Source Distribution

workfold-0.1.0a2.tar.gz (167.5 kB view details)

Uploaded Source

Built Distribution

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

workfold-0.1.0a2-py3-none-any.whl (143.9 kB view details)

Uploaded Python 3

File details

Details for the file workfold-0.1.0a2.tar.gz.

File metadata

  • Download URL: workfold-0.1.0a2.tar.gz
  • Upload date:
  • Size: 167.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for workfold-0.1.0a2.tar.gz
Algorithm Hash digest
SHA256 5c0cd62127a84c9292a989f526714bdc116fed01434eefd2891360a9f7372b83
MD5 d3b287828ddb73d09b0962a04ce6e804
BLAKE2b-256 56cb6252cadacf448cab41fa5d22eac6003aaf00f2880edd6c44340bce4cfba4

See more details on using hashes here.

Provenance

The following attestation bundles were made for workfold-0.1.0a2.tar.gz:

Publisher: release.yml on janthmueller/workfold

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

File details

Details for the file workfold-0.1.0a2-py3-none-any.whl.

File metadata

  • Download URL: workfold-0.1.0a2-py3-none-any.whl
  • Upload date:
  • Size: 143.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for workfold-0.1.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 551fad265636625f92c7a47ca4cc468618714e0f75fcb6d06560097f28e636e5
MD5 f3dd090d9aed68a111927aebd72db85c
BLAKE2b-256 4b8d22bd143254b203c69f06b96a2259ac1fbc8d10680e2c14c076debba6a1c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for workfold-0.1.0a2-py3-none-any.whl:

Publisher: release.yml on janthmueller/workfold

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