Your agents' workbench. Open a folder or a document, see it, pick a block, and ask — with the built-in VAV agent or Claude Code / Codex in the same thread. Writes land on disk and you accept or reject them. A real terminal sits beside the chat. Everything stays on your machine; each CLI agent manages its own auth.
New session: pick a workspace, pick an agent, ask one thing. Multi-split CLI TUIs (Swarm) are an optional advanced mode under Settings → CLI Agents.
- File workbench — tree / columns, format-aware preview (Office, PDF, Markdown, CSV, code, …), pick a block and ask beside the file
- Built-in VAV chat — Anthropic- or OpenAI-compatible API; tools write to the session folder; accept / reject the diff
- CLI in the same thread — Claude Code, Codex, Cursor, Grok, and others over their structured protocol (install from Settings if the binary is missing)
- User PTY (⌘T) — real bash / zsh / PowerShell;
topandvimwork - Per-session working directory, defaulting to a temporary workspace you can point at a real project;
vav ./vav /pathCLI open - Git change inspector — status + diff in the Files tray; commit stays in the terminal or the agent
- English / Chinese UI, following the OS or a setting
- API keys stored encrypted via
safeStorage(Keychain) — never as plaintext - Swarm (optional) — multi-split raw CLI TUIs; off by default in Settings → CLI Agents
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, and ?lang=zh pins it). Marketing screenshots are captured in English, light and dark:
node scripts/capture-marketing-screenshot.mjsWrites docs/screenshot.png (README hero) and site/assets/screenshot-*.png (site gallery), then
derives the AVIF/WebP variants the site actually serves. The PNGs stay as the <picture> fallback.
If you edit site/assets/*.png by hand, regenerate the variants or visitors keep the old ones:
npm run site:images # add -- --force to rebuild everything
npm run brand:icons # rebuild Windows .ico + site favicon from build/icon.pngCustom 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.
- macOS — Developer ID signed and notarized (app + DMG, ticket stapled); open the DMG and drag to Applications. Later versions update in-app (About → Check for Updates).
- Windows — not code-signed; SmartScreen may warn on first open (More info → Run anyway). In-app updates use the NSIS installer feed.
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 dev # auto-fetches bundled officecli into resources/bin/ if missingofficecli (Office OOXML CLI) is vendored at build time (~32 MB) via npm run fetch:officecli and shipped in the app Resources/bin so the agent can create/edit .docx/.xlsx/.pptx without a system install.
Package (native modules mean you only build for the platform you’re on):
npm run dist # macOS → release/vav-*-macos-arm64.dmg (signed + notarized when credentials are set)
npm run dist:win # Windows → release/vav-*-windows-x64-setup.exeFirst launch unlocks the Keychain store. File tree and terminal work immediately. The built-in VAV agent needs an API key (⌘, / Ctrl+,); Claude / Codex use their own login.
⌘ 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.
