table-builder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited table-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 + content layer for roll tables (design.md §5) — the random-generation backbone of an adventure: what wanders out of the woods, what's in the hoard, what the tavern is whispering about. As with every authoring skill: you decide; the tool does.
theme, the flavor text (rumor wording, names, weather). That judgment IS the job.
TableResult (thedescription field), auto-assigns roll ranges from weights, defaults the formula to 1d<total weight>, and validates + renders real document links (@UUID). It never decides what's on the table and never invents an item.
Read _shared/authoring-policy.md (2024 · compendium-first · never SRD · ask-don't-invent). Two table-specific clarifications:
magic item in the hoard, the spell a wild-magic surge mimics. Reference the real compendium entry by uuid (mix-and-match) so the table links the actual document with correct stats + art; never transcribe or invent its stats into the result text. This is exactly how the published DMG loot tables are built (each entry is an @UUID link to a real item).
hook's phrasing are yours to write. But don't fabricate game facts (a made-up item, a non-existent monster). If the user wants a loot table of items that aren't in the books → STOP and ASK (or offer the closest real items).
replacement?, displayRoll?, folderName?, description? }. Ranges auto-assign from weights and the formula defaults to 1d<total weight>` unless you pass explicit ones.
({ packId, itemId, folderName? }). Roll tables are world-only at roll time, so a DMG treasure / magic-item table must be imported before you can roll it; its results (and their @UUID item links) come along intact. Premium-book packs only. This is the table version of import-item — prefer it over hand-rebuilding a book table.
results deletes + recreates all entries with fresh ranges). Use to edit a table you built.
to chat). A drawn loot entry's @UUID items come back as importable (uuid + label) so you can pull them into the world with import-item (see physical-item-builder).
results[])Each entry is { text?, uuid?, name?, weight?, range? }. Provide text or uuid (or both):
| Field | Use it for |
|---|---|
text | A literal result — a rumor, a name, coins ("2d6 × 10 gp"), an instruction ("Roll twice on this table"), flavor. HTML / @UUID enrichers allowed. |
uuid | Link a REAL item / monster / spell from a premium book. Get the uuid from search-compendium-items / -creatures / -spells. The tool resolves its name, refuses SRD / unresolvable refs, and renders the book-style @UUID[…]{Name} link. World-doc uuids (Item.<id>) are allowed too. |
name | Optional display label for the uuid link (default: the resolved document name). |
{{link}} | A placeholder inside text that gets replaced by the uuid link — for mixed loot: { text:"A pouch holding {{link}} and 2d6 gp", uuid:"…Item.bagOfHolding" }. Without a placeholder, the link is appended to the text. |
weight | Relative likelihood (default 1). The tool maps weight consecutive roll values to this entry. |
range | Explicit [low, high] — use only to mirror a published table's exact die bands; otherwise let weights auto-assign. |
weight vs range: prefer weight and let the tool lay out the ranges (and the 1d<total> formula). Reach for explicit range + formula only when recreating a printed table whose die spread you must match exactly (e.g. a d100 table with uneven bands).
uuid (fromsearch-compendium-creatures); weight the common foes higher than the rare ones. Optionally add text entries for non-combat events ("Tracks, a day old", "Distant horn"). One table per region/tier.
uuid(mix-and-match the hoard from actual book items), with text coin/gem lines. A drawn entry is importable straight into the world. Weight by rarity (commons heavy, legendaries rare), or mirror a published d100 magic-item table with explicit ranges.
text; your prose. Each entry a rumor the party might hear.text, one name per entry.text describing the effect; uuid-link a spell when a surgejust is a real spell ("Caster casts {{link}}", uuid → the spell).
text.1d<total weight>. Override to match a printed table ("1d100", "2d6").A 2d6/3d6 table is bell-curved — set explicit ranges so the middle results are the likely ones.
true (each roll independent). Set false for draw-without-repeats(a deck of unique encounters/events that shouldn't recur in a session).
true (shows the die). Set false to hide the roll (a "fated" reveal).The books ship ready-made tables (the DMG Arcana/Armaments/Implements/Relics × rarity magic-item tables, the Treasure table, encounter tables). Don't rebuild them by hand — copy them in:
dnd-dungeon-masters-guide.tables)and the table's id (use get-compendium-entry / search to identify the exact itemId).
{ packId, itemId, folderName:"DMG Treasure" } → the table (with its @UUIDitem links) lands in the world.
@UUID (uuid + label).
This is the sanctioned path for "roll on the DMG treasure tables and give me the loot."
real documents first** with search-compendium-items / -creatures (premium-only, so you get correct uuids) and reference them by uuid.
create-rolltable (weights, or explicit ranges to match a printed table).roll-on-table a few times to sanity-check the spread; a loot draw reports theimportable item uuids.
update-rolltable (replace the result set) if the weighting feels off.dnd5e.*) uuid — the tool refuses it; use the premium-book equivalent.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.