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 2w3d                             # rolling elapsed window
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 both -p full              # exhaustive local view
workfold . --git-identity jan@example.com      # only that recorded Git identity
workfold . --marker-style identity             # identity codes instead of circles
workfold . --timezone Europe/Berlin
workfold . --hours 'Mo-Thu 08:00-16:30; Fr 08:00-14:00'
workfold . --hours all                         # classify every time as working time
workfold . --cluster-anchor midnight           # fixed clock-aligned intervals
workfold . --cluster-anchor midnight --show-empty-bands  # include empty fixed intervals
workfold . --band-label start                  # show one time per occupied row
workfold . -E all                              # keep only occupied day columns
workfold . -E weekend                          # remove empty weekend columns
workfold . -H weekend                          # always hide weekend columns
workfold . --grid vertical                     # add column separators
workfold . --list-outside --limit 50

The three main selectors control separate parts of the request:

Selector Purpose Values
-t, --time Date scope this-week, 2w3d, YYYY-Www, DATE..DATE, all
-m, --mode Evidence source git, fs, both
-p, --profile Evidence preset standard, portable, full

Time and mode independently choose when and where to collect. A profile chooses which evidence kinds to use inside that request and never changes time or mode; the portable preset is intentionally available only with Git mode.

  • standard — What 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.
  • portable — What dated evidence is stored inside Git objects? Includes commit author/committer and annotated-tag tagger dates, excluding local-only evidence.
  • full — What 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 both.

Use --cluster-window 10m, --cluster-window 1h5m, or another duration to tune row clustering. The default --cluster-anchor event starts a band at each earliest unassigned event; midnight uses fixed whole-minute intervals from local 00:00 so their HH:MM boundaries remain exact. Second-based windows remain available with event anchoring. Independently, --band-label range|start selects an observed/fixed range label or only its starting minute. --show-empty-bands with midnight anchoring renders every fixed interval intersecting the display range; automatic ranges expand to full fixed bands. An explicitly cropped partial edge always shows its exact range, even with --band-label start. Without dense output, empty time stays compressed. Color is automatic by default. Use --no-color or the standard NO_COLOR environment variable for colorless output. --color restores automatic color when a configuration file sets no-color = true.

Configuration

Put personal defaults in the platform configuration directory, or project defaults in workfold.toml:

timezone = "Europe/Berlin"
hours = "Mo-Thu 08:00-16:30; Fr 08:00-14:00"
mode = "git"
profile = "portable"
cluster-anchor = "midnight"
band-label = "start"
show-empty-bands = true
grid = "vertical"
hide-empty-days = ["weekend"]

Python projects may use [tool.workfold] in pyproject.toml instead. Values resolve as built-in → global → nearest project → CLI. Inspect the result and each value's origin without collecting timestamps:

workfold . --show-config

Use --config FILE for one exact file or --no-config for built-ins plus CLI only. The usage guide documents locations, discovery, merging, and every supported key.

Reading the chart

  • Circles are Git events; squares are filesystem events.
  • --marker-style identity replaces Git circles with mapped codes such as J or the collision-safe J1, J2, and J3.
  • Green and blue are inside the configured schedule; red is outside.
  • Filled/uppercase markers are inside; hollow/lowercase markers are outside.
  • The key maps each visible identity/source once and adds an outside-hours cue only when needed.
  • One symbol is one event. Busy cells use exact ×N counts.
  • Empty time is omitted. A ⋮ row reports a compressed gap once it reaches the configured cluster window.
  • Event-anchored rows are compact around observations; midnight-anchored rows use predictable clock boundaries. Labels are independently configurable.
  • Day-column hiding changes only the matrix; totals continue to cover every selected event.
  • --grid vertical|horizontal|both adds optional internal chart lines; the uncluttered default is none.

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 reports unavailable, unsupported, and unreadable evidence that can prevent a complete answer. Known timestamps outside the requested time or identity scope are not counted as coverage outcomes.

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. The architecture guide documents the package boundaries, dependency rules, data pipeline, and test layout.

Metadata

Release files for workfold 0.1.0a4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for workfold 0.1.0a4
File Size Uploaded Provenance
workfold-0.1.0a4.tar.gz 273.0 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for workfold 0.1.0a4
File Interpreter ABI Platform
workfold-0.1.0a4-py3-none-any.whl Python 3 none any Details

Total release size: 495.7 kB

Release files / workfold-0.1.0a4.tar.gz

Download URL workfold-0.1.0a4.tar.gz
Size 273.0 kB
Tags Source
SHA-256 checksum
How to use checksums
923a922255248ed952c35616b6add0593e54df302897956f768555a6b95d59e8
BLAKE2b-256 checksum
How to use checksums
4d5eeb54e05f85344e4724d7c194f0a0e54383cf1fcc1047cb3a05cc1976aa92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Release files / workfold-0.1.0a4-py3-none-any.whl

Download URL workfold-0.1.0a4-py3-none-any.whl
Size 222.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2f33c63b57de72f2a173b97c12aa9f43171ea8c993e8fd59a235ae90496fb280
BLAKE2b-256 checksum
How to use checksums
f1fb7c5acc32dc1e97b8764b9d7b80513c007bae073285402a204bc213592e89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

Security for workfold 0.1.0a4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for workfold-0.1.0a4.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 13, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page