{"data":{"kind":"file","path":"README.md","version_id":"mf70kw0gnx0jf68ze9uhuqnx","entry":{"name":"README.md","path":"README.md","is_directory":false,"size":2058,"modified_at":"2026-03-25T20:10:31.139000","content_hash":"bbb732af1a2ca8402e917de04550b523b7f10d88e3f0ce25bacea88627f520c5"},"entries":[],"content":"# codenames\n\nMulti-agent `verifiers` environment for cooperative Codenames.\n\nTwo agents — a **cluegiver** and a **guesser** — cooperate to find RED words on a board. The cluegiver sees the full color key and gives a one-word clue linking target RED words. The guesser sees only the word list (no colors) and guesses based on the clue. Both agents are trained together.\n\nBoard size and color ratios are sampled randomly per game, controlled by the sampling config.\n\n## Quickstart\n\n```bash\nprime env install codenames\nprime eval run codenames -m openai/gpt-4.1-mini -n 20 -r 2\n```\n\n## Environment Args\n\n| Arg | Type | Default | Description |\n| --- | ---- | ------- | ----------- |\n| `train_size` | `int` | `800` | Number of generated train boards |\n| `eval_size` | `int` | `200` | Number of generated eval boards |\n| `seed` | `int` | `0` | Base seed for deterministic board generation |\n| `max_turns` | `int` | `2` | Max turns per rollout (1 cluegiver + 1 guesser) |\n| `min_board_size` | `int` | `4` | Minimum number of words on the board |\n| `max_board_size` | `int` | `16` | Maximum number of words on the board |\n| `min_red_ratio` | `float` | `0.3` | Minimum fraction of board words that are RED |\n| `max_red_ratio` | `float` | `0.6` | Maximum fraction of board words that are RED |\n\n## Reward\n\n| Component | Weight | Description |\n| --------- | ------ | ----------- |\n| `game_reward` | 1.0 | Assassin hit: **-1.0**. Otherwise: `+2/num_red` per red found, `-1/num_red` for blue hit |\n| `shot_calling_reward` | 0.5 | `shots_hit / num_red` — bonus for the guesser finding the cluegiver's declared targets |\n| `cluegiver_format_reward` | 0.1 | 1.0 if cluegiver output contains a valid `<clue>` block |\n| `guesser_format_reward` | 0.1 | 1.0 if guesser output contains a valid `<guesses>` block |\n\n## Metrics\n\n- `assassin_metric`: whether the assassin was hit\n- `red_found_metric`: number of red words found\n- `shots_hit_metric`: number of declared target words correctly guessed\n- `clue_number_metric`: how many words the cluegiver targeted with the clue\n","encoding":"utf-8","truncated":false,"total_bytes":2058},"status":null}