Skip to main content
Editors, desktop & the shell

Install the VS Code extension

Build it, install it, and point it at the CLI.

Written By Dustin

Last updated About 1 month ago

The extension is not on the Marketplace yet. Installing it means building the .vsix yourself, from a clone of the TOVIO repository โ€” the same package CI builds and attests, minus the publisher signature.

Build and install

git clone https://github.com/Tovio-VCS/tovio.git
cd tovio
pnpm install
pnpm --filter tovio-vscode build
cd packages/tovio-vscode-ext
pnpm dlx @vscode/vsce package --no-dependencies --out tovio-vscode.vsix
code --install-extension tovio-vscode.vsix

You need VS Code 1.85 or newer. The extension version is whatever packages/tovio-vscode-ext/package.json says in the checkout you built from; build the CLI from that same checkout and the two are aligned by construction.

It drives the CLI

The extension contains no version-control logic and no cryptography. Every view and every action is a tovio invocation whose --json output it parses:

SurfaceWhat it runs
Status bar, file badges, SCM viewtovio status --json
Historytovio log --limit <n>
Lanestovio lane, tovio switch
Policiestovio policy list
Agentstovio agent list
Audittovio audit verify then tovio audit log
Semantic Difftovio semantic diff
Rationale hover, inline blametovio blame <path> --why
Quick diff, conflict sidestovio cat

Two consequences follow from that:

  • tovio must be on the PATH VS Code sees, or you must set tovio.executablePath. This is the most common setup failure, especially on macOS where a GUI-launched VS Code does not inherit your shell's PATH.
  • Keep the two versions close. A much older CLI may not produce fields a newer extension expects.

When it activates

The extension declares two activation events: a workspace that contains .tovio/working-copy, and onStartupFinished. It therefore loads either way, but the views only fill once it resolves a repository root โ€” so opening a subdirectory, or a multi-root workspace where the repository is not itself a root, leaves it looking inert.

Checking

Open a terminal inside VS Code and run:

tovio --version

It prints tovio and the version. Note that this is a flag, not a subcommand โ€” tovio version is not a command and exits 2 with an unrecognised-subcommand error. If the flag fails inside the editor's terminal, the extension will fail the same way.

Protected files

A file covered by a protected-path policy keeps its normal A/M/D/! badge but is tinted with the tovio.sealedResourceForeground colour, and its tooltip says protected (policy). That flag comes straight from the protected[] array in tovio status --json โ€” the extension makes no separate access call to compute it.

Whether you can read a protected file is a separate question, and it is decided in the engine, not in the editor. The extension asks the CLI for content and shows what the CLI returns; no client can present a more permissive view than your clearance allows.

Getting started

The extension ships a five-step walkthrough โ€” install the CLI, open a repository, switch lanes, see the rationale behind a line, send feedback. Find it under Get Started with TOVIO.