Read a file at any revision
tovio cat, including one side of a conflict.
Written By Dustin
Last updated 33 minutes ago
tovio cat <path>tovio cat <path> --at <rev>Prints a committed file to standard output, decrypting it if you hold a reading key for it. If you do not, you get a permission denial naming what you are missing — not silent ciphertext, and not an empty file. The path is repository-root-relative, as committed.
--at takes a change id (chg:…), a commit id (blake3:…), or a lane name. It is what powers per-file history in the editor integrations.
Reading one side of a conflict
tovio cat <path> --side ourstovio cat <path> --side theirstovio cat <path> --side baseBecause a conflict is a stored object rather than marker lines in your file, all three sides remain readable in full while the conflict is open. This is often faster than opening a merge tool. ours is the current lane's content as recorded in the conflict, theirs the landed lane's, and base the common ancestor.
Reading as an agent
tovio cat <path> --token <id>Reads under a capability token. Both the token's path scope and its secret_clearance are enforced before anything is decrypted: an out-of-scope read fails with TVO-TOKEN-001, and a clearance-less read of a clearance-gated path with TVO-PERM-001 (both exit 13). Without --token, a human read using this repository's own identity is ungated.
When it refuses
All five are usage errors and exit 2.
Scripting
cat writes the file bytes to standard output, so it pipes normally. Every protected read it performs is recorded in the audit chain.
Where to find it
cat is Advanced-tier, so it is hidden from the default tovio help index. It still runs — tovio help --all lists it, and tovio help cat prints its full help regardless of tier.