Skip to content

TuringWorks/vibecody

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,385 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VibeCody

VibeCody is an AI-powered developer toolchain built entirely in Rust. It combines a terminal-first CLI coding assistant (VibeCLI) with a full-featured desktop code editor (VibeUI), both powered by a shared library of AI and editor primitives.


Projects

Project Description Status
VibeCLI AI coding assistant for the terminal (TUI + REPL + --serve daemon) Active
VibeUI AI-powered desktop code editor (Tauri + Monaco) Active
VibeApp Secondary Tauri shell Active
VibeMobile Mobile companion app (Flutter — iOS, Android, macOS, Linux, Windows, Web) Active
VibeWatch Apple Watch (SwiftUI, watchOS 10+) + Wear OS (Kotlin/Compose) clients with companion relays Active

Quick Start

One-Command Setup (macOS / Linux / WSL)

git clone https://github.com/TuringWorks/vibecody.git
cd vibecody
make setup    # Installs Rust, Node.js, system libs, npm deps

Or run the setup script directly:

./scripts/setup.sh

Run VibeUI (Desktop Editor)

make ui

Build & Run VibeCLI (Terminal AI Assistant)

make cli                    # Build release binary
./target/release/vibecli --tui   # Run with TUI

# Or with a specific provider
./target/release/vibecli --tui --provider claude --model claude-3-5-sonnet-20241022

Verify Your Environment

make doctor    # Checks all required + optional tools

All Make Targets

Run make help for the full list, or make help-surfaces for the matrix below. Every surface has a consistent build-<surface> / test-<surface> pair:

# Surface            Dev            Build                Test
# ─────────────────  ─────────────  ───────────────────  ──────────────────
# VibeCLI (Rust)     make cli-run   make build-cli       make test-cli
# VibeUI  (Tauri)    make ui        make build-ui        make test-ui
# VibeApp (Tauri)    make app       make build-app       make test-app
# VibeX   (Tauri)    make vibex     make build-vibex     make test-vibex
# Agent SDK (TS)     —              make build-sdk       make test-sdk
# vibe-indexer       —              make build-indexer   make test-indexer
# vibe-memory        —              make build-memory    make test-memory
# vibe-rl-py (uv)    —              make build-rl        make test-rl
# VS Code ext        —              make build-vscode    make lint-vscode
# JetBrains plugin   —              make build-jetbrains make test-jetbrains
# Mobile (Flutter)   —              make build-mobile    make test-mobile
# Watch (iOS/Wear)   —              make build-watch     make test-watch
# Setup & environment
make setup              Install all prerequisites
make doctor             Verify dev environment is ready

# Aggregates
make build              Build all desktop shells (CLI + UI + App + VibeX)
make build-apps         Build the three Tauri shells (UI + App + VibeX)
make build-all          Rust + Tauri + Mobile + Watch (what CI builds)
make test               Run all Rust workspace tests (fast path)
make test-fast          Run Rust tests (excluding collab crate)
make test-all           Test every Rust + Node surface
make ci                 Mirror the GitHub CI gate locally
make check              Fast type-check (Rust + UI/App/VibeX TypeScript)
make lint               Run clippy + UI TypeScript check
make clean              Remove build artifacts
make docker             Build Docker image

# Mobile (Flutter — iOS / Android)
make mobile-setup       flutter pub get
make mobile-ios         Build iOS .app (unsigned, simulator-friendly)
make mobile-ios-ipa     Archive + export signed iOS .ipa (needs APPLE_TEAM_ID)
make mobile-android     Release APK
make mobile-android-bundle   Release AAB for Play Store
make build-mobile       Everything above (platform-gated)
make test-mobile        flutter test    ·    make analyze-mobile   dart analyze

# Watch (Xcode + Gradle)
make watch-ios          Build watchOS app for Simulator (Xcode)
make watch-ios-archive  Archive watchOS app for a real device
make watch-wear         Wear OS release APK
make watch-wear-bundle  Wear OS release AAB
make build-watch        Everything above (platform-gated)
make test-watch         Wear OS unit tests (gradle test)

Workspace Structure

vibecody/
├── Cargo.toml                  # Workspace root (9 members)
├── Dockerfile                  # Multi-stage musl build (Alpine runtime)
├── docker-compose.yml          # VibeCLI + Ollama sidecar (air-gapped)
├── install.sh                  # One-liner installer (SHA-256 verified)
├── vibecli/
│   └── vibecli-cli/            # CLI binary (TUI + REPL + HTTP daemon)
│       ├── src/                # ~354 modules
│       │   ├── main.rs         # Entry point, command routing
│       │   ├── config.rs       # TOML config (~/.vibecli/config.toml)
│       │   ├── serve.rs        # HTTP daemon for VS Code ext / SDK / mobile / watch
│       │   ├── repl.rs         # Rustyline REPL helper
│       │   ├── watch_auth.rs   # P256 ECDSA device registration + JWT lifecycle
│       │   ├── watch_bridge.rs # Axum /watch/* routes (SSE streaming)
│       │   ├── watch_session_relay.rs  # OLED-optimised payloads
│       │   ├── mdns_announce.rs / tailscale.rs / ngrok.rs  # zero-config connectivity
│       │   ├── pairing.rs      # one-time pairing URL + QR rendering
│       │   └── tui/            # Ratatui TUI (app, ui, components)
│       ├── tests/              # 62+ BDD / integration harnesses
│       └── skills/             # 711 skill files (25+ categories)
├── vibeui/
│   ├── src/                    # React + TypeScript frontend
│   │   ├── App.tsx             # Root component
│   │   └── components/         # 293 panels + 42 composite dashboards
│   ├── src-tauri/              # Tauri Rust backend (1,045+ commands)
│   └── crates/                 # Shared Rust library crates
│       ├── vibe-core/          # Text buffer, FS, workspace, Git, index
│       ├── vibe-ai/            # 22 AI providers + shared openai_compat; agents, hooks, planner
│       ├── vibe-lsp/           # Language Server Protocol client
│       ├── vibe-extensions/    # WASM-based extension system
│       └── vibe-collab/        # CRDT multiplayer collaboration
├── vibeapp/                    # Secondary Tauri shell
├── vibemobile/                 # Flutter mobile companion app
│   ├── lib/screens/            # 11 screens (home, chat, pair, machines, sessions, sandbox, watch…)
│   ├── lib/services/           # api_client, auth, discovery, handoff, notifications, watch_sync
│   └── lib/models/             # Machine / device models
├── vibewatch/                  # Watch clients
│   ├── VibeCodyWatch Watch App/        # SwiftUI (watchOS 10+, Secure Enclave P-256)
│   ├── VibeCodyWatchCompanion/         # iOS WatchConnectivity bridge
│   ├── VibeCodyWear/                   # Kotlin/Compose (Wear OS 3+, Android Keystore)
│   └── VibeCodyWearCompanion/          # Android Wearable Data Layer bridge
├── vibe-indexer/               # Remote indexing service
├── vscode-extension/           # VS Code extension (chat + completions)
├── jetbrains-plugin/           # JetBrains IDE plugin
├── neovim-plugin/              # Neovim plugin
├── packages/
│   └── agent-sdk/              # TypeScript Agent SDK
├── docs/                       # Jekyll GitHub Pages site
└── .github/workflows/          # CI/CD (pages, release)

Shared Crates

The vibeui/crates/ libraries are designed to be reused across both VibeCLI and VibeUI:

vibe-core

Core editor primitives — text buffer (rope-based), file system operations, workspace management, Git integration, terminal PTY, diff engine, code search, and embedding-based codebase indexing.

vibe-ai

Unified AI provider abstraction with agent loop, hooks, planner, multi-agent orchestration, skills, artifacts, admin policy, trace/session resume, and OpenTelemetry. Supports 22 providers (plus a shared openai_compat helper module):

  • Ollama — Local/private models (default)
  • Anthropic Claude — Claude 4 Sonnet/Opus
  • OpenAI — GPT-4o and variants
  • Google Gemini — Gemini 2.5 Pro/Flash
  • xAI Grok — Grok 2
  • Groq — Fast inference (Llama, Mixtral)
  • OpenRouter — Multi-provider gateway
  • Azure OpenAI — Enterprise Azure-hosted models
  • AWS Bedrock — AWS-hosted models (Claude, Llama, Titan)
  • GitHub Copilot — Copilot integration
  • LocalEdit — Local code editing model
  • Mistral — Mistral AI models
  • Cerebras — Wafer-scale inference
  • DeepSeek — DeepSeek V3/R1
  • Zhipu — GLM-4 models
  • Vercel AI — Vercel AI SDK
  • MiniMax — MiniMax-Text-01
  • Perplexity — Search-augmented Sonar models
  • Together AI — Open model hosting (Llama, Qwen)
  • Fireworks AI — Fast open model inference
  • SambaNova — Hardware-accelerated inference
  • Failover — Auto-failover wrapper (chains multiple providers)

vibe-lsp

Language Server Protocol client for intelligent code features (go-to-definition, diagnostics, completions).

vibe-extensions

WASM-based extension runtime (Wasmtime), enabling a plugin API.

vibe-collab

CRDT-based multiplayer collaboration for real-time shared editing sessions.


AI Providers

All providers implement the AIProvider trait from vibe-ai:

#[async_trait]
pub trait AIProvider: Send + Sync {
    fn name(&self) -> &str;
    async fn is_available(&self) -> bool;
    async fn complete(&self, context: &CodeContext) -> Result<CompletionResponse>;
    async fn stream_complete(&self, context: &CodeContext) -> Result<CompletionStream>;
    async fn chat(&self, messages: &[Message], context: Option<String>) -> Result<String>;
    async fn stream_chat(&self, messages: &[Message]) -> Result<CompletionStream>;
    // + chat_response, chat_with_images, and more
}

Configure providers in ~/.vibecli/config.toml:

Security note: Do not put API keys in config.toml. Keys are stored encrypted in ~/.vibecli/profile_settings.db. Use vibecli secret set or the VibeUI Settings panel (⚙️ Keys tab) to manage them.

[ollama]
enabled = true
api_url = "http://localhost:11434"
model = "qwen2.5-coder:7b"

[claude]
enabled = false
model = "claude-3-5-sonnet-20241022"

[openai]
enabled = false
model = "gpt-4o"

[gemini]
enabled = false
model = "gemini-2.0-flash"

[grok]
enabled = false
model = "grok-3-mini"

[groq]
enabled = false
model = "llama-3.3-70b-versatile"

[mistral]
enabled = false
model = "mistral-large-latest"

# See docs/configuration.md for all 22 providers

[safety]
require_approval_for_commands = true
require_approval_for_file_changes = true

Mobile Companion App

VibeMobile (vibemobile/) is a Flutter app for remote management of VibeCody sessions from any device.

Features:

  • QR code and manual URL/JSON pairing (works without a camera)
  • Zero-config LAN discovery via mDNS — plus Tailscale and ngrok auto-detection for off-LAN access
  • Apple-Handoff-style session continuity between desktop and phone
  • Google-Docs-style bidirectional message sync (no truncation)
  • Remote chat with any configured AI provider
  • Machine management (register, monitor, heartbeat)
  • Session browser and management
  • Watch device browser + sandbox chat panel
  • Push notifications for agent task completion
  • Dark/light theme with Material Design 3

Platforms: iOS, Android, macOS, Linux, Windows, Web

cd vibemobile
flutter pub get
flutter run            # Run on connected device
flutter run -d chrome  # Run in browser

Requirements: Flutter SDK >=3.2.0, Dart >=3.2.0

See docs/connectivity.md for the full mDNS / Tailscale / ngrok URL race design.


Watch Companions

VibeCody extends to wrist-worn devices via two parallel native clients that share the same backend (watch_auth.rs, watch_bridge.rs, watch_session_relay.rs) exposed under /watch/*.

Platform Path Stack Key storage
Apple Watch vibewatch/VibeCodyWatch Watch App/ Swift / SwiftUI, watchOS 10+ Secure Enclave P-256 ECDSA via CryptoKit; Keychain for tokens
Apple Watch companion vibewatch/VibeCodyWatchCompanion/ Swift, WatchConnectivity Phone-side relay when watch is off-LAN
Wear OS vibewatch/VibeCodyWear/ Kotlin / Jetpack Compose for Wear, Wear OS 3+ Android Keystore (StrongBox) P-256; EncryptedSharedPreferences
Wear OS companion vibewatch/VibeCodyWearCompanion/ Kotlin, Wearable Data Layer Android phone relay service

Pairing happens with a single URL (or Bearer token for emulators) — no JSON copy required. The Watch Devices panel in VibeUI (Governance → Watch Devices) surfaces live device status, transport, and Secure Enclave / StrongBox attestation.

Transports (priority order): Direct LAN → Tailscale mesh → phone-relay (WatchConnectivity / Wearable Data Layer).

See docs/WATCH-INTEGRATION.md for the full architecture, auth flow, and TDD/BDD coverage.


IDE Plugins

Plugin Path Status
VS Code vscode-extension/ Extension with inline chat, code actions, sidebar panel
JetBrains jetbrains-plugin/ IntelliJ/WebStorm/PyCharm plugin with agent integration
Neovim neovim-plugin/ Lua plugin with Telescope integration

Prerequisites

make setup installs everything automatically. If you prefer manual setup:

Requirement Version Install
Rust stable curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Node.js >= 20 nodejs.org or nvm install 20
Git any Usually pre-installed
Ollama any Optional — ollama.ai for local AI
Docker any Optional — for container sandbox

Linux only (Tauri system dependencies):

# Debian/Ubuntu
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf build-essential libssl-dev pkg-config

# Fedora
sudo dnf install webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel patchelf openssl-devel

# Arch
sudo pacman -S webkit2gtk-4.1 gtk3 libappindicator-gtk3 librsvg patchelf openssl base-devel

macOS only: Xcode command line tools (xcode-select --install)


Running Tests

11,000+ unit tests + 62 BDD/integration harnesses across the workspace.

make test          # All Rust workspace tests (fast path)
make test-fast     # Skip collab crate (faster)
make test-all      # Every Rust + Node surface
make check         # Type-check only (Rust + UI/App/VibeX TypeScript)
make ci            # Mirror the GitHub CI gate locally

# Per-surface tests
make test-cli      # VibeCLI (Rust)      make test-ui     # VibeUI  (vitest)
make test-app      # VibeApp (typecheck) make test-vibex  # VibeX   (typecheck + guard)
make test-sdk      # Agent SDK (vitest)  make test-mobile # Flutter
make test-indexer  # vibe-indexer        make test-memory # vibe-memory
make test-rl       # vibe-rl-py (pytest) make test-jetbrains  # JetBrains plugin

Troubleshooting

Problem Fix
rustup could not choose a version of cargo Run rustup default stable
npm run tauri dev can't find cargo (Linux) Use make ui or npm run tauri:dev — these prepend ~/.cargo/bin to PATH
Port 1420 already in use Kill stale Vite: lsof -i :1420 then kill <pid>
"VibeUI" is damaged (macOS) Run xattr -cr /Applications/VibeUI.app (unsigned app — Gatekeeper quarantine)
Missing libwebkit2gtk-4.1-dev (Linux) Run make setup or install manually (see Prerequisites)
Failed to run cargo: No such file (macOS .app) Fixed in v0.3.0 — app now inherits shell PATH at startup

Documentation

Full documentation is available at the GitHub Pages site (replace with actual URL).


License

MIT — see individual crate Cargo.toml files.


Acknowledgments

  • Tauri — Desktop application framework
  • Monaco Editor — Code editor component
  • Ratatui — Terminal UI framework
  • Ropey — Rope data structure for text buffers
  • Ollama — Local LLM runtime

About

AI-powered developer toolchain — VibeCLI terminal assistant + VibeUI desktop editor

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors