What a runner does
- Connects to the Lynx platform using your provided credentials
- Registers itself with its capabilities (CPU, memory, concurrency limit)
- Polls for queued jobs and claims them
- Executes the simulation workload
- Reports job outcomes (complete or failed) back to Lynx
- Sends heartbeats so the platform knows it is alive
Runner capabilities
Each runner declares its capabilities at startup:| Field | Type | Description |
|---|---|---|
max_concurrent_jobs | int | How many jobs this runner executes in parallel |
cpu_cores | int | Available CPU cores |
memory_gb | float | Available memory in GB |
gpu_available | bool | Whether a GPU is available |
supported_simulation_types | string[] | Simulation type tags this runner accepts |
GET /runners/{runner_id}.
Runner status
| Status | Meaning |
|---|---|
Idle | Connected and ready, no active jobs |
Busy | Executing one or more jobs |
Offline | No heartbeat received — runner is unreachable |
Maintenance | Drained — connected but not accepting new jobs |
Drain and resume
Draining a runner stops it from accepting new jobs without interrupting work already in progress. Use this before taking a machine offline for maintenance.Maintenance. In-flight jobs run to completion before the runner goes quiet.
Scaling the pool
You can run any number of runners concurrently. Lynx distributes jobs across all active runners automatically — no additional configuration is required when adding or removing runners. Each runner must have a uniquerunner_id.
Retry handling
If a runner fails a job and the job has retries remaining (retries < max_retries), Lynx automatically requeues it. The next available runner picks it up. You do not need to handle requeuing yourself.