Przejdź do treści
Biblioteka skilli
Inne · Pisanie

session-wrapup

/session-wrapup

Porządkuje notatki z zakończonej sesji RPG: streszcza przebieg, aktualizuje karty postaci i wydarzenia oraz wskazuje, co przechodzi dalej.

Repozytorium
gm-apprentice ↗
Licencja
CC-BY-SA-4.0
Ostatnia zmiana repozytorium
27.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
4
Skrypty
0
Komentarze HTML
2
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 27.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

CC-BY-SA-4.0, otwarta.

Co sprawdzić przed instalacją
  • SKILL.md zawiera komentarze HTML (2). Nie widać ich w podglądzie Markdown, a model je czyta.

Co robi i kiedy

Porządkuje notatki z zakończonej sesji RPG: streszcza przebieg, aktualizuje karty postaci i wydarzenia oraz wskazuje, co przechodzi dalej.

Oryginalny opis (EN)

Use when a TTRPG session has just ended and the GM needs to wrap up or process play notes — recaps, entity file updates, timeline events, and what carries forward to the next session. Turns raw play notes into organized canon. Not for session prep (session-prep) or during-play help (session-play).

Jak działa

  1. Workflow
Sekcje z nagłówków SKILL.md, w oryginale · 344 linii, 2 402 słów
Podgląd SKILL.md
---
name: session-wrapup
description: "Use when a TTRPG session has just ended and the GM needs to wrap up or process play notes — recaps, entity file updates, timeline events, and what carries forward to the next session. Turns raw play notes into organized canon. Not for session prep (session-prep) or during-play help (session-play)."
---

Post-session processor: turns the Play Notes into canon and
writes the Wrap-Up file that session-prep reads next.

**On first invocation:** read `shared/session-principles.md` and
run its Version Gate, then read `shared/session-document-chain.md`.

**Placing:** `vw` is `python3
"${CLAUDE_PLUGIN_ROOT}/skills/shared/scripts/vault_write.py"
<vault>`: you write, it places, text on stdin (`<<'EOF'`).

**Session index:** stamp it (dry-run, then `--write` on
confirmation):

```bash
python3 "${CLAUDE_PLUGIN_ROOT}/skills/shared/scripts/stamp_entities.py" \
  <vault> "<session index>" --set status=wrap-up \
  --set play_date=YYYY-MM-DD --set in_game_date="<fictional date>" \
  --set documents.wrap_up="[[Chapter_CC_Session_NN_Wrap_Up]]"
```

Use `play_date`/`in_game_date`, never `planned_date`/`actual_date`.
For each Plan-linked scene the GM confirms ran: `vw scene-played
--scene "<scene>" --session "<session index>" --write` (`--paused` if
it stopped mid-way). Unplayed ones go under Skipped Prep.
Leave the index body alone: handoffs and notes for next session go in
this Wrap-Up's GM Notes.

**Wrap-Up file:** after the stamp, `vw wrapup-new --session
"<session index>" --source "<notes' origin>" --write` creates it.
Sections, per `shared/templates/session-wrap.md` (vault copy
`_Templates/_Template_Session_WrapUp.md` if present), go in with
`vw wrapup-add "<wrap-up>" --write <<'EOF'` … `EOF`, several per
call (`--replace` rewrites a section already there). Those not
marked optional/conditional are required. Add any section the GM
or the story calls for. `##` is for players and keeps every deeper
heading sent after it in that call, up to one the template names;
everything else at `###` or below goes under GM Notes. So send
Keeper sections first or separately. "players will see this" rows
name what players can read: dry-run any call (`log` and `timeline`
too) adding a new section or sub-section for players, one the
template lacks, and tell the GM of any they did not ask for before
`--write`.

**Authoring vs. preserving:** four outputs are authoring
exceptions to `shared/content-fidelity.md`, because the source is
shorthand and no prose exists yet — the Step 2 recap, Step 3b
story entries, Step 3c `## Current Status`, and timeline summary
lines. Write them faithful to the notes (or recap and
carry-forward): no embellishment, invent nothing the session
didn't produce. The synthesized GM Notes sections (What Carries
Forward, World State, Keeper Checklist, Quality Notes) are
grounded too: each claim traces to the Play Notes, the plan or a
named vault file; mark anything uncertain `<!-- UNVERIFIED (S{n}): … -->`
for reconcile, tagged with this session (`Ch{c} S{n}` if it has a
chapter). Everything
else that moves existing text keeps it verbatim.

## Workflow

### 1. Gather Sources

If the campaign has a published site with live tracking (status
bar or change-request inbox), first run `npx gm-apprentice-publish
flush` in the site directory and report its per-PC summary
(publish-site `references/live-state-flush.md`). No Tier-2 site →
skip.

Read the session's Play Notes (`type: session-play-notes`). A
session with no index or Play Notes: `vw session-new --number N
--title "T" --play-date D [--export PATH]` files both; without an
export, ask the GM for notes (paste, path, or dictation) for them.
Read the PC roster and the session's Plan for planned-vs-actual.
`plan_check.py <plan> --inventory` gives per-section status and
word counts but not scene titles — open the plan body for those.
What the last session left open (for What Carries Forward and the
Keeper Checklist) comes from `python3
"${CLAUDE_PLUGIN_ROOT}/skills/shared/scripts/session_context.py"
<vault> --carry --before "<session index>"`; don't read that Wrap-Up.

**gmassistant.app export:** if the Play Notes contain a
`## Memorable Moments` heading, they are a gmassistant.app
export — read `references/gmassistant-export.md`, which changes
Steps 2 and 4.

### 2. Narrative Recap

Write `## Narrative Recap` from the Play Notes, with every entity
`[[wiki-linked]]`; tone per `references/recap-formats.md`, set
from the chapter overview and recent notes. Add Quick Bullets and
Memorable Moments when the template's conditions call for them.
The recap is the single source of truth — session-prep reuses it,
never regenerates it.

### 3. PC Carry-Forward

**Active PC roster** (also used by 3b and 3c): `python3
"${CLAUDE_PLUGIN_ROOT}/skills/shared/scripts/vault_check.py"
<vault> active-pcs`, minus any PC off-screen this session.

Per active PC, one `#### [[PC Name]] (Player)` block with the
template's labels (omit empty ones), under `### PC Carry-Forward`:
send that heading with its blocks, in its own call or before any
`##`. Focus on player intent — stated plans, unfinished actions,
shifted NPC ties, exclusive information — grounded in observable
behaviour, not generated emotional analysis.

### 3b. Character Story Entries

Write each roster PC's entry per `shared/character-story-format.md`
— read it; its Appending command takes 3c's values. Source: Steps
2–3 only. Current session only — missing earlier entries are
vault-ingest's job.

### 3c. PC Sheet Refresh

Refresh each roster PC's `Characters/PCs/{Name}.md` so its
frontmatter and published `## Current Status` don't fall behind
the narrative.

1. Stamp all roster PCs in one call — `asOfSession`/`lastUpdated`
   and the chapter tag swapped for the current chapter's, from the
   session index or campaign overview (non-chapter tags stay).
   Dry-run, review, then re-run with `--write`:

   ```bash
   python3 "${CLAUDE_PLUGIN_ROOT}/skills/shared/scripts/stamp_entities.py" \
     <vault> Characters/PCs/A.md Characters/PCs/B.md \
     --session "<asOfSession value>" --date YYYY-MM-DD --retag old-tag=new-tag
   ```

   `--session` is written verbatim: match the vault's existing
   shape (`"Chapter 4, Session 9"` or `9`). On a shape `ERROR`,
   re-run with the matching form, not `--force-shape`.
2. `vw status <PC> --show` prints the prior fields. Reconcile them
   against Step 3 and the recap: carry unresolved `Open threads`
   unchanged, add new threads and exclusive knowledge, remove
   resolved threads, refresh `Location`/`Condition`/`Carrying`.
   Present tense, player-facing — not Story-file narrative. Send
   the changed fields to `vw status <PC> --write`; it rewrites
   them in place (fields: `shared/pc-body-structure.md`). Don't
   read or hand-edit the sheet.
3. Write an advancement change (XP, points) to a sheet only when
   the Play Notes or the GM give the amount; a missing award goes
   in the Keeper Checklist.

Show each PC's refreshed block and frontmatter changes in the
conversation with the Step 4 receipt; write no receipt into the
Wrap-Up — the PC sheet is the record.

### 4. Update the World

Personal setting reference may sit in `systems/{system}/personal/`
— check it for faction ties, locations and NPC relationships when
creating entities.

- **New entities:** read `_Templates/_Template_{Type}.md`, create
  the file from it, `canon_status: DRAFT`. Content session-play
  already saved goes in verbatim — the template supplies structure,
  not replacement prose. Never pattern-match off existing entity
  files.
- **Updated entities:** edit the entity's own file — one file per
  entity, no separate update files. A GM ruling that replaces an
  earlier one: strike the old one through and append
  `superseded YYYY-MM-DD` in the same edit. Leave `withheld`, spoiler
  and gm-only blocks and GM Notes secrets as they are; step 4d
  releases them with the GM.
- **Cross-entity claims:** when a note asserts something about a
  *different* existing entity (e.g. an aside in a NEW-NPC line
  placing an established NPC somewhere new), never fold it silently
  into that entity's file. Ask the GM once per claim. Confirmed →
  write it there and log it under the Wrap-Up's `### Cross-Entity
  Claims` (`vw wrapup-add --append` adds to it). Unconfirmed or
  deferred → log it there with `<!-- UNVERIFIED (S{n}): {claim} -->`;
  reconcile scans the Wrap-Up for these and blocks promotion.
- **Relationship edges:** every `type:` comes from
  `_meta/relationship-types.md`. Map narrative verbs to the nearest
  sanctioned predicate, store the base direction (`owned_by A→B` →
  `owns B→A`), and drop non-edges (`appears_in <session>`). Table:
  `shared/relationship-normalization.md`. Never invent a `type:`.
  Mirror each edge in the body's `## Related` (a `gm_only` edge in
  `### Hidden Ties`), per `shared/entity-schema.md` § Relationships.
- **Campaign logs:** each NPC, Location, Item, Organization or
  Creature that appeared this session gets one bullet in its
  `## Campaign Log` (a Creature's is `## Encounters`), as the party
  saw it: `- **[[Session link]]** — {what happened}`. Other entity
  types' templates carry no such section — don't add one unless the
  GM asks. Where the truth differs, add the matching bullet to its
  GM Notes `### Behind the Scenes`. `vw log --write` places them
  all, no note read first: rows
  `<path><TAB>Campaign Log<TAB>{bullet}`, or
  `GM Notes/Behind the Scenes`. If it warns that a GM Notes has no
  hidden-markers, tell the GM once per wrap-up
  (`vault_check.py gm-leak --fix` repairs it). Each
  `(projected)` entry (Behind the Scenes or Under Pressure) on an
  entity that appeared: drop the marker if it played, strike it
  through with `not played` if play went elsewhere, or leave it if
  still pending. A fork is settled branch by branch: keep the branch
  that played and strike the other through with `not played`. PCs are
  exempt from this and from the Related mirror: their body follows
  `shared/pc-body-structure.md`, and their session record is the
  Story companion.
- **New container entities** (a district between a station and its
  venues, a cell between a faction and its members): offer each
  child for re-pointing, yes/no each, and set the child's fields per
  `shared/relationship-normalization.md` § Interposing a new
  container.
- **Timeline:** `- **{in_game_date}** — {description}`
  (`[[Event_Name]] — {summary}` when linked), or the shape this
  timeline already uses. `vw timeline --under "<the heading this
  timeline files the session under>" --write` places them (`--after`
  sites a new heading).
- **Events:** create an Event file from `_Templates/_Template_Event.md`
  (dated with `in_game_date:`) when a moment meets its threshold — see
  `shared/templates/event.md`'s comment if the vault copy lacks one.

**Validate** with one call each, then fix every ERROR before
presenting receipts: `vault_check.py frontmatter --folder <dir>`
per folder touched, `vault_check.py relationships` with `--file
<path>` repeated for every vault-relative path Step 4 created,
edited or re-pointed — new/updated entities, re-pointed container
children, cross-entity claim targets, Event files — `vault_check.py
pc-body` with `--file Characters/PCs/{Name}.md` repeated for every
PC refreshed in 3c (a WARNING about a missing or untouched
`## Stat Sheet`: `shared/pc-body-structure.md` § A sheet kept
somewhere else; when `pc-body` emits no Stat Sheet rows there is
nothing to ask, and never ask where a sheet is kept on a campaign
that does not publish sheets), `vault_check.py wrapup --file
<wrap-up>`. A tone WARNING on a relationship you wrote or changed
this session: use the word the row names, or where it names none the
listed word that fits (`relationships words` in the publish tool prints
them). Leave any
other tone WARNING to campaign-qa; never run `tones.py` here. If
Step 4 ran as sub-agents, also run `relationships` once more with
`--newer-than <session index>` (stamped once, before Step 1, and
never touched again) as a completeness cross-check on the `--file`
list — a row naming a path that isn't in that list, isn't a 3b/3c
PC or Story file, the Wrap-Up or a note only `vw` wrote means a
sub-agent under-reported. Don't re-read files to self-check.

**Receipts:** show new/updated entity content in the conversation
as `## New Entity Files` and `## Updated Entities`, never in the
Wrap-Up file, which only wiki-links entities.

Step 4's entity writes are independent: with the Agent tool, run
them as parallel light-model sub-agents, each returning its log
bullets and the vault-relative paths it wrote for Validate's
`--file` list and cross-check; otherwise sequentially. The `vw`
calls stay with you.

### 4b. Update Campaign Overview

If `_Campaign/Campaign Overview.md` exists:

```bash
python3 "${CLAUDE_PLUGIN_ROOT}/skills/shared/scripts/stamp_entities.py" \
  <vault> "_Campaign/Campaign Overview.md" \
  --set current_game_date="<in-game date at session end>" \
  --increment sessions_played \
  --set last_session="[[<this session's index title>]]" \
  --set last_play_date=YYYY-MM-DD \
  --session N --date YYYY-MM-DD
```

Show the dry-run rows to the GM as-is — they are the confirmation
prompt. Yes → re-run with `--write`; no → skip. Leave
`current_arc`, `arcs_planned`, `current_chapter`,
`chapters_planned`, `status` and the body to the GM.

### 4c. World Fact Scan

If `_World/` exists or the notes hold likely world facts
(heritages, deities, new place names), apply
`references/world-fact-detection.md` and stage findings as
`### World Fact Findings`. Stage only — reconcile (step 2.5)
presents the three-state prompts.

### 4d. What came out tonight

```bash
python3 "${CLAUDE_PLUGIN_ROOT}/skills/shared/scripts/reveal_scan.py" \
  <vault> "<index>"
```

It lists the notes this session touched that the site still hides,
with what each hides. On "no publish list", skip this step silently;
on "could not ask the publish tool", tell the GM the reason and skip.
From the Play Notes, the Wrap-Up and the recap, propose one list of
what came out: people, places and things met or learned of; secrets
now known, by page, from the scan's hidden parts; clues found; props
handed over or shown; places visited. Never propose from the Plan.
The GM picks all, some or none; nothing changes until they confirm.
Then rewrite any Narrative Recap, Campaign Log or Timeline line this
run wrote that states what they kept hidden, so it says only what came
out (the truth can go in GM Notes `### Behind the Scenes`). Link each
picked prop's note (`[[Note]]`) from the recap line where it came up;
reveal.py writes its `revealed_in` itself. On none, skip the rest.

For each picked secret, edit that page so the fact is hidden nowhere
on it, in whatever way suits how it came out, and remove the spoiler
markers around what it released. Then run, with `<title>` from the
scan's first line, one `--publish` per note to publish and one
`--released` per secret, each `<path>` as the scan prints it:

```bash
python3 "${CLAUDE_PLUGIN_ROOT}/skills/shared/scripts/reveal.py" \
  <vault> --session "<title>" \
  --publish <path> --released "<path>=<what came out>"
```

Show the dry-run rows as-is. Yes → re-run with `--write`; it
publishes, lifts `withheld` and logs the session. No, or an ERROR
row, puts back that page's edits and any recap link to it (or a later
publish shows it unhidden). Tell the GM the reason on any
ERROR row. Never publish a scene, Plan or session note.

### 5. Remaining GM Notes

Fill What Carries Forward, World State, Keeper Checklist, Quality
Notes and Handoff to session-prep (the section session-prep reads
first) per the template. If the notes don't show what the players
enjoyed, ask the GM once. Whatever an older vault template copy says:
Skipped Prep lists every planned scene and clue that didn't fire,
with what the players still need; Pending Consequences are decisions
whose effects haven't landed; Advancement records what the sheet or
notes show, never awards.

### 6. Review (Reconcile)

Run `shared/reconcile.md`; on approval it promotes the session to
`reviewed` and the Wrap-Up to AUTHORITATIVE, and its step 6.1
(publish registration) runs without asking. If the GM defers, leave
status `wrap-up` (session-prep runs reconcile as a fallback), and
don't publish an unreviewed Wrap-Up silently. In a vault where step
6.1 applies, ask once: "Publish the Wrap-Up now, or after
reconcile?" Only on "now", run `node "$TOOL" manifest publish-played
--config <site_dir>/vault.config.json --session "<index>"
--include-unreviewed` (`$TOOL` as in publish-site; `<index>` relative
to the vault). It waives only the review check for this one session:
it still ticks the index only with a Wrap-Up that pairs with it and
will publish, on a current site pin. Report what it ticked; if it
lists the session as unclear, tell the GM its reason and tick nothing
else.
Pliki w paczce (4)
  • SKILL.md 17 KB
  • references/gmassistant-export.md 2 KB
  • references/recap-formats.md 3 KB
  • references/world-fact-detection.md 2 KB

Wersje

W bazie nie ma innych skilli o nazwie session-wrapup.

Migawka bazy z 28.10.2026 · wersja paczki 494029fb7eeb (skrót SHA-256 całej paczki)

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100session-prep
    Przygotowuje kolejną sesję RPG: porządkuje wnioski z poprzedniej, sprawdza, co pominięto, i układa plan następnego spotkania.
  • 100session-play
    Pomaga prowadzącemu sesję RPG przy stole: szybko sprawdza zasady, tworzy postacie niezależne i notuje przebieg gry.
  • 100wrapup-session
    Zamyka sesję kodowania: wypisuje, co zostało do zrobienia, i zapisuje wnioski w instrukcjach agenta, skillach, pamięci lub komentarzach.
  • 90wrapup
    Domyka sesję pracy: zmiany bez commita trafiają do gita, decyzje do pamięci, a niedokończone wątki do notatki przekazania.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.