# Add a worker

Runs execute on a **worker** — a machine you control that has the AI harnesses
installed and your provider key configured. You can connect one or many; AM
routes work across the [fleet](/docs/worker-health).

## Install

On the worker host, run the command from the **Workers** tab:

```bash
am-cloud worker install \
  --panel wss://automaintainer.intrane.fr/ws/worker \
  --token <your-license-key>
```

This installs a service that connects to the panel over WebSocket. The worker
appears in the **Workers** tab within ~15s.

### User service vs system service

```bash
# user service (no sudo) — default
am-cloud worker install --panel <url> --token <key>

# system‑wide (needs root)
sudo am-cloud worker install --panel <url> --token <key> --system
```

For a **user** service to keep running after you log out, enable linger:

```bash
sudo loginctl enable-linger "$USER"
```

## What a worker needs

- An AI harness: `claude`, `opencode`, `pi`, or `tau`.
- `git`, `gh` (for PRs), and the `a2a` / `a2a-spawn` bus tools.
- A working **provider key** for at least one harness ([BYOK](/docs/byok-provider-keys)).
- *(optional)* `tokscale` on `PATH` to report per‑run token/cost in the panel —
  see [Run costs](/docs/run-costs).

The Workers tab shows a checklist of these per worker, plus live RAM/CPU and a
readiness badge. See [Worker & fleet health](/docs/worker-health).

> **Gotcha — running as root.** Some harnesses refuse to bypass approval prompts
> as root. AM handles this automatically (it sets `IS_SANDBOX=1` for claude), but
> if you see a permissions error in a run, see
> [Worker not ready](/docs/worker-not-ready).

## Verify it's actually ready

Installed ≠ working. A harness with no provider key (or an empty balance) will
accept a run and silently do nothing. Always confirm with the **Test** button —
see [Verify readiness](/docs/verify-readiness).

## Removing a worker

Stop and disable the service on the host:

```bash
am-cloud worker uninstall   # or: systemctl --user disable --now am-cloud-worker
```

You can also disable a worker from the **Workers** tab without uninstalling.

## Related

- [BYOK provider keys](/docs/byok-provider-keys)
- [Verify readiness](/docs/verify-readiness)
- [Worker & fleet health](/docs/worker-health)
