This release is a pre-release and may not be stable for production use.
WUF Unifies Footprints
Wuf folds local Git and filesystem timestamp activity onto one representative Monday-to-Sunday week. It makes work patterns visible at a glance and marks events outside your intended working hours without pretending that timestamps are hours worked.
Wuf is local, terminal-only, and currently alpha.
Install
pip install wuf
wuf --help
For an isolated installation, use uv tool install wuf or pipx install wuf.
Standalone archives are available from
GitHub Releases.
Wuf is the new name of Workfold. The transitional
workfoldpackage and command continue to invoke Wuf, but new installations and configuration should usewuf.
Start with your current week
Run Wuf inside a Git repository:
wuf
The default view uses commit author timestamps from local branches, the current ISO week, your operating system's timezone, and working hours of Monday-Friday 08:00-16:30.
Common variations are deliberately composable:
wuf ~/code/project -t 2w3d
wuf -t 2026-W31
wuf -p fs
wuf -p both -t 2w
wuf -p portable -t all
wuf -e git:tag:tagger fs:file:modified
-t/--timechooses the period.-p/--profilechooses a named event set.-e/--eventsreplaces the profile with exact event selectors.
Profiles include git, fs, both, portable, and full. They change only
which timestamp kinds are selected—not the time period, Git reachability, or
filesystem ignore policy.
Set your schedule
wuf --hours 'Mo-Thu 08:00-16:30; Fr 08:00-14:00'
wuf --hours 'Mo-Fr 08:00-12:00,13:00-16:30'
wuf --hours all
Use --timezone Europe/Berlin or another IANA zone when local time is not the
desired reference.
Save your defaults
Add a wuf.toml to a project, or use [tool.wuf] in pyproject.toml:
timezone = "Europe/Berlin"
hours = "Mo-Thu 08:00-16:30; Fr 08:00-14:00"
profile = "portable"
grid = "vertical"
hide-empty-days = ["weekend"]
Personal defaults may live in the platform configuration directory. Inspect the effective values and where each came from with:
wuf --show-config
What the chart means
Each marker is a discrete timestamp observation, not a work session. Git history can be rewritten, reflogs can expire, and filesystem metadata is a mutable snapshot. Wuf reports incomplete or unsupported collection rather than silently inventing evidence.
Collection stays local: Wuf does not contact GitHub, GitLab, or another remote service.
Documentation
Run wuf --help for the complete option and event-selector reference for your
installed version.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wuf-0.1.0a8.tar.gz.
File metadata
- Download URL: wuf-0.1.0a8.tar.gz
- Upload date:
- Size: 314.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b936c809985fdad63e32c90361921d970e6f39806ced48b13ed363a121e621ed
|
|
| MD5 |
94d9741f445789588441301968fa604f
|
|
| BLAKE2b-256 |
f9a8ace3e9d8f11c27e6c245a63e49ea8cef0f657efabb093cec016348b53d80
|
Provenance
The following attestation bundles were made for wuf-0.1.0a8.tar.gz:
Publisher:
release.yml on janthmueller/wuf
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wuf-0.1.0a8.tar.gz -
Subject digest:
b936c809985fdad63e32c90361921d970e6f39806ced48b13ed363a121e621ed - Sigstore transparency entry: 2555221294
- Sigstore integration time:
-
Permalink:
janthmueller/wuf@100c4e0f60c602c6ad3f30465727dde1735ec711 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/janthmueller
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@100c4e0f60c602c6ad3f30465727dde1735ec711 -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file wuf-0.1.0a8-py3-none-any.whl.
File metadata
- Download URL: wuf-0.1.0a8-py3-none-any.whl
- Upload date:
- Size: 253.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1cf9de715c475ddb0c62bd64dbbf2e0e499d5691a459b0bd24196f0f93559cd9
|
|
| MD5 |
1ce15f88632450b6c2437a45a5cb0f88
|
|
| BLAKE2b-256 |
6f5df2d37814f19aeb85536d47f1982ecd5e2a47703bbf6a89f46ce2f4449388
|
Provenance
The following attestation bundles were made for wuf-0.1.0a8-py3-none-any.whl:
Publisher:
release.yml on janthmueller/wuf
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wuf-0.1.0a8-py3-none-any.whl -
Subject digest:
1cf9de715c475ddb0c62bd64dbbf2e0e499d5691a459b0bd24196f0f93559cd9 - Sigstore transparency entry: 2555221344
- Sigstore integration time:
-
Permalink:
janthmueller/wuf@100c4e0f60c602c6ad3f30465727dde1735ec711 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/janthmueller
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@100c4e0f60c602c6ad3f30465727dde1735ec711 -
Trigger Event:
workflow_run
-
Statement type: