Debug hosted episodes
Collect evaluation batches, follow changes, and inspect episode evidence and replays.
Start with your evaluation batch IDs to collect results and evidence together. Use an individual ereq_... ID
when the batch results identify an episode to investigate.
Start with evaluation batches
Use Coworld 0.1.54 or later for these commands. Keep the xreq_... IDs returned when you create evaluations.
Pass up to 50 batch IDs to one command instead of looping over batches or their child episodes.
Read all results with --view results --jsonl. --json returns one page with next_cursor; pass it to --cursor.
--jsonl streams all pages, one JSON page per line. Pages contain at most 200 episodes.
uv run coworld xp-request episodes xreq_first xreq_second --view results --jsonlUse --view progress for status-only reads. Repeat --status to filter execution states.
You can also select explicit ereq_... IDs; do not mix episode and batch IDs.
Follow changes without repeatedly fetching every episode. Watching accepts xreq_... batch IDs only:
uv run coworld xp-request watch xreq_first xreq_second \
--view results --checkpoint ./watch.json --timeout 3600 --jsonlRerun the same command to resume. Use a separate checkpoint for each selection of batches and options. Output contains snapshot pages followed by change pages; duplicates are possible.
Apply entries by episode ID and accept revisions equal to or greater than the saved revision. Apply removed entries as deletions.
Save next_cursor after processing the page. The CLI saves its checkpoint after flushing output.
The default --until execution stops when execution finishes. To wait for final evidence, add
--until evidence --include results --include player_logs. File publication can finish after execution does.
An expired cursor or changed access stops the watch. Check permissions and use --reset to create a new snapshot.
Download only the evidence you need:
uv run coworld xp-request download xreq_first xreq_second \
--include results --include player_logs --directory ./evidence --concurrency 4Repeat --include for results, replay, events, error_info, game_logs, player_logs, or player_artifact.
Repeat --agent N to narrow player evidence. Permissions still apply to every selected player.
Downloads go directly to storage with four concurrent transfers by default, configurable up to sixteen.
manifest.jsonl records relative paths, availability, versions, byte counts, and local SHA-256 hashes without signed URLs.
Versioned directories keep different objects separate. Rerunning verifies completed files and retries incomplete transfers.
Interrupted files restart from the beginning. Stored compression is preserved; inspect each receipt’s encoding before decoding.
Exit status 0 means completion, including optional files marked not_produced. Status 2 means failed execution,
unavailable selectors, or pending/unavailable downloads. Watch status 3 means timeout. Invalid commands and request failures exit 1 or 2.
Watch respects server polling guidance and Retry-After, backing off during idle periods.
Find an episode without a batch ID
Filter by policy name, version, or policy-version UUID:
uv run coworld episodes \
--policy my-player:v3 \
--jsonUse --round round_... instead of --policy when you want every episode in one round. These are alternative root
selectors, so one command cannot combine them. Add --with-replay only when you want rows with replay data.
Inspect one row directly:
uv run coworld episodes ereq_... --jsonCheck status, participant scores, error, and error_type first. Completed episodes may include a replay_url,
while running episodes may include a live_url.
Read logs and artifacts
Print the game log:
uv run coworld episode-logs ereq_... --gameDownload it instead:
uv run coworld episode-logs ereq_... \
--game \
--download-dir ./evidenceList player logs available to your memberships, then inspect one slot:
uv run coworld episode-logs ereq_... --list --mine
uv run coworld episode-logs ereq_... --agent 0 --mineIf that player uploaded an artifact, download it separately:
uv run coworld episode-logs ereq_... \
--agent 0 \
--artifact \
--mine \
--download-dir ./evidencePlayer logs and artifacts are ownership-scoped. You cannot read another owner’s private policy evidence through an ordinary credential.
For platform-hosted players, the runner captures each container’s logs. For game-hosted players, the game writes
seat logs. A game-declared player failure assigns a terminal seat fault; player_status.json alone is diagnostic.
See the failure contract.
Open a replay when available
When the episode row includes a replay_url, open it through the Coworld’s viewer.
Open the episode through its declared viewer:
uv run coworld replay-open ereq_...Static bundles open through Observatory without a game runtime. Coworlds without game.replay_viewer use the game
image on local Docker.
For either replay-viewer type, ask Observatory for a hosted viewer session:
uv run coworld replay-open ereq_... --hostedTreat the stored replay as opaque game-owned bytes. Use the viewer shipped by that Coworld.
Experience Requests and scheduled league rounds both produce ereq_... episode IDs. Create controlled hosted runs with
Upload and evaluate, then continue with Improve a policy.