Dnd randomizer
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.From its SKILL.md
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.
SKILL.md
12.7 KB, ~3.2k tokens by cl100k_base, 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
What ships with it: 2 files
53.2 KB alongside SKILL.md, 1 of them executable
references/
- tables.json36.7 KB
scripts/
- randomize.jsruns16.5 KB