Read history with tovio log

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

Written By Dustin

Last updated 33 minutes 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 directorytovio log --entity agent      # or: humantovio log --task-id <id>tovio log --limit 20tovio 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 defaulttovio log --no-graph   # the plain flat listtovio log --oneline    # node + short change id + messagetovio log --all        # seed from every lane tip, not just HEADtovio 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 weektovio 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 humantovio log --format jsontovio log --format csvtovio 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 changetovio log --entity agent         # only work done by agentstovio log --session <chg>        # one change's run recordtovio 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.