$ Terminal AI coding agent that lives in your project directory
ViCode — install and fix bugs from your terminal
A Terminal AI coding agent for Terminal-first Developers. Copy the install command, bring your OpenRouter key, and start in your project directory.
$ npm install -g vicode-ai
- Node 22+ required
- OpenRouter API key required
- bash on PATH required on Windows (Git Bash or WSL)
vicode — Faked Terminal
vicode [build] › fix the login crash on empty password
Simulated session · scripted demo
Modes govern each turn
Build, discuss, and plan scope which tools the model can even see. The active Mode is marked by a colored Mode tag, in the CLI and here.
vicode [Build] ›
Get the work done. The model reads, edits, and runs shell commands to work through the spec or tickets.
All six tools visible — no mode confinement.
- read_file
- list_files
- search
- write_file
- edit_file
- bash
Tab through the modes — in the ViCode CLI, the Tab key cycles build → discuss → plan.
Everything the README promises, nothing it doesn't
Six cards, each traced to a README fact. The rest lives in the docs it came from.
Two-panel TUI
A scrolling Chat Panel plus a Usage Panel with model, token totals (in/out), context usage, cost, and turn count.
token-by-token streaming · Esc cancels
Six core tools
Reads, lists, searches, writes, edits, and runs shell commands — every step visible as it happens.
read_file · list_files · search · write_file · edit_file · bash
Approval + Bash Allowlist
Ordinary in-project file operations run silently; Sensitive Paths and out-of-root targets pause for approval.
Allowlist re-checked on every call — no turn-memory for bash
Context budgeting + auto-compaction
History is projected to fit 70% of the context window; at 60% load older messages fold into a running summary.
largest results dropped first · /compact on demand
Skills + layered config
Markdown skill files inject extra System Prompt layers; project config overrides global config.
.vicode.json · ~/.vicode/config.json
Session persistence
Conversations auto-save as JSON inside the project and resume automatically on the next start.
.vicode/sessions/<id>.json
Full details live in the README.
Edits you can trust
Blast Radius
What the model is allowed to touch without approval — in-project by default. Sensitive Paths and anything outside the Project Root pause for approval instead of running silently.
- Turn-scoped approval memory — approve a path once and later calls to that path run without re-asking for the rest of the turn. This memory resets at the start of every turn, on session switch, and on a new session.
- Bash Allowlist re-check — the allowlist is re-checked on every single call, and there is no turn-memory for bash approvals. An empty allowlist means every bash call asks.
How approval works, in the README.
Daily use, predictable
Nine slash commands and five keys. That is the whole surface.
- /helpList available commands
- /sessionSwitch to a saved session
- /newSave the current session and start a new one
- /exitStop any response in progress, save the session and quit
- /modelSwitch the LLM model mid-session
- /skillLoad a skill Markdown file as a System Prompt layer
- /homeReturn to the Welcome Screen
- /keySet, change, or remove your OpenRouter API key
- /compactFold older messages into a summary and keep the context window lean
Only the first word of an input is treated as a command — `/help me` runs `/help`.
- TabCycle the Mode (build → discuss → plan)
- y / nApprove / reject a pending tool call
- EscCancel the in-progress response
- EnterSubmit the message
- ↑ / ↓Recall Input History
Honest answers only
Sourced from README limitations and requirements — nothing invented.
Why does the cost display show $0.00?
Cost display only covers eight hardcoded models. Any other model — including the default — shows $0.00 even though tokens are still counted correctly.
Why is the Context row missing?
The Context row needs a warm model cache: it appears once the active model's context length is known from ~/.vicode/models-cache.json. Open /model once to populate it; until then budgeting falls back to a 200k window.
How do I delete old sessions?
Sessions cannot be deleted from the UI. /session lists and switches; prune old <project>/.vicode/sessions/*.json files manually.
Does ViCode work in Windows cmd?
ViCode shells out to bash -c, so it needs a bash binary on PATH. On Windows that means Git Bash or WSL — on stock cmd or PowerShell, bash calls fail until you install one.