
这是什么
给已经在用的编码 agent 的七个开源技能——Claude Code、Codex 或 Kimi Code——把一本小说变成一款游戏。给它一本书,如果再给一个目标平台或引擎:它会读完全文,写一份来源圣经,里面每一条硬规则、每个人物目标、每个转折与标志性细节都带着它出自哪一回或哪个文件位置;它会比较真实的方向,再用点名的硬否决把不合格的删掉;它设计世界观与画面;它照着简报锁定的运行时构建,而不是退回网页;最后它用一次完整运行、六项检查证明成品能玩。三个模式:quick 用默认值起草简报,只在真正卡住方向的事项上停下;director 停在概念阶段等你挑方向;resume 读进度文件,从最后一个真正完成的阶段接着做。一次运行留下五份设计文档、可运行的构建和一份 QA 记录。这里没有 GPU、没有托管服务、也没有捆绑引擎,另有三款改编以浏览器游戏的形式直接可玩,不用安装。
谁做的拥有并维护这个仓库的组织账号,README 里另列了同组织的五个兄弟项目,组织站上还有一份六个项目的总览。138 次提交全部挂在一个 GitHub 账号 worldwonderer 下,而作者字段在 pitechen 的 54 次与 PiteChen 的 81 次之间来回换,所有提交来自同一个地址;贡献者名单只有一个名字。55 次提交带共同作者尾注,每一条都指名某个 Claude 模型——带百万上下文的 Opus 4.8 二十三条、带百万上下文的 Opus 5 十六条、Fable 5.1 十二条、Opus 5 三条、Fable 5 一条。
它是怎么搭起来的
组成 · 6这个仓库的产物是一组契约,而不是一个程序,树里的大部分东西都是这个选择的后果。七个技能跑在用户本来就有的编码 agent 里,所以没有服务器、不需要 GPU、也不捆绑引擎;每个技能自成一体,不许读另一个技能的文件,只能按名字调用,这正是深度放在一层 references/ 文档里、而不是放在共享库里的原因。每个阶段恰好拥有一份文档,不许悄悄改上游:于是概念、世界设计与美术方向是三个各自独立的负责人,构建如果和它们不一致,只能退回去,不能顺手重新设计。唯一可被机器判定的说法,是在锁定运行时里的一次完整运行,所以每个示例只带一条权威校验命令、一份 JSON 判定和那次运行拍出来的截图;而美术生产之前那道按风险匹配的白盒只验一个最大风险,不产生任何判定。语言按 surface 划界而不是全仓统一——技能正文与参考文档始终用简体中文,frontmatter 与四个插件清单英文在前,每个示例自己声明产物语言——这也是同一个仓库里会有一份中文 README、一份体量几乎相同的英文 README,以及两个语言的三个示例的原因。
- skills/
- 七个自成一体的技能,29 个文件、68 KB:每个都有一份
SKILL.md(从 game-qa 的 2,655 字节到 novel-game-analyze 的 5,096 字节)、一份 255 到 283 字节的agents/openai.yaml(正是它让同一个目录在 Codex 里也看得见),以及一层references/,里面放一到五份 1,193 到 4,175 字节的方法文档。这套包被压在 1,300 行的预算之下——此前一条 pull request 把预算从 1,900 砍下来——发版时大约 1,120 行。 - 四个插件清单与 .claude/skills/
- 给三种命令行 agent 的安装面:
.claude-plugin/plugin.json1,002 字节与其marketplace.json980 字节、.codex-plugin/plugin.json1,576 字节、kimi.plugin.json652 字节,另有.claude/skills/下七个 20 到 31 字节的条目,每个技能名一个。README 给每种 CLI 一行npx skills add,或者给 Claude Code 与 Codex 市场命令、给 Kimi Code 一条插件地址。 - scripts/ 与 tests/
- 一份 28,730 字节的仓库校验器和一份 10,024 字节的单元测试文件,
tests/fixtures/minimal-evidence/里还放着一份 1,128 字节的夹具与一份 2,987 字节的校验脚本。frontmatter 的英文优先规则与插件清单契约都在校验器里强制;把重复的 schema 检查折进共用辅助函数、并删掉死代码之后,它从 968 行降到 760 行。持续集成是两个工作流:validate.yml1,099 字节,deploy.yml2,794 字节。 - .agents/notes/
- 43 KB 的十一篇决策笔记,其中八篇是在一条 pull request 里从 git 历史反推出来的,按
implemented/architecture、implemented/process、implemented/testing与一个rejected/feature目录归档,沿用 DeepSeek Harness 的 agent-notes 约定:先搜同主题的旧笔记;决定仍然成立就原地更新事实;决定反转就新开一篇并链接旧的;永远不许把一篇笔记改写成它的反面。这里刻意没有索引文件,因为目录位置就是状态。那篇被否掉的笔记至今还记着一个从未被造出来的示例。 - examples/
- 三个完整的改编工作站,分别是 79、83 与 160 个文件,16,884、12,668 与 14,789 KB:两个中文小说各一个静态应用,旁边躺着它的 QA 证据、浏览器截图与手写的 Python 测试脚本;第三个是 Three.js 加 Vite 的工程,自带美术生成脚本、一份 14,804 字节的资产台账和 43 个测试文件。
- docs/、双语 README 与 AGENTS.md
- 一份 5,596 字节、与托管式小说改编工具做对比的文档,一份 3,477 字节、关于 Blender 资产反馈的研究笔记;32,641 字节的
README.md与 29,098 字节的README_ZH.md保持结构一致;13,518 字节的 changelog 同时点名 Keep a Changelog 与语义化版本;4,444 字节的工程指南开宗明义说这是 skills-first 的仓库;还有一个六字节的VERSION文件,改它本身就是切一次版本的一部分。
取舍,以及它替代了什么
技能优先,不捆绑引擎 替代 在流程之外再发布一个运行时
AGENTS.md一开头就摆明立场:「NovelToGame is a skills-first repository. Its product is adaptation judgment and reusable workflow knowledge, not a bundled game engine.」同一份文件禁止在没有明确产品需求时新增依赖,也要求把供应商对比挡在运行时技能之外,因为模型能力会变。三个各自独立的规划负责人,实现不许重新设计它们 替代 一次设计、实现可以顺手调整
这条写成了规则:游戏概念、体验与关卡设计、美术方向是三个独立的规划负责人,实现不许悄悄重新设计它们。它和「每个阶段恰好拥有一份文档」是同一条契约,也与 README 从读者一侧给出的说法一致——构建不许悄悄重新设计概念、世界或画面。
照着简报锁定的运行时构建 替代 目标工具链缺失时就退回网页
连后果一起写明:工具链缺失不许悄悄变成网页构建,只能用已经在简报里获批的替代运行时,而且要把
targetRuntime、testedRuntime与未覆盖项分开记录,QA 一律把替代运行视为从未证明目标平台。README 补了一句:三个公开示例都是浏览器游戏,是因为它们的简报锁定了这个,而不是因为这是默认值。每个示例只留一条权威校验命令 替代 在它旁边再长一个检查器
2026-09-20 的一条 pull request 删掉了金瓶梅的可读性检查器及其单元测试、西游记的可视刷新浏览器脚本,以及 Project Plateau 里
npm run verify的别名,理由是检查只该待在真正的边界上,在旁边长出来的就该删。六项检查的契约保留,允许诊断性重跑,而最终记录把六项检查绑在同一次完整运行上。主观的东西一律不给 PASS 替代 让自动化去裁定好玩与平衡
AGENTS.md写着:「Do not describe subjective fun or balance as deterministically verified.」QA 契约改为把好玩、平衡、其它浏览器、其它设备与版权写成局限,每一条都带范围与原因;金瓶梅那份记录就是这种诚实的形状——六项全过,第一条局限却写着快速路径只到达一个失稳结局、并没有穷举其它选项。绝不把一篇决策笔记改写成它的反面 替代 把旧笔记改到来迎合新的决定
工程指南要求每个非平凡改动都留一篇笔记,要求先搜同主题的旧笔记,决定仍然成立就原地更新事实,决定反转就新开一篇并链接旧的,而被否掉的笔记要冻结在被否时的样子。那篇写着一个从未被造出来的示例的笔记至今留在树里,目录位置就是索引。
依据AGENTS.md(4,438 字符全文打印;磁盘上 4,444 字节)、README.md(磁盘上 32,641 字节,其中报告打印了 32,420 字符里的前 6,000 字符,其余取自默认分支上的原始文件)、完整的 396 个文件树及其体积、两级的目录汇总、五个 release 的标题与 tag,以及三十条 issue 与 pull request 及其评论串。各技能的 SKILL.md 正文、三个示例的设计文档、原著文本、CHANGELOG.md、CONTRIBUTING.md、28,730 字节的校验器以及示例应用代码都只在树里留下了名字与体积,内容未读。
制作过程
6 个阶段- 01
六十五天、五个版本,每个提交都出自同一个账号
仓库建于 2026-07-18,最早的一次提交题为
Make novel-to-game portable across agent CLIs;最新一次在 2026-09-21,是chore: prepare v0.4.0 release (#65)。中间是 138 次提交——7 月 72 次、8 月 45 次、9 月 21 次——以及五个 release,每一个都是稳定版:v0.1.0在 2026-07-31,距仓库出现十三天;随后是 2026-08-05 的v0.2.0、2026-08-23 的v0.3.0、2026-09-05 的v0.3.1与 2026-09-21 的v0.4.0。五个 tag 与五个 release 严丝合缝,其中没有预发布或草稿;版本标题本身就是路线图——v0.2.0是证据优先的交付与第三个示例,v0.3.0是可重放的改编契约,v0.3.1是更精简的技能包,v0.4.0是经盲测的技能与每个示例一次运行。周围是 817 个星、115 个 fork、1 个 watcher,65 MB 的仓库被 GitHub 归类为 Markdown,另有 1 个开着的 issue——一个外人提议把这个项目加进一份插件清单。138 次提交全部关联到账号,全部是 worldwonderer,也全部来自同一个邮箱地址;作者字段在pitechen与PiteChen之间来回换。55 次提交带共同作者尾注,每一条都指名某个 Claude 模型。 - 02
「有出处」落到纸上是什么样子
这个说法可核对,因为产物是一张表。西游记那份工作站里,
analysis/SOURCE_BIBLE.md(12,229 字节)是两列的「事实—证据」清单,证据那一列填的是回数:真扇子一扇熄火、两扇生风、三扇下雨,对的是第五十九回;牛魔王变作八戒骗回真扇,对的是第六十一回。README 把这层叫引用层级:每一条硬规则、每个关键人物目标、每个转折与结局、每个标志性锚点,都要带上它出自哪一回或哪个文件位置,没有回目的作品就记文件;改编边界表每一行也都要引证据。事实随后被贴上immutable、adaptable、open、conflicted四种标签之一,原著没有定义的东西一律标成设计发明,不许当成事实夹带进来。概念阶段从另一头守同一条规矩:每个候选方向留一行,写明它触发了六条点名硬否决里的哪一条——核心循环无视原著的中心张力;把专有名词换掉就只剩一个通用模板;玩家只是花资源去解锁一段固定剧情。Project Plateau 还多写了一句:它选中的方向在什么条件下应被判为伪——如果位置与时机造不出一张明显更好的照片,或者拍摄记录从不改变之后任何一次路线或防御决定。 - 03
六项检查、一次运行,以及写在旁边的局限
QA 记录是一份形状很死的小文件。
qa/verification.json把六项点名检查——launch、render、input、coreLoop、outcome、restart——绑在唯一一次完整运行上,每一项只会是NOT_RUN、FAIL或PASS:没验证不算通过,旧的 PASS 会被每一次重跑覆盖。同一个文件里还有一个completeRun块——一个 id、一个干净上下文标志、跑到的终局状态、重启后落回的状态,以及指向证据文件的指针——外加一串局限,每一条是一个范围加一个原因,而不是一句结论。金瓶梅那份最坦白:六项全过,而第一条局限写着「快速路径在每屏选择第一项可行主动作,只到达一个失稳结局;没有穷举其他选项或结局」。每个示例都只有一条权威命令来做这件事:Project Plateau 是npm run verify,它用键盘与鼠标事件驱动真实构建,并在同一次运行里写下输入轨迹与判定;西游记是python3 test/verify.py;金瓶梅是python3 test/verify_visual.py --write-evidence。2026-09-20 的一条 pull request 把这三条命令旁边各自长出来的第二个检查器删掉了,理由是检查只该待在真正的边界上。 - 04
三个入库的改编工作站,三种被锁定的运行时
这些示例不是截图,而是整份改编工作站入库。每一份都带
PRODUCT_BRIEF.md、analysis/SOURCE_BIBLE.md、concepts/CONCEPT.md、design/GAME_DESIGN.md、design/ART_DIRECTION.md、build/BUILD_BRIEF.md、build/app/与qa/verification.json,原著文本也一起进仓库:西游记 2.1 MB、金瓶梅 2.1 MB 外加一份 9,858 字节的 Python 脚本负责删节、The Lost World 451,824 字节,各自在source/SOURCE.md里记下版本、覆盖范围与权利状态。差别在于简报锁定的运行时。两个中文示例都是无依赖的静态应用;金瓶梅的构建占着仓库里最大的几个文件——1.1 MB 的data.js与 706 KB 的engine.js——并在 9,792 字节的build/art/generated-art.json里把全部 41 张图记成用 Codex 自带图像工具生成,同时用 SHA-256 把原版封面与五张人物图钉死。3D 那个 Project Plateau 是 Three.js 加 Vite 的 160 个文件的工程,美术是生成而不是手绘:七个 15 到 34 KB 的.mjs脚本生成.glb的地形与植被库,再由一份 14,804 字节的asset-ledger.json记账。文档的重量则朝反方向走——金瓶梅的玩法设计文档 92,095 字节,Project Plateau 只有 10,787 字节。 - 05
给技能瘦身,并且盲测这次瘦身
技能自己也要过一遍它们强加给用户的那套证据纪律。
v0.4.0之前最后四天里的三条 pull request 把包里的死重砍掉——每个技能重复讲两遍的规则、同一个文件里说好几遍的免责话——理由是这个仓库在削自己的校验器时就已经写下过:技能包为每一行付两次钱,一次在仓库里,一次在 agent 的注意力预算里。文字的瘦身是量出来的,不是吵出来的:在一本虚构小说夹具上做盲测 A/B,每臂三次生成,三个模型在五个维度上盲判。第一轮把包从 1,089 行压到 1,060 行,瘦身臂在game-concept上赢了 27 次两两比较里的 18 次(6.87 对 7.13),在game-art-direction上赢了 16 次(7.00 对 7.27)。第二轮更值得记,因为它在下一次尝试里输了:game-world-design对照组 6.84,瘦身组 6.38,27 次里只赢 6 次,被记为回归信号并回退;而美术方向上被判为中性的结果(7.07 对 7.24,27 次里赢 14 次)保留了下来。同一个窗口里行数预算从 1,900 砍到 1,300,于是当时约 1,120 行的包就顶在天花板下面;两周前校验器已经用同样的办法从 968 行降到 760 行——把重复的 schema 检查折进共用辅助函数,再把死代码和一整轮全仓扫描删掉。 - 06
作者留在记录里的几次反转
有四处失败和成功一样被老实写下来。美术方向重来过:早期那批暗色、仿古、写实的实验被否掉,换成一种明亮的 2D 语言,铺到全部 41 张运行时图上。封面随后又错了第二次,而且错得值得记——那张明亮的题图从来没丢,是后来加的一层暗色群像标题页在群像被判「改丑了」并撤回之后仍然生效,而 README 卡片与 QA 截图截的正是这个状态;覆盖被移除,并在同一次运行里重录了截图。部署流水线有一个只在线上才现形的毛病:Vercel 项目已经各自定义了自己的根目录,而工作流又先切进了那个目录,于是命令行把路径算了两遍、在上传之前就失败了;修法是改从仓库根目录调用,并加了一条回归测试,禁止按 job 设置工作目录。Project Plateau 的产品简报则记下:第一次实测跑完整条路线只用了 55.2 秒,推翻了原定 5 到 8 分钟的单局,于是产品边界被切成 1 到 3 分钟,而不是往路线里塞等待。README 唯一拒绝给的数字是它自己的成本:进度文件既没有记录墙上时间,也没有记录 token 消耗。
相关档案
全部档案 →第 095 号
HarnessRouter
HarnessRouter 的自托管、Apache-2.0 版本:把十六种现成的 agent CLI——Codex、Claude Code、Hermes、DeepSeek Harness 以及另外十二种——放到同一个兼容 OpenAI Responses 的 API 后面,会话、流式进度、文件、取消与结构化失败都在里面;它实现的那套 Unified Harness Protocol,以及用来度量它的 conformance 套件,也一并放在这个仓库里。
第 106 号
Autoprompt Skill
一套装进编码 agent 里的工作流,而不是一个独立程序:给它一个目标,连同约束与「算完成」的定义,它自己跑完整个执行环——界定范围、规划、构建、测试、评审、修复、验证——横跨十一种不同的 agent 工具。协作、执行与独立判断被刻意分在不同层,于是写改动的那个 agent 不是给它签字的那一个。它最大的主张「失败率少 45%」来自作者自己跑的一次 Terminal-Bench 2.1 对比;那次对比的基线判定文件只有链接,仓库里并没有。
第 099 号
OpenMausBot
一个开源聊天应用:侧栏里每个 bot 都是通过你机器上已有的 CLI 跑起来的真 agent,而且每一个都能分到一台电脑。这台电脑可以是云端 Linux 桌面、同一台主机上的 Docker 或 Podman 容器、你自己 VPS 上的容器,或者在平台能证明安全的前提下,就是你面前这台机器。