Dnd randomizer
A collection of structured AI workflows (SKILL.md) for building D&D content monsters, NPCs, adventures, items, and spells - enhanced with tarot spreads, bibliomancy, and weighted random tables to push AI beyond generic fantasy tropes.
npx -y skills add lectral/dnd-workshop --skill dnd-randomizerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Roll randomized D&D content properties (statblocks, items, spells, feats, scenarios, shops) using weighted chance tables. Use when a DM or designer wants serendipitous mechanical inspiration without generating full finished content.
SKILL.md
12.7 KB, as published. Nobody here has run it
DnD Randomizer
Use this skill only when all of the following are true:
- The user has not provided enough information to determine a specific property.
- That property cannot be reasoned from the request context, the designer skill's own guidelines, or standard 5e conventions.
- A random roll is preferable to an arbitrary agent choice for that property.
Do not use this skill as a default pre-step before every design task. Use it surgically — to fill one or a few specific gaps the agent cannot fill on its own.
The script does not produce finished content. It returns a short JSON object containing only the rolled fields you request, which the agent then treats as hard creative constraints.
Example of correct use: The user asks for a CR 8 monster but does not say whether it should have legendary actions. The agent cannot decide without guidance. Roll
has_legendary_actionsonly.Example of incorrect use: The user asks for a fire-themed dragon. Rolling the damage type is unnecessary — it is obvious from context.
Core operating rules
- Only invoke this skill when specific properties are missing and cannot be inferred.
- Always pass
--fieldswith only the properties you actually need. Do not request all fields. - Treat every returned field as a hard creative constraint, not a suggestion.
- If a field resolves to
falseor0, omit that feature from the design entirely. - When tier is not supplied, the script defaults to tier
2(baseline). - Drop the Sage persona in all final design deliverables. Use it only to discuss the rolls.
Script invocation
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator <name> --fields <f1,f2,...> [options]
--fields is required. Pass a comma-separated list of the specific field names you need rolled. Meta fields (generator, cr, tier, cr_band, level, level_band, type, settlement, economy_tier) are always included automatically and do not need to be listed.
Requesting only the fields you need keeps the output focused and prevents the agent from over-constraining designs with properties the user already determined.
All generators support --tier <1|2|3>.
| Tier | Meaning |
|---|---|
1 | Above average — more complex, more powerful, more features than its CR/level/rarity implies |
2 | Baseline — matches its CR/level/rarity normally |
3 | Below average — simpler, weaker, fewer features than its CR/level/rarity implies |
Generator reference
statblock
Rolls structural combat properties for a monster or villain.
# Roll only the properties you are missing:
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator statblock --cr 6 --fields attacks,spellcasting_type
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator statblock --cr 5 --tier 1 --fields has_legendary_actions,movement_types
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator statblock --cr 17 --tier 3 --fields trait_count,saving_throw_count,damage_immunity_count
Parameters
| Flag | Required | Values | Notes |
|---|---|---|---|
--cr | Yes | 0–30 | Challenge Rating |
--tier | No | 1, 2, 3 | Default: 2 |
Output fields
| Field | Description |
|---|---|
generator | "statblock" |
cr | The CR provided |
tier | The tier used |
cr_band | Resolved band: low, mid, high, or epic |
size | Creature size |
attacks | Number of attacks per Attack action |
damage_type | Primary damage type |
has_reactions | Boolean — whether the creature has a reaction |
has_legendary_actions | Boolean |
legendary_action_count | Number of legendary actions (only if has_legendary_actions is true) |
has_lair_actions | Boolean |
has_legendary_resistance | Integer — number of Legendary Resistance uses (0 = none) |
movement_types | Array of movement modes (e.g. ["walk","fly"]) |
senses | Array of special senses |
saving_throw_count | Number of saving throw proficiencies |
skill_count | Number of skill proficiencies |
trait_count | Number of passive traits |
condition_immunity_count | Number of condition immunities |
damage_resistance_count | Number of damage resistances |
damage_immunity_count | Number of damage immunities |
action_count | Total distinct action entries (including multiattack) |
bonus_action_count | Number of bonus action options |
spellcasting_type | none, innate, half, or full |
Tier effect on statblock: Tier 1 shifts rolls toward more features, larger counts, and higher-end options (e.g. legendary actions more likely at CR 5 tier 1 than at CR 5 tier 3). Tier 3 shifts toward minimal features.
item
Rolls structural properties for a magic item.
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator item --fields cursed,activation
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator item --type weapon --tier 1 --fields damage_bonus,has_unique_trait
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator item --type wondrous --tier 3 --fields charges,recharge,effect_type
Parameters
| Flag | Required | Values |
|---|---|---|
--type | No | weapon, armor, wondrous, consumable, ring, staff |
--tier | No | 1, 2, 3 |
Output fields
| Field | Description |
|---|---|
generator | "item" |
type | The type used (or "unspecified") |
tier | The tier used |
attunement_required | Boolean |
charges | Charge expression or "none" |
recharge | When charges reset, or "none" |
effect_type | Primary effect category |
activation | How the item is triggered |
cursed | Boolean |
sentient | Boolean |
damage_bonus | +0 through +3 (weapons only; always 0 for others) |
has_unique_trait | Boolean — whether the item has a signature special property |
spell
Rolls structural properties for a new spell.
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator spell --fields school,aoe_type
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator spell --level 3 --tier 1 --fields duration,saving_throw
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator spell --level 7 --tier 2 --fields range,concentration,ritual_tag
Parameters
| Flag | Required | Values |
|---|---|---|
--level | No | 0–9 (0 = cantrip) |
--tier | No | 1, 2, 3 |
Output fields
| Field | Description |
|---|---|
generator | "spell" |
level | The level used (or rolled if omitted) |
tier | The tier used |
level_band | Resolved band: cantrip, low, mid, or high |
school | School of magic |
casting_time | How the spell is cast |
range | Spell range |
duration | How long the spell lasts |
components | Component combination |
aoe_type | Area of effect shape, or "none" |
saving_throw | Required save or "none" |
damage_type | Primary damage type or "none" |
upcast_scaling | Boolean — scales when cast at higher levels |
ritual_tag | Boolean |
concentration | Boolean |
target_type | What the spell targets |
feat
Rolls structural properties for a feat.
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator feat --fields active_ability,uses_per_rest
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator feat --tier 1 --fields stat_increase,spell_granted
Parameters
| Flag | Required | Values |
|---|---|---|
--tier | No | 1, 2, 3 |
Output fields
| Field | Description |
|---|---|
generator | "feat" |
tier | The tier used |
stat_increase | Ability score improvement, or "none" |
passive_benefit | Boolean — has an always-on passive |
active_ability | Boolean — has an activated ability |
uses_per_rest | Number of uses, or "none" |
recharge | Rest type that recharges uses |
skill_granted | Skill grant level, or "none" |
spell_granted | Spell access granted, or "none" |
condition_related | Boolean — interacts with conditions |
saving_throw_bonus | Saving throw improvement type, or "none" |
scenario
Rolls structural properties for an adventure scenario or location.
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator scenario --fields twist,complication
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator scenario --tier 1 --fields location_type,scene_count,reward_type
Parameters
| Flag | Required | Values |
|---|---|---|
--tier | No | 1, 2, 3 |
Tier effect on scenario: Tier 1 increases scene count, complication complexity, and twist probability. Tier 3 simplifies.
Output fields
| Field | Description |
|---|---|
generator | "scenario" |
tier | The tier used |
location_type | Environment type |
primary_threat | Core challenge category |
complication | Secondary complication, or "none" |
boss_present | Boolean |
twist | Narrative twist, or "none" |
scene_count | Number of distinct scenes |
has_skill_challenge | Boolean |
has_chase | Boolean |
reward_type | Type of primary reward |
factions_involved | Number of factions with stake in the scenario |
npc_count | Number of named NPCs |
shop
Rolls structural properties for a merchant or shop.
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator shop --fields shop_quirk,special_service
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator shop --type magic --settlement city --economy-tier 1 --fields inventory_quality,has_rare_item,item_count
node .agents/skills/dnd-randomizer/scripts/randomize.js --generator shop --type weapons --settlement village --economy-tier 3 --fields haggling_mood,owner_attitude
Parameters
| Flag | Required | Values |
|---|---|---|
--type | No | weapons, armor, magic, general, curiosity |
--settlement | No | village, town, city |
--economy-tier | No | 1 (prosperous), 2 (average), 3 (poor) |
Output fields
| Field | Description |
|---|---|
generator | "shop" |
type | Shop type used |
settlement | Settlement size used |
economy_tier | Economy tier used |
inventory_quality | Overall stock quality |
item_count | Number of items in stock |
has_rare_item | Boolean — at least one rare+ magic item present |
haggling_mood | Shopkeeper's haggling disposition |
special_service | Extra service offered, or "none" |
rumor_count | Number of rumors the shop owner knows |
owner_attitude | General attitude of the proprietor |
shop_quirk | Unusual characteristic of the shop, or "none" |
Workflow
- Determine which properties are genuinely undecided — not stated by the user, not implied by context, not derivable from the designer skill's own rules.
- Identify the correct generator for the content type.
- Build the
--fieldslist from only those undecided properties. - Run the script with
--fieldsand any relevant generator flags (--cr,--type,--settlement, etc.). - Read the returned JSON. Treat each rolled field as a hard creative constraint.
- Continue with the appropriate designer skill (
statblock-designer,item-designer,spell-designer,feat-designer,scenario-designer), applying the rolled values. - Do not invent properties that contradict rolled values. If
has_legendary_actionsisfalse, the creature has none.
Error handling
- If
--generatoris missing or unrecognized, the script exits with code1and prints usage to stderr. - If
--fieldsis missing, the script exits with code1with a descriptive message. - If a field name in
--fieldsdoes not exist for the chosen generator, the script exits with code1and lists valid field names. - If
--cris missing forstatblock, the script exits with code1. - All other parameters are optional with sensible defaults.
References
- Chance tables:
.agents/skills/dnd-randomizer/references/tables.json - Script:
.agents/skills/dnd-randomizer/scripts/randomize.js