VTCode: a Rust terminal coding agent with sandboxing and 30 providers
VT Code is a Rust coding agent with LLM-native code understanding, OS-native sandboxing, and multi-provider support.
At a glance
- What is it?
- VTCode is an Apache-2.0 Rust coding agent that runs a TUI, a headless CLI and a browser bridge over the same session. It is aimed at engineers who want provider choice and terminal-owned approval boundaries, and it is still in active development with experimental local inference.
- Who is it for?
- Adopt VTCode if you want a terminal-first agent you can point at OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, LiteLLM, Ollama, LM Studio or llama.cpp, and if you accept that local inference and some automation workflows are labelled experimental. Skip it if you need a frozen configuration surface or a graphical IDE workflow.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 4 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 26, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The gap VTCode fills: one agent loop across TUI, CLI and browser
Most coding agents force a choice early. Either you get a chat interface you drive by hand, or you get a headless command you wire into CI and never watch. VTCode tries to keep both in one binary. The README describes an interactive terminal UI, slash commands, streaming, `ask` and `exec` CLI modes, session resume and review workflows, all reachable from the same `vtcode` command.
The intended user is an engineer who already lives in a terminal and wants the agent to touch files, run ripgrep searches and build ast-grep symbol maps without leaving that context. The README also names a second audience: teams running long unattended jobs. It lists worktree isolation for parallel agents, propose/verify sub-agent separation, durable loop state and cost guardrails under the heading "Loop engineering".
That second audience is where the design gets interesting. A propose/verify split means one agent produces a change and another checks it, which is a different shape from a single model editing and reviewing its own output. The README does not explain how the verifier is selected or what happens when the two disagree, so treat the mechanism as documented but underspecified.
How the runtime, tools and provider layer fit together
The architecture visible from the repository layout is a Rust workspace. The root `Cargo.toml` declares the package `vtcode` with `default-run = "vtcode"`, and top-level directories include `crates/`, `apps/`, `extensions/`, `rules/`, `scripts/` and `tests/`. That suggests the CLI is a thin shell over library crates rather than one monolithic binary.
Tooling is not written from scratch. The README lists ripgrep for search and ast-grep for symbol maps, and the native installer installs both alongside VTCode. `sgconfig.yml` at the repository root is the ast-grep configuration file, so the symbol-map feature is wired to a checked-in config rather than an ad hoc invocation.
On the provider side, the README claims 30 built-in providers plus custom OpenAI-compatible endpoints. The `.env.example` file shows the inference rule: setting `provider = "openai"` means the `OPENAI_API_KEY` variable is used, `provider = "anthropic"` maps to `ANTHROPIC_API_KEY`, and so on through `gemini`, `deepseek`, `evolink` and `litellm`. The same file states that keys pasted into the setup wizard go to the OS keyring rather than the `.env` file, which avoids duplicating a secret per workspace.
There is a governance layer above that. The README describes `providers_whitelist` as a setting that restricts which LLM providers VTCode may contact, and frames it as protection against sending data to unapproved endpoints. That is a config-level control, not a network-level one, so its value depends on the agent process being the thing making the request.
Installing VTCode and running a first review
The README recommends the native installer for macOS and Linux, and says it installs VTCode together with the ripgrep and ast-grep tools its coding workflow uses.
curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bashTwo alternatives are given in the same section. Homebrew users can tap the project's own tap, and Rust users can install from crates.io.
brew install vinhnx/tap/vtcode
cargo install vtcodeThe Cargo manifest sets `rust-version = "1.93.0"` and `edition = "2024"`, so a `cargo install` on an older toolchain will fail before it compiles anything.
Initialization is per project. Run it from the directory you want the agent to work on.
cd path/to/your/project
vtcode initThe README says this scaffolds project configuration and agent guidance, and explicitly asks you to review the generated files before committing them. Expect a `vtcode.toml` and an `AGENTS.md`; the repository root carries `vtcode.toml.example` and an `AGENTS.md` of its own as reference shapes.
Provider setup is an environment variable. The `.env.example` prefers a shell export over a checked-in file.
export OPENAI_API_KEY="sk-..."Then launch the TUI, or use a one-shot mode if you only want a review of what is uncommitted.
vtcode
vtcode review`vtcode review` is described as reviewing uncommitted changes. The README does not state which model performs that review or whether it posts inline comments, so the first run is the way to find out.
The sandbox, the approval gates and what is not documented
VTCode's safety story has several separate parts, and they are worth keeping apart. The README lists a restricted shell sandbox, tool guardrails, subprocess isolation and audit logging. Separately, it says lifecycle hooks defined in workspace configuration (`vtcode.toml`, `.vtcode`, or agent-spec files) require per-workspace approval before they can run shell commands. That is a distinct control: it governs configuration-supplied hooks, not the agent's own tool calls.
A third boundary is the WebMCP browser bridge. The README calls it opt-in and first-class, and says both connection paths are disabled until explicitly started. Pairing, origins, workspace roots and write approval stay under terminal control, and browser writes remain behind the existing terminal or full-auto policy. The two paths are an interactive pairing command inside the TUI, `/webmcp pair http://localhost:5173`, and a standalone bridge started from the shell.
vtcode webmcp serve --origin http://localhost:5173 --allowed-root /path/to/projectWhat the README does not document is the sandbox's actual enforcement mechanism. There is no statement of whether it uses seccomp, namespaces, a seatbelt profile or something else, and no list of what a sandboxed shell can still reach. For a feature presented as the safety foundation, that is a real gap. The same applies to rollback: nothing in the README describes how to undo an `exec` run that modified files, so version control remains your only recovery path. The presence of `fuzz/` and `rule-tests/` directories suggests the project tests its rule engine, but that is an inference from the layout, not a documented guarantee.
Where VTCode is the wrong tool
The project's own status note is the first constraint. It says local inference and some automation workflows are experimental, and that interfaces and configuration may change between releases. Three releases landed in the last days of August 2026 alone, at 0.147.4, 0.148.0 and 0.149.0, while the Cargo manifest already declares 0.162.3. If you need a configuration surface that stays put across a quarter, this is not it.
The second constraint is scope. VTCode is a terminal agent. There is no editor extension in the repository layout, and the WebMCP bridge connects a browser editor to a VTCode session rather than replacing one. If your team's workflow is built around an IDE's diff review and inline suggestions, adopting VTCode means moving that review into the terminal or into `vtcode review`.
The third is the unattended mode. `vtcode exec` is described as a headless task with full tool access. Cost guardrails and durable loop state exist, but the README does not give a hard spend ceiling, a timeout default, or a dry-run flag for that command. Running it against a repository you cannot restore from version control is a bad idea on the evidence available.
Finally, the licence metadata is inconsistent. The repository is listed as Apache-2.0, while `Cargo.toml` declares `license = "MIT OR Apache-2.0"`. Both are permissive, but they are not the same grant, and a downstream redistributor needs to resolve which one applies.
How it compares with a single-provider CLI agent
The closest point of comparison is a coding agent that ships with one vendor's models and no provider abstraction. The difference is not features so much as where the coupling sits. A single-provider agent typically stores one credential, targets one API shape, and inherits that vendor's rate limits and context rules. VTCode instead treats the provider as a configuration value, with `.env.example` documenting the variable each provider name maps to, and adds a `providers_whitelist` setting to constrain the set.
That has a concrete consequence for local work. The README lists Ollama, LM Studio and llama.cpp as local inference backends managed through a `/local` command. A single-provider CLI generally cannot run against a local model at all. VTCode can, but the README labels local inference experimental, so the trade is flexibility against stability.
The second difference is the extension surface. VTCode implements MCP as both client and server, supports Agent Skills and Agent Plugins, and exposes ACP. A vendor CLI usually offers one plugin mechanism or none. More extension points also mean more configuration files to keep coherent across a team, which is a cost, not a free win.
On tooling, the difference is narrower. Both approaches shell out to search and edit tools. VTCode's choice to bundle ripgrep and ast-grep through the installer just removes a setup step.
Maintenance, upgrades and licence questions to settle
Maintenance signals are mixed but readable. The repository is not archived, and the last push was on 2026-08-27, which is recent. Releases 0.147.4, 0.148.0 and 0.149.0 arrived on 2026-08-25 and 2026-08-27. The README's own status line says "Active development" and warns that interfaces and configuration may change between releases. That warning is the upgrade cost in one sentence: a pinned `vtcode.toml` may need edits after a version bump.
There is a self-update path, `vtcode update`, which the README lists among common commands. Nothing in the README describes rollback after a self-update, so if you install through Cargo or Homebrew you keep a version manager's ability to pin, and if you use the native installer you should check what it leaves behind before relying on it.
On licensing, the repository is described as Apache-2.0 while `Cargo.toml` says `license = "MIT OR Apache-2.0"`. Both permit commercial use and redistribution, and both disclaim warranty, but they differ on patent terms and on notice requirements. The repository also carries a `THIRD-PARTY-NOTICES` file, which matters because the README bundles ripgrep and ast-grep into the installer. If you redistribute VTCode inside a product, read that file and the `LICENSE` before assuming a single licence covers everything. This is a description of what the files say, not legal advice.
Editorial conclusion
Adopt VTCode if you want a terminal-first agent you can point at OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, LiteLLM, Ollama, LM Studio or llama.cpp, and if you accept that local inference and some automation workflows are labelled experimental. Skip it if you need a frozen configuration surface or a graphical IDE workflow. Verify first that the generated vtcode.toml and AGENTS.md match your project, and check the Cargo.toml licence field against the repository LICENSE before you rely on either.
Frequently asked questions
What is VTCode?
VTCode is an open-source Rust terminal coding agent for interactive and long-running autonomous workflows. The README describes it as combining a TUI, safe terminal tools, multi-provider LLM support, open protocols and extensible Skills in one tool.
Does VTCode need VS Code or Microsoft Visual Studio?
No. VTCode runs as a terminal application through the `vtcode` command, and the WebMCP browser bridge connects a supported browser editor to a VTCode session or a standalone workspace bridge rather than requiring an IDE.
How do I install VTCode?
The README recommends the native installer for macOS and Linux, which also installs ripgrep and ast-grep. Homebrew users can run `brew install vinhnx/tap/vtcode`, and Rust users can run `cargo install vtcode`.
Which LLM providers does VTCode support?
The README states there are 30 built-in providers plus custom OpenAI-compatible endpoints, and names Ollama, LM Studio and llama.cpp for local inference managed through the `/local` command. The `.env.example` shows the environment variable each provider name maps to.
Is VTCode stable enough for production use?
The README's status note says the project is in active development and that local inference and some automation workflows are experimental, with interfaces and configuration possibly changing between releases. Three releases shipped on 2026-08-25 and 2026-08-27.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/vinhnx-vtcode)