Skip to content

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.

Terminal window
wuf
wuf ~/code/my-project

Without 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.

Use -t/--time for both fixed and rolling periods:

Terminal window
wuf -t this-week
wuf -t 2026-W31
wuf -t 2w3d
wuf -t 2026-07-01..2026-07-31
wuf -t 2026-07-01..
wuf -t all

Calendar-date endpoints are inclusive and interpreted in the selected timezone. A rolling duration ends when the command starts.

Profiles are convenient named event sets:

ProfileQuestion
gitWhen were ordinary commits authored?
fsWhat birth and modification times exist for current files?
bothWhat does the low-noise Git and filesystem combination show?
portableWhich selected dates are stored inside Git objects?
fullWhat do all supported Git and filesystem timestamp kinds show?
Terminal window
wuf -p fs
wuf -p both -t 2w
wuf -p portable -t all

For an exact event set, use -e/--events instead of a profile:

Terminal window
wuf -e git:tag:tagger fs:file:modified
wuf -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.

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:

Terminal window
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 all

Use an IANA timezone when local time is not the desired reference:

Terminal window
wuf --timezone Europe/Berlin

Wuf converts each instant before determining its weekday, clock time, and inside/outside state. Schedule intervals include their start and exclude their end.

The folded week is the default. Use the timeline when exact dates, offsets, identities, paths, and descriptions matter:

Terminal window
wuf --view fold
wuf --view timeline -t 2w
wuf --view timeline -t all --limit 100
wuf --view timeline --list outside

The 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.

Commit-derived events default to local branches. Narrow to the checked-out HEAD or include every local ref explicitly:

Terminal window
wuf --git-commits-from head
wuf --git-commits-from all-refs
wuf --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:

Terminal window
wuf -p fs --include-ignored
wuf -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.

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:

Terminal window
wuf --cluster-window 10m
wuf --cluster-window '1h 5m'
wuf --cluster-anchor midnight --band-label start
wuf --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:

Terminal window
wuf --grid vertical
wuf --marker-style identity
wuf --hide-empty-days weekend
wuf --hide-days weekend
wuf --display-hours 06:00-22:00
wuf --no-color

In the folded view, append a bounded chronological list from events already enabled in the report:

Terminal window
wuf --list outside
wuf --list all --limit 100
wuf -p portable --list git:tag:tagger

In 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.

Personal defaults live in the platform configuration directory. A project can use wuf.toml, or [tool.wuf] in pyproject.toml:

PlatformPersonal configuration
Linux and other Unix${XDG_CONFIG_HOME:-~/.config}/wuf/wuf.toml
macOS~/Library/Application Support/wuf/wuf.toml
Windows%APPDATA%\wuf\wuf.toml
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:

Terminal window
wuf --show-config
wuf --no-config --show-config
wuf --config ./team-wuf.toml --show-config

Run 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.