A deterministic, perfect-information strategy card game designed for AI research
Quick Start • Features • Project Structure • Documentation • Contributing
Essence Wars is a strategic two-player card game engine with a focus on:
Full-featured Tauri desktop client with Human vs AI, Spectator mode, Replays, Deck Builder, and Tutorial.
Play Essence Wars directly in Claude Code via MCP (Model Context Protocol):
# Clone and build
git clone https://github.com/christianwissmann85/essence-wars
cd essence-wars
cargo build --release
# Launch the UI
cd crates/essence-wars-ui
pnpm install && pnpm tauri:dev
# Install Python package
pip install essence-wars[train]
# Train a PPO agent
essence-wars train ppo --timesteps 500000
# Benchmark against baselines
essence-wars benchmark --checkpoint model.pt
Add to your .mcp.json:
{
"mcpServers": {
"essence-wars": {
"command": "./target/release/essence-wars-mcp"
}
}
}
Then in Claude Code: "Start a game with the Iron Wall deck against Swarm Aggro"
essence-wars/
├── crates/
│ ├── cardgame/ # Core game engine (Rust)
│ ├── essence-wars-ui/ # Desktop app (Tauri + Svelte)
│ └── essence-wars-mcp/ # MCP server for Claude Code
├── python/ # ML agents & training (PyTorch)
├── data/
│ ├── cards/ # Card definitions (YAML)
│ ├── decks/ # Deck definitions (TOML)
│ └── weights/ # Bot weight files
└── docs/ # Documentation
| Component | Description | README |
|---|---|---|
| cardgame | High-performance game engine, bots, CLI tools | README |
| essence-wars-ui | Cross-platform desktop client | README |
| essence-wars-mcp | MCP server for Claude Code | README |
| python | ML agents, training, benchmarking | README |
| Faction | Identity | Keywords |
|---|---|---|
| Argentum Combine | Defense & durability | Guard, Shield, Fortify, Piercing |
| Symbiote Circles | Aggressive tempo | Rush, Lethal, Regenerate, Volatile |
| Obsidion Syndicate | Burst damage | Lifesteal, Stealth, Quick, Charge |
Plus Neutral cards and 12 unique Commanders with passive abilities.
| Metric | Value |
|---|---|
| Random games | ~33,000/sec |
| Greedy bot games | ~4,300/sec |
| MCTS (100 sims) | ~22ms/move |
| Engine state clone | ~245 ns |
| State tensor encode | ~158 ns |
# Build & Test
cargo build --release # Full workspace
cargo nextest run --status-level=fail # Rust tests
uv run pytest python/tests # Python tests
# Lint
cargo lint # Rust (clippy)
uv run mypy python/essence_wars # Python types
pnpm run check # Svelte/TS (in UI crate)
# Game Tools
cargo run --release --bin arena -- # Bot matches
cargo run --release --bin validate -- # Quick balance check
cargo run --release --bin benchmark -- # Thorough analysis
cargo run --release --bin swiss -- # Tournament mode
Contributions are welcome! This project uses:
Each crate has its own CLAUDE.md with AI-developer context and README.md with human contributor documentation.
# Rust
cargo build --release
# Python (using uv)
uv sync --all-groups
uv run pytest python/tests
# UI (using pnpm)
cd crates/essence-wars-ui
pnpm install
pnpm tauri:dev
If you use Essence Wars in your research, please cite:
@software{essence_wars,
title = {Essence Wars: A High-Performance Card Game Environment for RL Research},
author = {Wissmann, Christian},
year = {2025},
url = {https://github.com/christianwissmann85/essence-wars}
}
MIT License — see LICENSE for details.
Built with Rust, Svelte, and PyTorch
Designed for humans and AIs alike