Artemis Runner
A Runner lets Artemis verify your code by running your Scripts (builds, tests and benchmarks) on a machine you choose. The Artemis Runner is software you download, configure and start on your workstation or server. It receives tasks, runs a downloaded copy of the Project's saved code, and sends logs and results back to Artemis.
Registered, online and selected are separate conditions: a Runner has to be registered with your deployment, running so it is online, and selected for the Project or the workflow you are running.
Accessing Runner Setup
There are two ways to reach the runner setup screen, where you generate the download command and a single-use registration token.
Method 1: Via Platform Settings
- Click Platform Settings in the sidebar
- Open Runners in the Integrations group
- Click New Artemis runner to generate a registration token
Method 2: Via Project Settings
- Open Project Settings in the Project sidebar
- Open Runner and Scripts
- Click Add new Artemis runner under the Runner dropdown. It takes you to the Runners screen above, where you click New Artemis runner
Quickstart
On Linux and Windows the Runner ships as a single self-contained binary. On macOS it installs from a Python wheels archive into a Python 3.11 virtual environment. On the New Artemis runner screen, choose your OS (Linux, Windows or macOS) and architecture, and the panel generates the exact download command and a single-use registration token. Use a bash shell on macOS/Linux, or PowerShell 5.0+ on Windows. See the downloads page for direct links and the macOS install steps.
-
Create a folder and download the runner binary
Windows (PowerShell):
New-Item -ItemType Directory artemis-runner; Set-Location artemis-runnerInvoke-WebRequest -UseBasicParsing -Uri 'https://files.artemis.turintech.ai/public/artemis-runner/artemis-runner-latest-windows.exe' -OutFile 'artemis-runner.exe'Linux (bash):
mkdir artemis-runner && cd artemis-runnercurl --fail --location 'https://files.artemis.turintech.ai/public/artemis-runner/artemis-runner-latest-linux' --output 'artemis-runner' && chmod +x artemis-runnerCopy the exact command for your platform from the setup panel. It fills in the right OS and architecture for your deployment.
-
Configure the runner
Pass the deployment URL and the single-use token from the setup panel. Optionally add
--runner-nameto skip the interactive name prompt..\artemis-runner.exe configure --url https://artemis.turintech.ai --token <YOUR_TOKEN> --runner-name "my-runner"On Linux/macOS, invoke it as
./artemis-runner configure .... -
Start the runner
.\artemis-runner.exe startThe setup page checks the status automatically and shows New runner detected once it connects. The Runner then appears in the Runners list and can be selected in the Project's Runner and Scripts dropdown, in a Branch Validation, or in Discovery setup.
The registration token is single-use and time-limited. If it expires or is already spent, click Regenerate on the setup panel (or create a new runner) to get a fresh one.
Registering with an API key
The token flow above is what the Web UI setup panel generates. A runner can equally register itself on first start using your Artemis API key, which avoids the Web UI round-trip entirely and is usually the better fit for scripted or agent-driven setup:
set -a; . ~/.config/artemis/.env; set +a # exports ARTEMIS_API_KEY
./artemis-runner start \
--runner-name "my-runner" \
--url https://artemis.turintech.ai \
--no-delete-task-output
Upgrading the runner
To update an existing runner to the latest release, run:
artemis-runner upgrade
How the Runner Works
The runner operates through a secure REST API communication:
- Task queued: you run a Script from a Branch's Scripts tab, or a Discovery Run executes a Version.
- Runner picks it up: the selected Runner receives the task from Artemis.
- Code downloaded: the Runner downloads a copy of the saved code into a task folder. It is not a Git clone, and it does not include uncommitted edits from your own checkout. See Task output for where it goes.
- Commands executed: the Script's setup, benchmark and teardown commands run on that copy.
- Results sent back: logs and metrics stream back to Artemis.
Configuration Options
Running configure saves your settings to a settings.env file next to the binary. When you start the runner, values are resolved in this order: CLI flags > environment variables > settings.env > defaults, so you can override any saved setting on the command line without re-running configure.
On-premise deployments
For on-premise Artemis, pass your deployment's base URL with --url when configuring. All service connection variables are derived from that URL, so no separate service configuration is needed.
./artemis-runner configure --url https://artemis.internal.company.com --token <YOUR_TOKEN>
SSL Configuration
Configure SSL certificate verification with the --ssl-verify flag or the ARTEMIS_SSL_VERIFY environment variable:
export ARTEMIS_SSL_VERIFY=true # Use system CA certificates (default)
export ARTEMIS_SSL_VERIFY=false # Disable SSL verification
export ARTEMIS_SSL_VERIFY=/path/to/ca/certificates.pem # Custom CA certificates
Usage Tips
- Ensure your runner has adequate disk space for project dependencies
- Keep the
startprocess running. The Runner is only online while it is running - Use meaningful runner names to identify them in the platform
- Monitor runner logs to troubleshoot any connection issues
Advanced Usage
This section covers running several Runners, resource limits, proxies, and where your code is downloaded and run.
Running multiple runners
You can run more than one runner at the same time. Runners that share a name form a pool: when a task comes in, Artemis sends it to any available runner in that pool. You have no control over which one is picked, so every runner in a pool should be interchangeable: same code, same environment, same toolchain.
To scale out, just start several runners with the same name. Tasks are distributed across whichever ones are free.
To create a separate pool, start a runner under a different name. Only one runner name is stored in the settings file, so pass --runner-name to override it:
./artemis-runner start --runner-name "my-runner-name"
Runners with different names appear as separate options on the platform and never share tasks.
Several runners in one Discovery Run
Several runners on different machines can be attached to the same Discovery Run, so the same versions are measured on each machine and you can compare them across hardware. Give each machine its own runner name when the hardware differs, because Artemis treats runners in a pool as interchangeable.
Resource Management
Limiting RAM Usage
You can control the amount of RAM available to your evaluations using the --ram-limit-mb flag or the ARTEMIS_RAM_LIMIT_MB environment variable. This is particularly useful on systems with limited resources or when you need consistent resource usage across environments.
# Set RAM limit to 4GB (4096MB) via flag
./artemis-runner start --ram-limit-mb 4096
# Or via environment variable
export ARTEMIS_RAM_LIMIT_MB=4096
./artemis-runner start
The RAM limit is specified in megabytes (MB). For example:
- 1GB = 1024MB
- 2GB = 2048MB
- 4GB = 4096MB
- 8GB = 8192MB
Setting the RAM limit too low may cause evaluations to fail if they require more memory than allocated. Monitor your evaluations' memory usage to determine appropriate limits.
Proxy Configuration
If you're experiencing connection issues in a corporate environment with a proxy, configure no_proxy to allow direct connections to your Artemis deployment.
Environment Variables
no_proxy/NO_PROXY: Comma-separated list of hosts to bypass the proxy
Troubleshooting Connection Issues
For SaaS Artemis (artemis.turintech.ai)
export no_proxy=localhost,127.0.0.1,artemis.turintech.ai
./artemis-runner start
Direct connections to Artemis can be faster and more reliable than going through a corporate proxy.
For On-premise Artemis
# For domain-based deployment
export no_proxy=localhost,127.0.0.1,artemis.internal.company.com
# For IP-based deployment
export no_proxy=localhost,127.0.0.1,192.168.41.1
./artemis-runner start
Testing Connectivity
Before starting the runner, verify connectivity:
# Test direct connection (with no_proxy)
curl -v https://artemis.turintech.ai
# Test internal deployment
curl -v https://artemis.internal.company.com
Diagnosing proxy issues
-
Verify
no_proxyis set correctlyecho $no_proxy -
Check if the proxy is blocking Artemis. SSL certificate errors may indicate proxy SSL inspection; connection timeouts may indicate proxy blocking
Task output: where your code is downloaded and run
When a task runs, the Runner downloads the Version of your code into a subfolder of its worker output root, which is your system's cache directory by default (typically ~/.cache/artemis-runner on Linux). It runs your commands there and streams the results back to Artemis. Each command starts in that copy (output/build) in its own shell. Write artemis_results.json or artemis_results.csv there or in a folder below it.
The exact path is printed in the runner output at the start of each run. If you ever need to locate files or debug a failure, check there first. See What's inside a task folder for the layout.
Two advanced options control this behaviour: Worker Output Root (where the files go) and Delete Task Output (whether files are kept after a run). To change either:
- Run
./artemis-runner configure - Choose Edit Advanced Options
- Select the option you want to change
Changing where tasks run (Worker Output Root)
By default, the runner works inside your system's cache directory. If you'd rather have tasks run somewhere else, such as a larger disk, a faster drive or a folder that is easier to find, set a custom location:
- Run
./artemis-runner configure - Choose Edit Advanced Options
- Select Worker Output Root and enter the directory you want the runner to use
All subsequent tasks will be downloaded and executed under that directory.
Keeping files after a run (Delete Task Output)
By default, the runner deletes a task's folder as soon as the task completes, so old runs don't fill up your disk. If you want to keep the files for inspection, for example to look at build artefacts or dig into a failing test, turn this off:
- Run
./artemis-runner configure - Choose Edit Advanced Options
- Select Delete Task Output and answer No
With Delete Task Output set to No, every run leaves its files behind, including a full copy of your repository per task. Clear out old task folders from the worker output root periodically.
Output options on the command line
The same settings are available as artemis-runner start options and environment variables. Command-line flags win over environment variables, which win over settings.env.
| Purpose | Start option | Environment variable |
|---|---|---|
| Keep task folders | --no-delete-task-output | ARTEMIS_DELETE_TASK_OUTPUT=false |
| Choose the output root | --worker-output-root /absolute/path | ARTEMIS_WORKER_OUTPUT_ROOT |
| Keep the last N local task logs | --task-log-retention-limit N | ARTEMIS_TASK_LOG_RETENTION_LIMIT |
Local task-<id>.log files rotate separately and 10 are kept by default. Keeping task folders does not stop log rotation, and nothing can recover files that your own teardown commands deleted. The logs and metrics already sent to Artemis are kept either way.
The configure menu also lists Delete Mutated and Incremental Build. They apply only to the legacy Code Optimization workflow and do not affect Branch Script runs or Discovery Runs.
What's inside a task folder
Each task gets its own folder, named task-{task_id}, inside the worker output root. For Branch Script runs and Discovery Runs it looks like this:
task-{task_id}/
├── input/
│ └── {project_id}/ # the saved code, as downloaded
└── output/
└── build/ # where the commands run
The task folder is cleaned when a task starts and normally removed when it ends, unless Delete Task Output is off. Do not rely on files surviving from one Validation to the next.
Next Steps
Once your runner is configured and running, you can:
- Select it and add a Script in Runner and Scripts
Troubleshooting
If you encounter connection issues:
- Verify your saved settings in
settings.env(re-runconfigureif needed) - Check your internet connection
- Confirm the runner name is unique on your account
- Make sure your registration token hasn't expired, and regenerate it if it has
- Review SSL certificate configuration if using HTTPS