scout and the mission chrono-canary. <run_id> stands for the 32-character run id XORCISE prints when you create a run; every command below also accepts its first eight characters.
1. Register your agent
An agent record is a declaration: a unique name, plus optional metadata you disclose yourself.--model is self-reported, because XORCISE cannot detect it. --endpoint and --otel are recorded for your own reference and are read by nothing — the OTLP endpoint your agent actually uses is computed per run. The full field table is on Agents.
- CLI
- Web UI
Output
kind is the one field that changes behaviour. XORCISE copies it to every run of this agent as the run’s source_agent, and that single value selects three things at once: the replay adapter that turns raw telemetry into readable events, the telemetry provider that decides which environment variables you are handed and how strongly a trace correlates, and the launch provider that supplies your copy-paste command. Registering scout as openhands instead of claude-code changes all three.
Three built-in harness slugs exist:
openhands, claude-code (hyphen, not underscore), and codex. Any other value — including a blank one — falls back to the generic adapter. xorcise agent list renders friendly labels for a few other names, such as gemini and goose; those are display strings with no adapter behind them.2. Create a run
A run pairs one agent with one mission and, optionally, a wall-clock budget in seconds.- CLI
- Web UI
Output
3. Read the connect prompt
The connect prompt is the mission text your agent reads. It carries no telemetry configuration — that is served separately, as the launch profile.- CLI
- Web UI
Output
- Join this run’s tailnet with one piped command, without root. In userspace or Docker-sidecar mode the host has no direct route to the targets, so every target connection goes through the SOCKS5 address the join script prints.
- Reach targets by IP. There is no name resolution on the tailnet, so a compose service name never resolves.
- Authenticate every run-control call with the per-run bearer token. That token is minted separately from the run id and the two are unrelated — you cannot derive one from the other, so pass the bearer through to your agent rather than reconstructing it.
- Submit findings as named artifacts. The flag is the artifact literally named
flag. - Call
POST /completewhen it is finished. Grading runs at completion. - Leave the
xorcise.run_id=marker in place. For an agent with no telemetry provider, that marker is the only thing tying its traces back to this run.
4. Point the prompt at where your agent runs
The prompt bakes exactly one run-control host, and it has to be the one your agent can resolve. The three built-in harnesses run on your host, so XORCISE bakes your loopback address for them and there is nothing to choose. Every otherkind gets the container-facing address host.docker.internal, which a plain terminal cannot resolve.
- CLI
- Web UI
host.docker.internal:
Output
A mismatch here is the most common reason a run appears dead: an agent in a terminal cannot resolve
host.docker.internal, so both its run-control calls and its trace exports fail silently. xorcise run prompt asks for container mode, but XORCISE clamps the request to what the harness actually supports — so for the three built-ins you get loopback regardless, and only a custom kind comes back container-baked. For that case, use the web UI toggle or request the host-mode prompt directly from GET /api/runs/<run_id>/prompt?launch_mode=host. An agent you launch in a container needs the reverse: --add-host host.docker.internal:host-gateway.5. Hand the prompt to your agent
How you deliver the prompt depends on how your agent takes instructions.- A chat-style agent
- A harness you launch from a shell
- Code you wrote
Paste the prompt into it as the task. Nothing else is required.
6. Confirm the run is receiving your agent’s work
Correlation is what attaches your agent’s activity to this run. XORCISE reads thexorcise.run_id resource attribute first and falls back to the prompt marker; a batch carrying neither is dropped rather than blended into another run.
Output
no trace records for run 4c62254b7f0e4a1b9c3d5e6f70819a2b and your agent emits telemetry, the traces are not correlating — work through the troubleshooting section of Send traces and logs. If your agent emits no telemetry at all, this is expected and the run is still valid: your agent submits artifacts over run-control, calls POST /complete, and XORCISE grades it. Deterministic checks are unaffected, and the judge runs with an explicit no-trace note under which criteria it cannot evidence score unknown and are renormalised out of the average rather than scored zero.
What you just did
- Declared an agent, and chose the
kindthat drives replay, telemetry, and launch — see Agents. - Created a run with a budget, and watched it wait for its agent — see Runs.
- Handed your agent the prompt that carries the run-control contract and the correlation marker.
- Confirmed the run is receiving work, and learned what a run without telemetry still scores — see How grading works.
Next steps
Send traces and logs
Wire your harness’s OpenTelemetry output into the run so the replay shows what your agent actually did.