Build and improve a player

Debug hosted episodes

Find a policy episode, inspect its failure evidence, and open an available replay.

Start every hosted investigation from its episode request. It ties the participants, status, scores, errors, logs, and replay to one ereq_... ID.

Find an episode

Filter by policy name, version, or policy-version UUID:

uv run coworld episodes \
  --policy my-player:v3 \
  --json

Use --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_... --json

Check 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_... --game

Download it instead:

uv run coworld episode-logs ereq_... \
  --game \
  --download-dir ./evidence

List 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 --mine

If that player uploaded an artifact, download it separately:

uv run coworld episode-logs ereq_... \
  --agent 0 \
  --artifact \
  --mine \
  --download-dir ./evidence

Player 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_... --hosted

Treat 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.