Skip to content

penso/arbor

Repository files navigation

Arbor UI screenshot

Arbor

CI Rust Nightly License: MIT GitHub Release macOS Linux Windows

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.

Why Arbor

  • 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

Core Capabilities

Worktree Management

  • 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

Embedded Terminal

  • Built-in PTY terminal with truecolor and xterm-256color support
  • Multiple terminal tabs per worktree
  • Alternative backends: Alacritty, Ghostty
  • Persistent daemon-based sessions (survive app restarts)
  • Session attach/detach and signals (interrupt/terminate/kill)

Diff and Changes

  • 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

AI Agent Visibility

  • Detects running coding agents: Claude Code, Codex, OpenCode
  • Working/waiting state indicators with color-coded dots
  • Real-time updates over WebSocket streaming

MCP Server

  • Dedicated arbor-mcp binary 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_URL and ARBOR_DAEMON_AUTH_TOKEN for remote authenticated daemons

Remote Outposts

  • 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)

GitHub + UI + Config

  • 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.toml with hot reload

Install

Homebrew (macOS)

brew install penso/arbor/arbor

Prebuilt Binaries

Download the latest build from Releases.

Quick Start from Source

git clone https://github.com/penso/arbor
cd arbor
just run

To run the MCP server against a local dev daemon:

just run-mcp

Documentation

Full documentation is available at penso.github.io/arbor/docs.

Crates

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

MCP

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-mcp

Environment variables:

  • ARBOR_DAEMON_URL overrides the daemon base URL. Default: http://127.0.0.1:8787
  • ARBOR_DAEMON_AUTH_TOKEN sends a bearer token for remote authenticated daemons

Remote access:

  1. On the daemon host, set [daemon] auth_token = "your-secret" in ~/.config/arbor/config.toml.
  2. Start arbor-httpd. When an auth token is configured, Arbor binds remotely by default on 0.0.0.0:8787 unless ARBOR_HTTPD_BIND overrides it.
  3. Point arbor-mcp at that daemon with ARBOR_DAEMON_URL=http://HOST:8787.
  4. 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-features

See docs/mcp.md for the full MCP setup guide.

Building from Source

Prerequisites

macOS

just setup-macos

Or manually:

xcode-select --install
xcodebuild -downloadComponent MetalToolchain
brew install --cask font-caskaydia-mono-nerd-font

Linux (Debian/Ubuntu)

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/.

Similar Tools

  • 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

Acknowledgements

Thanks to Zed for building and open-sourcing GPUI, the GPU-accelerated UI framework that powers Arbor.

Star History

Star History Chart

About

Run agentic coding workflows in a fully native desktop app for Git worktrees, terminals, and diffs.

Resources

License

Stars

Watchers

Forks

Contributors