Vist/ Blog/ Product
Product 4 min read

Vist Now Has a Command-Line Client

The new vist CLI gives your coding agents and your shell scripts direct access to your notes, tasks and memory. One install, one sign-in, and your agents get a small skill file instead of a full MCP connection.

Vist has a command-line client now. It's called vist, it's a single binary, and it talks to the same MCP server your AI assistant already uses. You install it with Homebrew:

brew install davidheijl/tap/vist
vist init

vist init signs you in through your browser, then looks at which coding agents you have installed and writes a short skill file for each of them. After that, your agent knows how to use Vist.

Why a CLI, when there's already an MCP server?

The MCP server works well in chat apps like Claude Desktop. In a coding agent it has a cost: every tool definition is loaded into the agent's context at the start of every session, whether it gets used or not. With a lot of tools, that adds up.

A skill works the other way around. The agent gets a short file, about 1,100 tokens, that says what Vist is and how to call it. When it needs something, it runs a shell command, like it already does for git or grep:

vist load_context
vist search_knowledge_base --query "worktree database setup"
vist create_task --description "Write the release notes" --due-date 2026-09-30

I've switched my own Claude Code setup over to this. The Vist MCP connector is turned off there, and the agent uses the CLI through its skill. It works the same, with less in the context window. That fits nicely with the tiered model setup I wrote about earlier, where smaller models do most of the work and every token of context counts.

It also works for plain scripts

Output is JSON when you pipe it, so it combines with jq and everything else in your shell:

# every note title, all pages
vist list_notes --all --jsonl | jq -r .title

# a hundred operations in one go, with a report of what failed
vist batch ops.jsonl --report report.json

--all pages through everything for you. batch checks every operation against the tool schemas before sending anything, so a typo on line 90 doesn't leave you with 89 half-applied changes. You can retry only the failed ones afterwards.

The commands come from the server

The CLI doesn't have a hard-coded list of commands. On first run it asks the server which tools exist and builds a command for each one, with flags taken from the tool's schema. When I add a tool to Vist, it shows up in the CLI without a new release. vist tools lists what's there, and vist schema <tool> shows the flags for one of them.

Which agents it supports

vist init writes skills for Claude Code, OpenCode, Cursor and GitHub Copilot CLI. Some of those read each other's skill folders, so init picks the smallest set of files that gives every agent exactly one copy. It never overwrites a file that already exists unless you pass --force.

What's not there yet

This is version 0.1. Builds exist for macOS, Linux and Windows, but I've only tested macOS so far, so treat the Windows build as experimental. Homebrew works on macOS and Linux.

The next thing I'm working on is bulk maintenance: cleaning up old notes and memories with a preview first, and nothing deleted unless you approve it.

The CLI documentation has the full setup and command reference. If you try it and something breaks, let me know on Discord.

Product