An open-source medieval grand strategy game powered by Claude Code session activity.
Status: pre-alpha / pre-V1. Not a playable game today. Read this section before cloning if you're hoping to play.
What works right now (verified, tested):
- A Python bridge daemon that ingests Claude Code hook events and keeps session state, scoring, plans, goals, momentum, tokens. 248 unit + integration tests pass on every push.
- A Textual TUI sandbox (
python run_tui.py) where you can drive session state through keyboard bindings and watch resources accumulate. This is a developer sandbox, not the game.- A small medieval-flavor JSON mod folder (
mod/ClaudeKingdoms/) with civilization, building, belief, and tutorial content for Unciv.What does NOT work yet (honest list):
- The actual game is not playable. The bridge↔Unciv integration leg is unimplemented. Earlier project iterations shipped a Lua "mod hook" that turned out to be architectural fiction — Unciv does not support runtime Lua scripting (see
docs/unciv-research-2026-05-11.md). That code has been removed from the repo. The replacement model is an external save-edit tool that mutates an Unciv save file while the game is closed (per ADR-001). That tool has not been written yet.- The mod has not been validated against Unciv. The JSON content in
mod/ClaudeKingdoms/uses plausible field names but has never been parsed by a running Unciv. OnlyBuildings.jsonandUnits.json(which we don't have) are officially "schema-validated" per Unciv's docs. Loading the mod will probably surface JSON-shape errors that need fixing.- No playtest has happened. PRD §M4 "fun-factor check" has not been performed. Whether the gameplay is fun is unknown.
- No GIF in the README. That's intentional — recording a real demo depends on the loop above actually working in Unciv first.
What's the right expectation? If you clone today, you'll get a clean tested Python bridge + a TUI you can poke + some Unciv mod JSON content. You will NOT get a Civ-like strategy game driven by your coding work. That's the goal, not the current state.
See
.claude/handoff.mdfor the full honest status (acceptance-criteria grid + critical-path next steps) anddocs/audit-2026-05-08.md(with its 2026-05-11 retraction header) for the audit history.
Turn your real Claude Code sessions into an empire. Every plan created, every goal completed, and every active session grows your kingdom. Idle hands stir nothing; active minds stir empires. The kingdom never decays when you step away — but it only grows when you return.
git clone https://github.com/SolshineCode/ClaudeKingdoms
cd ClaudeKingdoms
pip install -r requirements.txt
python run_tui.pyFirst launch shows the onboarding screen. After that, any save at
./saves/kingdom_save.json is auto-loaded.
| Key | Action |
|---|---|
g |
Inject TaskCompleted (goal +1, momentum +1) |
p |
Inject SubagentStart Plan (plan +1) |
r |
Inject PermissionDenied (Redirect: momentum → 0) |
a |
Inject UserPromptSubmit (mark active) |
t |
Advance turn (score → save → callbacks) |
s |
Save now |
q |
Quit (auto-saves first) |
python -m bridge.daemon # turn loop + stdin hook ingestion
python -m bridge.daemon --no-hooks # turn loop onlyWrites ./saves/kingdom_save.json (state) and ./logs/audit.jsonl
(event log). See docs/hooks-setup.md for how to actually wire
Claude Code's hook stream into the daemon's stdin.
- Install Unciv (
https://github.com/yairm210/Unciv) and try to loadmod/ClaudeKingdoms/. Iterate on JSON field names until the mod loads cleanly. - Inspect an Unciv save file on disk. Determine its format and where per-city yields live.
- Write the external save-edit tool that reads the bridge's
kingdom_save.jsonand mutates an Unciv save file with per-city deltas while the game is closed. This is the missing piece. - Playtest with the actual loop running and make calibration decisions on the scoring constants.
Until step 3 is done, the game does not actually work. The Python bridge half is real. The Unciv half is a content pack with an unimplemented save-edit tool waiting to be built against it.
| Milestone | Bridge side | Unciv side |
|---|---|---|
| Pre-M0 Spikes (1+2) | ✅ ADRs published | n/a |
| M0 Scaffolding | ✅ | n/a |
| M1 Vertical Slice | ✅ | ❌ (needs save-edit tool) |
| M2 Core Economy | ✅ | ❌ (needs save-edit tool) |
| M3 Medieval Aesthetic | ✅ (TUI palette + onboarding) | 🟡 (JSON content only, unvalidated) |
| M4 Operators + Campaign | ❌ | ❌ |
| M5 Community Launch | ❌ | ❌ |
248 tests passing on main. CI runs pytest on every push and PR.
┌──────────────────┐
│ Claude Code │
│ (your work) │
└────────┬─────────┘
│ JSONL hook events
▼
┌─────────────────────────────────────────────────────────────┐
│ Python Bridge │
│ │
│ HookListener ──→ SessionState ──→ ScoringEngine │
│ │ │ │ │
│ └──────────────────┴───────────────────┘ │
│ │ │
│ ┌───────┴────────┐ │
│ ▼ ▼ │
│ BridgeLoop SaveExchange │
│ (turn pump) (file I/O) │
└──────┬──────────┬─────────────────┬──────────────────────────┘
│ │ │
▼ ▼ ▼
Textual TUI ./saves/ [save-edit tool: NOT BUILT]
(live view) kingdom.json │
▼
[Unciv save file]
▼
Unciv game
The dotted-line section (save-edit tool through Unciv) is the unimplemented critical path.
See:
docs/prd/ClaudeKingdomsPRD.md— full vision and milestone definitionsdocs/adr/— architectural decision recordsdocs/bridge-tui-schema.md— versioned bridge save-exchange JSON schemadocs/unciv-research-2026-05-11.md— Unciv mod-system researchdocs/audit-2026-05-08.md— CTO audit (with 2026-05-11 retraction).claude/handoff.md— current honest status
bridge/ Python bridge daemon (state, scoring, hooks, save, audit log)
tests/ 248 unit + integration tests
tui/ Textual TUI (panels, bindings, onboarding, medieval voice)
tests/ TUI tests (incl. Pilot)
mod/ClaudeKingdoms/ Unciv mod content (JSON only; unvalidated)
docs/ PRD, ADRs, schema, hooks-setup, audit, research
.github/workflows/ CI (pytest on push/PR)
run_tui.py Cross-platform TUI launcher
pytest -q # full suite (~5s)
pytest bridge/tests/test_e2e_vertical_slice.py -v # bridge-side E2E
bash scripts/hello.sh # repo smoke testSee CONTRIBUTING.md. TL;DR: pick one of four paths (Bridge / TUI /
Mod content / Docs), write tests first when feasible, open a PR
against main, CI must be green before merge. Five vetted
good first issue candidate bodies live in
docs/good-first-issues.md.
MIT. By contributing, you agree your contribution is MIT-licensed.
This project is an experiment in "gamifying" real cognitive work through a strategy-game wrapper. It came out of a couple of intense multi-day collaborative sessions between a human (Caleb) and several AI agents (Hermes Agent + Claude Code). It is published in its honest current state — pre-alpha, partly fictional in places that have now been retracted, but with a clean tested core and a clear path forward — rather than a polished-looking-but-broken state. If that openness is useful to you, welcome. If you want a finished game, this is not yet that.