Skip to main content
Use a YAML or JSON orchestration file to coordinate multiple explicit evaluation requests with one global scheduler.
Each request in the orchestration still selects one benchmark, harness, model, and environment, using the same structure as an evaluation request created by agentcompass run. Use run for one request. Use launch to compare models, evaluate several benchmarks, or mix harnesses and environments across multiple requests. AgentCompass does not infer a matrix. Every request is named and declared explicitly, which keeps its parameters, results, failures, and reuse source auditable.

Define an Orchestration

The following orchestration defines two evaluation requests. They share one global pool of 16 physical attempt-execution slots. Common model settings are defined once under defaults, while each request selects its own k and aggregation strategy:
Export every referenced environment variable before resolving the file:
Environment references must occupy the complete field, as in ${MODEL_API_KEY}. AgentCompass rejects partial string interpolation so unresolved or accidentally concatenated secrets do not silently enter a request.

What the fields mean

The request name therefore remains stable even if its benchmark or environment configuration changes. Use agentcompass list benchmark, agentcompass list harness, and agentcompass list env to inspect valid component IDs.

Mapping rules

The optional version defaults to the latest supported orchestration format. Request names must be non-empty and unique. AgentCompass normalizes each name to one safe directory component and rejects names that resolve to the same output namespace, even when their run IDs differ. Each request writes results under:
For the example above, --run-id baseline creates these two directories under the default result root:
output.run_name adds an optional grouping prefix. Distinct request names keep outputs separate, including when requests use the same Model and Benchmark with different Harnesses. An explicit run ID must be unused within its request namespace.

Configure k and strategy per request

launch does not use one --k or --attempt-strategy override for every benchmark. As shown above, put attempts under requests[].execution to select k and strategy independently for each request; see agentcompass run’s “Configure Repeated Attempts” for the complete values and execution behavior. AgentCompass resolves each request independently from the shared configuration and defaults.execution, then applies that request’s own execution fields. Requests do not inherit from or overwrite one another. Even if a later request starts while an earlier request is still running, it cannot change the earlier request’s resolved k or strategy. The requests share only the execution slots defined by the top-level task_concurrency. When every request uses the same settings, you can put attempts under defaults.execution; any request can still override them. For an orchestration that mixes scalar and binary primary metrics, set strategy explicitly in each request so that a scalar benchmark cannot inherit an incompatible pass strategy. See Metrics and Aggregation for metric types, strategy constraints, and result semantics.

Validate Before Running

Resolve the complete orchestration before starting an evaluation:
--dry-run loads configuration layers, expands environment references, resolves component defaults, validates every request, and prints a redacted orchestration. It does not load benchmark tasks or create result directories. Review the selected component IDs, task filters, environments, endpoint hostnames, concurrency, and reuse settings in this output. Start the same orchestration after validation:
For a one-off change, CLI options can override the shared run controls in the orchestration file:
Use agentcompass launch --help for the complete option list. Common orchestration-level options include:

Understand Scheduling and Failure Isolation

All requests share one execution worker pool. Declaration order defines admission priority: tasks from an earlier request are admitted first, and later requests use idle slots after all pending tasks from earlier requests have been admitted. This ordering is deterministic, but it does not force one complete evaluation to finish before the next begins. In the task_concurrency: 16 example under Define an Orchestration:
  1. AgentCompass fills available slots with tasks from tb21 first.
  2. As tb21 tasks finish, its remaining unstarted tasks continue to receive priority.
  3. Once all tb21 tasks have been admitted, any free slots immediately begin tb2vrf tasks, even if the final tb21 tasks are still running.
  4. If tb21 contains fewer than 16 tasks, the unused slots begin tb2vrf immediately.
This is ordered admission with overlap, not a strict barrier between requests. Request order controls which pending tasks get capacity first; task_concurrency controls concurrent physical attempt executions across the orchestration, including retries and repeated attempts from the same task. Each request keeps its own run directory, progress files, logs, summary, and terminal outcome. A request-level failure is recorded as failed and does not prevent later requests from running. The orchestration returns completed when all requests complete, partial_failure when only some fail, and a terminal timeout or cancellation status when the shared operation is stopped. See Logs and Progress for the terminal behavior of all three progress modes and how they interact with progress files. Use the capacity guidance in Run Controls before raising global concurrency.

Reuse Existing Runs

--reuse enables latest-run reuse by default for every request in the orchestration:
An individual request can opt out with runtime.reuse: false. To select an exact source, set runtime.reuse_run_id in that request or in defaults; output.run_id names the new result and is not a reuse source. Reuse searches only within the current request’s result namespace, including its optional output.run_name prefix. Requests with distinct normalized names can independently reuse their latest runs even when their Model and Benchmark are the same. The selected source must have the same Benchmark ID and attempt plan; evaluation settings can change. Changing a request’s name changes where reuse looks. Existing result directories remain in place. Automatic reuse searches only the new request-based hierarchy; it does not discover runs in the former Benchmark/Model hierarchy. Conflicting normalized request namespaces and existing explicit output directories are rejected before task execution. See Resume an Interrupted Run for reuse matching and usage constraints.