On Automatic
The Campaign Vault

The campaign is a folder. The apps just visit.

Under this app sits an open format: a plain folder of markdown notes with YAML frontmatter, publicly specified, and shaped so that it is already an Obsidian vault the day you make it. Dungeons and Hexes on Automatic write into it; you edit it in Obsidian; this lens reads all of it; the folder outlives every one of them.

One folder, several hands

A vault in play looks like this. Every note carries a stable oa_id and names its own generator, so links survive renames and every claim has a source.

your-campaign/
├── campaign.md              GM-owned: calendar, party position, tone
├── regions/<region>/        written by Hexes: gazetteer, hex notes,
│   ├── region.md            travel table, encounter & weather aids
│   └── hexes/
├── settlements/ · sites/   stubs and keyed places
├── npcs/ · factions/      the cast; declared relationships
├── quests/ · sessions/    the running game (spec 0.2: reveals, dates)
├── commissions/             work orders: a stub site → a keyed dungeon
├── player/                  derived player-safe vault (this app writes it)
└── _index/                  compiled ids and relationships (derived)

Who writes what

Shaped for Obsidian

The format does not require an editor, but it was written with one in mind and the design shows. Campaigns on Automatic has no text editor in it and never will, so the assumed setup is Obsidian open on the same folder — you write there, the lens reads here, both watching the same files.

What the format borrows

What it does not assume

Short version: Campaigns reads, Obsidian writes. Two windows over one folder is the workflow this app was built for, and the write policy is what makes it safe — the lens fails closed rather than clobber an edit you made a second ago in the other window.

The rules that keep it safe

The format is deliberately boring: versioned spec, JSON schema, reference validator and the example vault every screenshot on this site uses live in the public CampaignsOnAutomatic repository. If you want to write your own tools against it, that's the contract.