Arbor is a fully native app for agentic coding built with Rust and GPUI. It gives you one place to manage repositories, parallel worktrees, embedded terminals, diffs, AI coding agent activity, and a daemon-backed MCP server.
- Fully native desktop app (UI + terminal stack, Rust + GPUI), optimized for long-running local workflows
- One workspace for worktrees, terminals, file changes, and git actions
- Built for parallel coding sessions across local repos and remote outposts
- List, create, and delete worktrees across multiple repositories
- Delete confirmation with unpushed commit detection
- Optional branch cleanup on worktree deletion
- Worktree navigation history (back/forward)
- Last git activity timestamp per worktree
- Built-in PTY terminal with truecolor and
xterm-256colorsupport - Multiple terminal tabs per worktree
- Alternative backends: Alacritty, Ghostty
- Persistent daemon-based sessions (survive app restarts)
- Session attach/detach and signals (interrupt/terminate/kill)
- Side-by-side diff display with addition/deletion line counts
- Changed file listing per worktree
- File tree browsing with directory expand/collapse
- Multi-tab diff sessions
- Detects running coding agents: Claude Code, Codex, OpenCode
- Working/waiting state indicators with color-coded dots
- Real-time updates over WebSocket streaming
- Dedicated
arbor-mcpbinary backed by Arbor's daemon API - Structured MCP tools for repositories, worktrees, terminals, processes, and agent activity
- MCP resources for daemon snapshots and prompts for common Arbor workflows
- Supports
ARBOR_DAEMON_URLandARBOR_DAEMON_AUTH_TOKENfor remote authenticated daemons
- Create and manage remote worktrees over SSH
- Multi-host configuration with custom ports and identity files
- Mosh support for better connectivity
- Remote terminal sessions via
arbor-httpd - Outpost status tracking (available, unreachable, provisioning)
- Automatic PR detection and linking per worktree
- Git actions in the UI: commit, push
- Three-pane layout (repositories, terminal, changes/file tree)
- Resizable panes, collapsible sidebar, desktop notifications
- Twenty-five themes, including Omarchy defaults
- TOML config at
~/.config/arbor/config.tomlwith hot reload
brew install penso/arbor/arborDownload the latest build from Releases.
git clone https://github.com/penso/arbor
cd arbor
just runTo run the MCP server against a local dev daemon:
just run-mcpFull documentation is available at penso.github.io/arbor/docs.
| Crate | Description |
|---|---|
arbor-daemon-client |
Typed client and shared API DTOs for arbor-httpd |
arbor-core |
Worktree primitives, change detection, agent hooks |
arbor-gui |
GPUI desktop app (arbor binary) |
arbor-httpd |
Remote HTTP daemon (arbor-httpd binary) |
arbor-mcp |
MCP server exposing Arbor via stdio (arbor-mcp binary) |
arbor-web-ui |
TypeScript dashboard assets + helper crate |
Arbor ships a dedicated arbor-mcp binary from the arbor-mcp crate. The stdio server is enabled by the crate's default stdio-server feature and talks to arbor-httpd, so the daemon must be reachable first.
Enable it in a normal build:
cargo build -p arbor-mcpEnvironment variables:
ARBOR_DAEMON_URLoverrides the daemon base URL. Default:http://127.0.0.1:8787ARBOR_DAEMON_AUTH_TOKENsends a bearer token for remote authenticated daemons
Remote access:
- On the daemon host, set
[daemon] auth_token = "your-secret"in~/.config/arbor/config.toml. - Start
arbor-httpd. When an auth token is configured, Arbor binds remotely by default on0.0.0.0:8787unlessARBOR_HTTPD_BINDoverrides it. - Point
arbor-mcpat that daemon withARBOR_DAEMON_URL=http://HOST:8787. - Pass the same secret with
ARBOR_DAEMON_AUTH_TOKEN=your-secret.
Loopback requests are allowed without a token. Non-loopback requests require Authorization: Bearer <token>.
Example client config:
{
"mcpServers": {
"arbor": {
"command": "/path/to/arbor-mcp",
"env": {
"ARBOR_DAEMON_URL": "http://127.0.0.1:8787"
}
}
}
}The arbor-mcp binary is feature-gated. To disable the stdio server binary in a build, use:
cargo build -p arbor-mcp --no-default-featuresSee docs/mcp.md for the full MCP setup guide.
- Rust nightly — the project uses
nightly-2025-11-30(install via rustup) - just — task runner
- CaskaydiaMono Nerd Font — icons in the UI use Nerd Font glyphs
just setup-macos
Or manually:
xcode-select --install
xcodebuild -downloadComponent MetalToolchain
brew install --cask font-caskaydia-mono-nerd-font
just setup-linux
Or manually:
sudo apt-get install -y libxcb1-dev libxkbcommon-dev libxkbcommon-x11-dev
Then install the CaskaydiaMono Nerd Font to ~/.local/share/fonts/.
- Superset — terminal-based worktree manager
- Jean — dev environment for AI agents with isolated worktrees and chat sessions
- Conductor — macOS app to orchestrate multiple AI coding agents in parallel worktrees
Thanks to Zed for building and open-sourcing GPUI, the GPU-accelerated UI framework that powers Arbor.