A Claude Code plugin that treats your project as a roguelike run
Roguelike
Your project is the run. Your Claude config is the deck. spire scans a repo, deals a starter deck of skills and rules for its class, then grows that deck as you clear rooms.
Systems
Run brief
Project brief
BetaProblem
Claude config for a repo either stays generic forever or grows into an unreviewed pile of skills and rules with no feedback loop.
Outcome
A Claude Code plugin (spire) that scans a repo, deals a class-specific starter deck of skills and CLAUDE.md rules into that repo, then grows and prunes the deck through an opt-in reward and ascension loop.
Evidence
- Public repo github.com/hhalperin/roguelike ships Acts 1-3: deterministic class scan, .spire/deck.json save file, Stop-hook reward loop with campfire review, and an A0-A20 ascension ladder.
- Five starter classes (Defect, Silent, Ironclad, Watcher, Colorless) plus dual-class monorepo runs, with community card packs and /spire:shop already started.
- The optional curator is a soft dependency on the Claude Agent SDK. Without it, every other command still works and the reward loop stays quiet.
Key decisions
- Metaphor as map: Slay the Spire terms always resolve to real repo paths (skills, CLAUDE.md, hooks, .spire/deck.json).
- Engine holds no project knowledge: everything learned is written into the target repository.
- Human-governed growth: card offers default to skip, surface at campfire, and ascension never rises automatically.
- Contribution surface is content: new classes and card packs in markdown and YAML, not new Python engine code.
The deck is the config
Roguelike is the public repo for spire, a Claude Code plugin that treats any project as a roguelike run. Cards are agent skills under .claude/skills. Relics are CLAUDE.md rules. Powers are hooks. Character class is a repo archetype detected at init. The save file is .spire/deck.json inside the target repo. Run /spire and it scans the tree, picks a class (Defect, Silent, Ironclad, Watcher, or Colorless), and deals a starter deck suited to that class. Monorepos with strong signals across two language families become dual-class runs that still share one deck.json. From there the deck grows on its own only when a Stop hook sees real work (a new commit or enough tool activity) and a cheap-model curator finds a genuinely repeated pattern. Offers surface at /spire:campfire for accept, skip, or prune. /spire:ascend raises an A0-A20 strictness ladder that rewrites only the plugin's own .claude/settings.json entry so lint, tests, and coverage start blocking Stop when you ask. The plugin holds zero project knowledge. Everything it learns about your project is written into your repo. Act 1 (starter deck), Act 2 (reward loop), and Act 3 (ascension) are shipped. Community card packs and /spire:shop are started. Adjacent agent tooling on this site includes Diagram-First, Modular Orchestration System, Drive Mode, and Agent CI/CD.
Source repository github.com/hhalperin/roguelike
How it works
Two figures: how a /spire run deals and grows a deck inside a target repo, and how the optional reward loop decides whether to offer a card.