Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Chess by Mail

Play correspondence chess against an AI agent, powered by cryochamber.

The AI polls for your moves on a configurable interval. If you’re away too long, it goes to sleep — send a move and wake it when you’re ready to continue.

Why Cryochamber

A cron job can’t do this because:

  • The AI decides when to stop checking (adaptive patience, not fixed schedule)
  • Wake-up from deep sleep is event-driven (your next move), not time-driven
  • Board state and strategy notes persist across arbitrarily long gaps
  • Multiple moves can accumulate; the AI processes them all on wake

Prerequisites

  • uv (the chess engine script uses uv for dependency management)

Quick Start

cd examples/chess-by-mail
cryo init && cryo start
cryo web   # open the browser chat UI (port 3947)

Playing

# Send a move (algebraic or coordinate notation)
cryo send "e2e4"
cryo send "Nf3" --wake  # wake the AI immediately

# Or use the web UI
cryo web

How It Works

The AI uses chess_engine.py (powered by python-chess via uv) for all chess operations. After each move, the AI recommends 3 candidate moves for you with tactical explanations.

Playing via Zulip

You can play from the Zulip web UI instead of the terminal by connecting a Zulip stream. See Zulip Sync for full setup details.

cd examples/chess-by-mail
cryo-zulip init --config ~/.zuliprc --stream chess-game
cryo init && cryo start
cryo-zulip sync --interval 30

Now send your moves as messages in the Zulip stream. The sync daemon delivers them to the agent’s inbox and posts replies back to the stream.

To stop: cryo cancel && cryo-zulip unsync

Configuration

Edit plan.md to change:

  • Which color the AI plays (default: black)
  • Check interval (default: 10 minutes; set to 1 minute for a fast demo)
  • Patience threshold (default: 5 checks before sleeping)