buildd
Getting Started

Runner Setup

Run tasks locally with a standalone worker that connects to buildd.dev

Runner Setup

The Runner is a standalone worker that connects to buildd.dev. It runs on your machine (or a remote workspace like Coder) and executes tasks using the Claude Agent SDK.

Prerequisites

  • Bun runtime
  • A buildd.dev account with an API key

Quick Start

cd apps/runner
bun install
bun start

On first launch, open http://localhost:8766 in your browser to complete setup (API key, workspace linking).

Configuration

All config is stored in ~/.buildd/config.json. The file is created automatically during setup.

Config Fields

FieldTypeDefaultDescription
apiKeystringBuildd API key (bld_xxx)
runnerUrlstringauto-detectedPublic URL for this instance (see URL Resolution)
maxConcurrentnumber3Max concurrent workers
modelstringclaude-opus-4-6Claude model to use
acceptRemoteTasksbooleantrueAccept task assignments from the dashboard
bypassPermissionsbooleanfalseSkip permission prompts (dangerous commands still blocked)
builddServerstringhttps://buildd.devServer URL override
openBrowserbooleanAuto-open browser on startup
llmProviderstringanthropicLLM provider: anthropic or openrouter
llmApiKeystringProvider API key (for OpenRouter, etc.)
llmBaseUrlstringCustom LLM base URL
pusherKeystringPusher key for realtime events
pusherClusterstringPusher cluster (e.g. us2)

Environment Variables

Env vars override config file values. Useful for CI/Docker.

VariableOverrides
BUILDD_API_KEYapiKey
RUNNER_URLrunnerUrl
PORTListen port (default: 8766)
PROJECTS_ROOTComma-separated project directories (e.g. ~/projects,~/work)
MAX_CONCURRENTmaxConcurrent
MODELmodel
BUILDD_SERVERbuilddServer
BUILDD_CONFIGConfig file path (default: ~/.buildd/config.json)
LLM_PROVIDERllmProvider
LLM_API_KEYllmApiKey
LLM_BASE_URLllmBaseUrl

URL Resolution

The runnerUrl determines how the buildd.dev dashboard links back to this instance (the "Open" and "Open Terminal" buttons). It's resolved once at startup in this order:

  1. RUNNER_URL env var (highest priority)
  2. runnerUrl in ~/.buildd/config.json
  3. Tailscale auto-detect — runs tailscale ip -4 and uses the IPv4 address
  4. http://localhost:8766 (fallback)

Remote Workspaces (Coder, SSH, etc.)

If you're running the runner on a remote machine that's accessible via Tailscale or another network, set the URL explicitly so dashboard links work:

// ~/.buildd/config.json on the remote machine
{
  "runnerUrl": "http://<tailscale-ip>:8766"
}

Or via env var:

RUNNER_URL=http://<tailscale-ip>:8766 bun start

If Tailscale CLI is installed on the machine, the IP is auto-detected and you don't need to set anything.

How It Works

  1. The runner starts and sends a heartbeat to buildd.dev every 5 minutes
  2. The dashboard shows connected instances under "Connected Agents"
  3. When a task is created and assigned, the runner claims it and spawns a Claude Agent SDK session
  4. Progress is reported back to buildd.dev in real-time via API + Pusher
  5. The dashboard can link directly to the runner for live terminal output

On this page