Skip to main content
Everyday version control

Read history with tovio log

The default topology graph, and every flag that narrows or reshapes it.

Written By Dustin

Last updated About 1 month ago

tovio log

Prints history as a topology graph by default โ€” the shape is shown without asking for it.

Narrowing what is walked

tovio log <path>             # only changes touching this file or directory
tovio log --entity agent      # or: human
tovio log --task-id <id>
tovio log --limit 20
tovio log --first-parent      # only the first-parent line

By default a filtered view reaches through a merge into the lanes it integrated, so a landed line is credited to the change that wrote it rather than to the land that carried it across. --first-parent restores the lane-summary reading, in which the merge stands in for the lane.

Choosing the rendering

tovio log --graph      # explicit; already the default
tovio log --no-graph   # the plain flat list
tovio log --oneline    # node + short change id + message
tovio log --all        # seed from every lane tip, not just HEAD
tovio log --no-pager   # do not pipe through $PAGER / less

--no-graph is a rendering choice only โ€” it does not change which commits are walked. --graph and --all cannot be combined with the subsetting filters (<path>, --entity, --task-id, --why, -S, -G); clap rejects the combination rather than silently ignoring one.

Dates

tovio log --date relative   # default; "3 minutes ago", absolute past a week
tovio log --date absolute   # e.g. 2026-07-07 11:42:03 -04:00

--date only affects the human rendering. The --json and CSV paths always carry the raw epoch.

Formatting

tovio log --format human
tovio log --format json
tovio log --format csv
tovio log --format 'template:{change} {author} {message}'

The template columns available on log are exactly change, commit, author, timestamp and message. An unknown {name} expands to nothing; {{ and }} are literal braces. CSV emits those same columns as a header row.

A global --json always wins over --format โ€” and it wins before the value is even parsed, so --json --format bogus quietly emits JSON rather than complaining. Without --json, an unrecognised --format value is TVO-CLI-016 (exit 2). Do not count on a typo in --format being caught when you are also passing --json.

The filters unique to TOVIO

tovio log --why                  # the attested rationale for each change
tovio log --entity agent         # only work done by agents
tovio log --session <chg>        # one change's run record
tovio log --descendants <chg>    # what was built on top of a change

Both --why and --entity have their own articles โ€” they are the reason history in TOVIO answers questions Git history cannot.