Skip to main content

Visvo AI CLI

visvoai-cli

tests PyPI license: MIT

A terminal coding agent that takes permissions seriously. (VisvoAI™)

visvoai — a real turn: read, edit, self-correct, verify, with live cost

Most coding agents hold real power over your machine, gated by nothing stronger than a system prompt. This one is different: a full-screen TUI agent (built on Textual) that reads, edits, and runs code in your repo — with a permission model enforced by the OS, not by politeness; delegatable subagents with live logs; teachable skills; MCP tool servers (Model Context Protocol); and per-turn time-travel across both your files and the conversation.

It runs on the published visvoai-core loop and visvoai-ai model layer, unmodified — building your own agent product? This is the reference for how far those two go.

pip install visvoai-cli
export GEMINI_API_KEY=...     # or ANTHROPIC_API_KEY / OPENAI_API_KEY / any compatible
visvoai

All provider integrations ship in the box — the model picker exposes a live catalog (Gemini, Claude, GPT, Together, Groq, OpenRouter, …); you only supply a key for the provider you use. visvoai "fix the failing test" runs a single-shot turn without the TUI.


Why this one

The operating system enforces the rules, not the prompt. Every shell command is sorted into read or write. Reads (ls, rg, git log, …) run instantly — inside an OS sandbox that cannot write to your disk (macOS sandbox-exec, Linux bwrap). So a write pretending to be a read simply fails; it cannot touch your files. Writes always ask you first. And if the sorting is ever wrong, the sandbox still holds — a mistake costs a prompt, never your data.

Nothing from a downloaded repo turns itself on. A repo can define agents, skills, and MCP servers — but each one stays off until you approve it once. If the file changes later, you are asked again (each file is fingerprinted). What you define in your home directory is trusted as yours. Cloning a repo can never silently give it power.

Undo that includes your files. Every turn saves a snapshot of your working files. /rewind takes both the files and the conversation back to any earlier point; /fork opens a past snapshot in a fresh directory so you can try two ideas side by side.

Agents & subagents

Delegate self-contained work; run dispatches in parallel; watch them live.

<!-- .visvoai/agents/reviewer.md -->
---
description: Reviews a diff for bugs and risky changes
tools: read-only
---
You are a meticulous code reviewer. Examine the diff, read surrounding
context, and report concrete findings with file:line references.
  • Built-ins ship ready: explore (read-only, parallel-friendly recon) and general (full toolset — its mutations still ask you).
  • Each dispatch is an isolated conversation: own prompt, own tools, fresh history; only its final answer returns to the caller.
  • Live everywhere: a side panel shows running agents' tool steps as they execute; /runs gives full logs with per-run stop; every dispatch persists a JSONL trace with tokens · cost · duration.
  • Tool tiers are fixed at build time — an agent can't talk itself into more capability, and a read-only agent needs zero approval prompts to work.

Skills

Teach a workflow once; the agent loads it when a request matches — index first, full instructions on demand, referenced files only when the steps call for them (progressive disclosure).

<!-- ~/.visvoai/skills/release-notes/SKILL.md -->
---
description: Draft release notes from the git log
args:
  version: The version being released
---
1. Run `git log $version..HEAD --oneline`.
2. Group changes by type; see checklist.md for the house format.

Already have skill libraries? Point at them:

# ~/.visvoai/config.toml
[skills]
extra_dirs = ["~/.claude/skills", "~/dotfiles/skills"]

A skill grants knowledge, never capability — the agent follows the steps with its own gated tools.

MCP

visvoai mcp add chrome -- npx -y chrome-devtools-mcp@latest
visvoai mcp add linear --url https://mcp.linear.app/mcp \
    --header 'Authorization=Bearer ${LINEAR_API_KEY}'

Sessions are persistent, so stateful servers (a browser, a DB connection) keep their state across calls. Secrets stay ${VAR} references — never in config files.

Plugin tools

# ~/.visvoai/tools/mytools.py
from visvoai.cli.toolkit import make_cli_tool

def jira_search(query: str, limit: int = 10) -> str:
    """Search our Jira and return matching issue keys."""
    ...

TOOLS = [make_cli_tool(jira_search, gate="approve")]

Schema from your type hints, description from the docstring, output capped, exceptions returned as data, approval-gated by declaration. Global-only by design — a repo can never inject Python into your session.

API keys

Any of these, per provider — highest wins, nothing is ever committed:

  1. Environmentexport GEMINI_API_KEY=… (or ANTHROPIC_API_KEY, OPENAI_API_KEY, GROQ_API_KEY, … — the {PROVIDER}_API_KEY convention, including anything a local .env provides).
  2. Per-project/login in the TUI, or edit <project>/.visvoai/secrets.toml ([api_keys]); written 0600 and auto-added to the project's .gitignore.
  3. Global default~/.visvoai/config.toml ([api_keys]), used everywhere unless a project overrides it.

You need exactly one key to start; add more providers any time and the /model picker lights them up. One exception: web search and web fetch are Gemini-grounded, so those two tools need a GEMINI_API_KEY even when you chat through another provider.

Living in it

/model live model catalog — pricing, thinking levels, per-conversation
/agents /skills /mcp rosters + one-time trust approval
/runs live subagent logs; stop one without killing the turn
/rewind /branch /fork time-travel: files + conversation together
/ps background processes the agent started (and the kill switch)
/compact summarize older turns to reclaim context
Shift+Tab approval mode: normal · auto-edit · accept-all
@file attach a file; Esc stops the turn; full mouse support

Costs and context are always visible: per-turn tokens/cost in the footer, a context gauge that warns before you hit the wall.

Gallery

Parallel agents with live logs /runs — every dispatch, live
The permission gate — diff before approval Project skill awaiting one-time trust

Stills are generated, not staged by hand — docs/make_stills.py renders real widgets and converts to PNG in one command, so they can't drift from the UI.

From source

uv tool install --editable path/to/visvoai-cli

Examples

Copy-paste configuration in examples/ — a reviewer agent, a simple and a complex skill, plugin tools in all three shapes, and a config.toml with MCP + external skill libraries.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

visvoai_cli-0.14.4.tar.gz (353.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

visvoai_cli-0.14.4-py3-none-any.whl (309.8 kB view details)

Uploaded Python 3

File details

Details for the file visvoai_cli-0.14.4.tar.gz.

File metadata

  • Download URL: visvoai_cli-0.14.4.tar.gz
  • Upload date:
  • Size: 353.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for visvoai_cli-0.14.4.tar.gz
Algorithm Hash digest
SHA256 6414bf2e4b79d1539cea9281e6826db1e375fcc5c40ef34451d7a540caee70a5
MD5 b29ebcce67cee2a65f9ffc3b6431c92f
BLAKE2b-256 4b575d9c1e6357d01f59a1c0e239b66dd5b810b9567d292cab9e1fb5c1b810ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for visvoai_cli-0.14.4.tar.gz:

Publisher: publish.yml on VisvoAI/visvoai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file visvoai_cli-0.14.4-py3-none-any.whl.

File metadata

  • Download URL: visvoai_cli-0.14.4-py3-none-any.whl
  • Upload date:
  • Size: 309.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for visvoai_cli-0.14.4-py3-none-any.whl
Algorithm Hash digest
SHA256 13dae56954024213d00a009cdab4d2a6fd47662d58d4fb1409041e4aa6da533c
MD5 481cd16529dfd98e657e9ff3708bfe9c
BLAKE2b-256 03c4dd5a305f5ccdef6daa80b0c2a101f877ee92ff39db457955d7e0f085d11f

See more details on using hashes here.

Provenance

The following attestation bundles were made for visvoai_cli-0.14.4-py3-none-any.whl:

Publisher: publish.yml on VisvoAI/visvoai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.15.0

2 files

This release

0.14.4 This release

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page