Character Design
How a player character is recorded, developed, and woven into the campaign โ and the line between what they told you and what you're considering
At a Glance
- What this is
- The standing spec for every character page โ player characters and the antagonist alike. Read it before writing one.
- The core rule
- A dossier is a record, not an invention. Everything on it traces to something the player said. Speculation lives on the thread page.
- Derived from
- This repo's own failures โ see below โ plus the NPC slots already established in Module Design
- Not covered
- NPCs. They have their own slots in Module Design (Wants / Needs / Has, Standing) and a different job.
Why this exists
Four player-character pages were written before this spec, and writing them surfaced three problems that were not going to fix themselves.
| The problem | How it showed up | What this spec does about it |
|---|---|---|
| Silence reads as fact | Canon is frozen once written. A dossier that says nothing about a character's origin looks, later, like a dossier asserting they have none. | Deliberately Unwritten is a required dossier slot. Gaps are named as gaps. |
| Volatile data under a freeze | Haxami's dossier carries an At the Table statblock annotated this section updates as he levelsโ a mutable block inside a page the rules call fixed. |
The sheet moves to the thread page. A dossier holds nothing that changes on its own. |
| Speculation leaking into lore | Senna Vesh, the Drowned Chapel and the drowned choristers were scaffold examples that leaked into acts.html and read as real campaign lore. A whole planning session was built on them before anyone checked. |
Thread pages are quarantined from the digest and marked speculative on their face. |
The third one is the expensive one, and it is the reason notes/back-pocket.md lives outside pages/ with a standing instruction not to reintroduce anything in it. Brainstorming is supposed to contain contradictory and discarded ideas. That is what makes it useful and what makes it dangerous to file beside settled canon.
Three tiers of truth
Every sentence written about a character sits in exactly one of these. Knowing which one is the whole discipline.
| Tier | Is | Marker & home | Changes when |
|---|---|---|---|
| Dossier | What the player told you. Settled identity โ lineage, class, temperament, the facts of their history. | ๐ Canon ยท pages/canon/<name>.html |
Jack says so. Rare. |
| Addendum | One piece of that history, grown big enough to want its own page. | ๐ Canon ยท pages/canon/<name>-<topic>.html |
Jack says so. Rare. |
| Thread | What the DM is considering. Arcs, hooks, reveals, the current sheet, ideas that may never fire. | ๐ Fluid ยท pages/threads/<name>.html |
Constantly. No ceremony. |
The boundary that matters most
The DM does not write a player character's wants. This is the sharp difference from the NPC slots in Module Design โ an NPC's Wants / Needs / Has is yours to author, because you play them. A PC's is not. The dossier records what the player handed over, in their terms, and stops. Anything you would like to be true about them is a thread-page idea until they say it, and it is marked as yours.
The dossier โ slots
Seven slots. Six are required. It should fit on one screen โ that is what makes it usable at the table, and it is why long backstory becomes an addendum rather than another section here.
| Slot | Holds | The rule |
|---|---|---|
| 1 ยท At a Glance a .glance block | Who ยท lineage ยท build ยท the one distinguishing trait ยท the open question they carry ยท status | Six lines. Every line traces to the player. |
| 2 ยท Identity | Lineage, class, pronouns, and nothing else that isn't settled | State pronouns explicitly. Do not infer them from the name. |
| 3 ยท The distinguishing thing | Whatever the player led with โ the second self, the skin, the kitchen. One section, named for the thing itself. | Name the section after the trait, not after a category. The Second Self, not Personality. |
| 4 ยท The tension | The internal conflict the player built in: the barbarian afraid to rage, the curious woman who won't act | Record it flat. Do not resolve it, and do not editorialise about how it will play. |
| 5 ยท What they're looking for | Their stated aim, however vague โ including they don't know | Vagueness is data. A purpose, in Ondais a complete answer and should be written as one. |
| 6 ยท Deliberately Unwritten a .lore block ยท required | Every gap, named. Class, sheet, history, the parts of the lineage not yet settled โ and who owes the answer. | The single most important slot. Under a freeze rule, an unnamed gap hardens into a fact. Name it and it stays a gap. |
| 7 ยท Sheet | — | Not here. AC, HP, level and kit change every few sessions and belong on the thread page. A dossier holds nothing that changes on its own. |
Addenda
When one piece of a character's history gets big enough to crowd the dossier, it becomes its own canon page rather than a longer section. The pattern is The Ophidian's Summons โ Haxami's dossier stays tight, and the contract that carried him to the isles gets the room it needs.
- Name it
<character>-<topic>.htmland link it from the dossier's At a Glance as anAddendum
line. - An addendum is still ๐ Canon and still a record. It is longer, not looser.
- If you are writing an addendum and find yourself speculating, you are writing a thread page. Stop and move it.
The thread page โ slots
One per character, plus one for the antagonist. This is the workbench: ๐ Fluid, revisable, and speculative on its face. It opens with a standing disclaimer so no reader โ human or otherwise โ mistakes an idea for a decision.
| Slot | Holds | The rule |
|---|---|---|
| 1 ยท Standing a .lore block | A one-line statement that everything below is unconfirmed DM thinking, and a link to the dossier for what is actually settled | Required, and first. This is the quarantine label. |
| 2 ยท Settled, in one line | The dossier compressed to a sentence, so the page is readable alone | Never restate canon at length. Link it. A second copy is a second thing to keep in sync, and it will lose. |
| 3 ยท The open question | The one thing about them that isn't answered yet โ the origin of the magic, the name of the race, what the ambition is for | One question. If there are three, this character has three threads and needs them separated. |
| 4 ยท Candidate answers | Options, each with what it buys, what it costs, and what it would contradict | Do not cull, and do not pick. A thread page collects; it does not decide. State a concern on a weak option rather than striking it โ the choosing happens in one later pass across all the threads (see the tapestry), and an option culled early cannot be reconsidered there. Strike through only what Jack has explicitly killed, and keep his reason. |
| 5 ยท Hooks | Concrete ways this could enter play, each tied to a scene or a session | A hook that names no session is a wish. Give it a slot or mark it parked. |
| 6 ยท What they'd trade for it | The price they'd pay to get what they want โ the thing that makes them choose at the table | Feeds the weave directly. This is the column that makes threads collide. |
| 7 ยท The sheet | Level, AC, HP, kit โ the .statblock that used to sit on the dossier | Update it when they level. That is the whole reason it lives here. |
| 8 ยท Promoted | A running list of what has moved from this page into canon or the spine, and when | The audit trail. Without it you cannot tell a settled fact from an idea you've read five times. |
The weave
pages/threads/index.html โ where the separate threads are read against each other. It is a table, not an essay.
Why not prose
A prose synthesis is written once, beautifully, and then silently goes stale the first time any thread page changes โ and nothing about reading it tells you it has. A table with one row per character survives edits, because updating one cell is obviously cheaper than rewriting an argument. More importantly, the collisions between threads are the actual output, and a table shows them by putting the columns side by side. Prose buries them.
Columns: character ยท what they want ยท what they'd trade for it ยท whose thread it touches ยท which session it could fire in. The fourth column is the one that earns the page โ two characters wanting incompatible things from the same NPC is a night of play, and it is invisible until the rows sit next to each other.
The tapestry pass
The thread pages are collection. The tapestry is the one later pass where they become a story.
It happens once every character has a thread page and the villain has one, and it is deliberately not incremental: you sit with every candidate from every character at the same time, and you choose the set that makes the best single story โ not the best answer per character. A candidate that is second-best for Haxami alone may be the one that collides properly with Marellius's ambition, and you cannot see that while writing Haxami's page.
Why nothing gets culled before then
Culling on a thread page is culling with one character in view. The option you strike because it is weak for Haxami is gone by the time you can see it was the load-bearing one for the party. Weak options cost a paragraph; a missing option costs the idea. So: state your concern, keep the option, and let the tapestry pass do the killing โ with every thread on the table at once.
Only two things get struck before the tapestry: what Jack has explicitly killed (keep his reason), and what contradicts frozen canon โ those were never candidates.
Which way material moves
Three documents describe a character. Without a stated direction of flow you get three that disagree and no way to tell which is current.
| From | To | How |
|---|---|---|
| Thread | Dossier | Promotion. The player confirms it, Jack approves the canon edit, the fact moves and the thread page logs it under Promoted. |
| Thread | the module run-sheet โ the arc | A hook that gets scheduled becomes part of the arc. Log it under Promoted. |
| Dossier | Thread | Never. A thread page links to the dossier; it does not copy it, and it must not contradict it. |
| Spine | Thread | Never. The spine is what we decided to run. Reopening it happens by editing the spine, not by re-speculating downstream. |
The antagonist follows the same shape. Serrin gets a thread page like everyone else; the module run-sheet remains the settled arc. Do not build a second villain document beside it โ two pages describing the same antagonist is the drift this rule exists to prevent.
The digest tier
bin/build-canon-digest excludes pages by path only โ a _ prefix, template in the name, or the workshop folder. Markers do not exclude anything; they are read for display and nothing more. A ๐ Fluid page under pages/ lands in llms-full.txt at full weight, beside frozen canon.
So thread pages get their own tier:
llms.txtโ the index. Threads appear, flagged speculative.llms-full.txtโ settled material only. Canon, fluid campaign pages, modules. No threads.llms-story.txtโ the thread pages, and only them. Read this deliberately when weaving, never by default.
The point of the split
You can hand an AI the world as settled
or the world plus everything we're considering
โ and it is a choice you make per task, rather than a contamination you discover three sessions later. llms-full.txt is already ~60k tokens; brainstorming would both bloat it and poison it.
Prose rules
- On a dossier, assert only what you were told. No invented sensory detail, no invented history, no motive the player didn't state. If a sentence would surprise the player, cut it.
- Vagueness is recorded as vagueness.
He doesn't know where it comes from
is a fact. Do not upgrade it to a mystery with hints. - On a thread page, speculate freely โ and mark it. Candidate answers are options, written as options.
- Never restate canon. Link it. This is the standing repo rule and it applies hardest here, where three documents describe one person.
- Check net-new material against the notes folder before it goes on a ๐ page.
notes/season-2-intro.mdcarries flavor explicitly marked do not fold into canon; it is easy to absorb by accident. - Pronouns are stated, never inferred. A name does not tell you them.
What we don't do
- No statblocks on canon pages. The sheet is volatile; the dossier is not.
- No unmarked gaps on a frozen page. If it isn't written, say it isn't written.
- No second document for the antagonist. Thread page plus spine, nothing else.
- No prose weave. It rots without telling you.
- No authoring a player's character. Suggest on the thread page; wait to be told.
- No thread material in
llms-full.txt. That is the Senna Vesh failure with better formatting.