Skip to content

NovelToGame

Seven skills that install into a coding agent and turn a whole novel into a game: they write a source bible in which every fact carries its chapter, kill candidate directions with named hard vetoes, lock a target runtime in a brief and build for it, and prove the build plays in one recorded run of six checks.

Screenshot of NovelToGame
Editor screenshot, 1 Oct 2026NovelToGame ↗

What it is

Seven open-source agent skills for a coding agent you already use — Claude Code, Codex or Kimi Code — that turn a novel into a game. Give it a book and, if you have one in mind, a target platform or engine: it reads the whole text, writes a source bible in which every hard rule, character goal, turning point and signature detail carries the chapter or file location it came from, compares real directions and eliminates them with named hard vetoes, designs the world and the look, builds for the runtime the brief locks instead of falling back to a web page, and proves the result plays in one recorded run of six checks. Three modes: quick drafts the brief with defaults and stops only on blocking items, director stops at the concept for you to choose, and resume reads the progress file and continues from the last stage that genuinely finished. A run leaves five design documents, a runnable build and a QA record. There is no GPU, no hosted service and no bundled engine, and three adaptations ship as playable browser games with no install.

Who built itThe organization account that owns and maintains the repository, with five sibling projects listed in its README and a six-project overview on the organization site. All 138 commits carry one GitHub account, worldwonderer, while the author field alternates between pitechen on 54 of them and PiteChen on 81, and every commit comes from a single address. The contributor list holds one name. 55 commits carry a co-author trailer and every one of them names a Claude model — Opus 4.8 with a million-token context on 23, Opus 5 with a million-token context on 16, Fable 5.1 on 12, Opus 5 on 3 and Fable 5 on 1.

How it is put together

The parts · 6

The product of this repository is a set of contracts rather than a program, and most of the tree follows from that. Seven skills run inside whatever coding agent the user already has, so there is no server, no GPU and no bundled engine; each skill is self-contained, may not read another skill’s files and is invoked by name, which is why the depth sits in one-level references/ documents instead of in a shared library. Each stage owns exactly one document and may not silently rewrite an upstream one, so concept, world design and art direction are three separate owners and a build that disagrees with them has to go back rather than redesign them. The only machine-checkable claim is a single recorded run in the locked runtime, which is why every example ships one authoritative verification command, a JSON verdict and the screenshots that run produced, and why the risk-matched whitebox that runs before art production carries no verdict at all. Language is bounded per surface rather than globally — skill bodies and references always Simplified Chinese, frontmatter and the four plugin manifests English first, and each example declaring its own artifact language — which is why the same repository holds a Chinese README, an English README of nearly the same size, and three examples in two languages.

skills/
Seven self-contained skills, 29 files and 68 KB: each one a SKILL.md (2,655 bytes for game-qa up to 5,096 for novel-game-analyze), a 255-to-283-byte agents/openai.yaml that makes the same folder visible to Codex, and one level of references/ holding one to five method documents of 1,193 to 4,175 bytes. The package was held to a 1,300-line budget after a pull request cut it from 1,900, and stood at roughly 1,120 lines at the release.
Four plugin manifests and .claude/skills/
The install surface for three command-line agents: .claude-plugin/plugin.json at 1,002 bytes and its marketplace.json at 980, .codex-plugin/plugin.json at 1,576, and kimi.plugin.json at 652, with seven entries of 20 to 31 bytes under .claude/skills/, one per skill name. The README gives one npx skills add line per CLI, or marketplace commands for Claude Code and Codex and a plugin URL for Kimi Code.
scripts/ and tests/
One 28,730-byte repository validator and one 10,024-byte unit test file, with tests/fixtures/minimal-evidence/ holding a 1,128-byte fixture and a 2,987-byte verifier. The validator is where the English-first rule for frontmatter and the plugin-manifest contract are enforced, and it fell from 968 lines to 760 after duplicated schema checks were folded into shared helpers and dead code was removed. Continuous integration is two workflows: validate.yml at 1,099 bytes and deploy.yml at 2,794.
.agents/notes/
Eleven decision notes in 43 KB, eight of them reconstructed from git history in a single pull request, filed under implemented/architecture, implemented/process, implemented/testing and a rejected/feature directory, and following the DeepSeek Harness agent-notes convention: search for the owning note first, update facts in place while the decision stands, open a new note that links to the old one when the decision reverses, and never rewrite a note into its opposite. There is deliberately no index file, because the folder is the state. The rejected note still names an example that was never built.
examples/
Three complete adaptation workspaces of 79, 83 and 160 files at 16,884, 12,668 and 14,789 KB: a static app for each of the two Chinese novels with its QA evidence, browser screenshots and hand-written Python test scripts alongside, and a Three.js and Vite application for the third with its own art-generation scripts, a 14,804-byte asset ledger and 43 test files.
docs/, the README pair and AGENTS.md
A 5,596-byte comparison with hosted story-to-game builders and a 3,477-byte research note on Blender asset feedback; README.md at 32,641 bytes and README_ZH.md at 29,098 kept structurally identical; a 13,518-byte changelog that names Keep a Changelog alongside Semantic Versioning; a 4,444-byte engineering guide that states the repository is skills-first; and a six-byte VERSION file whose bump is part of cutting a release.

Choices, and what they beat

  • Skills first, with no bundled engine over shipping a runtime alongside the workflow

    AGENTS.md opens with the position: “NovelToGame is a skills-first repository. Its product is adaptation judgment and reusable workflow knowledge, not a bundled game engine.” The same file forbids new dependencies without an explicit product need, and keeps provider comparisons out of the runtime skills because model capabilities change.

  • Three separate planning owners that implementation may not redesign over one design pass that implementation is free to adjust

    Written as a rule: game concept, experience and level design, and art direction are separate planning owners, and implementation may not silently redesign them. It is the same contract that makes each stage own exactly one document, and the same one the README states from the reader’s side — a build may not quietly redesign the concept, the world or the look.

  • Build for the runtime the brief locks over falling back to a web page when the target toolchain is missing

    Stated with its consequence: a missing toolchain may not silently become a web build, only a substitute runtime already approved in the brief may be used, and then targetRuntime, testedRuntime and the uncovered items are recorded separately while QA treats the substitute run as never proving the target platform. The README notes that the three public examples are browser games because their briefs locked that, not because it is the default.

  • One authoritative verification command per example over a second checker beside it

    A pull request on 2026-09-20 removed the Jin Ping Mei readability checker and its unit test, the Journey to the West visual-refresh browser script and Project Plateau’s alias of npm run verify, applying the rule that one check belongs at the real boundary and what grew beside it should go. The six-check contract was kept, diagnostic reruns are allowed, and the final record binds all six checks to one complete run.

  • Nothing subjective gets a PASS over letting automation settle fun and balance

    AGENTS.md: “Do not describe subjective fun or balance as deterministically verified.” The QA contract writes fun, balance, other browsers, other devices and rights as limitations instead, each with a scope and a reason, and the Jin Ping Mei record shows the shape of that honesty — six passes and a first limitation saying the fast path reached one unstable ending without exhausting the other options.

  • Never rewrite a decision note into its opposite over editing the old note until it agrees with the new decision

    The engineering guide requires a note for every non-trivial change, requires searching for the owning note first, updating facts in place while the decision stands, opening a new note that links to the old one when the decision reverses, and leaving a rejected/ note frozen at what was true when it was rejected. The rejected note for an example that was never built is still in the tree, and the folder is the index.

Read fromAGENTS.md (4,438 characters printed in full; 4,444 bytes on disk), README.md (32,641 bytes on disk, of which the report printed the first 6,000 of 32,420 characters and the remainder was fetched from the raw file on the default branch), the complete 396-file tree with sizes, the two-level directory summary, the five release titles and tags, and thirty issues and pull requests with their comment threads. The individual SKILL.md bodies, the three examples’ design documents, the source novels, CHANGELOG.md, CONTRIBUTING.md, the 28,730-byte validator and the example application code appear in the tree with their names and sizes but were not read.

Build log

6 stages
  1. 01

    Sixty-five days, five releases, and one account on every commit

    The repository was created on 2026-07-18 and its oldest commit is titled Make novel-to-game portable across agent CLIs; the newest, on 2026-09-21, is chore: prepare v0.4.0 release (#65). Between them sit 138 commits — 72 in July, 45 in August, 21 in September — and five releases, every one of them stable: v0.1.0 on 2026-07-31, thirteen days after the repository appeared, then v0.2.0 on 2026-08-05, v0.3.0 on 2026-08-23, v0.3.1 on 2026-09-05 and v0.4.0 on 2026-09-21. The five tags match the five releases exactly, with no prerelease or draft among them, and the release titles carry the roadmap: evidence-first delivery and the third example at v0.2.0, replayable adaptation contracts at v0.3.0, a leaner skill package at v0.3.1, blind-tested skills and one run per example at v0.4.0. Around that sit 817 stars, 115 forks and a single watcher on 65 MB counted by GitHub as Markdown, with one open issue — an outsider offering to add the project to a plugin list. All 138 commits carry a linked account, all of them worldwonderer, and all 138 come from one email address; the author field alternates between pitechen and PiteChen. 55 commits carry a co-author trailer and every trailer names a Claude model.

  2. 02

    What source-grounded means, line by line

    The claim is checkable because the artifact is a table. In the Journey to the West workspace, analysis/SOURCE_BIBLE.md (12,229 bytes) is a two-column list of facts and evidence, and the evidence column holds chapter numbers: the true fan quells fire with one wave, raises wind with two and brings rain with three, against Chapter 59; the Bull Demon King disguised as Bajie tricks the true fan back, against Chapter 61. The README calls this the citation layer: every hard rule, key character goal, turning point and ending, and signature anchor carries its chapter or file location, a work without chapters citing the file, and every row of the adaptation-boundary table citing its evidence. Facts are then labelled immutable, adaptable, open or conflicted, and anything the novel does not define is marked a design invention rather than smuggled in as fact. The concept stage answers from the other side, writing one line per candidate direction recording which of six named hard vetoes it triggered: a core loop that ignores the novel’s central tension; strip the proper nouns and a generic template remains; the player only spends resources to release a fixed plot. Project Plateau adds the condition under which its winner should be abandoned — falsified if position or timing cannot create a visibly better plate, or if recording never changes a later route or defense decision.

  3. 03

    Six checks, one run, and the limitations written beside them

    The QA record is a small file with a strict shape. qa/verification.json binds six named checks — launch, render, input, coreLoop, outcome, restart — to a single complete run, and each one is only ever NOT_RUN, FAIL or PASS: unverified is not a pass, and an old PASS is overwritten by every rerun. The same file carries a completeRun block, an id with a clean-context flag, the terminal state reached, the state the restart landed on and a pointer to the evidence file, and a list of limitations where each entry is a scope with a reason rather than a verdict. The Jin Ping Mei record is the candid one: all six checks pass and the first limitation says the fast path picked the first feasible main action on every screen and reached one unstable ending, with other options and endings not exhausted. Each example keeps exactly one authoritative command for this. Project Plateau runs npm run verify, which drives the real build with keyboard and mouse events and writes the input trace and the verdict in the same run; Journey to the West runs python3 test/verify.py; Jin Ping Mei runs python3 test/verify_visual.py --write-evidence. A pull request on 2026-09-20 deleted the second checker that had grown beside each of those three, on the rule that one check belongs at the real boundary.

  4. 04

    Three checked-in workspaces, three locked runtimes

    The examples are whole adaptation workspaces rather than screenshots. Each holds PRODUCT_BRIEF.md, analysis/SOURCE_BIBLE.md, concepts/CONCEPT.md, design/GAME_DESIGN.md, design/ART_DIRECTION.md, build/BUILD_BRIEF.md, build/app/ and qa/verification.json, and the novels ship with them: 2.1 MB of Journey to the West, 2.1 MB of Jin Ping Mei beside a 9,858-byte Python script that expurgates it, and 451,824 bytes of The Lost World, each with its edition, coverage and rights status in source/SOURCE.md. What differs is the runtime the brief locked. The two Chinese examples are dependency-free static apps, and the Jin Ping Mei build carries the largest files in the repository — 1.1 MB of data.js and 706 KB of engine.js — while a 9,792-byte build/art/generated-art.json records all 41 of its images as generated with the image tool built into Codex, and the original cover and five portraits are pinned by SHA-256 hashes. Project Plateau, the 3D one, is a Three.js and Vite application of 160 files where the art is generated rather than drawn: seven .mjs scripts of 15 to 34 KB build the .glb terrain and vegetation libraries and a 14,804-byte asset-ledger.json accounts for them. The paperwork moves the other way, 92,095 bytes of game design in Jin Ping Mei against 10,787 in Project Plateau.

  5. 05

    Trimming the skills, and measuring the trim blind

    The skills went through the same evidence discipline they impose on their users. Three pull requests in the last four days before v0.4.0 cut dead weight out of the package — rules each skill stated twice and hedges repeated several times inside one file — for the reason the repository wrote down when trimming its validator: a skill package pays for every line twice, once in the repository and once in the agent’s attention budget. The prose trim was measured rather than argued: a blind A/B on an invented novel fixture, three generations per arm, judged blind by three models on five axes. The first pass took the package from 1,089 lines to 1,060 and the trimmed arm won 18 of 27 pairwise comparisons on game-concept (6.87 against 7.13) and 16 of 27 on game-art-direction (7.00 against 7.27). The second pass is the interesting one, because it lost where it was tried next: game-world-design scored 6.84 as the control against 6.38 slim, six pairwise wins out of 27, a regression signal, and was reverted, while the neutral result in art direction — 7.07 against 7.24, 14 of 27 — was kept. The same window cut the line budget from 1,900 to 1,300, so the roughly 1,120 lines in the package became the ceiling; a fortnight earlier the validator had gone from 968 lines to 760 the same way, by folding duplicated schema checks into shared helpers and deleting dead code and a whole scan.

  6. 06

    The reversals the repository kept on the record

    Four failures are written down as plainly as the successes. The art direction was redone: an early pass produced dark, antique and photoreal experiments that were rejected and replaced by one luminous 2D language across all 41 runtime images. The cover then went wrong a second time in a way worth recording — the bright title image was never lost, but a dark group-portrait title screen added later stayed in force after the portrait itself was judged to have made the game worse and withdrawn, and both the README card and the QA screenshot captured that state; the overlay was removed and the screenshot re-recorded in the same run. The deploy pipeline had a fault that only appeared in production: the Vercel projects had come to define their own root directory while the workflow also changed into that directory first, so the command line resolved the path twice and failed before upload; the fix runs it from the repository root, and a regression test rejects per-job working directories. And Project Plateau’s own product brief records that the first measured run crossed the whole route in 55.2 seconds, falsifying the planned five-to-eight-minute session, so the product boundary was cut to one to three minutes rather than padding the route with waits. The one number the README refuses to give is its own cost: the progress files record neither wall-clock time nor token spend.

Adjacent records

All records →