AI-powered desktop code editor built with Tauri 2 and Monaco. VibeCoder provides a VS Code-like editing experience with a native Rust backend, Monaco Editor frontend, integrated AI chat, autonomous agent mode, explicit-chord diff-mode AI editing (⌘.), terminal, Git panel, code review, and a WASM extension system.
What’s new in 0.5.19
- Office documents edit in place. DOCX paragraph and table-cell edits keep run styling; table rows insert and delete from the Word view and blank cells stay typeable; XLSX renders like Excel with Office charts; PPTX keeps run styles and edits through anchored Markdown.
- Document RAG. Workspace PDFs and Office files are indexed for the agent’s
search_documentstool; the home directory and filesystem root are refused. - Git. Commit patch preview in the diff view.
- Polish. PDF zoom no longer flickers; header window dragging restored; SQLite files open to the database tab; “Daily Briefing” replaces “Morning Briefing”.
Added in 0.5.15:
- Charts. Bar, line, pie and area charts, edited as JSON and touched up in the SVG editor; embedded OOXML charts now render in the DOCX/XLSX/PPTX viewers, with series names resolved from live formulas.
- Image and SVG editing. Crop, rotate, resize, brightness and contrast in the image viewer; select, move, resize, rotate and recolor in SVG; diagrams can be touched up and exported as SVG; transparent SVGs sit on a checkerboard.
- Office fidelity. XLSM macros preserved, PPTX shapes movable and resizable inside groups, DOCX run formatting and table-cell edits preserved. Undo/redo is unified across every document editor.
- Baize theme and an editable title bar; chat and terminal state stay alive across panel switches.
- Settings. A shared Embedding Model section and local-provider settings.
- Fixed: dropped files replaced the whole window in VibeCoder and VibeDesk.
Added in 0.5.14: no user-facing feature — release-pipeline hardening and performance fixes. 0.5.12 brought full-duplex voice, the + composer menu and per-model context budgets.
Earlier releases: 0.5.10 brought the four-panel workspace security review, verified findings, “Fix with AI” everywhere, and Settings that can hide and reorder panels; 0.5.9 brought the plugin marketplace, real connectors, and 27 Tauri commands the panels were already calling; 0.5.8 brought voice input, selectable embedding models, the SkillForge panel and signed macOS builds.
Architecture Overview
┌──────────────────────────────────────────────────────────────────┐
│ Frontend (React + TypeScript) │
│ Monaco Editor │ AI Chat │ Agent Panel │ Manager View │
│ Git Panel │ Terminal │ Command Palette │ Review Panel │
│ Checkpoints │ Artifacts │ Hooks Config │ History │
│ Context Picker │ Memory/Rules │ Theme Toggle │
└──────────────────────────┬───────────────────────────────────────┘
│ Tauri IPC (invoke / events)
┌──────────────────────────▼───────────────────────────────────────┐
│ Tauri Rust Backend │
│ commands.rs — 1,367 Tauri commands (files, git, AI, agent …) │
│ agent_executor — ToolExecutorTrait for agent tool calls │
│ flow.rs — Flow Awareness Engine (activity tracking) │
│ memory.rs — Workspace + global AI rules (.vibecoder.md) │
└──────────────────────────┬───────────────────────────────────────┘
│
┌─────────────────┴──────────────────────┐
│ Rust Library Crates │
├─────────────┬──────────────────────────┤
│ vibe-core │ vibe-ai │
│ vibe-lsp │ vibe-extensions │
│ vibe-collab │ │
└─────────────┴──────────────────────────┘
Getting Started
Prerequisites
| Requirement | Version | Install |
|---|---|---|
| Rust | ≥ 1.75 stable | rustup.rs |
| Node.js | ≥ 18 | nodejs.org |
| npm | any | bundled with Node.js |
| Tauri prerequisites | v2 | tauri.app/start/prerequisites |
On macOS, also ensure Xcode Command Line Tools are installed:
xcode-select --install
Development Setup
cd vibecoder
# Install JavaScript dependencies
npm install
# Start development server (hot reload for frontend + Rust backend)
npm run tauri dev
Production Build
npm run tauri build
The installer is placed in src-tauri/target/release/bundle/.
Build it this way, not with cargo build --release. The frontend is
compiled into the binary, and that only happens when the
tauri/custom-protocol feature is on. tauri build passes it; a bare
cargo build --release does not, and the app it produces points its window at
the dev server instead. With nothing listening on localhost:1420 that is a
blank white window — no panic, no log line, nothing on screen to say why.
Both halves of the build now say so rather than leaving you to find out:
warning: vibe-coder@0.5.14: this release build will not embed the frontend — it
will load http://localhost:1420 and open on a blank window. Build it with
`npm run tauri:build` (or `make build-vibecoder`), or add
`--features custom-protocol`.
and the binary repeats it on stderr at startup. If you do want a release build
from cargo directly, cargo build --release -p vibe-coder --features
custom-protocol embeds the frontend properly — build dist/ first, since that
is what gets embedded. The feature is deliberately not a default: embedding
brotli-compresses the whole bundle during macro expansion, and every
cargo check of the crate would otherwise pay for it.
Features
Editor
- Monaco Editor — same engine as VS Code; full syntax highlighting, IntelliSense, multi-cursor
- Rope-based buffer — built on
ropeyfor efficient O(log n) edits on large files - Batch edits —
apply_batch_editsfor bulk insert/delete operations - Multi-cursor —
update_cursorsfor synchronised cursor state - DiffComplete (⌘.) — explicit-chord AI editing surface;
DiffCompleteModalcollects an instruction (with optional user-picked extra files for context),vibe_ai::diffcomplete::generatereturns a unified diff,DiffReviewPanelshows per-hunk accept/reject with optional Monaco edit-before-apply and a regenerate-with-refinement loop. A deliberate alternative to keystroke-driven ghost text. Keystroke-driven inline completion was removed on 2026-04-26; inline completion returned later as an explicit-trigger-only surface bound to ⌥\ (vibe_ai::ghost, 12-line cap) — it never fires on a keystroke. See ghost-text.md. - Diagrams (Mermaid, PlantUML) — a
```mermaidor```plantumlblock in a markdown preview is drawn rather than printed, and a.mmd/.pumlfile opens as the picture with Source to go back to the text. The preview follows the buffer, so the diagram changes as you type. Mermaid is drawn in the app; PlantUML is a Java program with no browser port, so it is drawn by the PlantUML on your machine and nothing is sent to a remote renderer — if none is installed the diagram says so and how to install it, instead of quietly posting your architecture to plantuml.com. A diagram that will not parse shows the renderer’s own message and the source that produced it, never an empty box. - Documents (DOCX, EPUB, PDF, Pages) — Word documents, e-books, PDFs and Apple Pages files open in the editor area. Two up puts any of them into a two-page spread: real facing pages for a PDF (drawn here with PDF.js, with page navigation and arrow keys), two columns of a screen for the formats that are text rather than sheets. EPUBs render as books: the publisher’s own stylesheets (scoped and sanitised), images, cover, nested table of contents and working cross-chapter links. All four are view-only — editing is handed to the real application (Open in Word / LibreOffice), because a text edit does not round-trip faithfully into the original container. See documents.md
- Archives (ZIP, TAR, and friends) — a
.zip,.jar,.vsix,.tar.gzor.tar.zstin the explorer expands like a folder, and anything inside it opens read-only in the editor with highlighting, search, and image/PDF rendering. Trying to edit one offers the way out: extract the whole archive into a sibling folder named after it (dist.tar.gz→dist/, never merging into an existing one) and reopen the file from there, writable. The archive itself is never rewritten — re-encoding a signed.apkor a.vsixis not a promise worth making. See archives.md - File watching — auto-detects external changes using
notify - Multi-workspace — open multiple folders simultaneously
- Language detection — automatic language mode from file extension
AI Integration
The AI chat panel supports all 25 providers via the shared vibe-ai crate:
- Local: Ollama (default, no API key), LocalEdit
- Cloud: Claude, OpenAI, Gemini, Grok, Groq, Mistral, Cerebras, DeepSeek, Zhipu, MiniMax
- Platform: OpenRouter, Azure OpenAI, Bedrock, Copilot, Vercel AI
- Inference: Perplexity, Together AI, Fireworks AI, SambaNova
- Meta: Failover (automatic provider fallback chain)
Select the provider from the dropdown in the header, or switch per chat tab in ChatTabManager. Provider configuration is handled through the Keyssettings tab (BYOK), environment variables, or ~/.vibecli/config.toml.
Provider Advanced Options
| Option | Config key | Description |
|---|---|---|
api_key_helper |
[claude] api_key_helper = "~/.vibecli/get-key.sh" |
Shell script that emits a fresh API key on stdout; falls back to static api_key |
thinking_budget_tokens |
[claude] thinking_budget_tokens = 10000 |
Enable Claude extended thinking mode with N token budget |
@ Context System
Type @ in the chat input to open the Context Picker — a dropdown that lets you inject additional context:
| Reference | Description |
|---|---|
@git |
Current branch, changed files, and diff excerpt |
@file:<path> |
Contents of a specific file |
@file:<path>:N-M |
Specific line range from a file |
@folder:<path> |
Recursive directory tree listing |
@web:<url> |
Fetched & stripped plain text from a URL (6 000 char limit) |
@terminal |
Last 200 lines of terminal output (ANSI-stripped) |
@symbol:<name> |
Symbol search via CodebaseIndex, returns source snippet |
@codebase:<query> |
Semantic codebase search via CodebaseIndex |
@github:owner/repo#N |
Fetch GitHub issue/PR title, state, author, labels, body |
@jira:PROJECT-123 |
Fetch Jira issue summary, status, assignee, description |
@html-selected |
Inject the last HTML element selected via Browser panel inspect mode |
The backend resolves references via resolve_at_references() in commands.rs and injects them into the system prompt.
Jirarequires JIRA_BASE_URL, JIRA_EMAIL, and JIRA_API_TOKEN environment variables. GitHubuses optional GITHUB_TOKEN for higher rate limits.
Smart Context Builder
The ContextBuilder in vibe-core builds a ranked, token-budget-aware context by combining:
- Git branch + changed file list — always included
- Git diff — up to 25% of budget
- Top-ranked symbols (via codebase index) — up to 30% of budget
- Open file contents — remaining budget
Flow Awareness
The Flow Awareness Engine (flow.rs) tracks developer activity (file opens, edits, saves, terminal commands) in a 100-event ring buffer. Recent activity is injected into AI context via get_flow_context().
Agent Mode
The Agent Panelprovides autonomous multi-step task execution:
- Plan mode — agent generates a plan before executing
- Approval tiers —
auto,suggest,always-askpolicies - Tool execution —
TauriToolExecutorsupports:read_file,write_file,bash,search_files,list_directory,web_search,fetch_url,get_weather,task_complete - Step timeline — each tool call emits
agent:stepevents rendered in the UI - Pending approval — destructive operations emit
agent:pendingfor user review - Streaming — LLM output streamed via
agent:chunkTauri events - Diff review — pending writes shown in a Monaco DiffEditor with Accept/Reject
Multi-Agent Orchestration (Manager View)
The Manager Viewenables running multiple agents in parallel:
- Task board — submit multiple tasks simultaneously
- Git worktrees — each agent operates on an isolated worktree branch
- Parallel execution —
start_parallel_agentsspawns concurrent agent loops - Status tracking —
manager:agent_updateandmanager:agent_stepevents - Branch merging —
merge_agent_branchwith merge/squash/rebase strategies - Status polling —
get_orchestrator_statusfor initial render
Code Review (Review Panel)
AI-powered code review via the Review Panel:
- Compares
base_refvstarget_ref(defaults to HEAD vs working tree) - Returns structured
ReviewReportwith:- Issues — file, line, severity (hint/warning/error/critical), category (security/performance/correctness/style/testing), description, suggested fix
- Suggestions — general improvement recommendations
- Scores — overall, correctness, security, performance, style (0–100)
- Color-coded severity badges and score bars in the UI
Git Panel
Source Control is four tabs, so the working tree and the things you do to it stop competing for one scrolling column:
| Tab | What it holds |
|---|---|
| Changes | File status, staging, commit, push/pull, branch switching, history — and the control that starts a code review |
| Review | The findings from the last review run |
| Tools | AI branch-name suggestion, AI merge-conflict resolution, changelog generation, and the repository’s settings — user identity, remote, SSH detection, HTTPS credentials |
| GitHub | Remote, Actions and triage |
| Feature | Status |
|---|---|
| File status (M/N/D/R) with color coding | Done |
| Branch display in status bar | Done |
| Diff viewer | Done |
| Stage/unstage files | Done |
| Commit | Done |
| Push / Pull | Done |
| Branch list and switching | Done |
| Discard changes | Done |
| Git stash (create / pop) | Done |
| Commit history | Done |
Modified files appear yellow (M), new files green (N), deleted files red (D).
What the diff compares. From the Changes list, a file is shown as HEAD
against your working copy. From a commit in History, it is shown as that
commit against its first parent — which is what the commit itself changed, not
what has happened since. The header names the comparison, including the short
hash when you are looking at a commit.
Both sides come from git’s object store. A file with no previous version — new in the working tree, added by the commit you are inspecting, or any file in a repository’s first commit — compares against empty, which is correct: every line really is an addition. A binary file is reported as binary rather than decoded into a pane full of replacement characters.
Commit messages are clipped in the history list to their subject line, or
100 characters, whichever comes first. more expands the body; it appears only
when there is a body to show.
Starting a review is on the Changes tab, because reviewing is an action on the changes you are looking at. The findings land on Review, and pressing Run Review takes you there.
Checkpoints
The Checkpoint Panelprovides a timeline of AI checkpoints backed by Git stashes:
- Create checkpoint —
create_checkpoint(label)saves current workspace state - List checkpoints — browse all stash entries with labels and timestamps
- Restore checkpoint — apply a stash without dropping it
- Auto-checkpoint — agent mode can auto-create checkpoints before destructive operations
Artifacts
The Artifacts Paneldisplays structured AI output:
- Rich artifact cards with metadata
- Annotations and inline comments
- Async feedback mechanism
Hooks Configuration
The Hooks Panelprovides a UI for configuring event-driven hooks:
| Hook Event | Description |
|---|---|
PreToolUse |
Fires before an agent tool call |
PostToolUse |
Fires after an agent tool call |
SessionStart |
Fires when an agent session begins |
TaskCompleted |
Fires when an agent task finishes |
Stop |
Fires when an agent stops |
Each hook can be configured with:
- Handler type —
command(runs a shell command) orllm(sends a prompt) - Tool filters — restrict to specific tools
- Async exec — run hook in background
Configuration is saved to .vibecoder/hooks.json (workspace or global).
Memory & Rules
The Memory Panelprovides editors for AI rules:
- Project rules —
.vibecoder.mdin workspace root (committed alongside code) - Global rules —
~/.vibecoder/rules.md(personal defaults) - Both are injected into every AI system prompt via
combined_rules()
Agent History
The History Paneldisplays an audit log of past agent sessions:
- Session list —
list_trace_sessions()enumerates JSONL trace files - Session detail —
load_trace_session()returns all entries (tool calls, LLM turns, approvals) - Expand and browse individual trace entries
Terminal
An integrated terminal panel using portable-pty:
- Full PTY — supports interactive programs (vim, htop, etc.)
- Powered by xterm.js on the frontend
- Multiple terminal instances (
spawn_terminalreturns terminal IDs) - Terminal resize support (
resize_terminal) - Accessible via the status bar “Show Terminal” button
Command Palette
Press Cmd+P (macOS) / Ctrl+P (Windows/Linux) to open the Command Palette:
- Fuzzy file search (powered by
fuse.js) - Editor command list
- Quick navigation
Theme System
- Dark and light themes
- Toggle via moon/sun icon in the status bar
- Theme persists across sessions (stored in localStorage)
- All UI elements (editor, panels, status bar) respect the active theme
AI Panel Tabs
The AI panel (toggle with AI Chat in the header) has 246 panel components + 41 composites across categories:
Core AI & Chat
| Tab | Component | Description |
|---|---|---|
| Chat | ChatTabManager |
Multiple independent chat tabs, each with per-tab provider selection; voice input, and full-duplex voice — an open microphone you can interrupt |
| Agent | AgentPanel |
Autonomous multi-step agent with step timeline, approval UI, Turbo mode, and plan mode |
| Agent Modes | AgentModesPanel |
Switch between Smart, Rush, and Deep agent modes |
| Memory | MemoryPanel |
Edit per-workspace .vibecoder.md and global ~/.vibecoder/rules.md |
| History | HistoryPanel |
Audit log of past agent sessions; browse and expand trace entries |
| Checkpoints | CheckpointPanel |
Timeline of AI checkpoints with restore, auto-checkpoint |
| Artifacts | ArtifactsPanel |
Structured output cards with annotations and async feedback |
| Manager | ManagerView |
Multi-agent orchestration: task board, worktrees, parallel execution |
| Hooks | HooksPanel |
Configure event-driven hooks (PreToolUse, PostToolUse, etc.) |
| Jobs | BackgroundJobsPanel |
Submit tasks to VibeCLI daemon; live SSE stream; job persistence across restarts |
| Keys | SettingsPanel |
BYOK API key management for all cloud providers. Its Voice section sets the speech engine, language and voice the daemon speaks with — shared with VibeDesk and VibeAIChat, since the daemon is what speaks. See Choosing a voice engine |
| Counsel | CounselPanel |
Multi-LLM deliberation: structured debates between multiple AI providers with role-based personas, voting, and synthesis |
| Compare | MultiModelPanel |
Side-by-side dual-provider comparison: provider/model selectors, timing/tokens, Ctrl+Enter |
| Model Wizard | ModelWizardPanel |
Guided model selection wizard for optimal provider/model choice |
| Discussion | DiscussionModePanel |
Discussion and planning mode for exploring ideas before coding |
| Clarifying | ClarifyingQuestionsPanel |
AI-driven clarifying questions for ambiguous requests |
Delivery
| Tab | Component | Description |
|---|---|---|
| Engagement | EngagementPanel |
The four-phase delivery spine — Discover & Assess, Prove, Build & Harden, Operate & Transfer. Every promised deliverable with the panel that produces it, gates with their measurement procedure and verdict, evidence, blockers, and markdown status/handover exports. See Engagements |
Development & Code
| Tab | Component | Description |
|---|---|---|
| Specs | SpecPanel |
Spec-driven development: AI-generated user stories, tasks, and acceptance criteria |
| Spec Pipeline | SpecPipelinePanel |
End-to-end spec-to-code pipeline with validation |
| Workflow | WorkflowPanel |
Code Complete 8-stage development pipeline with AI-generated checklists per stage |
| Orchestrate | OrchestrationPanel |
Workflow orchestration with lessons and task tracking |
| Autofix | AutofixPanel |
Codemod auto-fix: detect linter (clippy/eslint/ruff/gofmt/prettier), run fix, diff preview, apply/revert |
| AST Edit | AstEditPanel |
AST-based code editing and structural transformations |
| Transform | TransformPanel |
Code transformation and refactoring tools |
| Edit Predict | EditPredictionPanel |
RL Q-learning next-edit prediction with confidence scoring |
| Full-Stack Gen | FullStackGenPanel |
Full-stack application generation from prompts |
| App Builder | AppBuilderPanel |
App scaffolding: quick start, templates, provisioning, managed backend |
| Scaffold | ScaffoldPanel |
Project scaffolding with framework templates |
| Build | BuildPanel |
Build system management and monitoring |
| Cascade | CascadePanel |
Cascade AI pipeline with multi-step reasoning |
| Self Review | SelfReviewPanel |
AI self-review of generated code |
| Automations | AutomationsPanel |
Automation rules and triggers |
Testing & Quality
| Tab | Component | Description |
|---|---|---|
| Tests | TestPanel |
Test runner with framework detection, live log stream, filter tabs, pass/fail badges |
| Coverage | CoveragePanel |
Code coverage: auto-detect tool, run coverage, per-file % bars, uncovered lines, filter tabs, raw output |
| QA Validation | QaValidationPanel |
Multi-round QA validation pipeline with severity-weighted scoring |
| Batch Builder | BatchBuilderPanel |
Batch code generation: 10 agent roles, 3M+ line target, pause/resume |
| SWE-bench | SweBenchPanel |
SWE-bench benchmarking harness: run, compare, export |
| Arena | ArenaPanel |
Blind A/B model comparison: hidden identities, vote (A/B/Tie/Both bad), reveal, persistent leaderboard |
| BugBot | BugBotPanel |
AI code scanner with severity/category filter and fix snippets |
| Metrics | CodeMetricsPanel |
Code metrics: complexity, LOC, duplication analysis |
| Visual | VisualTestPanel |
Visual regression testing with screenshot comparison |
| Render Opt | RenderOptimizePanel |
React re-render optimization analysis (~74% reduction) |
Security
| Tab | Component | Description |
|---|---|---|
| RedTeam | RedTeamPanel |
Autonomous 5-stage pentest pipeline with findings feed, CVSS scores, and report export |
| BlueTeam | BlueTeamPanel |
Defensive security: incident management, IOC tracking, SIEM integration, forensics, playbooks |
| PurpleTeam | PurpleTeamPanel |
ATT&CK exercises: attack simulation, detection validation, coverage gap analysis |
| Security Scan | SecurityScanPanel |
Security scanning with vulnerability detection |
| Compliance | CompliancePanel |
Compliance reporting and policy enforcement |
Agent Teams & Orchestration
| Tab | Component | Description |
|---|---|---|
| Teams | AgentTeamPanel |
Multi-agent team orchestration with inter-agent messaging |
| Agent Teams | AgentTeamsPanel |
Agent team hierarchy with role-based composition |
| Sub-Agent | SubAgentPanel |
Sub-agent role management and delegation |
| Team Govern | TeamGovernancePanel |
Team plugin marketplace governance and policies |
| Watch Devices | WatchDevicesPanel |
Approve / rename / revoke paired Apple Watch and Wear OS clients (new in 0.5.5) |
| Paired Mobiles | PairedMobilesPanel |
Manage paired VibeMobile devices; view JWT expiry, revoke (new in 0.5.5) |
| Branch Agent | BranchAgentPanel |
Branch-per-task agent execution with auto-merge |
| Cloud Autofix | CloudAutofixPanel |
Cloud-hosted BugBot autofix agents |
| GH Actions | GhActionsPanel |
GitHub Actions agent for CI/CD automation |
| CI Bot | CIReviewPanel |
CI review bot for automated PR analysis |
| Soul | SoulPanel |
AI personality and behavior configuration |
Context & Memory
| Tab | Component | Description |
|---|---|---|
| Steering | SteeringPanel |
Workspace/global steering files with templates |
| Open Memory | OpenMemoryPanel |
Cognitive memory engine: 5 sectors, associative graph, HNSW index, XOR obfuscation at rest (not cryptographic) |
| Context Bundle | ContextBundlePanel |
Context bundles/spaces with priority ordering and TOML serialization |
| Fast Context | FastContextPanel |
Fast context retrieval and SWE-grep |
| Infinite Context | InfiniteContextPanel |
5-level context hierarchy with token budget, eviction, and compression |
| Session Memory | SessionMemoryPanel |
Long-session memory profiling with leak detection |
| Session Browser | SessionBrowserPanel |
Browse and resume past sessions |
| Session Sharing | SessionSharingPanel |
Share sessions across users and devices |
| Project Context | ProjectContextPanel |
Project-level context and configuration |
| Org Context | OrgContextPanel |
Organization-wide context and policies |
| Plan Document | PlanDocumentPanel |
Plan documentation and tracking |
Infrastructure & DevOps
| Tab | Component | Description |
|---|---|---|
| Docker | DockerPanel |
Docker container/image management with build, run, logs |
| K8s | K8sPanel |
Kubernetes cluster management: pods, services, deployments, scale, logs |
| CI/CD | CicdPanel |
CI/CD pipeline configuration and status monitoring |
| CI Gates | CiGatesPanel |
CI quality gates with automated pass/fail criteria |
| CI Status | CiStatusPanel |
CI pipeline status monitoring |
| Sandbox | SandboxPanel |
Container sandbox for safe code execution (Docker/Podman) |
| Cloud Sandbox | CloudSandboxPanel |
Cloud-hosted sandbox execution environments |
| Cloud | CloudAgentPanel |
Cloud-hosted agent execution with Docker backends |
| Cloud Provider | CloudProviderPanel |
AWS/GCP/Azure integration: service detection, IAM, Terraform/CloudFormation templates |
| VM Orchestrator | VmOrchestratorPanel |
Virtual machine orchestration and management |
| Channel Daemon | ChannelDaemonPanel |
Background channel daemon service management |
| Deploy | DeployPanel |
Deploy to 6 targets (Vercel/Netlify/Railway/GH Pages/GCP/Firebase) with custom domain support |
| Env | EnvPanel |
Environment variable manager with .env file support |
| SSH | SshPanel |
SSH connection manager with terminal sessions |
| Profiler | ProfilerPanel |
Performance profiling with flame graph visualization |
| Process | ProcessPanel |
System process monitor with kill capability |
| Health | HealthMonitorPanel |
Service health monitor with uptime tracking |
| Resilience | ResiliencePanel |
Resilience testing and chaos engineering |
| IDP | IdpPanel |
Internal Developer Platform: Backstage, Cycloid, Humanitec, Port, scorecards |
| Developer Excellence | DeveloperExcellencePanel |
DORA four keys, engineering-practice maturity and onboarding readiness, computed from the repository. Every value carries its proxy and sample size; a metric with no signal is shown as unmeasured with the change that would make it measurable, never as zero. See Developer Excellence |
Data, AI & ML
| Tab | Component | Description |
|---|---|---|
| Auto Research | AutoResearchPanel |
Autonomous iterative research: 5 strategies, 7 domains, cross-run learning |
| Training | TrainingPanel |
Distributed ML training: DeepSpeed, FSDP, LoRA configuration |
| Inference | InferencePanel |
ML inference server management: vLLM, TGI, Triton, llama.cpp |
| FineTune | FineTuningPanel |
Model fine-tuning configuration and monitoring |
| Vector DB | VectorDbPanel |
Vector database management: Qdrant, Pinecone, pgvector |
| Doc Ingest | DocumentIngestPanel |
Multi-format document ingestion for RAG pipelines |
| Web Crawler | WebCrawlerPanel |
Web crawler with robots.txt, sitemaps, rate limiting |
| Data Analysis | DataAnalysisPanel |
Data analysis and visualization |
| Image Gen | ImageGenPanel |
AI image generation |
| AI/ML Workflow | AiMlWorkflowPanel |
AI/ML workflow pipeline management |
| Quantum | QuantumComputingPanel |
Quantum computing simulation and algorithms |
| Knowledge | KnowledgeGraphPanel |
Knowledge graph visualization |
| Conversational Search | ConversationalSearchPanel |
Natural language code search with conversation context |
Git & Collaboration
| Tab | Component | Description |
|---|---|---|
| Git | GitPanel |
Full Git workflow, in tabs: Changes, Review, Tools, GitHub; AI commit message button |
| GH Sync | GitHubSyncPanel |
GitHub sync with ahead/behind status, push/pull, repo management |
| Collab | CollabPanel |
CRDT multiplayer collaboration: create/join rooms, peer list with color indicators, copy invite link |
| Review | ReviewPanel |
AI code review with issues, scores, and suggestions |
| Diff Review | DiffReviewPanel |
Diff review and commentary |
| Migrations | MigrationsPanel |
Database migration manager with up/down tracking |
| Agile | AgilePanel |
Agile project management with sprints and stories |
| Work Mgmt | WorkManagementPanel |
Work item tracking and management |
MCP & Extensions
| Tab | Component | Description |
|---|---|---|
| MCP | McpPanel |
MCP server management with OAuth 2.0 install flow and tool testing |
| MCP Lazy | McpLazyPanel |
MCP lazy loading with tool search and LRU eviction |
| MCP Directory | McpDirectoryPanel |
MCP verified plugin directory: search, install, review |
| ACP | AcpPanel |
Agent Client Protocol: server/client modes, capability negotiation |
| Marketplace | MarketplacePanel |
Extension marketplace with install/update/ratings |
| Remote Control | RemoteControlPanel |
Remote control and session management |
| Usage Metering | UsageMeteringPanel |
Credit system: per-user/project/team budgets, alerts, chargeback |
Developer Toolbox
| Tab | Component | Description |
|---|---|---|
| HTTP | HttpPlayground |
HTTP request builder: method/URL/headers/body, quick-launch localhost, route discovery, response viewer with JSON pretty-print |
| Cost | CostPanel |
AI cost observatory: per-provider breakdown, total spend, budget limit, cost history table, clear history |
| Deps | DepsPanel |
Dependency viewer with outdated detection, update, add/remove |
| Scripts | ScriptPanel |
Script runner with task detection (npm, make, cargo) |
| Notebook | NotebookPanel |
Jupyter-style notebook with code cells and outputs |
| Bookmarks | BookmarkPanel |
Code bookmark manager with annotations |
| Bisect | BisectPanel |
Git bisect automation to find regression commits |
| Snippets | SnippetPanel |
Code snippet library with search and insertion |
| Mock | MockServerPanel |
Mock HTTP server for API development and testing |
| GraphQL | GraphQLPanel |
GraphQL playground with schema introspection |
| Load Test | LoadTestPanel |
Load testing with configurable concurrency and latency charts |
| API Docs | ApiDocsPanel |
OpenAPI/Swagger documentation viewer |
| Utilities | UtilitiesPanel |
Developer utilities: hash, UUID, lorem ipsum, timestamp |
| Database | DatabasePanel |
SQLite/PostgreSQL browser with AI query generation |
| VibeSql | VibeSqlPanel |
SQL editor with syntax highlighting and results |
| Streaming | StreamingPanel |
Streaming data viewer (Kafka, NATS, Pulsar) |
| Webhooks | WebhookPanel |
Webhook endpoint manager with request logging |
| WebSocket | WebSocketPanel |
WebSocket client for testing real-time connections |
| Network | NetworkPanel |
Network tools: port scan, DNS lookup, TLS inspection |
UI & Design
| Tab | Component | Description |
|---|---|---|
| Canvas | CanvasPanel |
Freeform drawing canvas for diagrams and wireframes |
| Design Canvas | DesignCanvasPanel |
Design canvas for UI prototyping |
| Design Import | DesignImportPanel |
Import from Figma and other design tools |
| Img2App | ScreenshotToApp |
Screenshot-to-code: upload image, generate UI code |
| Colors | ColorPalettePanel |
Color palette generator with design token export |
| ColorConv | ColorConverterPanel |
Color format converter (HEX/RGB/HSL/CMYK) |
| Diff | DiffToolPanel |
Visual diff comparison tool |
| Markdown | MarkdownPanel |
Markdown editor with live preview |
Converters & Utilities
| Tab | Component | Description |
|---|---|---|
| Cron | CronPanel |
Cron expression builder with human-readable descriptions |
| Regex | RegexPanel |
Regex tester with match highlighting and group extraction |
| JWT | JwtPanel |
JWT decoder/encoder with claims inspection |
| Encoding | EncodingPanel |
Base64/URL/HTML encoding and decoding |
| NumBase | NumberBasePanel |
Number base converter (binary, octal, decimal, hex) |
| DataGen | DataGenPanel |
Test data generator with customizable schemas |
| Timestamp | TimestampPanel |
Unix timestamp converter with timezone support |
| JSON | JsonToolsPanel |
JSON formatter, validator, and path query tool |
| CIDR | CidrPanel |
CIDR/subnet calculator for network planning |
| Unicode | UnicodePanel |
Unicode character lookup and conversion |
| Units | UnitConverterPanel |
Unit converter (length, weight, temperature, etc.) |
| CSV | CsvPanel |
CSV viewer and editor with filtering |
Monitoring & Admin
| Tab | Component | Description |
|---|---|---|
| Dashboard | DashboardPanel |
Project overview dashboard with stats and activity |
| Admin | AdminPanel |
Admin panel with RBAC, audit log, user management |
| Log | LogPanel |
Structured log viewer with filtering and search |
| Traces | TraceDashboard |
OpenTelemetry trace viewer with span timeline |
| Recording | AgentRecordingPanel |
Record and replay agent sessions |
| GPU | GpuTerminalPanel |
GPU-accelerated terminal with performance monitoring |
| Audio Output | AudioOutputPanel |
Text-to-speech audio output |
| Debug Mode | DebugModePanel |
AI debug mode with step-through analysis |
| Demo | DemoPanel |
Demo and showcase mode |
Agents
| Tab | Component | Description |
|---|---|---|
| Browser | BrowserPanel |
Embedded iframe browser with inspect mode, element selection |
| Browser Agent | BrowserAgentPanel |
Browser automation agent with CDP |
| Desktop Agent | DesktopAgentPanel |
Desktop automation agent |
| Observe-Act | ObserveActPanel |
Screenshot → vision model → action → verify loop that drives the real desktop. See Observe-Act |
Integration & Migration
| Tab | Component | Description |
|---|---|---|
| Supabase | SupabasePanel |
Supabase connection, table browser, SQL editor, AI query |
| Auth | AuthPanel |
Auth scaffold generator (4 providers × 5 frameworks) |
| Legacy Migrate | MigrationsPanel |
Legacy migration engine: 18 source languages, 10 targets, 6 strategies |
UI Components
| Component | File | Description |
|---|---|---|
App |
src/App.tsx |
Root component, global state, layout |
AIChat |
src/components/AIChat.tsx |
Streaming AI chat panel; multimodal input |
AgentPanel |
src/components/AgentPanel.tsx |
Autonomous agent UI; plan mode toggle |
ManagerView |
src/components/ManagerView.tsx |
Multi-agent parallel orchestration UI |
CheckpointPanel |
src/components/CheckpointPanel.tsx |
Checkpoint timeline; restore, auto-checkpoint |
ArtifactsPanel |
src/components/ArtifactsPanel.tsx |
Rich artifact cards; annotations, feedback |
MemoryPanel |
src/components/MemoryPanel.tsx |
Rules / memory editor |
HistoryPanel |
src/components/HistoryPanel.tsx |
Agent session trace viewer |
HooksPanel |
src/components/HooksPanel.tsx |
Hooks configuration UI; event/handler/filter editor |
ReviewPanel |
src/components/ReviewPanel.tsx |
AI code review; issues, scores, suggestions |
ChatTabManager |
src/components/ChatTabManager.tsx |
Multi-tab chat manager with per-tab provider selection |
DiffCompleteModal |
src/components/DiffCompleteModal.tsx |
⌘. AI edit modal — instruction + extra context, calls diffcomplete_generate, hands off to DiffReviewPanel |
DiffReviewPanel |
src/components/DiffReviewPanel.tsx |
Per-hunk accept/reject for unified diffs, with optional Monaco edit-before-apply |
BackgroundJobsPanel |
src/components/BackgroundJobsPanel.tsx |
VibeCLI daemon job queue with live SSE stream |
BrowserPanel |
src/components/BrowserPanel.tsx |
Embedded iframe browser with inspect mode (), element selection, Send to Chat |
ArenaPanel |
src/components/ArenaPanel.tsx |
Blind A/B model comparison with voting, leaderboard, and Send winner to Chat |
CostPanel |
src/components/CostPanel.tsx |
AI cost observatory with per-provider breakdown, budget limit, and history |
AutofixPanel |
src/components/AutofixPanel.tsx |
Codemod auto-fix with linter detection, diff preview, and apply/revert |
SettingsPanel |
src/components/SettingsPanel.tsx |
BYOK API key management for all cloud providers, plus Profile, Appearance, Panels & Tabs, OAuth, Customizations, Embeddings, Integrations, Voice, Sessions and Background Jobs |
SpecPanel |
src/components/SpecPanel.tsx |
Spec-driven development with AI task generation |
WorkflowPanel |
src/components/WorkflowPanel.tsx |
Code Complete 8-stage workflow with pipeline visualization and checklists |
RedTeamPanel |
src/components/RedTeamPanel.tsx |
Autonomous pentest pipeline with 5-stage visualization and CVSS findings |
McpPanel |
src/components/McpPanel.tsx |
MCP server management with OAuth 2.0, tool testing, add/edit/delete |
DeployPanel |
src/components/DeployPanel.tsx |
Deploy to 6 targets with custom domain support and history |
BugBotPanel |
src/components/BugBotPanel.tsx |
AI code scanner with severity badges and fix snippets |
SupabasePanel |
src/components/SupabasePanel.tsx |
Supabase connection, table browser, SQL, AI queries |
AuthPanel |
src/components/AuthPanel.tsx |
Auth scaffold generator (4 providers × 5 frameworks) |
GitHubSyncPanel |
src/components/GitHubSyncPanel.tsx |
GitHub sync with commit/push/pull and repo management |
SteeringPanel |
src/components/SteeringPanel.tsx |
Workspace/global steering files with templates |
TestPanel |
src/components/TestPanel.tsx |
Test runner with framework detection, ▶ Run Tests, live log stream, filter tabs, pass/fail badges |
CollabPanel |
src/components/CollabPanel.tsx |
CRDT multiplayer session management: create/join rooms, peer list with color indicators, invite link |
DatabasePanel |
src/components/DatabasePanel.tsx |
SQLite/PostgreSQL browser with AI query generation |
ContextPicker |
src/components/ContextPicker.tsx |
@ context dropdown; file, folder, git, web, terminal, symbol, github, jira, html-selected picker |
GitPanel |
src/components/GitPanel.tsx |
Full Git workflow, in tabs: Changes, Review, Tools, GitHub; AI commit message button (AI) |
Terminal |
src/components/Terminal.tsx |
xterm.js terminal integration |
CommandPalette |
src/components/CommandPalette.tsx |
Fuzzy search command palette |
ThemeToggle |
src/components/ThemeToggle.tsx |
Dark/light theme switcher |
Modal |
src/components/Modal.tsx |
Reusable modal dialog |
MarkdownPreview |
src/components/MarkdownPreview.tsx |
Rendered markdown preview |
OnboardingTour |
src/components/OnboardingTour.tsx |
First-run guided tour with feature highlights; localStorage-gated, dismissible |
EmptyState |
src/components/EmptyState.tsx |
Reusable empty state placeholder with icon and message |
LoadingSpinner |
src/components/LoadingSpinner.tsx |
Reusable loading spinner with optional label |
Tauri Commands (Backend API)
The React frontend communicates with the Rust backend using Tauri’s invoke() IPC and Tauri event emitters.
File Operations
| Command | Description |
|---|---|
read_file(path) |
Read file contents |
write_file(path, content) |
Write file to disk |
list_directory(path) |
List files/folders for sidebar |
create_directory(path) |
Create a new directory |
delete_item(path) |
Delete file or directory |
rename_item(path, new_name) |
Rename file or directory |
save_file(path) |
Save buffer contents to disk |
is_rich_document(path) |
Whether the path is a DOCX / EPUB / Pages file this build can open as text |
read_document_text(path) |
Open a document as a text buffer for the viewers (see documents.md) |
read_document_preview(path) |
Base64 preview image embedded in the document (Pages only) |
render_plantuml(source) |
Draw a PlantUML diagram locally, returning SVG; the error says how to install it when nothing can |
plantuml_renderer() |
Which PlantUML will draw, or null when none will |
read_epub_book(path) |
EPUB metadata, cover, spine and table of contents |
read_epub_chapter(path, chapter) |
One EPUB chapter’s markup, stylesheets and referenced media |
list_archive(path) |
One level inside an archive — the archive itself, or a virtual archive!/folder path (see archives.md) |
read_archive_file(path) |
A member of an archive as text |
read_archive_file_base64(path) |
A member of an archive as base64 bytes |
plan_archive_extraction(path) |
Where an extraction would put things, without writing anything |
extract_archive(path, destination?) |
Extract an archive into a folder named after it, and report where the member in path landed |
Workspace Operations
| Command | Description |
|---|---|
set_workspace_folder(path) |
Make path the single workspace root (replaces the previous one) |
get_workspace_folders() |
List workspace folders |
open_file_in_workspace(path) |
Open file within workspace |
Text Buffer Operations
| Command | Description |
|---|---|
insert_text(params) |
Insert text at buffer position |
delete_text(params) |
Delete text range from buffer |
apply_batch_edits(params) |
Batch insert/delete operations |
update_cursors(params) |
Synchronise cursor positions |
Search
| Command | Description |
|---|---|
search_files(query, case_sensitive) |
Search file contents with walkdir + regex |
search_files_for_context(query) |
File path search for @ picker (max 20 results) |
Git Operations
| Command | Description |
|---|---|
get_git_status() |
Get branch + file status map |
git_commit(path, message, files) |
Stage and commit selected files |
git_push(path, remote, branch) |
Push to remote |
git_pull(path, remote, branch) |
Pull from remote |
git_diff(path, file_path) |
Get diff for a file |
git_list_branches(path) |
List all branches |
git_switch_branch(path, branch) |
Switch to a branch |
git_get_history(path, limit) |
Get commit history |
git_discard_changes(path, file_path) |
Discard changes for a file |
git_stash_create(path, name) |
Create a named stash |
git_stash_pop(path) |
Pop the most recent stash |
get_git_context() |
Formatted git context for AI injection |
LSP Operations
| Command | Description |
|---|---|
lsp_completion(language, root_path, params) |
Request completions from language server |
lsp_resolve_completion(language, root_path, item) |
Fill in documentation / auto-import edits for one item |
lsp_hover(language, root_path, params) |
Request hover info |
lsp_goto_definition(language, root_path, params) |
Go to definition |
lsp_signature_help(language, root_path, params) |
Parameter hints for the call being typed |
lsp_did_open(language, root_path, uri, text) |
Register a document (idempotent — reopening resyncs) |
lsp_did_change(language, root_path, uri, text) |
Push the document’s current text; the client owns the version |
lsp_did_save(language, root_path, uri) |
Notify LSP of document save |
lsp_did_close(language, root_path, uri) |
Release the document and drop its diagnostics |
lsp_diagnostics(language, root_path, uri) |
Latest published diagnostics; null = nothing published yet, [] = clean |
lsp_language_support(language, root_path) |
Server state + trigger characters for a language |
lsp_restart_language(language) |
Stop the server and clear the “not installed” memo |
lsp_list_servers() |
Every supported language, its server binary, and whether it’s installed |
IntelliSense in the editor. vibecoder/src/lib/lsp.ts bridges these to Monaco:
completion (with snippets, auto-imports and resolved docs), hover,
go-to-definition, signature help, and diagnostics as squiggles. Four
non-obvious invariants hold it together — all four have failed in the past, and
each one alone makes IntelliSense look broken:
- Model URIs must be real file URIs. The
<Editor>needs apathprop, or every file shares one model atinmemory://model/1— a URI no server has heard of.fileUri()andvibe_lsp::path_to_urimust encode identically. - Edits must be pushed with
lsp_did_change, debounced but always flushed before a request; otherwise the server answers against the text as it was when the file opened. - Completion kinds are mapped by name, not by number: LSP
Textis 1, Monaco’s is 18, and Monaco renumbers between versions. - Trigger characters come from the server and are registered up front.
Without them
foo.shows nothing while mid-identifier completion works.
Servers are found at their install locations, not just on PATH — a
Finder-launched app inherits launchd’s bare PATH and would find none of them.
Languages Monaco already services in-browser (TypeScript, JavaScript, JSON, CSS,
HTML) deliberately get no LSP providers: Monaco’s cannot be unregistered, so
adding ours would duplicate every suggestion. The status bar shows which source
is active for the current file, and offers a retry with the install hint when a
server is missing.
Language coverage — TIOBE top 30
28 of 30 have a language server; the 2 that don’t, can’t. Coverage is pinned
by tests on both sides — manager.rs::every_tiobe_top_30_language_has_a_configured_server
(language id → server binary) and lsp.test.ts → “TIOBE top-30 coverage”
(file extension → language id). Both halves are required: an extension that
routes nowhere gets no IntelliSense however many servers are configured.
| # | Language | Server | # | Language | Server |
|---|---|---|---|---|---|
| 1 | Python | pyright-langserver |
16 | Rust | rust-analyzer |
| 2 | C | clangd |
17 | MATLAB | matlab-language-server |
| 3 | C++ | clangd |
18 | Assembly | asm-lsp |
| 4 | Java | jdtls |
19 | Swift | sourcekit-lsp |
| 5 | C# | OmniSharp |
20 | Ada | ada_language_server |
| 6 | JavaScript | Monaco built-in | 21 | PL/SQL | sqls † |
| 7 | Visual Basic | OmniSharp |
22 | Prolog | swipl |
| 8 | SQL | sqls |
23 | COBOL | superbol-free |
| 9 | R | R + languageserver |
24 | Kotlin | kotlin-language-server |
| 10 | Delphi/Object Pascal | pasls |
25 | SAS | sas-lsp |
| 11 | Scratch | — ‡ | 26 | Classic Visual Basic | — ‡ |
| 12 | Perl | perl-language-server |
27 | Objective-C | clangd |
| 13 | Fortran | fortls |
28 | Dart | dart language-server |
| 14 | PHP | intelephense |
29 | Ruby | solargraph |
| 15 | Go | gopls |
30 | Lua | lua-language-server |
† PL/SQL and T-SQL get generic SQL analysis — no dialect-aware server for either exists. They keep their own language ids so the status bar names the dialect and a real server can be dropped in later.
‡ The two exemptions are not gaps we intend to close: Scratch is a block
language whose .sb3 is a zip archive, not source text, and VB6 has no LSP
implementation in existence. Both are asserted as deliberate in the tests, so
adding a third exemption requires stating a reason.
Beyond the top 30, ranks 31–50 add servers for Lisp, Julia, ML/OCaml/Caml, TypeScript, Haskell, ABAP, Zig, Erlang, Scala, T-SQL, PowerShell and Solidity. Four have no LSP in existence (VBScript, X++, GML, FoxPro) and two more are visual languages (LabVIEW, Ladder Logic).
Beyond TIOBE
84 languages get IntelliSense: 79 through a language server, plus the 10 Monaco services in-browser (some overlap). Two invariants are enforced by tests: every configured server is reachable from at least one file extension, and every routed extension has a server — the halves cannot drift apart.
| Area | Languages |
|---|---|
| Modern systems | Zig zls · Nim nimlangserver · Crystal crystalline · V v-analyzer · D serve-d · Odin ols · Vala · CUDA clangd |
| Functional | Gleam gleam lsp · Elixir · Erlang · Haskell · OCaml · F# · Elm · PureScript · ReScript · Clojure · Racket · Lisp · Scala |
| Web frameworks | Svelte svelteserver · Vue vue-language-server · Astro astro-ls |
| Infrastructure | Terraform/HCL terraform-ls · Nix nil · CMake · Docker · Protobuf protols · YAML · TOML |
| Shaders / hardware | GLSL glsl_analyzer · WGSL wgsl-analyzer · SystemVerilog svls · VHDL vhdl_ls |
| Shell / docs | Bash · PowerShell · Nushell nu --lsp · LaTeX texlab · Markdown · GraphQL |
Svelte, Vue and Astro are a deliberate exception to the built-in-service
rule. All three highlight as html, and html is Monaco-serviced — so the
check is keyed on the LSP language, not the Monaco one. Keying it on the
Monaco language (as it originally was) silently skipped Volar and svelteserver,
the only things that understand script blocks, props and typed templates. Those
files therefore get some HTML suggestions alongside the framework server’s: a
little overlap beats no framework IntelliSense.
.v stays V (vlang); SystemVerilog is reached through the unambiguous .sv /
.svh. See the ambiguity table above for .pl and .m.
Two extensions are genuinely ambiguous, and IntelliSense follows the same
choice detectLanguage makes for highlighting, so a file never highlights as one
language and completes as another:
| Extension | Resolves to | Other claimant | How to reach the other |
|---|---|---|---|
.pl |
Perl | Prolog | name Prolog files .pro / .prolog |
.m |
MATLAB | Objective-C | .mm is unambiguously Objective-C |
Syntax highlighting
Monaco ships grammars for ~91 languages. VibeCoder supplies 27 more from
vibecoder/src/lib/monarch — Zig, Nim, Crystal, V, D, Vala, Odin, Gleam,
Haskell, Elm, PureScript, ReScript, Erlang, Nix, CMake, Protobuf, LaTeX,
PostScript, MATLAB, Assembly, COBOL, SAS, Ada, Fortran, Prolog, VHDL, FoxPro and
Astro. Each is a declarative LanguageSpec (keywords, comment markers, string
forms) that a shared factory turns into a Monarch tokenizer plus a language
configuration, so ⌘/ comments correctly and brackets match too.
Registration happens at editor mount and never overrides a Monaco built-in — if
Monaco gains one of these, theirs wins and ours is skipped (a test enforces it).
Grammars are built lazily via onLanguage, so mount cost stays flat.
Two invariants are test-enforced, both of which were silently broken before:
- Every id
detectLanguagecan return is registered. Monaco rejects an unknown language id, somatlab,cobol,sasandcmakefiles got neither highlighting nor IntelliSense — the LSP providers are keyed on the same id. - Every server-backed extension has a highlighting entry. A file with a
language server and no
detectLanguagemapping renders as plain text.
Zig, Nim, Crystal, D and V no longer borrow C++/Python/Ruby highlighting. The
approximation mis-coloured the keywords each language actually has, and left
their LSP providers registered against cpp.
Grammar tests run Monaco’s own Monarch engine and assert on real tokens, not on
the shape of the definition — the only way to catch the cases that actually
break: nested comments that un-comment the rest of the file ({- -}, /+ +/,
#[ ]#), MATLAB’s A' transpose versus 'a char array', Ada’s Obj'Length
attribute versus 'x', PostScript’s nested (a (b) c) strings, and
case-insensitive keywords in COBOL/Ada/Fortran/VHDL/SAS/CMake.
Installing a missing server
The status bar shows the active server, or the missing one with its install
command and a Copy install button. parseInstallHint splits the backend’s
hint into a runnable command and a documentation link — 51 of the 79 servers
yield a copyable one-liner, 23 a project URL, and 5 are genuinely prose
(“Included with Xcode”). A test runs the parser over the real hint table and
rejects any command that could not be pasted as-is, which is how
cargo install --git — plausible-looking and inert — was caught.
The command is copied, never run: installing software is the user’s decision, and several hints need a platform choice first.
AI Operations
| Command | Description |
|---|---|
send_chat_message(request) |
Send messages to AI provider; returns response + pending writes |
diffcomplete_generate(...) |
⌘. diff-mode AI edit — returns a unified diff for modal review (the only AI editing surface) |
get_available_ai_providers() |
List configured AI providers |
fetch_url_for_context(url) |
Fetch & strip a URL for AI context |
get_provider_api_keys() |
Load BYOK API key settings |
save_provider_api_keys(settings) |
Persist BYOK API keys to ~/.vibecli/profile_settings.db (encrypted) |
search_workspace_symbols(query, workspace_path) |
Regex-based symbol search across workspace |
Agent Operations
| Command | Description |
|---|---|
start_agent_task(task, approval_policy, provider) |
Start autonomous agent loop |
respond_to_agent_approval(approved) |
Approve or reject a pending agent tool call |
Agent events emitted:
| Event | Payload | Description |
|---|---|---|
agent:chunk |
String |
Streaming LLM text |
agent:pending |
AgentPendingPayload |
Tool call needs approval |
agent:step |
AgentStepPayload |
Step completed |
agent:done |
String |
Agent finished |
agent:error |
String |
Error occurred |
Multi-Agent Orchestration
| Command | Description |
|---|---|
start_parallel_agents(tasks, provider, policy) |
Spawn parallel agents on worktrees |
get_orchestrator_status() |
Snapshot of all agent statuses |
merge_agent_branch(agent_id, strategy) |
Merge agent branch (merge/squash/rebase) |
Orchestrator events emitted:
| Event | Payload | Description |
|---|---|---|
manager:agent_update |
AgentInstanceInfo |
Agent status change |
manager:agent_step |
{id, step_num, tool} |
Per-step progress |
Memory & Rules
| Command | Description |
|---|---|
get_vibecoder_rules() |
Load project-level rules (.vibecoder.md) |
save_vibecoder_rules(content) |
Save project-level rules |
get_global_rules() |
Load global rules (~/.vibecoder/rules.md) |
save_global_rules(content) |
Save global rules |
Checkpoints
| Command | Description |
|---|---|
create_checkpoint(label) |
Create a git stash checkpoint |
list_checkpoints() |
List all checkpoints |
restore_checkpoint(index) |
Restore checkpoint by index |
Trace / History
| Command | Description |
|---|---|
list_trace_sessions() |
List all agent trace sessions |
load_trace_session(session_id) |
Load entries from a trace session |
Hooks Configuration
| Command | Description |
|---|---|
get_hooks_config(workspace_path?) |
Load hooks configuration |
save_hooks_config(hooks, workspace_path?) |
Save hooks configuration |
Code Review
| Command | Description |
|---|---|
run_code_review(workspace_path, base_ref?, target_ref?) |
Run AI code review, return structured report |
MCP Server Management
| Command | Description |
|---|---|
get_mcp_servers() |
Load configured MCP servers from ~/.vibecoder/mcp.json |
save_mcp_servers(servers) |
Persist MCP server configurations |
test_mcp_server(server) |
Test a server and list its tools |
initiate_mcp_oauth(server_name, client_id, auth_url, token_url, redirect_uri, scopes) |
Build OAuth URL and open browser for authorization |
complete_mcp_oauth(server_name, auth_code, client_id, token_url, redirect_uri) |
Exchange auth code for token, persist encrypted in the ProfileStore under mcp.oauth.<server> |
get_mcp_token_status(server_name) |
Check OAuth token status (connected/expired) |
MCP OAuth Flow
The MCP panel supports OAuth 2.0 for authenticating with MCP servers:
- Click OAuthon a server → enter Client ID, Auth URL, Token URL, and Scopes
- Click Open Browser → authorize in your browser
- Paste the authorization code back into the modal
- Token is exchanged and stored encrypted in the ProfileStore (
~/.vibecli/profile_settings.db) undermcp.oauth.<server>. A pre-0.5.9~/.vibecoder/mcp-tokens.jsonis migrated into the store and deleted on first read.
Connected servers show a green OAuthbadge.
Deploy & Custom Domains
| Command | Description |
|---|---|
detect_deploy_target(workspace) |
Auto-detect deploy target from project files |
run_deploy(target, workspace) |
Deploy to selected target (Vercel/Netlify/Railway/GH Pages/GCP/Firebase) |
get_deploy_history() |
List previous deployments |
set_custom_domain(target, domain) |
Configure a custom domain for the selected target |
Custom Domain Support
After deploying, enter a custom domain in the Custom Domainfield:
- Vercel: calls the Vercel REST API (requires
VERCEL_TOKENenv var) - Other targets: returns CNAME record instructions for manual DNS configuration
Code Complete Workflow
| Command | Description |
|---|---|
list_workflows(workspace_path) |
List all workflows with stage progress |
get_workflow(workspace_path, name) |
Get a workflow by name |
create_workflow(workspace_path, name, description) |
Create a new 8-stage workflow |
advance_workflow_stage(workspace_path, name) |
Mark current stage complete, advance to next |
update_workflow_checklist_item(workspace_path, name, stage_index, item_id, done) |
Toggle a checklist item |
generate_stage_checklist(workspace_path, name, stage_index, provider) |
AI-generate checklist for a stage |
Test Runner
| Command | Description |
|---|---|
detect_test_framework(workspace) |
Auto-detect test framework from project files (Cargo/npm/pytest/Go) |
run_tests(app, workspace, command?) |
Run tests, stream test:log events, return TestRunResult with summary and per-test details |
generate_commit_message(workspace) |
Run git diff --staged → AI prompt → imperative one-liner commit message |
Code Coverage
| Command | Description |
|---|---|
detect_coverage_tool(workspace) |
Auto-detect coverage tool (cargo-llvm-cov / nyc / coverage.py / go-cover) |
run_coverage(app, workspace, tool) |
Run coverage, parse LCOV/Go coverprofile, return CoverageResult with per-file percentages and uncovered lines |
Multi-Model Comparison
| Command | Description |
|---|---|
compare_models(prompt, provider_a, model_a, provider_b, model_b) |
Send same prompt to two providers in parallel, return CompareResult with timing, tokens, and errors |
HTTP Playground
| Command | Description |
|---|---|
send_http_request(method, url, headers, body?) |
Send HTTP request with 30s timeout, return HttpResponseData (status, headers, body, duration) |
discover_api_endpoints(workspace) |
Grep workspace for Express/Axum/FastAPI/Spring route patterns (max 60 results) |
Cost & Performance Observatory
| Command | Description |
|---|---|
record_cost_entry(session_id, provider, model, prompt_tokens, completion_tokens, task_hint?) |
Append cost record to ~/.vibecoder/cost-log.jsonl with estimated_cost_usd pricing |
get_cost_metrics() |
Load all entries, compute per-provider aggregates, total cost/tokens, budget remaining |
set_cost_limit(limit_usd?) |
Set or clear monthly budget cap (persisted at ~/.vibecoder/cost-config.json) |
clear_cost_history() |
Delete the cost log file |
AI Git Workflow
| Command | Description |
|---|---|
suggest_branch_name(task_description) |
AI-generated concise hyphenated branch name from task description |
resolve_merge_conflict(file_path, conflict_text) |
AI-resolved merge conflict preserving both sides |
generate_changelog(workspace, since_ref?) |
Convert git log into Keep-a-Changelog format via LLM |
Codemod & Lint Auto-Fix
| Command | Description |
|---|---|
run_autofix(workspace, framework?) |
Auto-detect and run linter fix mode (clippy/eslint/ruff/gofmt/prettier), return diff + file count |
apply_autofix(workspace, apply) |
Stage fixed changes (apply=true) or revert via git restore (apply=false) |
Arena Mode (Blind A/B Comparison)
| Command | Description |
|---|---|
save_arena_vote(vote) |
Persist a blind vote to ~/.vibecoder/arena-votes.json (provider A/B, winner, prompt, timestamp) |
get_arena_history() |
Load all arena votes and compute per-provider stats (wins/losses/ties/win-rate) |
Multiplayer Collaboration
| Command | Description |
|---|---|
create_collab_session(room_id?, user_name, daemon_port?) |
Create a new collab room; returns room ID, peer ID, and WebSocket URL |
join_collab_session(room_id, user_name, daemon_port?) |
Join an existing collab room by ID |
leave_collab_session() |
Leave the current collab session (WebSocket cleanup handled by frontend) |
list_collab_peers(room_id, daemon_port?, api_token?) |
List connected peers in a room via daemon REST API |
get_collab_status(room_id?) |
Get collab connection status (connected, room_id, peer_count) |
Flow Tracking
| Command | Description |
|---|---|
track_flow_event(kind, data) |
Record a developer activity event |
get_flow_context() |
Get recent activity as formatted context |
Terminal Operations
| Command | Description |
|---|---|
spawn_terminal() |
Spawn a new PTY terminal |
write_terminal(id, data) |
Send input to terminal |
resize_terminal(id, rows, cols) |
Resize terminal |
Counsel (Multi-LLM Deliberation)
| Command | Description |
|---|---|
counsel_create_session(topic, participants, moderator_idx) |
Create a multi-LLM deliberation session with role-based participants |
counsel_list_sessions() |
List all counsel session summaries |
counsel_get_session(session_id) |
Load a counsel session by ID |
counsel_run_round(session_id) |
Execute a deliberation round across all participants |
counsel_synthesize(session_id) |
Generate moderator synthesis of all rounds |
counsel_inject_message(session_id, message) |
Inject a user interjection between rounds |
counsel_vote(session_id, round_idx, participant_idx, delta) |
Vote on a participant’s response |
Counsel events emitted:
| Event | Payload | Description |
|---|---|---|
counsel:chunk |
String |
Streaming participant response text |
SuperBrain (Multi-Provider Routing)
| Command | Description |
|---|---|
superbrain_route(query) |
Route a query to the best provider using keyword-based analysis |
superbrain_query(query, mode) |
Execute query in a specific mode (SmartRouter/Consensus/ChainRelay/BestOfN/Specialist) |
superbrain_get_modes() |
List available SuperBrain modes with descriptions |
SuperBrain events emitted:
| Event | Payload | Description |
|---|---|---|
superbrain:chunk |
String |
Streaming response from current model |
Utility
| Command | Description |
|---|---|
open_external_url(url) |
Open URL in system browser |
Rust Crates
vibe-core
Foundational editor primitives:
| Module | Struct/Fn | Description |
|---|---|---|
buffer |
TextBuffer |
Rope-based text buffer with undo/redo, multi-cursor |
file_system |
FileSystem |
Async open/save, file watching |
workspace |
Workspace |
Multi-folder workspace management |
git |
get_status, commit, push, etc. |
Git operations via git2 |
search |
— | File and content search with walkdir + regex |
terminal |
TerminalManager |
PTY terminal via portable-pty |
diff |
DiffEngine, DiffHunk |
Text diff via similar |
executor |
CommandExecutor |
Sandboxed command execution |
context |
ContextBuilder |
Token-budget-aware smart context for AI requests |
index |
CodebaseIndex |
Symbol indexing with TF-IDF embeddings for relevance ranking |
index/embeddings |
EmbeddingIndex |
Vector similarity search over codebase symbols |
index/symbol |
Symbol, SymbolKind |
Symbol extraction from source files |
vibe-ai
AI abstraction layer:
| Module | Description |
|---|---|
provider |
AIProvider trait, Message, CodeContext, ImageAttachment |
providers/ollama |
Ollama HTTP API (streaming) |
providers/claude |
Anthropic Claude API (streaming + vision) |
providers/openai |
OpenAI Chat Completions API (streaming + vision) |
providers/gemini |
Google Gemini API (streaming) |
providers/grok |
xAI Grok API (streaming) |
providers/groq |
Groq API (streaming) |
providers/mistral |
Mistral API (streaming) |
providers/cerebras |
Cerebras API (streaming) |
providers/deepseek |
DeepSeek API (streaming) |
providers/zhipu |
Zhipu GLM API (streaming) |
providers/openrouter |
OpenRouter multi-model API |
providers/azure_openai |
Azure OpenAI Service API |
providers/bedrock |
AWS Bedrock with SigV4 auth |
providers/copilot |
GitHub Copilot integration |
providers/vercel_ai |
Vercel AI SDK API |
providers/local_edit |
Local edit provider |
providers/failover |
Automatic provider fallback chain |
chat |
ChatEngine — session management |
completion |
CompletionEngine — inline code completion |
agent |
AgentLoop — plan→act→observe loop with approval tiers |
planner |
PlannerAgent — plan generation without execution |
multi_agent |
MultiAgentOrchestrator — parallel agents on git worktrees |
hooks |
HookRunner — event-driven hooks (shell + LLM handlers) |
skills |
SkillLoader — auto-activating context snippets |
artifacts |
ArtifactStore — structured output with annotations |
policy |
AdminPolicy — glob-based tool allow/deny with denied_tool_patterns = ["bash(rm*)"] |
rules |
RulesLoader — load .vibecli/rules/*.md with YAML front-matter path-pattern filtering |
tools |
ToolCall, ToolResult, prompt-based tool framework |
mcp |
McpClient — JSON-RPC 2.0 MCP server integration |
trace |
TraceWriter — JSONL audit log + session resume |
otel |
OpenTelemetry span attribute constants |
vibe-collab
CRDT-based multiplayer collaboration:
| Module | Description |
|---|---|
server |
CollabServer — DashMap concurrent room registry, get_or_create_room, cleanup empty rooms |
room |
CollabRoom — Y.Doc per room, Y.Text per file path, peer list, broadcast channel fan-out |
protocol |
Yjs binary sync protocol (SyncStep1/SyncStep2/Update), encode/decode/apply helpers |
awareness |
PeerInfo, CursorState, AwarenessState, 8-color peer palette |
error |
CollabError enum with HTTP status code conversion |
vibe-lsp
Language Server Protocol client:
- JSON-RPC message framing via
jsonrpc-coreandtokio-util - Async LSP server process management
- LSP types from
lsp-types - Full document lifecycle notifications (
didOpen,didChange,didSave) - Wired to Monaco for go-to-definition, hover, completions, diagnostics
vibe-docfmt
Rich document formats read and written as text — see documents.md:
| Module | Struct/Fn | Description |
|---|---|---|
lib |
read_text, write_text |
Path-level API; a write is verified by re-reading the rewritten file, and refuses rather than replacing on mismatch |
model |
Document, Block, Span |
The block model shared by every format |
markdown |
to_markdown, from_markdown, to_plain_text |
The editable buffer, in both directions |
xmltree |
parse, serialize |
XML tree that round-trips byte-for-byte where untouched |
surgical |
apply, BlockAdapter |
Diff-driven element edits shared by DOCX and EPUB |
docx |
read, write |
OOXML; images, footnotes and page setup survive a save |
epub |
read, write |
Spine chapters; stylesheets, OPF and metadata preserved |
epub_view |
read_book, read_chapter |
Reading for display: metadata, cover, TOC (nav doc or NCX), and each chapter with its stylesheets and media resolved |
pdf |
read, write |
Content streams walked into lines per page; a changed page is appended as an incremental update, so the original bytes stay put |
pdf/font |
Encoder |
What a font’s codes mean, in both directions — ToUnicode CMap, base encoding, /Differences; a code with no character makes its run opaque rather than guessed |
pages/snappy |
decompress, compress |
Apple’s IWA block framing around raw Snappy |
pages/protobuf |
Message |
Wire-format walker that keeps unknown fields byte-identical |
pages/iwa |
parse_stream, serialize_stream |
Archive streams inside an iWork document |
pages/text |
find_storages, set_text |
Text substitution plus character-index remapping |
vibe-sheetfmt
Spreadsheet formats read and written as a grid, not a text buffer — a Workbook of Sheets of Cells, reusing vibe-docfmt’s xmltree/zipedit for OOXML package handling:
| Module | Struct/Fn | Description |
|---|---|---|
lib |
read_workbook, write_workbook |
Path-level API, same write-then-verify contract as vibe-docfmt |
model |
Workbook, Sheet, Cell, CellKind, CellStyle, CellBorders, MergedRange, FrozenPanes, DefinedName, RowHeight |
Cell.kind (text/number/date/bool) is read-side classification, resolved from the cell’s style against xl/styles.xml’s numFmt — XLSX has no native date type, so “date” means a number whose style is date-shaped. merged_ranges/frozen/defined_names/row_heights are read-side only; a save leaves <mergeCells>/<pane>/<definedNames>/a <row>’s own ht untouched since a write only ever rewrites a changed cell’s <c> |
xlsx |
read, write |
Shared strings and cell styles untouched; only a changed cell’s <c> is rewritten, never as a shared-string-table edit. CellStyle resolves font bold/italic/color/name/size, solid fill, borders and alignment from cellXfs, including theme colors (<color theme tint>, via vibe_docfmt::drawingml, using SpreadsheetML’s own reordered theme-slot index and single-float tint — a different mechanism from DrawingML’s a:schemeClr) and the legacy indexed palette (openpyxl’s COLOR_INDEX table) |
csv |
read, write |
RFC 4180 quoting; every cell is CellKind::Text |
numbers |
read_preview |
Apple’s archive format is unpublished — preview image only, not writable |
vibe-slidefmt
Slide-deck formats read and written as positioned shapes, not a text buffer — a Deck of Slides of Shapes with an EMU Frame:
| Module | Struct/Fn | Description |
|---|---|---|
lib |
read_deck, write_deck |
Path-level API; Deck.writable is false for Keynote (unpublished archive format, preview-image fallback) |
model |
Deck, Slide, Shape, Run, Frame |
Shape.text is what an edit diffs and rewrites; Shape.runs (PPTX only) is the same text as its real paragraphs/runs — bold, italic, a color (literal or resolved through the slide’s theme), a hyperlink — for display, not for what a save writes back. Slide.notes (presenter notes) is likewise read-side only |
pptx |
read, write |
Shape trees including nested <p:grpSp> groups (composed into slide-space EMU), picture fills, background and schemeClr theme colors (lumMod/lumOff/shade/tint, applied in document order via vibe_docfmt::drawingml) all inherited/resolved through slide → layout → master → theme; tables (a:tbl in a graphicFrame, whose own p:xfrm — not spPr’s — was the position bug fixed alongside this) as real cells with merges and a literal per-cell fill; shape rotation and outline (a:ln) |
keynote |
read, write |
Reverse-engineered .iwa object graph (verified against LibreOffice’s libetonyek); falls back to the embedded preview image when the structure can’t be read |
vibe-extensions
WASM extension system:
- Powered by
wasmtime27 - Auto-loads
*.wasmfiles from~/.vibecoder/extensions/ - Host functions:
host_log,host_notify,host_read_file,host_write_file - String ABI: extensions export
alloc(size) → ptrandmemory - Extension lifecycle callbacks:
init(),on_file_save(path),on_text_change(path, content) - Extension Manager — frontend
ExtensionManager.ts+ExtensionHostWeb Worker - VS Code API shim — partial
vscodenamespace compatibility layer
Writing an Extension
Extensions are compiled to wasm32-unknown-unknown. A minimal Rust extension:
// In your extension's lib.rs (target: wasm32-unknown-unknown)
extern "C" {
fn host_log(ptr: i32, len: i32);
}
#[no_mangle]
pub extern "C" fn init() -> i32 {
let msg = "Hello from extension!";
unsafe { host_log(msg.as_ptr() as i32, msg.len() as i32); }
0
}
#[no_mangle]
pub extern "C" fn alloc(size: i32) -> i32 {
let mut v: Vec<u8> = Vec::with_capacity(size as usize);
let ptr = v.as_ptr() as i32;
std::mem::forget(v);
ptr
}
Backend Modules
agent_executor.rs
TauriToolExecutor implements ToolExecutorTrait for the desktop environment:
| Tool | Method | Description |
|---|---|---|
read_file |
read_file(path) |
Read file contents (truncated at 8 KB) |
write_file |
write_file(path, content) |
Write file with auto-mkdir |
bash |
run_bash(command) |
Shell command execution in workspace root |
search_files |
search_files(query, glob?) |
Content search with optional glob filter |
list_directory |
list_dir(path) |
Directory listing |
web_search |
web_search(query) |
DuckDuckGo Lite search |
fetch_url |
fetch_url(url) |
Fetch and strip HTML from URL |
get_weather |
vibe_ai::weather::get_weather(location) |
Current conditions via Open-Meteo (no API key) |
task_complete |
— | Signal task completion |
Note:
apply_patchis not supported — the agent is instructed to usewrite_filewith full contents instead.
flow.rs — Flow Awareness Engine
Tracks developer activity in a 100-event ring buffer:
| Event Kind | Data | Trigger |
|---|---|---|
file_open |
File path | Opening a file |
file_edit |
File path | Editing a file (debounced) |
file_save |
File path | Saving a file |
terminal_cmd |
Command string | Running a terminal command |
context_string(limit) returns a formatted summary: recently opened files, recently edited files, and recent terminal commands.
memory.rs — AI Rules
| Function | Description |
|---|---|
load_workspace_rules(root) |
Load <workspace>/.vibecoder.md |
load_global_rules() |
Load ~/.vibecoder/rules.md |
combined_rules(root) |
Merge both into a single system-prompt injection |
save_workspace_rules(root, content) |
Save project rules |
save_global_rules(content) |
Save global rules (creates ~/.vibecoder/ if needed) |
counsel.rs — Multi-LLM Deliberation
Structured multi-round debates between AI providers:
| Struct | Description |
|---|---|
CounselSession |
Manages deliberation with topic, participants, rounds, and synthesis |
CounselParticipant |
AI provider assigned a role (Expert, Devil’s Advocate, Skeptic, Creative, Pragmatist, Researcher) |
CounselRound |
Collection of responses with optional user feedback per round |
CounselResponse |
Individual model response with voting support |
superbrain.rs — Multi-Provider Query Routing
Intelligent query routing and multi-model synthesis:
| Mode | Description |
|---|---|
SmartRouter |
Keyword-based routing to best model per task type |
Consensus |
All models respond; majority view synthesized |
ChainRelay |
Sequential refinement — each model builds on previous |
BestOfN |
All models respond; judge picks the best |
Specialist |
Decomposes query into subtasks assigned to different models |
web_client.rs — Browser-Based Web Client
Self-contained single-page web client for zero-install access (similar to Bolt.new/v0):
- No external CDN dependencies (air-gap safe)
- Chat and Agent modes with SSE streaming
- Markdown rendering with syntax highlighting
- Dark/light theme support, responsive design
- Served from the VibeCLI
servecommand
Keyboard Shortcuts
Source of truth: vibecoder/src/constants/shortcuts.ts, which the welcome
screen renders from and shortcuts.test.ts checks against the handlers in
App.tsx. Update that file first, then this table.
Global — a window listener, so these work anywhere in the app:
| Shortcut | Action |
|---|---|
Cmd/Ctrl + S |
Save file |
Cmd/Ctrl + O |
Open folder |
Cmd/Ctrl + K |
Command palette |
Cmd/Ctrl + P |
Command palette |
Cmd/Ctrl + Shift + P |
Command palette (VS Code alias) |
Cmd/Ctrl + B |
Toggle sidebar |
Cmd/Ctrl + J |
Toggle AI panel |
Cmd/Ctrl + `` |
Toggle terminal |
Cmd/Ctrl + 1–9 |
Switch panel tab, in ALL_TABS order: 1 chat · 2 agent-os · 3 ai-teams · 4 ai-playground · 5 ai-context · 6 ai-generation · 7 marketplace · 8 project-hub · 9 planning |
Cmd/Ctrl + Shift + E |
Focus explorer sidebar |
Cmd/Ctrl + Shift + G |
Focus git sidebar |
Cmd/Ctrl + Shift + M |
Maximize panels (Esc restores) |
In the editor — Monaco commands, so they need a file open and the editor focused. They do not fire from the welcome screen, the AI panel, the terminal, or the sidebar:
| Shortcut | Action |
|---|---|
Cmd/Ctrl + . |
AI Edit (DiffComplete) on the selection, or the whole file |
Option/Alt + \ |
AI inline completion |
Tab |
Indent selection |
Accessibility (WCAG 2.1 AA)
VibeCoder implements WCAG 2.1 Level AA accessibility:
| Feature | Description |
|---|---|
| Focus-visible outlines | 2px blue outline on keyboard focus (:focus-visible); suppressed on mouse click |
| Skip-to-content link | Hidden link appears on first Tab press, jumps past sidebar to editor region |
| Command palette ARIA | role="dialog", combobox input, listbox results, option items, aria-activedescendant |
| Modal focus trap | Tab cycles within modal; Escape closes; previous focus restored on close |
| Agent status announcements | aria-live="polite" region announces running/complete/error/idle to screen readers |
| Screen-reader utility | .sr-only CSS class for visually-hidden accessible text |
| Onboarding tour | First-run guided walkthrough (localStorage gate), dismissible |
Testing
17,170 test functions across the workspace (counted at v0.5.14 by #[test] / #[tokio::test] attribute).
| Crate | Tests | Key coverage areas |
|---|---|---|
| vibecli | 5,262+ | session store, serve, config, review, workflow, REPL, redteam, gateway, transform, marketplace, background agents, TUI, tool executor, bugbot, vim editor, security scan, automations, legacy migration, batch builder, QA validation, RAG, GPU cluster, inference, training, counsel, superbrain, web client, open memory, auto research, blue/purple team, IDP, agent teams, cloud agents, workflow orchestration |
| vibe-ai | 1,020+ | 23 provider backends + failover, tools, trace, hooks, policy, skills, artifacts, planner, MCP, agent teams, multi-agent, SigV4, gemini |
| vibe-core | 293 | buffer, git, diff, context, file system, workspace, search, terminal, index/embeddings |
| vibe-coder (Tauri) | 227 | Tauri commands, coverage, cost, flow, agent executor, shadow workspace |
| vibe-lsp | 74 | LSP client, features, manager, language configs |
| vibe-collab | 53 | CRDT rooms, server registry, protocol sync, awareness |
| vibe-extensions | 46 | loader, manifest, permissions, registry |
Benchmarks: 8 Criterion benchmarks covering cosine similarity (384d/1536d/batch), symbol extraction (50/500 fns), index build (100 files), symbol search, and relevance scoring.
# Rust unit tests
cargo test --workspace
# Specific crates
cargo test -p vibe-core
cargo test -p vibe-ai
cargo test -p vibe-collab
# TypeScript type check
cd vibecoder && npx tsc --noEmit
# End-to-end tests
cd vibecoder/e2e && npm test
See TESTING.md for manual testing checklist.
Debugging
Open DevTools in the running app:
- macOS:
Cmd + Option + I - Windows/Linux:
Ctrl + Shift + I
Or right-click anywhere and select Inspect.
See DEBUG.md for common troubleshooting steps.