A narrative game authoring framework for physical-digital hybrid treasure hunts.
Clew defines a game as a directed acyclic graph (DAG) of threads, beats, keys, characters, and artifacts — providing a single source of truth that future player-facing tools, game engines, and verification systems can consume.
Named after the ball of yarn Ariadne gave Theseus to navigate the Labyrinth — and from the word's evolution into "clue."
- Represents games as structured documents (TOML + Markdown) that are human-editable and git-friendly
- Validates game structure — DAG cycle detection, reference resolution, reachability analysis
- Entangles story and keys via the Narrative Keyspace Protocol (NKP) — a beat's narrative is inseparable from the key that unlocks it
- Enables self-verifiable completion — Merkle tree proofs let players prove they've finished a thread or the entire game, with no oracle required
Start here to understand the framework:
| Document | Description |
|---|---|
| vibes/KEYSPACE.md | The Narrative Keyspace — protocol, vocabulary, architecture, and worked examples |
Game worldbuilding material — character backstories, world rules, tone documents — lives in lore/. Lore influences game content but doesn't appear in the framework code. See lore/README.md for details.
clew/
├── pyproject.toml # Build config (hatchling)
├── README.md # This file
├── vibes/ # Framework design documents
│ └── NARRATIVE_KEYSPACE.md # The treatise — protocol, vocabulary, architecture, examples
├── lore/ # Game worldbuilding material
├── src/clew/ # Python package (implementation)
└── tests/ # Test suite
Clew is a standalone Python project within the Lailun workspace.
# Install with dev dependencies
cd projects/clew
uv pip install -e ".[dev]"
# Run checks
uv run pytest tests/
uv run mypy src/
uv run ruff check src/Requires Python ≥ 3.13.
Clew is built by Daedalus Industries. Previous productions include The Spy Who Staked Me (ETHBerlin '19), No Time to DAI (Devcon6 '21), Disappear (EthBerlin '23), and Sybil Defense (Devcon7 '24).
"Measure once, cut once." --Daedalus of Crete