Running Ironsworn with Claude as Oracle

Survey of community Ironsworn tooling and a scoped design for a local `/ironsworn` Claude skill — rules-of-engagement + journal-append helpers, no dice automation.

Running Ironsworn with Claude as Oracle

TL;DR

A small local Claude skill is worth building. Scope: codify the rules-of-engagement (oracle-not-GM, one-move-at-a-time, dual-track journal) and provide journal-append helpers against the existing MDX in life. Do not automate dice — the dice moment is the point. Optionally vendor the @datasworn/ironsworn-classic JSON for faithful oracle pulls.

Context

Started running a solo Ironsworn (2018) campaign with Claude as oracle. Session journals live in life at /campaigns/nero. After session 1, the running prompt — pacing rules, journaling format, oracle stance — was getting long enough that turning it into a skill makes sense. Question: what already exists, and what’s the minimum useful build?

Findings

Community data is solved

rsek/datasworn ships official Ironsworn (1e) + Delve + Starforged content as JSON. Available as @datasworn/ironsworn-classic on npm. Dual-licensed: schemas MIT, content CC-BY-4.0. Includes moves, oracles, assets, with per-object source/license metadata. A /ironsworn skill could vendor a subset (oracles + move references) into assets/ and read locally — no network calls during play.

Precedent for RPG-as-Claude-skill exists, but it’s the wrong shape

nicmarti/skills-weaver defines 11 D&D-flavored skills (dice-roller, npc-generator, treasure-generator, monster-manual…) plus orchestrator agents (dungeon-master, rules-keeper). It’s a useful reference for file layout (markdown skills + Go CLI tools + agents for multi-step flow), but the philosophy is opposite to Ironsworn solo play: it treats Claude as the GM driving the session. For Ironsworn-as-oracle the agent layer is unwanted — the human drives narrative, the skill just reduces prompt overhead.

The user’s existing skill conventions

Local skills live in ~/claude-config/skills/<name>/SKILL.md, symlinked into ~/.claude/skills/. Frontmatter is name + description (the description doubles as the trigger heuristic). balance-quarter is the closest precedent: it reads/writes a single MDX in /projects/life, with a “grill protocol” that drives the interaction one question at a time. The same shape fits Ironsworn — read/write src/content/campaigns/<slug>.mdx, append a new # Session N block above the live snapshots, edit Sheet/Vows/Threads in place.

What the skill should not do

Auto-roll. The user is journaling dice by hand (4+3=7 vs 6,9 → Weak Hit. Mom +1 → +3.) and the moment of seeing the dice fall is half the reason for playing solo. A skill that rolls on the user’s behalf removes the only suspense the system generates. The skill should offer oracles (Action/Theme, Yes/No with odds, region tables) and format the journal — never substitute for the dice.

Recommendations

  1. Build /ironsworn skill, minimum scope (effort: small) — ~/claude-config/skills/ironsworn/SKILL.md with: (a) the rules-of-engagement block (oracle-not-GM, one-move-at-a-time, dual-track journal, terse, push back), (b) the journal-append protocol against life/src/content/campaigns/<slug>.mdx (new session block above snapshots; Sheet/Vows/Threads edited in place; ~~strikethrough~~ for resolved vows; bump updatedAt). No oracle data, no dice. Unblocks: stop pasting the running prompt every session.

  2. Vendor a datasworn subset (effort: small-medium) — drop oracles.json + moves.json for Ironsworn 1e into ~/claude-config/skills/ironsworn/assets/. Skill reads from disk on “spark me” / “roll oracle”. Faithful Action/Theme/NPC tables instead of LLM-confabulated ones. Carry the CC-BY attribution in the SKILL.md.

  3. Skip the agent layer — no dungeon-master agent, no orchestrator. Ironsworn is human-driven by design; an agent that picks moves defeats the system.

  4. Defer until session 3 — one session is too little signal. After 2–3 more sessions, the actual friction points (vow tracking? momentum bookkeeping? oracle calls?) will be visible. Build to the real pain, not the imagined one.

Open Questions

  • Where should the oracle JSON sit if vendored — assets/ inside the skill, or a separate ~/claude-config/data/datasworn/ referenced from multiple skills?
  • Does the skill need to update updatedAt in frontmatter automatically, or is a manual edit fine?
  • Should a bonds block be schema-enforced in the MDX or kept as free prose under ## Sheet?

Code References

  • life/src/content/campaigns/nero.mdx — the journal artifact the skill operates on
  • life/src/content/config.ts:60campaigns collection schema (createdAt, status, system, pc)
  • ~/.claude/skills/balance-quarter/SKILL.md — closest structural precedent
  • rsek/datasworn — official JSON source
  • nicmarti/skills-weaver — reference for skill layout (not philosophy)
  • awesome-ironsworn — community tools index