A goals file is YAML describing a playtest session's objectives. It is game-agnostic: you describe what to attempt and how to judge success in prose; the agent figures out the engine-specific commands from the engine profile.
name(string, required) — human-readable session name.summary(string) — one line describing what this run validates.goals(list, required) — ordered objectives. Each goal has:id(short string) — stable identifier the report references.do(string) — what the agent should attempt, in prose.verify(string) — how to judge success: text to look for, GMCP state to check, or behavior to observe.
notes(list of strings, optional) — setup, admin steps, or context the agent should know.pass_criteria(list of strings, optional) — an overall success checklist.
name: <session name>
summary: <one line>
goals:
- id: <short-id>
do: <what to attempt>
verify: <how to judge success>
notes:
- <context>
pass_criteria:
- <overall success condition>Verification is agent-judged from observed output, gmcp, and beacon
events — there is no formal assertion engine. Write verify so the agent can
tell from what it sees whether the goal succeeded.
Prefer structured state over text matching where possible — it is far less brittle:
gmcpevents carry game state (Char.Vitals,Room.Info, …).beaconevents ({"type":"beacon","event":"Round","data":{...}}) are emitted by theplaytestmodule each round with{round, hp, hp_max, sp, sp_max, room_id}. Averifycan reference these (e.g. "the beaconroom_idbecame X", "hpincreased between beacons", "survived N rounds withouthpreaching 0"). Beacons also give the agent a reliable per-round tick to pace on.