Skip to main content
A local Tracker keeps run state in a PostgreSQL container and writes artifacts and logs to a folder on your machine. Sandboxes run on Daytona, Modal, or your own Docker daemon, and no AWS account or login is needed. You need Docker, the Valkyrie CLI, and a Daytona API key or Modal token unless you only use Docker sandboxes.

Get the code

Add your secrets

Create .env at the repository root with your provider settings and the secrets your agents declare:
.env
Replace the following:
  • API_KEY: your Daytona API key
  • TOKEN_ID and TOKEN_SECRET: your Modal token’s ID and secret
  • OPENAI_KEY: an example agent secret, here an OpenAI API key
Each task reads only the selected provider’s settings and the variables its agent contract declares. Valkyrie saves the file’s path with the run, never its values. Agent contracts can’t declare DAYTONA_* or MODAL_TOKEN_* variables.

Start the Tracker

From the repository root:
This starts PostgreSQL in Docker, applies migrations, and serves the Tracker at http://127.0.0.1:8000. Runs use the code in your checkout, including retries and resumes after you change it. If you restart the Tracker while tasks are waiting to start, retry the run afterwards. The default settings are in local-server.yaml at the repository root:
local-server.yaml
To use other locations, pass your own file with make local-tracker CONFIG=CONFIG_FILE, where CONFIG_FILE is its path. Relative paths in it resolve from its folder.

Choose a benchmark service

Use one of these:
  • A service Vals AI hosts. Start the Tracker with the hosted services’ domain, and set VALKYRIE_API_KEY in the CLI’s environment to a Valkyrie access key that can use the benchmark:
  • Your own service, on your machine or at any URL. Run it without authentication and save its URL:

Start a run

Without --provider or a default provider, runs use daytona. Every other valkyrie run command works against the local Tracker, which serves artifacts over HTTP, so the CLI doesn’t need access to data_root. Retries, resumes, and forced stops use the provider and secrets file saved on the run.

Docker sandboxes

Docker runs each task in a container on the daemon that the Tracker and your benchmark service share. Select the daemon with DOCKER_HOST, and pass --provider docker or set it as your default with valkyrie provider default docker.
  • Services Vals AI hosts can’t use Docker sandboxes. Start your own service with CBS_DOCKER_ENABLED=true, built with the create-benchmark-service version that services/tracker/pyproject.toml pins.
  • Docker can’t change network access between stages, so the benchmark and the agent must allow unrestricted ("*") access in every stage. Allowlists are refused before a container starts.
  • Containers can’t run Docker themselves.
  • If the Tracker stops mid-run, the run’s containers keep running. To remove them, run the following, replacing RUN_ID with the run’s ID:

Reset local state

Run records live in the PostgreSQL Docker volume and run files under data_root. Delete both together, or the remaining records point at missing files:

Settings

With secrets_manager_region, map each provider to its secret with valkyrie provider set. Only this source can send a benchmark service’s saved credential.

Limits

  • Post-run Lambdas, valkyrie run results --s3, result previews, and Docent analysis need S3 storage, so a local Tracker can’t run them.
  • Some hosted benchmarks start sandboxes from snapshots or images that only Vals AI’s Daytona organization can read, so they fail with your own Daytona account.

Fix common errors