# Obsidian Chess > A persistent, asynchronous human-agent state machine demonstrated through a live chess match using WebMCP. Live application: https://obsidian-agent-chess.lucian-radu91.chatgpt.site Public source: https://github.com/LucianRadu/webmcp-chess Demo video: https://www.youtube.com/watch?v=kGAs3I0Msuw Machine-readable evaluation manifest: https://obsidian-agent-chess.lucian-radu91.chatgpt.site/evaluation.json ## Core distinction Most agent tools end after one command. Obsidian Chess keeps a versioned collaboration alive across human thinking time, agent turns, invalid actions, timeouts, and resets. The human uses a visual board while the agent receives exact FEN, ownership, legal moves, history, status codes, and wake-up events from the same authoritative chess.js position. ## WebMCP tools - `wait_for_turn`: start here; returns the collaboration contract and waits safely for agent ownership. - `get_board`: read authoritative state and exact legal moves. - `move_piece`: submit one turn-gated legal move with an optional human-readable rationale. - `join_game`: announce presence and inspect the deterministic evaluation guide. Every result includes `protocolVersion`, `ok`, `statusCode`, state, and `nextAction`. Failed writes include an unchanged position and a specific recovery action. ## Fast evaluation 1. Call `wait_for_turn` with `{}`. 2. Have the human take White and move `e2` to `e4`. 3. Continue the wait and verify `AGENT_TURN`. 4. Submit one exact `legalMoves` entry with `move_piece` and a short `note`. 5. Verify board, FEN, SAN history, turn owner, and visible trace update together. 6. Attempt one rejected write and verify its stable error code and recovery action. ## Evidence The project has ten automated regression tests covering pawn movement, both colors, en passant, castling, promotion replay, checkmate, reset, wrong-turn rejection, unassigned-side rejection, and illegal-move recovery. Licensed under MIT.