Session Zero builds a complete pack from a few sentences, and for most creators that's the whole story - the craft guide is all you need. This page is for the other kind of builder: the one who wants to open the files, see how the GM actually works, and hand-craft the world at the schema level. Everything below is the real spec, in the terms that matter: a pack is a briefing, and the GM is the colleague you're briefing. The better the briefing, the better it runs your world.
Understand this and every file below explains itself. The GM runs your world from records, not memory - that's the whole product. It keeps a character sheet on every character of significance. It tracks every faction's agenda on a clock that ticks whether the player shows up or not. It registers every named person and place the moment they enter play, and it will not put words in a registered character's mouth without checking their file first. When a wound worsens, it re-reads the condition's record before narrating the decline.
A pack is the world before the first player arrives: when a game is seeded, your pack.md becomes the table's law (dials, Question, era - stamped in permanently), your gm/ files become the GM's private truth, and the engine lays out the full working ledger the GM keeps from then on. So everything you hand-craft is leverage: a faction you give a real agenda writes story for years. An NPC you give a real sheet becomes a person the GM plays, not a name it mentions.
my-world/
pack.md manifest + player-safe brief + pregens + starting situation
guide.md optional, player-safe: how THIS world plays - offered at the cold open, served by --guide anytime
gm/
secrets.md the truths, seeded at three depths - the player never sees this folder
factions.md agendas, clocks, fractures - what each power does next Tuesday
npcs.md character sheets for everyone of significance
arcs.md story skeletons with multiple endings
starting-state.md day zero: counts, clocks, where everyone stands
That's the whole format. A pack is just markdown - buildable in any editor, diffable, shareable. The gm/ folder is the spoiler boundary: nothing in it ever crosses the screen. When the pack seeds, the player-safe half lands in the game as Game.md and the gm/ half becomes the GM's private working material.
The optional guide.md is your world's tutorial: how the house rules feel from the player's side, what the dials mean at this table, how to read this world's surfaces - spoiler-free by construction, never a gm/ file. If it exists, the GM offers it once at the cold open (one line, skippable) and --guide serves it anytime during play, the world-specific sibling of --help. Write one when your world's rules earn it - a boss game, a heavy house-rule set, a family table; a world that teaches by playing doesn't need one.
The manifest is the YAML block at the top of pack.md. Every field is an instruction the GM honors for the campaign's whole life - here's what it does with each:
| Field | What the GM does with it |
|---|---|
pack, version | The pack's identity: a lowercase-hyphen name and an edition number. The name becomes the game's folder key when someone plays it. Version is your edition stamp - bump it every time you publish a change, because a game snapshots its pack at seeding: the seeded game records which pack and version it was born from, later pack updates never touch a running game, and when someone reports how your world played, the version tells you which edition they played. |
title, genre, tags, blurb | The shelf searches these verbatim - in-game browsing and the store both. 3-5 tags; a blurb under 300 characters that sells it in two sentences. A pack without them is findable by nobody, and --eject-pack checks before you publish. |
premise, player_role | The one-line world and who the player is in it. The GM pitches from these and holds every scene to them. |
tone | The register the GM narrates in - gritty, mythic, warm - held for the campaign's life. Tone is a promise about how the world treats people: gritty means the dice land where they land and nobody softens it. |
question | The campaign's dramatic question. The GM authors its clock at campaign scale and steers every arc toward an answer. |
campaign | finite (the Question resolves, credits roll), open (no central fuse; the world just generates), or saga (the default: the game ends, the world doesn't have to). Shown on the shelf so players know what they're picking up. |
length | one-shot, season, or campaign. The GM sizes the Question's clock to match - one evening, a dozen nights, or the long game. |
audience: family | Binds the GM to the family rules from the first line: asks ages once and remembers them, pitches every sentence to the reader, keeps peril real but bloodless, nobody dies. Earns the store badge and filter. Defaults length: season. |
dials | The table's physics, honored forever without re-reading the pack: lethality and scarcity (how hard the world pushes back), dice (hidden keeps rolls behind the screen for dread; visible shows the math - either way rolls are server-side and auditable), menus (how often the GM offers numbered choices vs. open prose), pacing (e.g. slow-burn), recovery (gritty / grounded / pulp - how fast tended bodies mend; wounds are realistic in cause either way, the dial only sets the calendar. grounded is the default; family packs default pulp). |
death_rule | What death means here. Permadeath is the default spine; boss-scale packs name succession so the campaign outlives its founder; family packs write defeat that costs without killing. The GM runs the death scene by this rule, exactly. |
house_rules | Your world's own laws, stated as mechanics the GM enforces ("noise is a resource: loud actions roll on the attention clock"). The best ones create pressure the player can feel and plan around. |
era | A setting line naming when and where, plus three lists - exists / rare / absent - and the GM enforces all of it in both directions: players can't summon what the world lacks, and the GM won't hand it out either. For historical worlds the setting is a date and period is physics ("1979, Brickport NJ - period is LAW": a 1920s crime game and a 1979 one are different tables). For invented worlds, era works just as hard - the setting names the world-moment relative to its own history and what the physics feel like ("the Shoal, 38 years after the Sol Gate opened"; "iron-age highlands - the gods are real the way weather is real, blessings move through omens, never through fireballs"), and the three lists govern magic exactly as they govern technology. The absent list is where atmosphere lives either way. One craft note: the era block itself isn't search-indexed, so tag your era in the shelf metadata - 1920s and prohibition for the historical, iron-age, mythic, far-future for the invented - because when-a-world-happens is a thing players search. |
scale: outfit | Declares that the player runs an organization - a gang, a clan, a company, a settlement - and the GM builds on the engine's outfit layer from scene one: officers with their own agendas, units tracked with loyalty, an operations ledger in whatever period the world breathes, rivals run at the same grain. Pair it with succession in the death_rule so the campaign outlives its founder. |
limits | What never appears in this world, period - content lines gathered at creation ("what is sacred, what is off-limits"). The GM treats them as absolute: not rare, not off-screen - absent from the world entire. |
progression, aptitudes | How characters grow. Trait-based by default; a pack whose premise argues for its own axes can declare its own aptitude set (4-7, orthogonal, fixed for the campaign's life). The GM assesses growth from the record - it's never homework for the player. |
requires | Dependencies, almost always empty. Reserved for packs that build on another pack. |
The fastest way to learn the manifest is to read a shipped one: every bundled pack's pack.md is in the open-source repo, and WHITEOUT's is a complete worked example.
Not a name list - sheets. Give each person who matters their drives (what they want), their doctrine (how they operate), their bonds (who they'd bleed for), and their limits (the line they won't cross). The GM plays people from their files: when your lieutenant is offered a bribe at 2 a.m. in session thirty, the sheet you wrote is what decides. A one-line NPC gets one-line behavior; a sheeted NPC surprises the player in character. People who start close to the player (seeded companions, pre-wired contacts) deserve the fullest sheets - they'll carry the most scenes.
The engine advances every faction's agenda whenever game time passes - so each faction needs an agenda AND a clock it would pursue with the player absent. Write what they want, what they're doing about it this week, and what happens when their clock fills. Give the great ones a fracture - the heir who counts differently, the priest who read the runes right - because fractures are where alliances, betrayals, and third ways live. A faction you brief this way generates content forever; a faction that's just a logo runs out in a session.
At least one truth that recontextualizes the whole premise, seeded at three depths: a surface oddity anyone might notice, a middle clue that rewards a deliberate dig, and the truth itself, defended. Discovery is a tracked state in this engine - the GM knows exactly what the player has and hasn't learned - so buried truths stay buried until earned, across months of real time. Two or three secrets that interlock beat one: when the mystery, the prize, and the trusted guide each hide a face of the same fact, every dig pays twice.
2-4 arcs, each with hooks, escalation beats, and two or three ways it could land. The GM fills skeletons in with play; an arc that can only end one way will fight the table. And build for the day the arcs run out: name places your arcs never visit with one line of what's true there, leave load-bearing vacancies (an empty seat of power, a trade nobody runs), and make sure some factions survive the Question - they're the sequel.
Where everyone and everything stands at the cold open: the day number, starting counts at the scarcity dial's grain, the clocks already running, and the moment of pressure the first scene opens into. The engine seeds its working ledger from this - the counts you write here are the counts the world tracks from then on.
Session Zero runs this sweep before compiling; hand-crafters can run it themselves. Pass/fail, no partial credit:
gm/secrets.md holds at least one premise-recontextualizing truth at three discoverable depths - and interlocking truths outplay lone ones.length: campaign-scale for a campaign, a season of nights for a season, one evening for a one-shot.gm/npcs.md: drives, doctrine, bonds, limits. The GM plays them from that file - a thin sheet is a thin person.The shelf is the bar: before you compile, read the bundled pack nearest your premise and match its craft, not just its shape. A pack that passes plays for months; a pack that skips this plays like a demo.
The strongest way to build is with the GM, not instead of it:
--eject-pack {name} hands you a share code and a GitHub-ready zip of the real files.--lint-pack {name} checks any pack in your vault on demand - manifest fields, era block, gm/ depth - without importing or sharing anything. Import runs the same check automatically, so GitHub-loop builders get it free on every test import.--import-pack {code or GitHub link} puts your edited pack on the shelf. Start a run, feel it at the table, delete the test run from the Tavern, edit, import again.--import-pack accepts any public GitHub URL - so you can develop a pack under version control, take pull requests from co-authors, tag releases, and hand the repo link to anyone. This is how the best community packs will get built.Packs/{name}/ at the bench with you - or hand-edit the files yourself. Then bump version (every revision, no exceptions - editions are how copies of a loved world tell each other apart) and --eject-pack again for a fresh code. Running games are never touched: every game keeps the edition it seeded from, yours included; revisions reach only future seedings.Nothing below needs a new field - house_rules plus free-form gm/ files plus clocks are a systems language, and the bundled packs prove it: VOLSTEAD ships a two-dial HEAT system, a priced ladder of coercion, and precinct-level elections as plain markdown.
house_rules entry - the GM honors them as law - and give its state a home: counts in State.md conventions, pressure as clocks. If it needs tables or depth, add a gm/ file and point the house rule at it.gm/ file, a weather clock the world turn ticks, and a house rule telling the GM how the era's climate bites (travel, supply, mood). The world turn already runs wildlife and disease on this exact chassis.house_rules entry: "At seeding, roll 1d6 on the Outbreak Table in gm/starting-state.md and write the result into the world before the cold open." Real server dice are already available at seeding, the roll lands in the ledger, and the result gets buried with the other secrets - so even you, playing your own world in discovery mode, meet your opening surprised. Dice, not a menu: a scenario picker spoils and railroads; a seed roll deals.pack.md), or one pack that offers the season choice at seeding. Want no name ever reused across seasons? Write every season's cast yourself - uniqueness lives in the authoring.The engine's own reference for everything above lives in the protocol - the Seeding a New Game section of GAME.md is the source of truth, and any GM can serve it to you at the table: get_protocol(section: "Seeding a New Game"). This page describes the pack spec as of protocol v2.39; fields are added carefully and existing ones are not broken, because published packs are forever.
Same ladder as everyone: --eject-pack for the share code and zip; PR the zip's contents into the registry, or email your share link to support@adventure-mode.com and a human shelves it for you. Standout packs get pulled into the base game, with credit.