Hey! I'm a solo dev making Houses of Veyra, a feudal sci-fi sandbox: Bannerlord-style world map and real-time squad battles, with CK3-style politics on top. It's Godot 4, runs in the browser (phones too), and it's free to play: https://jonnysoft.itch.io/houses-of-veyra
I direct and design it, and the code is written by AI coding agents (Claude Code now, Codex before it). The art (portraits, map, menu and battle art) is generated with ChatGPT from written briefs. I wanted to share the workflow, because it's what made a project this size possible, and one story from this week that changed how I work.
The setup
-
A rules file the agent reads every session (CLAUDE.md). It says where things live, how to run the tests, what's flaky, and the rules: every new feature starts as a short plan I approve, work happens in small stages, every change in behaviour gets a focused test, and each stage ends with a checkpoint note and a commit.
-
一个规则文件,代理在每次会话中阅读(CLAUDE.md)。它说明事物的位置、如何运行测试、哪些是不稳定的,以及规则:每个新功能首先是我批准的简短计划,工作分阶段进行,行为变更会得到专注测试,每个阶段结束时会有一条检查点记录和一次提交。
-
检查点记录为每个大功能准备,最新的放在最上面。新会话读取它们,并从上一次停止的地方继续,使用数字而非仅仅说 "已完成"。
-
一个大型无头测试套件(现在已有 225 个测试),代理并行运行。此外,刻意加入错误:在编写测试后,代理故意破坏代码以检查测试是否真的能捕获错误。起初,很多测试未能成功。
-
使用测量工具而非猜测。对于战斗,有一个工具会模拟数百场战斗并报告结果。对于性能,有一个脚本加载网页构建并在无头 Chrome 中运行,将 CPU 限制到手机速度并测量帧时间。
-
艺术来源于书面规格。每个艺术 slot 都有规格(尺寸、风格、必须展示的内容)和一个 ChatGPT 提示文件;转换脚本将结果导入 Godot。游戏在艺术到位前会绘制占位版本,因此没有任何内容会因等待艺术而停滞。
The story: the fix that passed every test and broke the game
Melee formations in my battles had a bug: lines would meet and then stand around, some soldiers not fighting for 10+ seconds. The agent built a measuring tool, traced the causes, and fixed it over four stages: soldiers left out of a fight now break ranks to find one, and give up targets they can't reach. Idle formations went from 63 battles in 100 to 3. Every test passed.
阶段五的计划是 "证明它":在前后各进行 100 场战斗到底,并与游戏自带的自动决胜结果进行比较。这里出现了问题。玩家方以前赢了 79 场中的 100 场,现在只赢了 38 场。当代理二分化更改并追踪前 15 秒内谁击倒谁时,原因很明显:旧 bug 隐藏了一个平衡问题。在停滞期间,敌方的剩余士兵闲置。修复后,他们全部加入第一次交战,赢了它, morale 损失随之在我的军队中蔓延。
因此 0.1.30 发布时将该部分通过标志关闭,仍在测试,直到 morale 系统修复。如果没有最后的 "证明它" 阶段,我会发布一款大多数战斗都输掉的游戏,且不知原因。
My takeaways:
-
"The tests pass" isn't the finish line. Ask the agent to measure the thing the player feels (here: who wins) before and after.
-
Make it verify its own tools. While checking the browser speed this week, it found the speed script had been measuring the main menu for weeks, because a menu button had moved. It took screenshots to find out.
-
Small stages with approval keep the agent from running off. When I let it go long on its own, it drifts into research nobody asked for.
-
Decisions stay mine. The agent recommends, I pick. Design calls (like "every town starts as a small lordship and villages start free", coming next update) come from me playing the game.
What's in this update: the politics was rebuilt around five pieces (Standing, Influence, Favours, the Court and the Oath), with schemes, and big decisions made by an open vote of the houses with no dice rolls. There's also a painted map, a portrait for every character, auto-resolve, and a ? help button on every screen.
Play free in your browser: https://jonnysoft.itch.io/houses-of-veyra
I'd love to hear how others structure long projects with agents. How do you keep context between sessions, and how do you catch the "passes the tests, breaks the game" kind of bug?
我很想听听其他人如何组织长期项目与 agents 的工作。你们如何在会话之间保持上下文,以及如何捕捉 "通过测试但破坏游戏" 这种 bug?
评论 (0)