Record a session¶
Nerthus.Core (until cutover). This page describes the frozen system that runs today and is deleted at cutover. Replaced by: not yet written.
A session is the record of one event in the game's history. This article takes you from choosing the file through to delivering the session and watching it reach everyone it names. Work through the steps in order - each one adds to the same example.
Narratorless sessions
This is the authoritative path — a Narrator writing a session straight into the lore. A game someone ran without a Narrator can instead be filed through Discord for review; see Submit a session report. A merged report becomes a draft a Narrator then enacts with the same steps below.
1. Choose the file¶
Sessions live in Markdown files under four directories: Wątki/, Organizacje/,
Postaci/, and Świat gry/. A session recorded anywhere else is invisible. It is
never read, never distributed, and never counted. That includes the Lokacje/ folder -
the copies you see there are made by the tool, from sessions recorded in the four
directories, and writing a session there directly records nothing (see
the session registry below). Add the
session to the file where its story belongs, for example Wątki/Intrygi w Thuzal.md.
2. Write the header¶
The header is a third-level Markdown heading (###) carrying three pieces of
information separated by commas:
- the date, in
YYYY-MM-DDformat, before the first comma, - the title, between the first comma and the last comma - it may itself contain commas,
- the Narrator, after the last comma.
A session spanning two days adds a suffix to the date: 2022-12-21/22 inside one
month, 2023-01-31/02-01 across two months.
The Narrator field only records who conducted the session. Being named there grants nothing and receives nothing. It may name more than one person, when two of you ran the evening together. Join them with a plus sign, with a space on each side:
You can also write each name on its own line in the metadata block, which is the clearer form and the one to use when the header is already recorded:
Repeat the line once per person. The names in the block replace whatever the header says, and the header itself stays untouched.
Warning
The header is the repository-wide unique identifier of the session. Once the session is recorded, never change the header - not even to fix a typo. Editing it makes the old session disappear and an unrelated new one take its place. Fix mistakes with the overrides in step 5 instead.
3. Write the body¶
The body is free-form Polish prose between the header and the metadata block. There is no single convention for writing it, though it should agree with the metadata.
### 2026-07-01, Eraster rozmawia z Tussalem, Anward
Eraster spotkał się z Tussalem w jego willi w Thuzal. Wypili herbatę i zjedli obiad.
Przy okazji, obgadywali plotki z Ithan.
The tool scans the body for names it knows, and it reads declined Polish forms -
Tussalem in the prose is the character Lord Tussal. A name that also appears in
the metadata block counts as present at the session. A name that appears only in the
prose counts as mentioned - talked about, but not there. Here Ithan is mentioned.
4. Add the metadata block¶
The metadata block is the part the tool processes. At minimum it must contain
Lokacje, Logi, and PU:
### 2026-07-01, Eraster rozmawia z Tussalem, Anward
Eraster spotkał się z Tussalem w jego willi w Thuzal. Wypili herbatę i zjedli obiad.
- Lokacje:
- Thuzal/Rezydencja Tussal
- Logi:
- https://nerthus.pl/logizsesjierasteraztussalem
- PU:
- Eraster: 0.2
- Lord Tussal: 0.2
From this block the tool recognizes the characters Eraster and Lord Tussal, and
the location Rezydencja Tussal.
Lokacje- where the session happened, asParent/Interiorpaths, one per bullet.Logi- links to the game logs, one URL per bullet. See Link session logs.PU- the points each character earned, asname: value. See Grant PU.
The three optional keys¶
You may add Intel, Uczestnicy, and Transfer. Those three are the whole list of
optional keys. The only keys you ever write beyond them are the three required ones
above and the overrides in step 5, which exist only to fix a broken header.
### 2026-07-01, Eraster rozmawia z Tussalem, Anward
Eraster spotkał się z Tussalem w jego willi w Thuzal. Wypili herbatę i zjedli obiad.
Przy okazji, obgadywali plotki z Ithan.
Po kryjomu odwiedził ich Opat Perrin z Gildii Teologów, jednakże był incognito i nie zabawił ponad krótką chwilę.
Pod koniec spotkania, Eraster wręczył Tussalowi łapówkę w postaci dziesięciu koron.
- Lokacje:
- Thuzal/Rezydencja Tussal
- Logi:
- https://nerthus.pl/logizsesjierasteraztussalem
- PU:
- Eraster: 0.2
- Lord Tussal: 0.2
- Intel:
- Thuzal: Mieszkańcy Thuzal widzieli, że Eraster odwiedził Lorda Tussal po południu w jego rezydencji.
- Uczestnicy:
- Opat Perrin
- Transfer:
- 10 Korony Elanckie, Eraster -> Lord Tussal
Intel- information the world learns, written astarget: message. It goes out over Discord when you close the session, and the target decides how far it spreads: a character reaches its own player, aGrupareaches every player whose character belongs to it, and aLokacjareaches every player whose character stands there. An NPC reaches nobody - no player is behind it, so the fact simply stays in the session for whoever plays that NPC next. Here the target is a place, so any player whose character is inThuzalgets2026-07-01: Mieszkańcy Thuzal widzieli, że Eraster odwiedził Lorda Tussal po południu w jego rezydencji.on their personal channel. The date is prepended for you, so a player reads when their character learned it. A player is reached only through the@discordchannel on their person block; one without a channel is simply not notified - see People and roles.Uczestnicy- records a participant without granting any points. It behaves exactly likePU: 0.0. Use it for an NPC, or for a Narrator taking part in a session they run themselves.Opat Perrincounts as present here, whileIthanandGildia Teologówstay merely mentioned.Transfer- what changed hands, asamount denomination, source -> target. See Transfer coin.
5. Fix a header mistake with overrides¶
When the header carries an error - a malformed date, a misspelled title, the wrong
Narrator - do not edit the header. Override each broken property inside the metadata
block with Data, Tytuł, or Narrator:
### 2062-70-01, Eraster rowzmaria z Thuzalem, Awnrd
Eraster spotkał się z Tussalem w jego willi w Thuzal. Wypili herbatę i zjedli obiad.
- Lokacje:
- Thuzal/Rezydencja Tussal
- Logi:
- https://nerthus.pl/logizsesjierasteraztussalem
- PU:
- Eraster: 0.2
- Lord Tussal: 0.2
- Data: 2026-07-01
- Tytuł: Eraster rozmawia z Tussalem
- Narrator: Anward
The broken header stays as the session's identifier. Everywhere else the tool uses
the overridden values, so the session is dated 2026-07-01, titled
Eraster rozmawia z Tussalem, and credited to Anward.
6. Deliver the session: commit it, then close it¶
Committing is not the finish line
The lore repo's older rhythm is commit and forget: write the session, commit it, move on. Break that habit here. Committing delivers the text but enacts nothing — the session is not copied to anyone, no coin moves, no player is notified, and no monthly sweep will ever pick it up. A committed-but-unclosed session just sits in the file, inert, for as long as you leave it. The session takes effect only when you close it. So the rule is two steps, every single time: commit, then close.
Finishing a session is two separate acts, and the tool draws a hard line between them.
Committing the session to the repository is how you deliver it. That commit is the Narrator's statement that the session is finished: the text is final, the header is frozen for good, and the work is handed over. It is an ordinary git commit — the tool plays no part in it, and it changes nothing about the world on its own. Until you commit, the session exists only on your machine and is nobody else's concern.
Closing the session is how you enact it. It is a separate, deliberate instruction to the tool, and it is the moment the session takes effect in the world. There is no automatic trigger behind it: adding a session, editing it, or committing it never closes it for you. You close it, by hand, when the session is ready to land — and everything below happens at that instant.
Closing does four things at once, all of them immediately:
- it distributes the session - copies the block into the file of every entity the session names,
- it moves the coin - applies every line under
Transfer, there and then. See Transfer coin. - it delivers the intel - sends every line under
Intelto the players the target reaches, over Discord. - it fetches the session's game logs and reads the cast - every speaker in them the tool has no entry for is proposed to you as an NPC. See People the tool heard in the logs. This leg is best-effort: a log host that is down costs you the proposals, never the close.
PU is the one thing closing does not do, because the monthly cap is worked out over a whole month at once - see Grant PU and What happens every month.
Closing either records the whole session or changes nothing. Before it enacts anything, the tool checks the session - that every name it lists is one it recognizes, and that nothing clashes with what is already recorded. If something is wrong it refuses the close and tells you why, right then, in the same place you closed from, Discord included. Nothing is written on a refused close: fix the one thing it names and close again.
The distribution targets come from three keys:
- each
Lokacjepath contributes its interior.Thuzal/Rezydencja Tussaldistributes toRezydencja Tussal, not toThuzal. ListThuzalon its own line too if the city should get a copy as well. - every name under
PU, - every name under
Uczestnicy.
The extended session above therefore reaches the files of Rezydencja Tussal,
Eraster, Lord Tussal, and Opat Perrin.
Note
After closing, a - @Pliki: (auto) section appears at the end of your block listing
the files that received a copy through this delivery. The (auto) marker means what
it means everywhere else in the repository: the tool wrote this, and the tool owns
it. It rewrites the section whole every time the session is distributed, so anything
you type there is destroyed on the next pass. One copy is not on that list: the
read-only copy in the Lokacje/ folder (below) is a mirror, not a delivery target.
A session's PU, transfers, intel, and logs are each applied once. Closing a session again, or a later monthly pass, never counts anything twice - no coin moves twice and no player is notified twice.
Copies drift apart when someone edits one of them by hand. The monthly settlement finds distributed sessions whose copies have gone missing or stale and repairs them - see The monthly settlement.
Close it from Discord¶
/zamknij-sesję closes a session from inside Discord. The sesja argument is optional,
and it narrows which of your open sessions you mean. These forms all work:
| You write | What it matches |
|---|---|
2026-07-01, Eraster rozmawia z Tussalem, Anward |
that exact header |
2026-07-01 |
the sessions played that day |
2026-07 |
the sessions played in July 2026 |
2026 |
the sessions played in 2026 |
Tussalem |
any open session whose title or header contains that text |
Leave the argument out and the tool works from the sessions you have open. One open session closes on the spot. Two or more, and it refuses and lists them:
Błąd: Pasuje kilka sesji - doprecyzuj datę lub nagłówek: 2026-07-01, Eraster rozmawia z Tussalem, Anward | 2026-07-14, Nocna warta, Anward
Nothing was closed. Run the command again with enough of a date or a title to name one session, and that one closes.
With a date, a fragment, or nothing at all, the tool searches your own open sessions -
the ones whose Narrator resolves to you. A full header reaches any session in the
repository, and asking to close one that is not yours answers
Błąd: To nie Twoja sesja - zamknąć może jej narrator albo Rada. A Radny may close
anybody's, and also the ones whose Narrator the tool cannot match to any player at all.
A session already closed answers
Sesja 2026-07-01, Eraster rozmawia z Tussalem, Anward: Już zamknięta, and an argument
matching nothing answers Błąd: Brak pasujących sesji do zamknięcia. Every one of these
replies is private to you.
Or close it from the message you wrote it in¶
Pasted the session into a Discord message before you committed it? Right-click that
message and pick Apps → Zamknij sesję. The tool reads the header out of the message
and closes that session, so you type nothing and you cannot mistype a date. It needs one
line in the message that starts with a date and a comma - the header itself, with or
without its ###. A message without one answers:
Close early, write the prose later
You do not have to wait until the account reads well. Once the PU and a placeholder body
are in - within a few days of playing - close the session, and fill in the full prose
afterward. A later edit to the text is fine and re-runs nothing. Leaving a session open
costs its players their PU.
The tool nudges you while a session sits open¶
Once a day the tool goes through the sessions nobody has closed and posts a nudge about each one - to your own Narrator channel on Discord, and to the Rada's, so an open session is never only your problem. The nudge is not a bare reminder. It lists what closing that session would do right now:
Sesja do zamknięcia: 2026-07-01, Eraster rozmawia z Tussalem, Anward - Eraster rozmawia z Tussalem
Pliki: Rezydencja Tussal, Eraster, Lord Tussal, Opat Perrin
Transfery:
- 10 × Korony Elanckie: Eraster → Lord Tussal
Intel do: Eraster
Zamknij: /zamknij-sesję (opcjonalnie data lub nagłówek)
Read those lines before you close. Pliki is every file about to get a copy, Transfery
is the coin about to move, and Intel do names the players about to be told. When one of
them looks wrong the session text is wrong, and editing the text now is cheaper than
undoing the world later.
The same session is nudged about every other day until somebody closes it. Whether the
nudges run at all is a Rada setting, so a quiet channel is not proof your session landed
- ask for the list yourself with /sesje-otwarte.
The Lokacje/ registry - reading sessions by place¶
The repository root carries a Lokacje/ folder: one subfolder per known place, and in
each a file named Sesje.md holding every session that happened there, oldest first.
It answers "what happened in Nithal, in order" without searching four directories.
The tool builds the whole tree from the sessions you recorded above. The folder appeared
when the repository was first adopted, and is rebuilt
whenever the repository changes, so it is always a mirror, never the original. Each
generated file starts like this:
# Stary Port
<!-- nerthus:generated:session-registry -->
Plik generowany automatycznie. Nie edytuj - zmiany zostaną nadpisane.
Zasady: dokumentacja Nerthus.Core, "Running the campaign" -> "Record a session".
The banner means exactly what it says. Anything you write inside a Sesje.md is
destroyed the next time the tool rebuilds the tree - and it rebuilds after every
recorded change, so treat these files as read-only. To fix a session you found there,
fix it where it was recorded - the file named in step 1 - and the corrected text
appears in Lokacje/ on its own.
Everything else in those folders is yours. You can put your own notes, an NPC list,
or any other file beside a Sesje.md and the tool will never touch or delete it -
it owns only the files named Sesje.md.
Three things you will notice in the tree, all normal:
- An empty
Sesje.md- just the banner - means the place is known but nothing has been recorded there yet. Nothing is broken. - A session you just wrote appears after it is recorded through the tool or closed - the tree refreshes with the repository, not the moment you save a file by hand.
- A
Nieprzypisane/folder collects sessions whose place the tool could not work out - usually a location line naming a place the repository does not know. Give the session a known location, or add the place, and it moves to its folder.
Related¶
- Grant PU - the
PUblock, the monthly award, and the cap. - Transfer coin - the
Transferblock, the coins, and who may be an endpoint. - Link session logs - the
Logiblock, and how logs are fetched and archived. - Locations - the location tree behind
Parent/Interiorpaths. - The monthly settlement - what runs each month and what it repairs.
- Use the web dashboard - the Sesje tab, where these session records are listed back to you.