Workbenches is an open standard. Read why
Docs Install and update

Getting started

Install and update

wb is the open source reference engine and command-line client for the Workbench standard. It is installed as workbench with wb as an alias. Native binaries are available for macOS and Linux on arm64 and x64. There is no Windows build.

Install#

curl -fsSL https://workbenches.dev/install.sh | sh

The installer:

  • verifies the release's published SHA-256 checksum,
  • installs workbench to $XDG_BIN_HOME when it is set, else ~/.local/bin, and creates the wb alias,
  • never invokes sudo and never edits shell startup files.

To read the installer before running it:

curl -fsSLO https://workbenches.dev/install.sh
less install.sh
sh install.sh
rm install.sh

Installer options#

Option Effect
--version <version> Install a specific release, prereleases included.
--bin-dir <dir> Install somewhere else. WORKBENCH_INSTALL_DIR does the same.

Flags passed through a pipe need sh -s --:

curl -fsSL https://workbenches.dev/install.sh | sh -s -- --version 1.0.0
curl -fsSL https://workbenches.dev/install.sh | sh -s -- --bin-dir ~/bin

The default, latest, is the newest stable release by version among the 100 newest GitHub release records, which matches what wb update picks on a stable build.

Put it on PATH#

~/.local/bin is often not on PATH. If wb is not found after installing, add it for the current shell:

export PATH="$HOME/.local/bin:$PATH"

Add the same line to your shell profile, such as ~/.zshrc or ~/.bashrc, to make it permanent.

Install the skills instead#

A coding agent can install and drive wb itself. Give it the four Workbench skills:

npx skills add pompeii-labs/workbenches
Skill What it teaches
wb-cli Install wb, connect credentials, and run, resume, and supervise Workbenches.
wb-subagents Delegate bounded, checkable work to a Workbench and collect the result.
wb-authoring Author, review, and trial a spec 1 Workbench package, gate first.
wb-publishing Push a Workbench to your organization and submit it for public review.

Install one skill globally with --skill and -g:

npx skills add pompeii-labs/workbenches --skill wb-subagents -g

Install a runner#

wb does not ship a model harness. Every Workbench names a runner, and the runner must be installed where the run happens: on the host for the local runtime, inside the image for docker, e2b, and daytona.

Runner Manifest name CLI on PATH Install
OpenCode opencode opencode npm install -g opencode-ai
Pi pi pi npm install -g @earendil-works/pi-coding-agent
Claude Code claude-code claude npm install -g @anthropic-ai/claude-code

As a non-root user, a global npm install can fail on the global prefix. Install to ~/.local instead and keep ~/.local/bin on PATH:

npm install -g --prefix ~/.local opencode-ai

A missing runner fails before any model request:

Runner CLI is unavailable: opencode. Install opencode and rerun this command.

The verified runner versions and what each supports are on Models and connections.

Check the install#

wb --version
wb update --check

Bare wb prints command help. wb <command> --help prints the flags of your installed version.

Update#

wb update --check   # report a newer release
wb update           # replace the binary in place

wb update updates the CLI. wb upgrade is a different command: it refreshes saved Workbench packages from their sources. See Find and inspect.

Anonymous counts#

The CLI reports anonymous save and run counts only for registry Workbenches published by an organization you hold no login for. Saves and runs of your own organizations' packages, local paths, GitHub sources, and private versions are never reported. A report carries the immutable version ID, the kind (save or run), the CLI version, and a timestamp, and no execution content.

Before the first report, the CLI prints once:

Workbench reports anonymous save and run counts for registry Workbenches published by other organizations. Set DO_NOT_TRACK=1 to disable.

Set DO_NOT_TRACK to any non-empty value other than 0 to suppress every report and the notice.

Stability#

Within 1.x these do not change incompatibly: the spec 1 manifest, the --json event stream of run, resume, and attach, the wait --json result, the send, answer, and detached run and resume --json receipts, smoke --json, the documented exit codes, install.sh, and wb update. Everything else, including human-readable output and piped tab-separated output, may change in a minor version. Parse --json, never the human renderer. See JSON output.