journal-builder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited journal-builder (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The judgment + prose layer for the written side of an adventure (design.md §5): handouts, lore, read-aloud (boxed) text, quest logs, GM notes — and the §8 landing zone for session recaps / campaign logs. This is the deliberate inverse of the old behaviour, where the tool fabricated quest prose (read-aloud, NPC dialogue, hooks). Now you write the words; the tools only structure + style them.
guidance, the handout copy. Authoring that narrative prose IS the job.
.mcp-journal house style, setsper-page visibility (player vs GM), and inserts real document links. It never writes a word.
Read _shared/authoring-policy.md (2024 · compendium-first · never SRD · ask-don't-invent). One journal-specific clarification:
the ambush, the magic item in the reward, the spell on the trap. Point at the real compendium / world documents (mix-and-match) and @UUID-link them; never invent their stats.
is yours to author. That's the whole point of this skill.
didn't ask for. Offer it as a suggestion or STOP and ASK; don't silently invent setting facts.
playerVisible?, blocks[] }]` → renders each page's blocks into the house style. Despite the name it builds ANY structured journal (handout, lore, notes), not just quests.
blocks) to a page, or start a newpage (newPageName). The progress-log / §8 session-recap path.
@UUID[Actor.id]{Name} link to a world NPC, labelled byrelationship (questGiver / target / ally / enemy / contact). Refuses an unknown NPC (no dead links).
playerVisible). Use when you already have HTML, or want a plain page with no house style.
target pageId for updates/links).
Each page's blocks is an ordered list. Every text/html/items value is your words:
| Block | Use it for | Shape | |
|---|---|---|---|
heading | A section title | `{type:"heading", text, level?:2\ | 3}` |
lead | A one-line summary / intro (muted) | {type:"lead", html} | |
paragraph | Body prose | {type:"paragraph", html} | |
readaloud | Boxed read-aloud / player-facing text | {type:"readaloud", html} (pass <p>…</p>) | |
gmnote | GM-only callout box | {type:"gmnote", html} (pass <p>…</p>) | |
list | Bulleted items (objectives, clues) | {type:"list", items:[…]} | |
grid | Two columns of headed lists (a details box) | {type:"grid", columns:[{heading?, items:[…]}, …]} | |
html | Escape hatch — a table, anything custom | {type:"html", html} |
readaloud/gmnote are visual boxes on the page; they are not access control. To actually hide a page from players, use playerVisible (below).
playerVisible: true. Clean prose + readaloud for the in-world text; nogmnote (that box leaks GM info even on a player page — keep secrets on a separate GM page).
heading + paragraph (+ readaloud for an in-world excerpt). GM-only unlessit's meant as player reading.
readaloud block (optionally playerVisible as a handout).gmnote + list; GM-only (omit playerVisible).A quest journal is just a recommended block layout — the "quest" is a template you fill, not something the tool generates. A solid default GM-only "Quest Log" page:
lead — one-line summary of the quest.grid — `[{heading:"Quest Details", items:["Type: …","Difficulty: …","Location: …","Quest Giver: …"]},{heading:"Rewards & Status", items:["Reward: …","Status: Active"]}]` (the facts the user gave you).
heading "Adventure Hook" + readaloud — the boxed hook you write (how the party hears of it).heading "Objectives" + list — the steps, in your words.heading "GM Notes" + gmnote — pacing, secrets, scaling guidance you write.Then `link-quest-to-npc` for any real NPC the quest involves (the giver, the villain), and a separate `playerVisible` "Player Handout" page if the players get a letter/poster (its prose is the in-world text only — no GM notes). Track progress with update-quest-journal (a heading "Session N" + paragraph recap appended to the log).
playerVisible: true → players can observe that page (a handout). Omit → GM-only (default).relying on a gmnote box, which still renders its text to anyone who can open the page.
link-quest-to-npc (a clickable @UUID[Actor.id] in a GM note).The actor must exist first (build it with stat-block-builder); the tool refuses a dead name.
@UUID[…]{Label} link in a paragraph/html block (get the uuid from search-compendium-*). Link the real document; don't transcribe its stats into the prose.
design.md §8: later, automated session output (chat + Craig/Whisper transcripts) is authored as journals — this skill's structures are where it lands. Build that now by hand:
update-quest-journal append (`heading "Session N —<date>" + paragraph recap) onto one log page, OR a new page per session (newPageName`).
playerVisiblepage (or handout) with just the spoiler-free summary.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.