Create and run games programmatically using the GameRunner:
1
Generate word list
Create a random board with 25 words:
from utils import generate_word_listfrom game import Boardwords = generate_word_list(25)board = Board(words)
2
Create AI agents
Initialize agents for all four roles:
from game import Teamfrom agents.llm import BAMLHintGiver, BAMLGuesser, BAMLModel# Blue team agentsblue_hint_giver = BAMLHintGiver(Team.BLUE, model=BAMLModel.GPT5_MINI)blue_guesser = BAMLGuesser(Team.BLUE, model=BAMLModel.GPT5_MINI)# Red team agentsred_hint_giver = BAMLHintGiver(Team.RED, model=BAMLModel.CLAUDE_SONNET_45)red_guesser = BAMLGuesser(Team.RED, model=BAMLModel.CLAUDE_SONNET_45)
result = runner.run()print(f"Outcome: {result.outcome.value}")print(f"Winner: {result.winner.value if result.winner else 'Draw'}")print(f"Total turns: {result.total_turns}")print(f"Blue words remaining: {result.final_scores[0]}")print(f"Red words remaining: {result.final_scores[1]}")
The GameResult object contains complete game data:
result.game_id # Unique game identifierresult.outcome # GameOutcome enum (BLUE_WIN, RED_WIN, DRAW)result.winner # Team enum or Noneresult.total_turns # Number of turns playedresult.final_scores # (blue_remaining, red_remaining)result.snapshot # Complete game state including turn historyresult.blue_hint_giver_model # Model used for blue spymasterresult.blue_guesser_model # Model used for blue operativeresult.red_hint_giver_model # Model used for red spymasterresult.red_guesser_model # Model used for red operativeresult.error # Error message if game failedresult.timestamp # When the game was played
for turn in result.snapshot['turn_history']: print(f"Turn {turn['turn_number']}: {turn['team']} team") print(f" Hint: '{turn['hint_word']}' for {turn['hint_count']} word(s)") for guess in turn['guesses']: status = "CORRECT" if guess['correct'] else "WRONG" print(f" {status}: {guess['word']} ({guess['color']})")