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:
~ 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:
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)¶
@ 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:
Limit how many entries you see:
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.
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 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¶
- See the current snapshot of state, not history → Read your status
- Found a commit you want to reshape? → Rewrite history safely
- Want to ship what you've inspected? → Land a change
Last reviewed September 9, 2026
Suggest an improvement to this page Not for security reports — see disclosure