Using Wuf
Wuf combines four independent choices: where to look, which timestamps to use, which period to include, and how to present the result. Start with the defaults and add only the control you need.
Start with a repository
Section titled “Start with a repository”wufwuf ~/code/my-projectWithout a path, Wuf uses the current directory. The default reads commit author timestamps reachable from local branches during the current ISO week. It does not fetch from a remote.
Choose a period
Section titled “Choose a period”Use -t/--time for both fixed and rolling periods:
wuf -t this-weekwuf -t 2026-W31wuf -t 2w3dwuf -t 2026-07-01..2026-07-31wuf -t 2026-07-01..wuf -t allCalendar-date endpoints are inclusive and interpreted in the selected timezone. A rolling duration ends when the command starts.
Choose timestamp evidence
Section titled “Choose timestamp evidence”Profiles are convenient named event sets:
| Profile | Question |
|---|---|
git | When were ordinary commits authored? |
fs | What birth and modification times exist for current files? |
both | What does the low-noise Git and filesystem combination show? |
portable | Which selected dates are stored inside Git objects? |
full | What do all supported Git and filesystem timestamp kinds show? |
wuf -p fswuf -p both -t 2wwuf -p portable -t allFor an exact event set, use -e/--events instead of a profile:
wuf -e git:tag:tagger fs:file:modifiedwuf -e 'git:*:committer'wuf -e 'fs:*:modified'Quote wildcard selectors so your shell does not expand them. Paths must appear
before the space-separated --events values, or after --.
Profiles and event selectors do not change the time period, Git reachability, ignore policy, or explicit exclusions.
Set working hours
Section titled “Set working hours”The built-in schedule is Monday-Friday, 08:00-16:30. Supply one or more daily intervals, an overnight interval, or make every timestamp inside the 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 'Mo-Fr 22:00-06:00'wuf --hours allUse an IANA timezone when local time is not the desired reference:
wuf --timezone Europe/BerlinWuf converts each instant before determining its weekday, clock time, and inside/outside state. Schedule intervals include their start and exclude their end.
Choose a view
Section titled “Choose a view”The folded week is the default. Use the timeline when exact dates, offsets, identities, paths, and descriptions matter:
wuf --view foldwuf --view timeline -t 2wwuf --view timeline -t all --limit 100wuf --view timeline --list outsideThe timeline keeps the latest 50 matching events by default and prints them in
chronological order. --list filters its rows without changing collection,
totals, or coverage. Chart layout options such as clustering, grids, and hidden
weekdays apply only to --view fold.
Adjust discovery
Section titled “Adjust discovery”Commit-derived events default to local branches. Narrow to the checked-out
HEAD or include every local ref explicitly:
wuf --git-commits-from headwuf --git-commits-from all-refswuf --git-identity 'name@example.com'Filesystem discovery respects Git ignore rules by default while retaining tracked files. You can include ignored entries or add repeatable exclusions:
wuf -p fs --include-ignoredwuf -p fs --fs-exclude node_modules --fs-exclude '*.log'The repository’s .git/ internals are always excluded from filesystem
metadata. Git records are collected through Git itself.
Tune the folded chart
Section titled “Tune the folded chart”Nearby times use an event-anchored one-hour cluster window by default. Change the window, use fixed bands from midnight, or show normally omitted fixed bands:
wuf --cluster-window 10mwuf --cluster-window '1h 5m'wuf --cluster-anchor midnight --band-label startwuf --cluster-anchor midnight --show-empty-bands--show-empty-bands requires midnight anchoring because event-anchored rows do
not define a complete set of empty intervals.
Presentation controls do not change event totals:
wuf --grid verticalwuf --marker-style identitywuf --hide-empty-days weekendwuf --hide-days weekendwuf --display-hours 06:00-22:00wuf --no-colorInspect exact events and coverage
Section titled “Inspect exact events and coverage”In the folded view, append a bounded chronological list from events already enabled in the report:
wuf --list outsidewuf --list all --limit 100wuf -p portable --list git:tag:taggerIn the timeline view, the same selectors filter the primary rows. --list
never activates a collector: select an event with --profile or --events
before asking to show it.
Use --coverage for the detailed accounting ledger, --verbose for scope and
collector details as well, and --strict when incomplete collection must
return a non-zero status.
Save defaults
Section titled “Save defaults”Personal defaults live in the platform configuration directory. A project can
use wuf.toml, or [tool.wuf] in pyproject.toml:
| Platform | Personal configuration |
|---|---|
| Linux and other Unix | ${XDG_CONFIG_HOME:-~/.config}/wuf/wuf.toml |
| macOS | ~/Library/Application Support/wuf/wuf.toml |
| Windows | %APPDATA%\wuf\wuf.toml |
timezone = "Europe/Berlin"hours = "Mo-Thu 08:00-16:30; Fr 08:00-14:00"profile = "portable"grid = "vertical"hide-empty-days = ["weekend"]
[styles."git:tag:*"]symbol = "◆"color = "magenta"outside-symbol = "◇"outside-color = "bright_red"Configuration resolves as built-in → global → nearest project → CLI. Inspect every effective value and its origin without collecting events:
wuf --show-configwuf --no-config --show-configwuf --config ./team-wuf.toml --show-configRun wuf --help for every accepted option, selector shape, and built-in
default. Read Coverage, privacy, and accuracy before
using the output as evidence outside personal inspection.