Install
View as markdownSet this up with an AI agent
Copy a prompt describing this guide and paste it into Claude Code (or your agent of choice).
On macOS, install Shelbi and start it in one command:
brew install jlong/shelbi/shelbi && shelbiOn a fresh machine, shelbi opens the Welcome to Shelbi launch screen,
with Add project and Connect to remote. To get Shelbi's detected setup
instead (a preflight of your repo, runner, and machine, then one plan card to
confirm), run shelbi project add from inside the repository. Nothing is
written until you confirm. See
Set up your first project for
both paths.
On macOS, install the desktop app with Homebrew. Its cask depends on the CLI formula, so the command names both:
brew install jlong/shelbi/shelbi jlong/shelbi/shelbi-desktopThen open Shelbi from Applications. On a fresh machine it opens the
Welcome to Shelbi window, whose Add project starts the desktop app's
short Add Project wizard. To get Shelbi's detected setup instead (a preflight
of your repo, runner, and machine, then one plan card to confirm), run
shelbi project add from inside the repository. See
Set up your first project for
both paths.
Shelbi also publishes a prebuilt Ubuntu package. The full package-manager commands are:
brew install jlong/shelbi/shelbi jlong/shelbi/shelbi-desktopThe APT repository is signed, so apt update verifies the repository
metadata before apt install sees the package. The first Ubuntu package is
published for amd64 in the stable suite.
The APT key fingerprint is published at:
curl -fsSL https://apt.shelbi.dev/shelbi-archive-keyring.fingerprintThe package installs the shelbi binary and its bundled configuration
plugin. The hub daemon is started on demand the first time you open a project
and exits when no project is open, so there is no service to install or enable.
The macOS desktop app (Shelbi.app, Apple silicon, macOS 15 or later) is a
second client over the same daemon and sessions as the TUI. Its cask depends on
the CLI formula, so name both when you install it, as in the
macOS desktop app tab above.
If you're hacking on Shelbi or testing unreleased changes, use the source-build path instead.
Prerequisites
You need two things before you start:
- An agent CLI. At least one of
claude(Claude Code) orcodex, installed and authenticated. If you install both, each agent (orchestrator, developer, review, and so on) recommends a runner and the project config can override it; workspaces don't pick one. - Git and SSH. Shelbi creates git worktrees and can run workspaces on
remote machines over SSH. The Ubuntu package depends on
gitandopenssh-client; on macOS, install them with Xcode Command Line Tools or your usual package manager if they are not already present.
Shelbi runs each agent in its own Shelbi session, so there is no terminal multiplexer to install. It also runs fine inside tmux or Screen if you prefer to launch it from one.
Selecting and copying text
Inside the dashboard, drag with the left mouse button to select text in any agent pane, then press Cmd+C (or Ctrl+Shift+C) to copy it. Hold Option while you drag if you need the drag to reach a full-screen program instead of selecting.
Some terminals bind Cmd+C to their own copy and never hand it to Shelbi. Ghostty is one of them. Add this line to your Ghostty config so Cmd+C copies Ghostty's own selection when it has one and otherwise passes through to Shelbi:
keybind = performable:super+c=copy_to_clipboardIn the desktop app, drag with the left mouse button to select text in any
terminal pane (the orchestrator, a workspace's agent, a review), then press
⌘C (Edit ▸ Copy) to copy it. No terminal configuration is involved: the
app draws its terminals itself.
Remote workspaces need a compatible shelbi binary and the agent CLI on the
machine they run on, plus an ssh host you can reach without a password prompt.
shelbi machine setup finds or installs that binary for
you.
Verify or start later
shelbiInside a registered project's directory, this opens that project. Anywhere
else, with no hub daemon running, it opens the launch screen; with a daemon
already running, it starts project setup for the current directory. To check
only the installed version, run shelbi --version.
Verify release artifacts manually
GitHub Releases are the source of truth for release artifacts, checksums, and artifact attestations. Package-manager installs verify checksums or signed repository metadata automatically, but you can verify downloads by hand.
For an Ubuntu .deb, download the package and checksums.txt from the
same release tag:
version=0.1.0
curl -fsSLO "https://github.com/jlong/shelbi/releases/download/v${version}/checksums.txt"
curl -fsSLO "https://github.com/jlong/shelbi/releases/download/v${version}/shelbi_${version}_amd64.deb"
sha256sum -c checksums.txt --ignore-missingFor a macOS archive, verify the release tarball the Homebrew formula uses:
version=0.1.0
curl -fsSLO "https://github.com/jlong/shelbi/releases/download/v${version}/checksums.txt"
curl -fsSLO "https://github.com/jlong/shelbi/releases/download/v${version}/shelbi_Darwin_arm64.tar.gz"
grep "shelbi_Darwin_arm64.tar.gz" checksums.txt | shasum -a 256 --check -Replace shelbi_Darwin_arm64.tar.gz with
shelbi_Darwin_x86_64.tar.gz on Intel Macs. To inspect GitHub artifact
attestations, use GitHub's attestation tooling against the same release
artifact.
Install from source for development
The source install path is for contributors, local patches, and unreleased builds. It requires the stable Rust toolchain from rustup.
You can run the hosted source-build script:
curl -fsSL https://shelbi.dev/install.sh | shOr keep the checkout around to rebuild after pulling updates:
git clone https://github.com/jlong/shelbi.git
cd shelbi
./scripts/install.shThe script first asks where Shelbi should keep its global state (the Shelbi
root, default ~/.shelbi) and bakes that path into the binary as its default.
It skips the prompt when SHELBI_DEFAULT_ROOT is set or there is no terminal
(for example under curl | sh), using ~/.shelbi in that case. It then runs
cargo fetch --locked and cargo build --release, copies the binary to
$HOME/bin/shelbi, and installs the bundled configuration plugin under
<prefix>/share/shelbi/plugins/. Override the destination with
SHELBI_INSTALL_PATH:
SHELBI_INSTALL_PATH=/usr/local/bin/shelbi ./scripts/install.shRe-run it any time you pull updates. One step rebuilds and reinstalls.
If a hub daemon is running, the script restarts it onto the new binary
(pass --no-daemon to leave it alone). Run shelbi reload, or restart the
TUI, so attached clients and the orchestrator pick up the new build.
macOS: the codesign step
On macOS the script re-signs the copied binary ad-hoc:
codesign --remove-signature "$INSTALL_PATH"
codesign --sign - "$INSTALL_PATH"macOS: skip this and you get Killed: 9
cargo build embeds an ad-hoc signature; cp invalidates it, and the
next exec dies with Killed: 9 and no useful error. Re-signing after the
copy restores it. scripts/install.sh does this for you, so you only hit
the failure if you copy the binary out of target/release/ by hand.
Linux and Windows don't need it, and the script skips it there.
Troubleshooting
command not found: shelbi. The default install path is
$HOME/bin/shelbi only when you install from source. Make sure that
directory is on your PATH:
export PATH="$HOME/bin:$PATH"export PATH="$HOME/bin:$PATH"fish_add_path "$HOME/bin"Add the line to ~/.zshrc, ~/.bashrc, or ~/.config/fish/config.fish to
make it persistent. Or pass
SHELBI_INSTALL_PATH=/usr/local/bin/shelbi to the install script so the
binary lands somewhere already on your PATH.
If Homebrew or APT installed the package, open a new shell and run
which shelbi to confirm your package-manager binary directory is on
PATH.
Killed: 9 on macOS, no other output. The codesign step didn't run.
This usually means you copied the binary out of target/release/ by hand
instead of using scripts/install.sh. Re-run the script, or run the
codesign commands yourself against your install path.
cargo: command not found. Install Rust via
rustup and restart your shell so ~/.cargo/bin is on
your PATH. Cargo is only required for source builds.
Next
You have the binary. Now point it at a repo with Set up your first project.