Zero to productive in 5 minutes.
What is VibeCody?
VibeCody is an AI-powered developer toolchain built in Rust. It gives you many ways to work: VibeCLI (terminal), VibeCoder (desktop editor, 246 panels), VibeAIChat (desktop chat), VibeMobile (Flutter, 6 platforms), and VibeWatch (native Apple Watch + Wear OS). All surfaces share the same backend crates, supporting 25 AI providers, an autonomous agent loop, code review, multi-agent orchestration, MCP integration, and 1,490+ built-in skills. Start with a local model and zero API keys — and with zero-config mDNS / Tailscale / ngrok connectivity, your phone and watch find your desktop automatically.
Choose Your Surface
| VibeCLI | VibeCoder | VibeAIChat | |
|---|---|---|---|
| Best for | Terminal, CI/CD, scripting | Visual editing, panel-rich workflows | Quick chat beside your work |
| Interface | TUI (Ratatui) or REPL | Desktop app (Tauri + Monaco) | Small desktop window / menu bar |
| Install | One-liner or a tarball | Download a .dmg / .msi / .AppImage |
Same |
| Works headless | Yes | No | No |
| AI features | All 25 providers, agent, review, skills | All of it, plus visual panels | Chat, voice, providers |
Recommendation: if you live in a terminal, start with VibeCLI. Otherwise download VibeCoder — it starts the daemon for you, so there is nothing else to install and nothing to configure.
Install
Two paths, and which one you want depends on whether you intend to change the code.
For everyone: install the release build
Signed, notarized, and built by CI with SHA-256 checksums. No toolchain, no Rust, no Node.js.
Desktop apps — download from the Releases page:
| Platform | Take |
|---|---|
| macOS (Apple Silicon / Intel) | the .dmg for your architecture (Intel builds are not notarized) |
| Windows | -setup.exe (installer) or _en-US.msi |
| Linux | .AppImage (portable) or .deb |
The same three shells are published each release — VibeCoder (editor), VibeDesk (task shell), VibeAIChat (chat). Each starts the VibeCLI daemon on launch and reuses one already running, so installing more than one is fine.
VibeCLI — one line, macOS and Linux, x86_64 and ARM:
curl -fsSL https://vibecody.online/dl/install.sh | sh
It resolves the latest release, verifies the checksum, and installs to
~/.local/bin/vibecli. Override the location with INSTALL_DIR=/usr/local/bin.
Windows and anyone who prefers to see what they are running can take the
vibecli-* archive from the Releases page directly.
Mobile and watch — .ipa, .apk/.aab, watchOS .app.zip and Wear OS
builds are on the same Releases page. iOS and watchOS are unsigned; sideload via
AltStore / Sideloadly / Xcode.
Check what you got:
vibecli --version
For developers: git and make
Building from source is for changing VibeCody, not for using it. It needs Rust
stable and Node.js, and make setup installs both along with the system
libraries:
git clone https://github.com/TuringWorks/vibecody.git
cd vibecody
make setup # Rust, Node.js, system libs, npm deps
make doctor # verify the toolchain before you build anything
Then build or run whichever surface you are working on:
make cli # build target/release/vibecli
make ui # run VibeCoder in dev mode
make vibedesk # run VibeDesk
make aichat # run VibeAIChat
make build-all # everything CI builds
make help lists every target; make help-surfaces prints the
build-<surface> / test-<surface> matrix. See the Development
Guide.
A source build is not a release build. It is unsigned, unnotarized, and built with your local toolchain. On macOS that means Gatekeeper will complain, and
codesign -dvwill sayadhoc. That is expected — it is not the artifact the Releases page publishes.
Either way: Docker
Runs the daemon with Ollama alongside it, no host dependencies and no API key:
git clone https://github.com/TuringWorks/vibecody.git
cd vibecody
docker-compose up
A prebuilt image tarball (vibecli-docker-*.tar.gz) ships with each release for
air-gapped installs.
How much machine you need
A cloud provider needs almost nothing — 2 GB of RAM will do. Running a model locally is a different question, and Sizing & Hardware answers it: VRAM by model size and quantisation, what actually uses a GPU, and what the setup wizard decides for you.
Your First Chat
Launch VibeCLI with no arguments to enter REPL mode:
vibecli
You will see the prompt:
VibeCLI v0.5.19 — AI coding assistant
Provider: ollama (glm-5.2:cloud)
Type a message or /help for commands.
vibecli>
Type a question:
vibecli> What does the #[derive(Debug)] macro do in Rust?
Expected output (streamed):
The #[derive(Debug)] attribute macro automatically implements the
`Debug` trait for a struct or enum, allowing you to print it with
`{:?}` formatting in println!, dbg!, or format!.
Example:
#[derive(Debug)]
struct Point { x: f64, y: f64 }
let p = Point { x: 1.0, y: 2.0 };
println!("{:?}", p); // Point { x: 1.0, y: 2.0 }
That is it – you are chatting with an AI. Press Ctrl+C or type /quit to exit.
Your First Agent Task
The agent loop lets VibeCody autonomously read files, write code, and run commands. Use --agent for interactive mode or --exec for non-interactive (CI) mode:
# Interactive mode (asks for approval on each step)
vibecli --agent "add error handling to main.rs"
# Non-interactive mode (full-auto, JSON output)
vibecli --exec "add error handling to main.rs"
Example output (interactive mode with default suggest policy):
Agent add error handling to main.rs
Policy: suggest (ask before every action) | Press Ctrl+C to stop
✓ Reading src/main.rs
✓ Searching: "error handling"
bash Running: cargo check
Approve? (y/n/a=approve-all): y
✓ Running: cargo check
✓ Patching src/main.rs (3 hunks)
Agent complete: Added Result<()> return type, wrapped I/O in match blocks.
Files modified: src/main.rs
Commands run: 1
Steps: 4/4 succeeded
Trace saved: ~/.vibecli/traces/1711234567.jsonl
Resume with: vibecli --resume 1711234567
In suggest mode (default), the agent asks before shell commands and file writes. Type y to approve, n to reject, or a to auto-approve all remaining steps.
Approval Policies
| Flag | Behavior |
|---|---|
| (default) | Ask before every edit and command |
--auto-edit |
Auto-apply file edits; ask before shell commands |
--full-auto |
Auto-execute everything (use with --sandbox) |
You can also use /agent <task> from the REPL to start agent tasks interactively, and /plan <task> to review a plan before executing.
Connect a Cloud Provider
Local Ollama works with no key at all. Cloud providers give you larger models.
Step 1: Get an API key — for Claude, from console.anthropic.com.
Step 2: Store it. set-key writes to the encrypted ProfileStore
(~/.vibecli/profile_settings.db), which every surface reads — CLI, the three
desktop shells, mobile, watch:
vibecli set-key claude sk-ant-your-key-here
Prefer this over an environment variable.
ANTHROPIC_API_KEYandOPENAI_API_KEYare still honoured as a fallback, but an exported variable reaches only the shell that exported it — the desktop apps, launched from Finder or a launcher, will not see it. And a key in~/.bashrcis a plaintext secret on disk. Nothing should ever put a key inconfig.toml.
Step 3: Launch with it:
vibecli --provider claude
Expected output:
VibeCLI v0.5.19 — AI coding assistant
Provider: claude (claude-opus-5)
vibecli>
Step 4: Verify:
vibecli> Hello, which model am I talking to?
Other providers follow the same pattern — vibecli set-key <provider> <key>,
then --provider <provider>. The default model per provider comes from the
registry, so you only pass --model to override it:
| Provider | set-key name |
Default model |
|---|---|---|
| Claude | claude |
claude-opus-5 |
| OpenAI | openai |
gpt-5.6-sol |
| Gemini | gemini |
gemini-3.6-flash |
| Grok | grok |
grok-4.5 |
| Ollama | (none needed) | whatever you have pulled |
All 25 providers and what each needs: Third-Party Services.
Your First Code Review
Navigate to any Git repository with uncommitted changes and run:
vibecli --review
Or from inside the REPL:
vibecli> /review
Expected output:
[review] Analyzing diff (3 files, +47 -12 lines)...
## Code Review Summary
### src/auth.rs (2 issues)
[HIGH] Line 34: Unwrap on network call will panic in production.
Suggestion: Use `?` operator or handle the error explicitly.
[MED] Line 51: Password comparison is not constant-time.
Suggestion: Use `subtle::ConstantTimeEq` to prevent timing attacks.
### src/main.rs (1 issue)
[LOW] Line 12: Unused import `std::collections::HashMap`.
Suggestion: Remove the import.
3 issues found (1 high, 1 medium, 1 low).
You can also review a GitHub PR directly:
vibecli> /review --pr 42
See the Code Review Tutorial for more options.
Next Steps
You are up and running. Here is where to go next:
| Goal | Link |
|---|---|
| Set up more AI providers | First Provider Tutorial |
| Learn the agent workflow | Agent Workflow Tutorial |
| Deep-dive on code review | Code Review Tutorial |
| Browse all tutorials | Tutorials Index |
| Configure VibeCLI fully | Configuration Guide |
| Set up the desktop editor | VibeCoder Reference |
| Full CLI reference | VibeCLI Reference |
| Pair your phone | VibeMobile |
| Pair your Apple Watch | watchOS guide |
| Pair your Wear OS watch | Wear OS guide |
| Zero-config LAN / Internet | Connectivity |
Common Issues
“Connection refused” when using Ollama
Ollama has to be running before VibeCLI can reach it:
ollama serve # in one terminal
ollama pull qwen2.5-coder:7b # a local model — see /sizing/ for what fits
vibecli --provider ollama
“API key not found” for a cloud provider
Store the key rather than exporting it:
vibecli set-key claude sk-ant-...
An exported ANTHROPIC_API_KEY works for the shell you exported it in, and not
for a desktop app launched from Finder or a launcher — which is the usual reason
this appears to be set and still fails. Never put a key in config.toml.
The desktop app says the daemon is unavailable
The shells autostart the daemon on 127.0.0.1:7878. Three distinct causes,
which look identical on screen:
curl -s http://127.0.0.1:7878/health
- No answer — the daemon is not running, or is still starting. A cold daemon has been measured at ~16 s to first answer; give it that long before concluding anything.
- Answers, but without
"service": "vibecli"— something else holds port- Free the port or set
VIBECLI_DAEMON_PORT.
- Free the port or set
- Answers correctly, but panels still fail with 401 — a stale token. It is regenerated on every daemon start; restart the app so it re-reads.
The voice reply sounds robotic, or nothing is spoken
Speech has an install step, and for most of this feature’s life nothing ran it:
make voice-sidecar # streaming platform speech (macOS)
make voice-kokoro # the neural engine (Apple Silicon)
make voice-status # which engine will ACTUALLY run
Ask voice-status before concluding the voice is broken. On macOS, also check
System Settings → Accessibility → Spoken Content → Manage Voices — Apple’s
Enhanced and Premium voices are neural, free, and not installed by default.
Voice input does not work on Linux at all in any of the three shells: WebKitGTK denies microphone capture unless the embedder enables it, and neither wry nor Tauri does. Not a configuration problem — there is no setting that fixes it today.
A source build fails on missing system libraries
Only relevant if you are building from source. On Linux:
sudo apt install pkg-config libssl-dev # Ubuntu/Debian
sudo dnf install openssl-devel # Fedora
make doctor checks the whole toolchain and is faster than discovering these
one compile error at a time.
Something else
Troubleshooting covers the rest; each deployment guide has a section for its own platform.