A small timer utility to track how much time you spend on tasks.
Pre-v1 — the CLI may change between releases.
Have zig v0.16.0 installed
git clone https://github.com/defaultgnome/zman
cd zman
zig build
# copy zig-out/bin/zman somewhere on your PATHConfig is stored at the path printed by zman config (typically ~/Library/Application Support/zman.json on macOS).
zman --help # list commands
zman <command> -h # help for a specific command| Command | Description |
|---|---|
zman |
Open full-screen TUI (coming soon) |
zman version |
Print version |
zman config |
Print config file path |
zman start [name] |
Start a timer; Ctrl-C or Esc to stop (Esc only on Windows) |
zman stop <name> |
Close the last open time entry for a task |
zman log <name> |
Add a manual clock-in/clock-out entry |
zman amend <name> <id> |
Edit or remove an existing time entry |
zman list |
List tasks with total time |
zman delete <pattern> |
Delete tasks matching a glob pattern |
zman merge <from> <to> |
Merge time entries from one task into another |
zman show <name> |
Print full clock-in/clock-out log for a task |
zman start my-task # named task
zman start # auto-named (unnamed-task-1, unnamed-task-2, …)
zman start --last # restart the last started task
zman start --git # use current git branch as task nameOn Unix, press Ctrl-C or Esc to stop. On Windows, press Esc.
--last and --git cannot be combined with a task name. See zman start -h.
Closes the last open clock-out for the given task using the current time. Errors if the task has no entries or the last entry is already closed.
zman stop my-taskAdds a manual clock-in/clock-out entry. Aborts if the range overlaps an existing entry or is in the future.
zman log my-task --from=09:00 --to=11:30
zman log my-task --from="2026-06-10 09:00" --to="2026-06-10T11:30"Time formats (local time):
| Format | Example |
|---|---|
HH:MM |
today at 09:00 |
HH:MM:SS |
today at 09:00:00 |
YYYY-MM-DD HH:MM |
full date and time |
YYYY-MM-DD HH:MM:SS |
full date and time |
YYYY-MM-DDTHH:MM |
ISO-style date and time |
YYYY-MM-DDTHH:MM:SS |
ISO-style date and time |
See zman log -h.
Edits or removes an existing time entry. <id> is the row index shown by zman show (0 is the first entry).
zman amend my-task 0 --from=09:15 # change clock-in
zman amend my-task 0 --to=11:45 # change clock-out
zman amend my-task 0 --from=+0:15 # shift clock-in forward 15 minutes
zman amend my-task 0 --to=-0:30 # shift clock-out back 30 minutes
zman amend my-task 0 --drop # remove the entryAccepts the same absolute time formats as zman log, plus relative offsets from the entry's current value: +H:MM, -H:MM, +H:MM:SS, -H:MM:SS.
--drop cannot be combined with --from or --to. At least one of --from, --to, or --drop is required. See zman amend -h.
zman list # name + total time, aligned
zman list --name-only # one task name per line (useful for scripting)Deletes all tasks whose name matches a glob pattern (* matches any substring). The confirmation prompt defaults to yes — press Enter to proceed.
zman delete "old-feature*" # delete tasks starting with old-feature
zman delete "*" # delete every task (prompts for confirmation)
zman delete "*" -y # delete all, skip confirmationSee zman delete -h.
Moves all time entries from <from> into <to>, then removes <from>. Aborts with no changes if any time ranges overlap.
zman merge old-name new-nameOn success, prints the merged result (same format as zman show).
Prints a summary line (total time, date range, day count) and a table of every entry with a # index, clock-in, clock-out, and duration. Open entries show N/A for clock-out and duration.
zman show my-taskExample output:
Task: my-task
Total: 2h 30m · 2026-06-10 → 2026-06-14 · 3 days
# Clock-in Clock-out Duration
0 2026-06-10 09:00 2026-06-10 11:00 2h 0m
1 2026-06-14 08:00 N/A N/A
Use the # column as the <id> for zman amend.
With fzf installed:
# fuzzy-pick a task to inspect
zman show "$(zman list --name-only | fzf)"
# fuzzy-pick a task to stop
zman stop "$(zman list --name-only | fzf)"
# fuzzy-pick a task to delete
zman delete "$(zman list --name-only | fzf)"
# fuzzy-pick from/to for a merge
zman merge \
"$(zman list --name-only | fzf --prompt="from: ")" \
"$(zman list --name-only | fzf --prompt="to: ")"zig build test- Added
zman amend— edit clock-in/clock-out on an existing entry, apply relative time offsets, or drop an entry by index
- Added
#index column tozman showoutput (used as entry id forzman amend) - Added date range and day count to the
zman showsummary line
- Added
zman stop— close the last open time entry without running a live timer - Added
zman log— insert a manual clock-in/clock-out range - Added Esc as a stop key during
zman start(Unix: Ctrl-C or Esc; Windows: Esc)
- Fixed delete confirmation prompt defaults to yes when Enter is pressed (
[Y/n])