Local AI coding agent workstation. One window, three surfaces: chat, the file tree for the workspace this session is actually using, and a real terminal.
The agent isn’t narrating what it did — you watch it cd, run tests, and write files on the right. Everything stays on your machine except requests to the model endpoint you configure.
- Streaming chat with collapsible reasoning, tool-call cards, expandable command output, and a context-usage panel
- Five tools:
terminal,fs_read,fs_write,fs_list, plusask_user_question/requestthat actually pause for your answer - Sticky shell: every agent command runs in one long-lived shell, so
cdandexportpersist - Real PTY tabs: node-pty + xterm.js —
topandvimwork; the agent opens its own bash session on first command - File tree: on-demand expand, agent edits highlighted, spacebar Quick Look; tree or column view
- Per-session working directory, defaulting to a temporary workspace you can point at a real project;
vav ./vav /pathCLI open - English / Chinese UI, following the OS or a setting
- Anthropic and OpenAI-compatible APIs, with a customizable endpoint
- API keys stored encrypted via
safeStorage(Keychain) — never as plaintext
The static site lives in site/ and is published to GitHub Pages by Actions:
https://vavapp.com
(also https://21stware.github.io/vav/)
Bilingual (toggle in the top-right; default follows the browser language). Marketing screenshots are captured with the English UI (chat / files / terminal / context):
node scripts/capture-marketing-screenshot.mjsWrites docs/screenshot.png (README hero) and site/assets/screenshot-*.png (site gallery).
Custom domain: vavapp.com (see site/CNAME). Apex uses GitHub Pages A/AAAA records; www is a CNAME to 21stware.github.io. Keep Cloudflare proxy DNS only (grey cloud) so GitHub can issue HTTPS.
Grab a build from Releases. Neither build is code-signed, so the OS will block the first open:
- macOS (Apple silicon) — after dragging into Applications, run
xattr -dr com.apple.quarantine /Applications/vav.app, or Gatekeeper will claim the app is damaged. - Windows (x64) — SmartScreen warns; choose “More info” → “Run anyway”.
Then in Settings → “vav command”, install the vav CLI (defaults to ~/.local/bin). Run vav -h for usage; vav . opens a new session in the current directory.
Requires Node 20+, macOS or Windows.
npm install
npm run devPackage (native modules mean you only build for the platform you’re on):
npm run dist # macOS → release/vav-1.2.2-macos-arm64.dmg
npm run dist:win # Windows → release/vav-1.2.2-windows-x64-setup.exeFirst launch asks for an API key (⌘, / Ctrl+,). File tree and terminal work before that; only agent turns need a key.
⌘ on macOS, Ctrl on Windows; in-app hints switch automatically.
| Action | Key |
|---|---|
| New session | ⌘N |
| Send | ⌘↩ |
| Cancel current turn | Esc |
| Search in session | ⌘F |
| New terminal tab | ⌘T |
| Toggle sidebar / tools panel | ⌘⇧H / ⌘⇧E |
| Settings | ⌘, |
A global hotkey can be recorded under Appearance; off by default.
Most things match; these are OS differences, not missing features:
| macOS | Windows | |
|---|---|---|
| Agent & terminal shell | zsh / bash / fish | PowerShell |
| Closing the main window | Hides; turns and PTYs keep running; Dock restores | Quits for real (no Dock to restore from) |
| Space in the file tree | Quick Look | Opens with the system default app |
| Default global hotkey | ⌃⌘Space | Ctrl+Alt+Space |
src/
shared/ domain types, IPC contracts, i18n
main/
store/ settings, secrets, conversation persistence
agent/ LLM client, tool defs, turn loop
terminal/ sticky shell, PTY management
fs/ file listing and watchers
cli.ts `vav` command install and open-path parsing
preload/ contextBridge `window.vav`
renderer/ React UI, zustand stores, stream projection
Implementation notes: docs/TECH_DESIGN.md. Product behavior is specified in RPML via Origin and pulled by .agents/skills/origin-product-spec-management into .agents/specs/ (not checked in).
Dual-licensed — see NOTICE and LICENSE.
- Noncommercial (free): PolyForm Noncommercial 1.0.0.
Download, study, personal customization, and noncommercial redistribution are allowed; keep the
Required Noticeand upstream repo https://github.com/21stware/vav. - Commercial (paid): Selling, white-labeling, embedding in a paid product/service, or any commercial customization / commercial use requires a commercial license from the copyright holder. Contact: licensing@21stware.com.
