vtcode
App Listed
A Rust-based terminal coding agent with modular architecture supporting multiple LLM providers
- Downloads
- 56
- Dependents
- Not applicable
- Stars
- 903
- Forks
- 98
- Contributors
- 33
- Commits
- 10,180
- Latest release
- 0.181.5 ·
About
Terminal-first. Desktop-ready.
Explore, plan, edit, and verify with your model of choice.
Desktop app

Terminal TUI
Overview
VT Code is a terminal-first coding agent for your repository, in the CLI and its native macOS app. It owns context, tool calls, and execution policy so long tasks stay auditable and resumable.
| At a glance | What you get |
|---|---|
| Planning | Plan read-only, then review turn diffs. |
| Safety | Auditable command policy with sandboxing. |
| Self-correct | HOVER loop on mismatch. |
| Long runs | Headless exec with resume and compaction. |
| Integrations | MCP, skills, plugins, and editor bridges. |
| Models | Hosted or local providers per task. |
Quick start
Runs on macOS, Linux, or Windows/WSL. Building from source needs Rust 1.99.1+ (edition 2024); the installation guide covers prerequisites and optional search tools.
1. Install
# Review the installer script before running it: https://github.com/vinhnx/VTCode/blob/main/scripts/install.sh
curl -fsSL https://raw.githubusercontent.com/vinhnx/VTCode/main/scripts/install.sh | bash
Or install the CLI with Homebrew or Cargo (the desktop cask lives in Desktop app):
brew trust vinhnx/tap && brew install vinhnx/tap/vtcode
# Or install from crates.io
cargo install vtcode
Read the full README
On Windows (best-effort artifacts; may lag behind macOS/Linux):
irm https://raw.githubusercontent.com/vinhnx/VTCode/main/scripts/install.ps1 | iex
Verify with vtcode --version. The installation guide covers other install
methods, desktop flags, and optional search tools.
2. Configure your project
In your project directory, scaffold configuration and add credentials:
cd path/to/your/project
vtcode init # scaffolds config + AGENTS.md; review before committing
vtcode secret add openai # stores your OpenAI API key in secure storage
Replace openai with your provider. Keys use secure storage (OS keyring or encrypted file); alternatives are
environment variables, a workspace .env file, or vtcode login where supported. See
getting started and the
provider guides for provider-specific setup.
Note: ChatGPT OAuth reuses the Codex CLI's public client identity via an unofficial compatibility flow; prefer your own OpenAI API key. GitHub Copilot uses the official
copilotCLI. See OAuth authentication.Caution: Keep API keys out of Git and
vtcode.toml; never commit a workspace.envfile.
3. Run your first task
vtcode # open the interactive TUI in your project
Ask a focused question, then review proposed changes and test results before committing. See Usage for automation and session commands.
Usage
Common commands (see the command reference):
| Goal | Command |
|---|---|
| Start the TUI | vtcode |
| Ask without tools | vtcode ask "explain Rc vs Arc" |
| Run a task headlessly | vtcode exec "refactor main.rs" |
| Review pending changes | vtcode review |
| Schedule recurring work | vtcode schedule create --prompt "..." --every 1h |
| Resume the last session | vtcode continue |
| Inspect a run log | vtcode trajectory |
For larger tasks, start read-only, review the turn diff before committing, and use /explain for a summary
without another model call. See the interactive guide.
Modes
askis tool-free: it prints one reply and exits.execruns the full tool loop under explicit workspace trust (full_autoplus[automation.full_auto]). Terminals prompt for trust; non-TTY runs needVTCODE_TRUST_WORKSPACE=full-auto. Allow-lists, denies, and execution policy still apply.reviewinspects uncommitted changes.
Schedule recurring work on the same exec runtime. Resume or fork with vtcode continue (or --session-id <id>),
resume headless runs with vtcode exec resume --last, and inspect logs with vtcode trajectory. See
exec mode and full automation.
Desktop app
The native macOS app shares the CLI runloop, providers, tool policy, sandboxing, sessions, configuration, and credentials. Configure a provider first (see Quick start).
Install (macOS 15+)
On Apple Silicon, install it with Homebrew (update with brew upgrade --cask vinhnx/tap/vtcode-desktop):
brew install --cask vinhnx/tap/vtcode-desktop
Without Homebrew, download it from the latest release or run
vtcode desktop --install. Launch it with vtcode desktop or from Finder. Intel Macs build from source.
[!WARNING] First launch needs a one-time macOS security approval. Builds are ad hoc signed, not notarized, so macOS blocks the first launch (Homebrew cask installs included). Open the app once, click Open Anyway in System Settings › Privacy & Security, then open it again. The button shows for about an hour after a block.
See the desktop workspace guide for requirements, source builds, and troubleshooting.
Documentation
Start from the documentation index or Wiki; integrations below are optional.
Get started
- Installation and getting started
- Desktop app for the native macOS GUI
- Providers and OAuth login
- FAQ and compatibility
Work in the TUI
- Interactive mode and command reference
- Read-only planning and turn diffs
- Configuration and security model
Automate
Extend and integrate
- Skills, plugins, MCP
- MCP interop for client and server maintainers
- Editors (ACP), WebMCP (deployment), Companion, and Memcode
Develop and evaluate
Development
graph LR
BIN[vtcode binary] --> CORE[vtcode-core harness]
CORE --> LLM[vtcode-llm]
CORE --> SAFETY[vtcode-safety]
CORE --> EVENTS[vtcode-exec-events]
CORE --> MEMORY[vtcode-memory]
CORE --> UI[vtcode-ui]
Build with Rust 1.99.1+ (edition 2024) and install cargo-nextest to run tests. The architecture
guide maps all 25 crates, including the context and compaction design.
git clone https://github.com/vinhnx/VTCode.git
cd VTCode
./scripts/run-debug.sh # build and launch a debug binary
./scripts/check-dev.sh # fast gate: clippy, fmt, check
cargo nextest run # tests (requires cargo-nextest)
CI builds with --locked and RUSTFLAGS="-D warnings"; match locally with
RUSTFLAGS="-D warnings" cargo check --locked. See the development overview and
testing guide.
Release binaries and notes live on GitHub releases.
Contributing
Contributions are welcome: code, docs, evals, and bug reports (include vtcode trajectory
output). Read the contribution guide before opening a PR; MCP maintainers should also see
the interop guide.
Security
Report vulnerabilities privately with GitHub private vulnerability reporting. See the security policy.
Community
The Code of Conduct keeps review constructive. Contact:
vinhnguyen2308 [at] gmail [dot] com.
Thanks to our contributors
Thank you to everyone below. You are the reason this project keeps moving.
View all contributors (30)
Security Advisors
Main Contributor
Core Contributors
Contributors
Want to see your avatar here? Every bit counts: a one-line fix, a bug report, or a thoughtful comment. Not sure where to begin? Say hello on a good first issue and we will figure it out together.
Resources
Support VT Code
Thanks to current sponsors: Codemod and CodeRabbit.
Thank you
License
First-party code is MIT OR Apache-2.0, available under either LICENSE-MIT or LICENSE (Apache-2.0). Third-party code keeps its original licenses, listed in THIRD-PARTY-NOTICES.
Compatibility
- Runs on
- GPU support unknown
What shows it
- no dependency or feature matches a backend row
- Native code
- Required
- Binds native code: ring, tree-sitter, vtcode-ghostty-vt-sys, libdbus-sys, libmimalloc-sys and 4 more
- Python bindings
- No Python binding crate found
- License
- Apache-2.0 OR MIT
Compare with similar projects
Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.
| Project | Downloads | Dependents | Stars | Latest release | Runs on (GPU) | Native code | License |
|---|---|---|---|---|---|---|---|
|
A Rust-based terminal coding agent with modular architecture supporting multiple LLM providers |
56 binary downloads per release | Not applicable | 903 | 0.181.5 | GPU support unknown | Binds native code: ring, tree-sitter, vtcode-ghostty-vt-sys, libdbus-sys, libmimalloc-sys and 4 more | Apache-2.0 OR MIT |
|
llm Featured
A Rust library unifying multiple LLM backends. |
7,669 downloads over 30 days | 34 | 365 | 1.3.8 | GPU support unknown | Binds native code: alsa-sys (feature audio-example) | MIT |
|
liter-llm Listed
Universal LLM API client — 174 providers, streaming, tool calling. Rust-powered, type-safe, compiled. |
13,151 downloads over 30 days | 8 | 264 | 2.7.0 | GPU support unknown | Binds native code: libmimalloc-sys (feature mimalloc), tikv-jemalloc-sys (feature jemalloc) | MIT |
|
Terminal UI to chat with large language models (LLM) using different model backends, and integrations with your favourite editors! |
5,642 binary downloads per release | Not applicable | 772 | 0.13.0 | GPU support unknown | No native code found | MIT |
|
rllm Listed
Unifies multiple LLM backends in Rust. |
60 downloads over 30 days | 0 | 137 | 1.1.9 | GPU support unknown | No native code found | MIT |
|
High-performance LLM backends proxy with per-user fair-share queuing, round-robin scheduling, and a real-time TUI dashboard. Built in Rust. |
8 downloads over 30 days | Not applicable | 133 | 0.5.0 | GPU support unknown | No native code found | MIT |
|
An open protocol that gives AI agents a secure, sandboxed place to run code and use tools — with lean context usage. AXP works alongside MCP |
Not measured | Not applicable | 3 | Not measured | Not measured | Not measured | Apache-2.0 |
Why ListedNo archive, New or Featured rule places it, so it is Listed.
What it lacks for Featured
- The check holds no value for Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days. A gate that lacks its signal does not pass.
What else the check found
- The last activity is on 8 Nov 2026, 1 day ago. The rules expect an update within 365 days. Dormancy rule
Not measured: Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days.
Exact rules: Listed, Featured app. The check on applied thresholds version 9.
Every rule outcome, as the check records it
expected-interval: app: E = 365 daysdormancy: last activity 2026-11-08, 1 days ago, E = 365: activefeatured: not featured: unknown homebrew_on_request_365d, repology_families, docker_pull_growth_90dlisted: listed: no archive, new or featured rule applies
Crates37 crates
- vtcode Primary
- vtcode-a2a
- vtcode-acp
- vtcode-acp-client
- vtcode-agent-plugins
- vtcode-auth
- vtcode-bash-runner
- vtcode-battery-pack
- vtcode-collaboration-tool-specs
- vtcode-commons
- vtcode-config
- vtcode-core
- vtcode-design
- vtcode-desktop-protocol
- vtcode-diff
- vtcode-eval
- vtcode-exec-events
- vtcode-file-search
- vtcode-ghostty-core
- vtcode-ghostty-vt-sys
- vtcode-indexer
- vtcode-llm
- vtcode-macros
- vtcode-markdown-store
- vtcode-mcp
- vtcode-memory
- vtcode-process-hardening
- vtcode-safety
- vtcode-session-store
- vtcode-skills
- vtcode-terminal-detection
- vtcode-theme
- vtcode-tui
- vtcode-ui
- vtcode-utility-tool-specs
- vtcode-vim
- vtcode-webmcp
Measurements and sources
Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.
Sources6 sources
- Description: the crates.io description
- crates.io database dump, fetched
- GitHub releases, fetched
- GitHub repository, fetched
- crates.io package, fetched
- GitHub contributors, fetched
Adoption56 binary downloads per release4 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Active dependents | Not measured | Yes | ||
| New dependents (365 days) | Not measured | Yes | ||
| Peak active dependents | Not measured | Yes | ||
| Active dependents as a share of the peak | Not measured | Yes | ||
| Binary downloads per release | 56 | GitHub releases | Yes |
MaintenanceLatest human commit: 1 day ago4 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Latest human commit | 2026-11-08 | GitHub repository | Yes | |
| Latest release | 2026-11-08 | GitHub releases | Yes | |
| First release | 2025-09-18 | crates.io database dump | Yes | |
| Latest version | 0.181.5 | crates.io database dump | No | |
| Days the oldest outside issue waits for a reply | 49 | GitHub repository | Yes | |
| Maintainer replies over 365 days | 185 | GitHub repository | Yes | |
| Repository archived | false | GitHub repository | Yes | |
| Repository gone | false | GitHub repository | Yes | |
| Release commit or manifest in the repo | true | crates.io package | No | |
| Published docs | Not measured | Yes | ||
| Latest release fails cargo check | Not measured | Yes | ||
| Build check date | Not measured | Yes | ||
| Build check toolchain | Not measured | Yes |
SecurityNot measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Unpatched vulnerabilities past the grace window | Not measured | Yes | ||
| RustSec unmaintained advisory | Not measured | Yes | ||
| Deprecation notice | Not measured | Yes | ||
| Deprecated requirement | Not measured | Yes |
Distribution534 releases, 393 downloads over 30 days6 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Releases | 534 | crates.io database dump | No | |
| Downloads over 30 days | 393 | crates.io database dump | No | |
| Binary downloads over the last 3 releases | 168 | GitHub releases | Yes | |
| Homebrew installs on request over 365 days | Not measured | Yes | ||
| Repology repository families | Not measured | Yes | ||
| Docker pull growth over 90 days | Not measured | Yes | ||
| Docker pulls at the growth baseline | Not measured | Yes | ||
| Every version a prerelease | false | crates.io database dump | Yes | |
| Every version 0.0.x | false | crates.io database dump | Yes | |
| Every version yanked | Not measured | Yes | ||
| Crate deleted from crates.io | Not measured | Yes |
Repository903 stars, 98 forks, 33 contributors, 10,180 commits. Stars alone never qualify a project.
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| GitHub stars | 903 | GitHub repository | Yes — one part of the repository route | |
| GitHub forks | 98 | GitHub repository | Yes — one part of the repository route | |
| Contributors with a GitHub account | 33 | GitHub contributors | Yes — one part of the repository route | |
| Commits on the default branch | 10180 | GitHub repository | No | |
| Repository's main crate left out of the entry | none | crates.io database dump | Yes |
Facts that never count
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| License | Apache-2.0 OR MIT | crates.io database dump | No | |
| Runs on, from listed crates and their direct dependencies | GPU support unknown | crates.io database dump | No | |
| What shows each backend | no dependency or feature matches a backend row | crates.io database dump | No | |
| Native code, from listed crates and their dependencies | Binds native code: ring, tree-sitter, vtcode-ghostty-vt-sys, libdbus-sys, libmimalloc-sys and 4 more | crates.io database dump | No | |
| Python bindings, from direct dependencies of listed crates | No Python binding crate found | crates.io database dump | No | |
| Crates that depend on a listed crate directly | Not measured | No |
Corrections and review history
No correction applies to this entry.
Judgments
A judgment enters only through an approved issue and a merged pull request.
No judgment applies to this entry.