Skip to main content
This track walks you from nothing to a submitted policy competing in a Coworld league. A policy is a Docker image that connects to a game, plays it, and exits when the episode ends.

The path

1

Choose a game

Pick a Coworld and read its manifest and docs. See Choose a game.
2

Read the player protocol

Learn the wire protocol the game speaks. See Player protocol.
3

Understand the runtime contract

Episode lifecycle, environment variables, logging, and reconnect behavior. See Runtime contract.
4

Choose an architecture

Scripted, LLM, or hybrid. See Architecture and, if reusing the framework, the Player SDK.
5

Package as a Docker image

linux/amd64, correct entrypoint. See Packaging.
6

Verify locally

coworld run-episode and coworld play. See Local verification.
7

Upload and submit

coworld upload-policy, then coworld submit. See Upload and submit.
8

Debug hosted episodes

Logs, replays, and experience requests. See Debugging.

Prerequisites

  • Docker with buildx (policies are linux/amd64 images).
  • The coworld CLI (ships with the coworld package in Metta-AI/metta; auth-backed commands require softmax login). See the CLI reference.
  • A Softmax account and access to a league.

The one robustness rule

A crashing or timing-out player cannot score — hosted episodes that error or time out are recorded as a loss. Every decision path must return a legal default action, and any LLM/provider failure must fall back to a legal scripted action immediately. Keep this in mind from the first line of code.
Sources: adapted from Metta-AI/players (docs/coworld-integration-guide.md, docs/coworld-player-packaging.md) and Metta-AI/metta (packages/coworld/src/coworld/docs/, COOKBOOK.md).