Local runners
Install, register, run, and troubleshoot a Labor0 local runner for workspace-owned task execution.
Use hosted Labor0-managed runners for normal work. Use a local runner when work needs private network access, local caches, a specific operating system, special tools, or a machine you control.
A local runner executes commands with the privileges of the user or service account that starts it. Run it only on machines you trust for the workspace repositories and setup commands it will execute.
Choose hosted or local execution
Hosted runners are the default when the repository can build in the standard hosted environment.
Choose a local runner when work needs:
- private network access or local services
- a machine-local package manager, license, device, or cache
- a specific operating system or architecture
- direct control over checkout and generated-file locations
When an active local runner is registered for a workspace, eligible work can use that runner. Leave the daemon running when you expect Labor0 to use the machine.
Download and verify
Start from the authenticated app:
- Open the Labor0 app.
- Choose the workspace that should own the runner.
- Go to
Settings>Runners. - Start the local runner setup flow.
- Download the matching release archive and
SHA256SUMSfile when the app points you to them.
Release artifacts use this naming pattern:
Replace <tag> with the release tag.
Verify the archive before installing it. On Linux:
On macOS:
On Windows PowerShell, compare the displayed hash to the matching line in SHA256SUMS:
Extract the archive and put the binary on your PATH:
For Windows:
Register from the app
The normal first-run path is:
- Open the workspace in the app.
- Go to
Settings>Runners. - Register a local runner with a display name that identifies the machine.
- Copy the one-time
l0r_runner token or daemon command before leaving the result screen. - Start
labor0-runner daemonon the local machine with that token.
Runner tokens are secret and one-time visible. Do not commit them, log them, paste them into issues, share them in chat, or store them in repository .env files.
Register from the CLI
You can also register from the CLI when you have a Labor0 user API token and the tenant/workspace scope:
Useful register inputs:
The register command exchanges the user API token for a workspace runner token and writes that runner token to the local config file.
Run the daemon
After CLI registration, start the daemon from the saved config:
After app registration, pass the one-time token:
For a smoke test that attempts one lease and exits:
Useful daemon inputs:
Run the daemon under your normal service manager for long-lived operation. Keep the token in the service manager's secret storage or a user-only runner config file.
Config and work directories
Defaults use the operating system's user config and cache directories:
Each acquired phase gets an isolated workspace under the work directory:
Treat the work directory as sensitive because it contains repository source and generated files.
Setup commands and tools
Project runner setup commands are configured in project settings. Each non-empty line runs after checkout or checkpoint restore and before the selected agent runtime starts.
Project-level Runner MCP servers are also configured in project settings under Project Settings > Runners. Those saved MCP servers are attached to future runner sessions automatically, but only when the configured endpoint is reachable from the machine that runs the session.
Local runners rely on tools installed on your machine. Common tools include:
- Git
- GitHub CLI
gh - selected agent runtime CLI:
codex,claude, oropencode - project build tools such as Go, Rust, Python, Node.js,
pnpm, compilers, and system libraries
Do not put secrets in runner setup commands. Manage runtime credentials from workspace runtime credential settings.
Local runners and Runner MCP
Use Project Runner MCP settings for remote MCP servers that have a public HTTPS endpoint and should be shared by future sessions for one project.
Use machine-local MCP configuration instead when the server:
- runs through
stdioon the local machine - listens on
localhost - depends on a private subnet, VPN, loopback, or machine-local socket
- should exist only on one developer machine instead of every future project session
Hosted runners cannot reach those local or private targets. A local runner can, but only if the MCP server is configured on that machine and the process is already available there.
Troubleshooting
Common symptoms:
Cancel work from the Labor0 app when possible. Ctrl+C or service shutdown stops the daemon; if a lease is active, the runner attempts to release recoverable work before it exits.
Next
- Read Getting started before registering a runner.
- Read Pricing and credits for usage visibility.