Skip to content

Inspect changes and history

Two read-only commands answer "what changed?" and "what happened?". tovio diff compares your working copy with its last commit; tovio log browses history. Neither mutates anything, so reach for them freely whenever you need to orient.

What runs today

tovio log and every flag shown here — scoping history to a path, --limit, the provenance filters (--entity, --task-id), --oneline, --first-parent, and --format / --json — work today, alongside plain tovio diff (working copy vs. last commit). tovio diff takes no arguments and no modes of its own: to read a committed change's patch use tovio change show <id> --diff, and the semantic and behavioral layers are their own commands (tovio semantic diff, tovio behavioral diff — see the semantic & behavioral guides). The short aliases in the CLI specification (tovio d, tovio lg) are not in the shipped binary yet.

See what you've changed (tovio diff)

With no argument, diff compares your working copy against the last commit — the uncommitted work in your current change:

$ tovio diff
~ src/integrations/cgm/dexcom.ts
+ tests/integrations/cgm.test.ts

~ is a modified file, + an added one, - a removed one, and ! <path> (conflict: <kind>) an open conflict. With nothing uncommitted it prints No changes since the last commit. tovio diff takes no positional argument and no flags of its own; the global --json gives the structured envelope. --quiet is the exception to the usual contract here: diff prints the same human list under -q, so script against --json rather than expecting silence.

To see the content of a change that is already committed, ask change show for its patch:

$ tovio change show chg:a3f7b2 --diff

Richer diffs are separate commands

TOVIO can diff more than raw text, but those views are their own verbs rather than modes of tovio diff:

  • tovio semantic diff [<old> <new>] — a function-level interface diff (what symbols changed, not just which lines). Advisory: it reports, it never blocks.
  • tovio behavioral diff <old> <new> — a diff of an AI system's behavioral snapshot.

Semantic and behavioral diffs are an optional layer

The semantic symbol graph and behavioral snapshots are additive — TOVIO is fully functional on plain text diffs without them. See the semantic & behavioral guides.

Browse history (tovio log)

$ tovio log
@ chg:a3f7b2…  (main)
│ Add Dexcom G7 sync handler
│ you · 3 minutes ago · blake3:19d787680b…
│
○ chg:2m7w6c…
  Base
  you · 2 hours ago · blake3:40343dc3e7…

log shows commit history as a topology graph: one node per commit (@ at HEAD, ○ elsewhere), each with its Change ID, the lane tips pointing at it ((main)), the message, the author (an agent-authored commit is marked and carries its model, task, and authorizing human), a relative time, and the commit address. --no-graph renders a flat list, --oneline collapses each commit to one row, --all seeds the graph from every lane tip, and --date absolute shows exact local timestamps. To scope history to one file or directory, pass a path:

$ tovio log src/integrations/cgm/dexcom.ts

Limit how many entries you see:

$ tovio log --limit 5

A bounded --limit marks the cut with a ⋮ earlier history hidden line. Long interactive output is piped through your pager unless you pass --no-pager.

Merge-aware by default

Every view walks the whole reachable DAG, so a commit that arrived on a landed lane is visible, and a landed line is credited to the change that wrote it, not to the land that carried it across. --first-parent restores the lane-summary reading ("what shipped on this lane, in order"), in which a merge stands in for the lane it integrated.

Filter by author and provenance

Because TOVIO attributes every commit to a human or an agent identity, you can filter history by who did the work:

$ tovio log --entity agent           # only agent-authored commits (carry provenance)
$ tovio log --entity human           # only human-authored commits
$ tovio log --task-id task-42        # commits an agent made under one task id

--task-id implies agent-authored. The filters are mutually exclusive with --graph/--all (a filtered view renders the plain list).

Agent provenance is an agentic-tier feature

The agent-authorship filters and agent registration (tovio agent) are implemented in the current source tree; a solo repo simply never populates them. No generally available package has been published. See Agents.

Find when a string entered history

-S <string> shows only the changes that added or removed a literal string; -G <regex> matches added or removed lines against a regular expression. Both report the change (chg:) that did it and decrypt a protected file when you hold its key.

$ tovio log -S "reconnectWithBackoff" --limit 5

Get machine-readable output (--format / --json)

log produces a data set, so it accepts --format:

$ tovio log --limit 20 --format json
$ tovio log --limit 20 --format csv
$ tovio log --limit 20 --format "template:{change} {author} {message}"

--json is shorthand for --format json and forces the structured envelope on any command. As everywhere in TOVIO, the JSON output carries no glyphs, color, or warmth lines — that's human-terminal only. The CSV columns are change,commit,author,timestamp,message.

Attribution by change, not by commit

When you want to know who introduced a line, the advanced tovio blame <file> attributes it to the logical change that introduced it — not the formatting commit that last touched it. That's a more honest answer than line-by-line commit blame, because the Change ID is the stable identity that survives rewrites.

$ tovio blame src/integrations/cgm/dexcom.ts

tovio blame is an advanced-tier verb

tovio blame is implemented in the current source tree; it sits one tier deeper than diff/log, kept out of the default help index (tovio help --advanced lists it) so the everyday surface stays small. No generally available package has been published.

Where to go next

Last reviewed September 9, 2026

Suggest an improvement to this page Not for security reports — see disclosure