Every coding agent. One tiling window.
Local · native · keyboard-first
Website · Docs · Releases · MIT
Codex GUI + Claude Code TUI + Amp + Grok Build — tiled or scrolled with shell. Every agent local, no hosted relay.
Most AI coding tools pick a lane: a chat sidebar, a terminal CLI, or a hosted web app. Verde is the workstation for the agents you already run locally.
- One window for every agent. Codex, Claude Code, OpenCode, Cursor, Pi, FX, and Grok Build as native chat or TUI panes; Amp as a terminal TUI.
- A real tiling workspace. Split chat, terminal, and browser — or scroll them as a Niri-style strip when you open more panes. Layouts persist.
- Local-first. Verde drives the provider CLIs already on your machine. No Verde-hosted inference, no prompt relay, no telemetry sink.
- Keyboard-first. Command palette (
Ctrl+Shift+P), pane focus, zoom, and workspace jumps — remappable in one config file. - Native, not Electron. Zig + SDL3 + Palette (our in-tree GUI framework), Ghostty VT for terminals, system webview for the browser pane.
| Verde | tmux + CLIs | Hosted agent apps | IDE extension | |
|---|---|---|---|---|
| Multi-agent tiling | ✓ | ~ | – | ~ |
| Native GUI chat + TUI | ✓ | – | ~ | – |
| Embedded browser + Design Mode | ✓ | – | ~ | – |
| Local-only (no relay) | ✓ | ✓ | – | ~ |
| Scriptable live control | ✓ | ~ | – | – |
✓ full · ~ partial · – not really
| Agent | GUI chat | Terminal TUI | How Verde talks to it |
|---|---|---|---|
| Codex | ✓ | ✓ | Local codex CLI + codex app-server |
| Claude Code | ✓ | ✓ | Claude Agent SDK against your installed Claude Code |
| OpenCode | ✓ | ✓ | Local opencode CLI + opencode serve |
| Cursor | ✓ | ✓ | Cursor CLI ACP (agent acp) |
| Pi | ✓ | ✓ | Local pi CLI in RPC mode (pi --mode rpc) + embedded TUI |
| FX | ✓ | ✓ | Local fx CLI ACP (fx acp) + embedded TUI |
| Grok Build | ✓ | ✓ | Local grok CLI ACP (grok agent stdio) + embedded TUI |
| Amp | – | ✓ | Local amp CLI in an embedded Ghostty pane |
Verde does not host models or relay prompts. Install the provider CLIs you care about; Verde drives them on your machine.
→ Setup notes: Provider docs
Linux / macOS
curl -fsSL https://verdeai.dev/install.sh | shWindows x64 (PowerShell)
irm https://verdeai.dev/install.ps1 | iexOr grab a package from GitHub Releases:
| Platform | Artifact |
|---|---|
| Linux x86_64 | verde-v*-linux-x86_64.tar.gz → extract, run ./install-local.sh |
| macOS | .dmg or .zip → move Verde.app into Applications |
| Windows x64 | verde-v*-windows-x86_64.zip → verify .sha256, run packaged install.ps1 |
| Arch Linux | verde-bin (yay -S verde-bin) |
Windows installs per-user (no admin), adds a Start Menu shortcut, and needs the WebView2 Evergreen Runtime. Linux browser support uses system WPE WebKit — the installer warns if packages are missing; set VERDE_INSTALL_BROWSER_DEPS=1 to install them.
Full install variants and platform notes: verdeai.dev/#install · Troubleshooting
If Verde bounces once in the Dock and does not open with a DatabaseSchemaTooOld startup error, quit Verde and run:
curl -fsSL https://raw.githubusercontent.com/JonathanRiche/verde/master/scripts/repair-legacy-database.sh | shThe repair only updates legacy schema-version-0 databases. It creates a timestamped backup beside state.sqlite before using Verde's supported session-daemon migration path; already-migrated databases are left unchanged.
Verde does not ship a model. Install and authenticate at least one provider CLI first:
| Provider | Setup |
|---|---|
| Codex | Codex CLI → codex login |
| Claude Code | Claude Code + Node on PATH → log in |
| OpenCode | OpenCode on PATH |
| Cursor | Cursor CLI → agent login (or CURSOR_API_KEY) |
| Pi | pi on PATH · GUI chat + terminal TUI |
| FX | fx → fx login · GUI chat + terminal TUI |
| Grok Build | Grok Build → grok login · GUI chat + terminal TUI |
| Amp | Amp on PATH · terminal TUI |
Then:
verde- Import a project — sidebar
+or right-click the rail. Threads and agents run against that workspace root. - New chat — click the workspace pencil, or enable prefix mode and press
Ctrl+B, thenc. Pick provider + model, set run permissions, send a prompt. - Tile a browser —
Ctrl+Shift+B(native webview: WPE / WKWebView / WebView2). - New terminal tab — with prefix mode enabled, press
Ctrl+B, thent.Shift+Tstill opens a standalone terminal pane beside the focused one. Open Codex/Claude/Grok TUIs from the palette orverde live agent open. - Command palette —
Ctrl+Shift+Pjumps to threads, panes, workspaces, and app commands.
If no GUI provider is ready, Verde shows a Connect an AI provider screen so you can finish setup without guessing.
→ Full walkthrough: Quickstart
Every pane is first-class. Split a chat beside a browser, drop a terminal next to it, zoom with Alt+Z, and rearrange with Ctrl+Shift+H/J/K/L. Layouts and per-terminal zoom persist across launches.
With two or more tiled panes, Verde can switch to a horizontal or vertical strip — free-form wheel/touchpad panning, resizable columns, sidebar reorder, and hover-edge navigation. Settings → Workspace (or the command palette) chooses Automatic / Always / Disabled, per-workspace overrides, direction, and panes-per-view.
One Raycast-style launcher ranks threads, open panes, workspaces, and commands. Ctrl+Enter opens a result in a new pane. Slash commands like /stack and /process run from the composer.
Tile a native webview next to your agent. Point at an element or draw a region, describe the change, and route visual context into a chat or terminal TUI — without leaving the workspace.
Opt-in under Settings → Experimental: a pane-less orchestration sidecar (Sprout, Moss, or Vireo) with durable threads, operation inspection, and Mission Control for multi-step goals. Still experimental — APIs and UI may change.
Ghostty-powered terminals under every workspace. Shell tabs, agent launch profiles, OSC titles, and zoom that stick with the layout.
Declare dev servers and agents once; start/stop/restart from chat or CLI:
processes:
web:
command: "npm run dev"
resources:
- "port:3000"
agents:
codex:
provider: codex
command: "codex"
revive: attach_or_create
hooks: trueChat turns and terminal sessions live in a session daemon, not the window. The GUI, CLI, MCP bridge, and the experimental web client all attach as detached clients — agent turns keep running and land durably if the window closes, and the daemon drains and upgrades itself when a new Verde version starts. Drafts, image attachments, and transcripts persist across restarts.
Every running instance exposes local IPC (verde live). Inspect panes, open chats, send prompts, steer a running turn, write to terminals, open the browser — from hooks, dotfiles, or automation:
verde live status --json
verde live chat open --workspace $WS --provider codex --model gpt-5.6-sol --reasoning high
verde live chat send --pane $PANE --prompt "run the tests and fix failures"
verde live chat followup --pane $PANE --prompt "also update the changelog" # steer the running turn
verde live terminal write --focused --text $'cargo test\r'
verde open http://localhost:3000The same chat surface is exposed to agents over MCP (verde mcp): open panes, send prompts, read transcripts, and queue mid-turn follow-ups — daemon-direct, without stealing focus or touching your composer.
→ Full surface: CLI reference
On Omarchy, Verde follows the active colors.toml automatically. Everywhere else, import portable themes from the site:
verde theme import https://verdeai.dev/themes/tokyo-night.jsonSame workspace, different skins — try them live on verdeai.dev (also Catppuccin Latte, Ristretto, Verde default).
| Key | Action |
|---|---|
Ctrl+Shift+P |
Command palette |
Ctrl+B, then c |
New chat tab (prefix mode) |
Ctrl+B, then t |
New terminal tab (prefix mode) |
Ctrl+B, then Shift+T |
New standalone terminal pane (prefix mode) |
Ctrl+Shift+B |
Toggle browser pane |
Ctrl+Arrow |
Focus panes; Ctrl+H/J/K/L remain available as optional verde.json bindings |
Ctrl+Tab / Ctrl+Shift+Tab |
Next / previous pane in sidebar order |
Ctrl+Shift+H/J/K/L |
Swap / rearrange panes |
Alt+Z |
Zoom focused pane |
Alt+1…Alt+9 |
Jump workspaces |
→ All defaults + remapping: Keybinds
| Topic | Link |
|---|---|
| Quickstart | docs/quickstart |
| Providers | docs/providers |
| Chat, models & runs | docs/chat |
| Panes & tiling | docs/panes |
| Design Mode | docs/design-mode |
CLI (verde live, state, browser) |
docs/cli |
Config, themes, verde.yml |
docs/config |
| Troubleshooting | docs/troubleshooting |
Agent-friendly crawl: llms.txt · llms-full.txt · any page as /docs/<slug>.md
Source builds live in packages/desktop/. Use mise from the repo root (Zig 0.16.0 is pinned in mise.toml):
mise install
mise run setup
mise run dev-build # routine desktop development build
mise run dev # build + run (native webview)| Task | Command |
|---|---|
| Dependency check | mise run setup |
| Dev run | mise run dev |
| Desktop development build | mise run dev-build |
| Full build/install | mise run build |
| SDL_GPU Palette renderer | mise run dev-sdl-gpu |
| Web client (Zig gateway + Solid SPA) | mise run web-app / mise run web-app-run |
Do not use bare zig build — the default Debug + WPE path is known to fail. Prefer mise run dev-build for desktop development or mise run dev to launch, or explicitly:
zig build dev-build --release=safe -Dbrowser-backend=native_webviewPlatform notes (WebView2 SDK, WPE packages, macOS codesign, Windows MSVC): see Troubleshooting and comments in scripts/.
The UI stack is SDL3 (window/events/scale) + SDL_GPU + Palette — not web UI or ImGui. Desktop package overview: packages/desktop.
- Zig 0.16 — native executable, no Electron shell
- SDL3 + Palette — windowing, input, and in-tree Zig GUI framework
- Headless session daemon — owns chat turns and PTYs; GUI, web gateway, CLI, and MCP are detached clients, so agent work survives window restarts
- Ghostty / libghostty-vt — embedded terminal engine, pinned to upstream (no vendored fork)
- Native webview — WPE WebKit · WKWebView · WebView2 (no bundled Chromium)
- SQLite — local projects, threads, transcripts, drafts, and image attachments
The render loop is tuned for low idle cost: prompt acceptance is sub-millisecond even on long threads, daemon round-trips run off the render thread, and streaming large transcripts stays O(delta) per update.
Third-party notices and licenses for vendored components are listed under Third-party components below when redistributing.
| What | Where |
|---|---|
| App state | SDL pref path → state.sqlite |
| User config | ~/.config/verde/verde.json (Unix) · %APPDATA%\Verde\verde.json (Windows) · override with VERDE_CONFIG |
| Project stack | verde.yml / verde.yaml in the workspace root |
| Logs (Linux) | ~/.local/share/verde/Native/logs/verde.stderr.log |
| Logs (any) | verde state path --json then open logs/ under that directory |
Example stack and full verde.json schema: Configuration & state
Main third-party pieces used by the desktop app:
@anthropic-ai/claude-agent-sdk— Claude Code provider integrationfff.nvim/fff-c/fff-search— file indexing/search (vendor/fff, MIT)- Ghostty /
libghostty-vt— terminal emulation (MIT) zsdl(zig-gamedev) — SDL3 bindings (MIT)- SDL3 — windowing, input, display, rendering
zqlite— SQLite access (MIT-style)zig_dif/zig_markdown— chat markdown and code renderingstb_image— image decoding (vendor/stb_image.h)- Font assets (Codicon, Nerd Fonts, Noto Sans, JetBrains Mono Nerd Font, Cal Sans) — see
packages/desktop/src/assets/fonts
If you redistribute Verde, keep the relevant upstream notices with the distributed app and vendored source.
Verde is licensed under the MIT License.








