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 to see the current ISO week:

workfold

The selectors you will use most are:

workfold . -t 2w3d                    # rolling elapsed window
workfold . -t 2026-W31                # one ISO week
workfold . -p fs                      # current filesystem metadata
workfold . -p both                    # low-noise Git + filesystem view
workfold . -p portable -t all         # evidence stored in Git objects
workfold . -p full -t all --git-commits-from all-refs --include-ignored
workfold . -e git:tag:tagger fs:file:modified

They control separate parts of the request:

Selector Purpose Values
-t, --time Date scope this-week, 2w3d, YYYY-Www, DATE..DATE, all
-p, --profile Named event set git, fs, both, portable, full
-e, --events Exact event set (alternative to a profile) IDs and wildcards

The profiles answer different questions:

  • git: What does ordinary commit activity look like? This is the default.
  • fs: What birth and modification metadata exists for current regular files?
  • both: What does the combined low-noise Git and filesystem pattern look like?
  • portable: What dated evidence is stored inside Git objects?
  • full: Which timestamps exist across every supported Git and filesystem event kind?

Profiles expand only to event sets. Time, Git reachability, ignored files, and explicit exclusions remain independently configurable.

For exact control, -e/--events accepts identifiers such as git:commit:author, git:tag:tagger, and fs:file:modified; quote wildcards such as 'git:*'. -l/--list appends bounded event details. Paths must appear before either space-separated selector, or after an option-terminating --.

Schedules support daily intervals, breaks, overnight shifts, and all:

workfold . --hours 'Mo-Thu 08:00-16:30; Fr 08:00-14:00'
workfold . --hours 'Mo-Fr 22:00-06:00'
workfold . --hours all

See the usage guide for clustering, fixed bands, identity markers, day hiding, grids, exact event selection, configuration, and every CLI option.

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"
profile = "portable"
cluster-anchor = "midnight"
band-label = "start"
show-empty-bands = true
count-grouping = "visual"
grid = "vertical"
hide-empty-days = ["weekend"]

[styles."git:tag:*"]
symbol = "◆"
color = "magenta"
outside-symbol = "◇"
outside-color = "bright_red"

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

  • By default, circles are Git events and squares are filesystem events.
  • Default green/blue filled markers are inside the schedule; red hollow markers are outside. Colorless output preserves the shape distinction, and event style rules may replace both symbol pairs and their colors.
  • One symbol is one event; busy cells use exact ×N counts. Counts stay separate per event kind by default; --count-grouping visual merges kinds only when their resolved symbol and configured color match.
  • Empty time is compressed, and ⋮ reports a meaningful gap.
  • Identity-marker mode replaces Git circles with codes mapped in the key.
  • Event-selector style rules can replace source-marker symbols and colors while keeping collection and coverage unchanged.

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 --locked --extra dev
uv run --locked pytest
uv run --locked ruff check .
uv run --locked ruff format --check .
uv run --locked 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.0a6

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.0a6
File Size Uploaded Provenance
workfold-0.1.0a6.tar.gz 315.7 kB With provenance Details

Built distribution (wheel)

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

Total release size: 572.2 kB

Release files / workfold-0.1.0a6.tar.gz

Download URL workfold-0.1.0a6.tar.gz
Size 315.7 kB
Tags Source
SHA-256 checksum
How to use checksums
7aa035f548365f818e06639d7db95bd4a9cf4b161db73829cd7d83de47fc783e
BLAKE2b-256 checksum
How to use checksums
bac78fc5f3972f11c957ae37f96414a7a7b3f1e6b6af2ae5367c0d573d423259
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 19, 2026.

Transparency log

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

Download URL workfold-0.1.0a6-py3-none-any.whl
Size 256.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
177f8663b9eee532a03ddd3d24e3b0cad74ea9d48c3662c6da970b54706b6d6f
BLAKE2b-256 checksum
How to use checksums
0ddd7a67e751878d322189fe19e32b431429edcc923f8d5ffe04a1a3b665b0cb
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 19, 2026.

Transparency log

Security for workfold 0.1.0a6

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.0a6.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 19, 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