Skip to main content
This guide walks through authoring a benchmark end to end: creating an environment, wiring simulators and datasets, adding tasks with typed criteria, and publishing a versioned slug@version that other teams (or your own Solvers) can run. Authoring uses the internal API with an organization API key (vk_*). Running a published benchmark uses a Solver key and the public /v1 API instead.

Who This Is For

  • Teams building internal benchmarks for their own agents.
  • Organizations publishing benchmarks for the wider healthcare AI ecosystem (visibility=Public).
  • Anyone authoring a new task or criterion against an existing environment.

Prerequisites

Examples below mix the TypeScript SDK (for resources the SDK exposes today: benchmarks, datasets, environments) with curl (for simulators, tasks, criteria, which are currently available only on the REST API). The same operations are also available via the MCP server.

1. Create an Environment

An environment is a reusable simulated health system. Start with a container:

2. Add Simulators

Simulators are individual simulated interfaces (FHIR EHR, voice line, payer portal, SFTP drop, HL7 endpoint, X12 clearinghouse, fax, messaging). Create each simulator and link it to the environment:

3. Attach Datasets

Datasets contain synthetic data that populates simulator sandboxes at rollout time. FHIR datasets carry a JSON config with patients, conditions, medications, etc. Files and SFTP datasets carry a manifest plus actual files stored in GCS.
Datasets are linked to sandboxes (the runtime instances of simulators) when a playground is provisioned. Sandbox linking copies the dataset into a per-run child dataset, so the original stays pristine.

4. Create the Benchmark

A benchmark groups tasks against one environment:
timeout is the per-task execution budget in seconds; tasks that exceed it are recorded with verdict: "fail" and score: 0. concurrency is the number of task rollouts that may run in parallel within a single benchmark run.

5. Add Tasks

Each task is one test case. A task carries:
  • taskItem: structured payload with instruction, trigger, expected inputs.
  • scenario: optional pre-rollout steps run by the scenario runner (for example, drop a fax into the inbox before the agent starts).
  • entities: DatasetEntity bindings scoping the task to specific synthetic records.
  • tags: for filtering and organization.

6. Attach Criteria

Criteria are typed assertions the verification engine runs after the rollout. Each one has a label, an assertion spec, a weight, and an optional axis for per-axis scoring. Prefer multiple narrow criteria over one compound criterion: one observable outcome per criterion makes failures easier to diagnose.

Example: portal-state-match

Example: fhir-resource-state

Example: voice-transcript (negative assertion)

See the Criteria concept page for all supported check types (fhir-resource-state, hl7-structural, portal-state-match, sftp-file-present, voice-transcript, x12-response) and full assertion reference on the Criteria API page.

7. Set Slug and Publish

Before publishing, assign a URL-safe slug (lowercase alphanumeric with hyphens):
Then publish a version. Versions are positive integers; once published, a benchmark is immutable and addressable as slug@version:
Published benchmarks are immutable. To iterate, clone the benchmark and publish the clone as the next version (version: 2). Consumers can continue pinning to slug@1 while you ship slug@2.

8. Set Visibility

Visibility controls who can run a published benchmark:
  • Private (default): only Solvers in the owning organization can run it.
  • Public: any Solver in any organization can run it. The benchmark appears in public listings and leaderboards.
You cannot make a benchmark Public without a slug. Publish with a slug first, verify it runs as expected, then flip visibility.

Versioning

  • Cut a new version when criteria, tasks, or the linked environment change in a way that shifts scores.
  • Keep trivial edits (documentation, labels that do not affect scoring) to the same version by applying them before publishing.
  • Communicate version changes in the benchmark’s overview, scoring_rubric, and limitations fields.

Next Steps

Criteria

Reference for every supported check type with annotated examples.

Verification

How per-criterion results aggregate into task and benchmark scores.

Environments

Compose simulators and datasets into reusable simulated health systems.

Benchmarks API

REST endpoints for create, update, publish, and list.