feat(campaigns): add the campaign template

A campaign holds only play state and names its game in frontmatter;
new-campaign copies this template.
This commit is contained in:
2026-09-13 16:41:23 +08:00
parent 77ed233f8c
commit c60c9d5072
10 changed files with 144 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
---
name: {{name}}
game: {{game}}
created: {{date}}
---
# {{name}}
## Premise
One or two sentences describing the situation the PC starts in.
## Tone & themes
What kind of story this is — genre, mood, and the questions it explores.
## Boundaries
Lines and veils, and anything that should stay off the table.
## Starting situation
Where the PC is and what is already in motion when Session 0001 opens.
@@ -0,0 +1,18 @@
---
name:
game:
stats: {}
tracks: {}
conditions: []
inventory: []
---
#
## Description
## Background
## Relationships
## Notes
+5
View File
@@ -0,0 +1,5 @@
# House rules
This campaign's overrides and additions to the game's rules. The game package
is authoritative; anything written here takes precedence for this campaign
only. Leave it empty if the game runs as written.
+4
View File
@@ -0,0 +1,4 @@
# Sessions
One file per session, named `NNNN-slug.md` (zero-padded, e.g. `0001-the-ash-gate.md`).
Session logs are append-only; see `AGENTS.md` for the format.
+7
View File
@@ -0,0 +1,7 @@
# Clocks
Ticking pressures. Fill a segment whenever the fiction advances the clock.
| Clock | Segments | Filled | Notes |
|-------|----------|--------|-------|
| | | | |
+7
View File
@@ -0,0 +1,7 @@
# Threads
Open questions and unresolved goals. Status is one of: open, resolved, abandoned.
| Thread | Status | Notes |
|--------|--------|-------|
| | | |
+13
View File
@@ -0,0 +1,13 @@
# Campaign tables
Tables placed here belong to this campaign and override the game's tables when
names collide. The lookup order for `journal roll <name>` is:
1. `campaigns/<name>/tables/<name>.csv`
2. `games/<game>/tables/<name>.csv`
Use this directory for tables specific to this campaign's setting or cast. The
game's own tables do not need to be copied here.
Format: a CSV with a `min,max,text` header and an optional `tags` column. See
`docs/oracle.md`.
@@ -0,0 +1,21 @@
# Factions
One file per faction, named `kebab-case.md`.
```markdown
---
name:
goal:
disposition: friendly | neutral | hostile | unknown
---
# <name>
## Description
## Members
## Resources
## History
```
@@ -0,0 +1,23 @@
# Locations
One file per location, named `kebab-case.md`. Keep the frontmatter stable so
the agent can update it in place.
```markdown
---
name:
type:
region:
status: visited | known | rumored
---
# <name>
## Description
## Notable features
## Inhabitants
## History
```
+23
View File
@@ -0,0 +1,23 @@
# NPCs
One file per NPC, named `kebab-case.md`.
```markdown
---
name:
role:
location:
status: alive | dead | missing | unknown
disposition: friendly | neutral | hostile | unknown
---
# <name>
## Description
## Wants
## Relationships
## History
```