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.

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 · 6The 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-byteagents/openai.yamlthat makes the same folder visible to Codex, and one level ofreferences/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.jsonat 1,002 bytes and itsmarketplace.jsonat 980,.codex-plugin/plugin.jsonat 1,576, andkimi.plugin.jsonat 652, with seven entries of 20 to 31 bytes under.claude/skills/, one per skill name. The README gives onenpx skills addline 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.ymlat 1,099 bytes anddeploy.ymlat 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/testingand arejected/featuredirectory, 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.mdat 32,641 bytes andREADME_ZH.mdat 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-byteVERSIONfile 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.mdopens 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,testedRuntimeand 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- 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, ischore: 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.0on 2026-07-31, thirteen days after the repository appeared, thenv0.2.0on 2026-08-05,v0.3.0on 2026-08-23,v0.3.1on 2026-09-05 andv0.4.0on 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 atv0.2.0, replayable adaptation contracts atv0.3.0, a leaner skill package atv0.3.1, blind-tested skills and one run per example atv0.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 betweenpitechenandPiteChen. 55 commits carry a co-author trailer and every trailer names a Claude model. - 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 labelledimmutable,adaptable,openorconflicted, 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. - 03
Six checks, one run, and the limitations written beside them
The QA record is a small file with a strict shape.
qa/verification.jsonbinds six named checks —launch,render,input,coreLoop,outcome,restart— to a single complete run, and each one is only everNOT_RUN,FAILorPASS: unverified is not a pass, and an old PASS is overwritten by every rerun. The same file carries acompleteRunblock, 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 runsnpm 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 runspython3 test/verify.py; Jin Ping Mei runspython3 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. - 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/andqa/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 insource/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 ofdata.jsand 706 KB ofengine.js— while a 9,792-bytebuild/art/generated-art.jsonrecords 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.mjsscripts of 15 to 34 KB build the.glbterrain and vegetation libraries and a 14,804-byteasset-ledger.jsonaccounts for them. The paperwork moves the other way, 92,095 bytes of game design in Jin Ping Mei against 10,787 in Project Plateau. - 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.0cut 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 ongame-concept(6.87 against 7.13) and 16 of 27 ongame-art-direction(7.00 against 7.27). The second pass is the interesting one, because it lost where it was tried next:game-world-designscored 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. - 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 →No. 095
HarnessRouter
The self-hosted, Apache-2.0 edition of HarnessRouter: it puts sixteen existing agent CLIs — Codex, Claude Code, Hermes, DeepSeek Harness and twelve more — behind one OpenAI Responses-compatible API, with sessions, streaming, files, cancellation and structured failures, and it carries the Unified Harness Protocol it implements together with the conformance suite that measures it.
No. 106
Autoprompt Skill
An installable workflow for coding agents rather than a standalone program: it takes one goal, plus the constraints and the definition of done, and runs the execution loop — scope, plan, build, test, review, repair, verify — across eleven different agent tools. Coordination, execution and independent judgment are kept in separate layers, so the agent that writes a change is not the one that signs it off. Its headline claim, 45% fewer failures, comes from one Terminal-Bench 2.1 comparison the author ran, whose baseline verdict file is linked but not present in the repository.
No. 099
OpenMausBot
An open-source chat app where every bot in the sidebar is a real agent running through the CLI already installed on your machine, and each one can be handed a computer: a cloud Linux desktop, a Docker or Podman container on the same host, a container on a VPS you own, or the machine in front of you where the platform can show that it is safe.