Agent Skills: Audit World

Audit a world for consistency, D&D 5e 2024 rule compliance, broken links, orphaned entities, and connection gaps. Provides detailed reports and can auto-fix issues.

UncategorizedID: hopeoverture/worldbuilding-system/audit-world

Install this agent skill to your local

pnpm dlx add-skill https://github.com/hopeoverture/Worldbuilding-System/tree/HEAD/.claude/skills/audit-world

Skill Files

Browse the full folder contents for audit-world.

Download Skill

Loading file tree…

.claude/skills/audit-world/SKILL.md

Skill Metadata

Name
audit-world
Description
Audit a world for consistency, D&D 5e 2024 rule compliance, broken links, orphaned entities, and connection gaps. Provides detailed reports and can auto-fix issues.

Audit World

Audit world: $ARGUMENTS

Overview

This skill performs comprehensive audits on worldbuilding projects to ensure:

  • Entity Linking: All [[wikilinks]] point to real entities
  • Bidirectional Connections: If A links to B, B should link back to A
  • D&D 5e 2024 Compliance: Stat blocks are mechanically correct
  • Template Compliance: Entities use correct templates for their type
  • Orphan Detection: No entities exist without incoming links
  • Consistency: Cross-entity references make logical sense

Instructions

Step 1: Parse Arguments

Extract from arguments:

  1. World name - Required. Check Worlds/ for existing worlds.
  2. --fix flag - Optional. If present, automatically fix issues where possible.
  3. --category [type] - Optional. Only audit specific category (Characters, Settlements, etc.)
  4. --check [type] - Optional. Run specific check only (links, stats, orphans, connections, templates, images, circular)

If world name not provided, list available worlds and ask which to audit.

Step 2: Scan World Structure

  1. Verify directory structure:

    Worlds/[World Name]/
    ├── World Overview.md
    ├── Characters/
    ├── Settlements/
    ├── Items/
    ├── Creatures/
    ├── Organizations/
    ├── Concepts/
    ├── History/
    └── Geography/
    
  2. Build entity index:

    • Scan all .md files in the world
    • Extract entity names from filenames
    • Extract entity names from YAML name: field
    • Build lookup table: {entity_name: file_path}
  3. Count entities by category:

    Category        | Count
    ----------------|------
    Characters      | X
    Settlements     | X
    Items           | X
    Creatures       | X
    Organizations   | X
    Concepts        | X
    History         | X
    Geography       | X
    ----------------|------
    TOTAL           | X
    

Audit Checks

Check 1: Wikilink Validation

Goal: Verify all [[Entity Name]] links point to real entities.

Process:

  1. For each entity file:

    • Extract all [[...]] patterns using regex: \[\[([^\]]+)\]\]
    • For each link, check if target exists in entity index
    • Track: {source_file, broken_link, line_number}
  2. Ignore false positives:

    • Links to D&D rules: [[D&D 5e...]], [[Stat Block...]]
    • Links to images: [[...png]], [[...jpg]]
    • Obsidian system links
  3. Report:

    ## Broken Links Report
    
    Found X broken links across Y entities.
    
    ### [Entity Name]
    - Line XX: [[Missing Entity 1]]
    - Line XX: [[Missing Entity 2]]
    
    ### [Entity Name 2]
    ...
    
  4. Auto-fix options (if --fix):

    • Offer to create stub entities for missing links
    • Offer to remove broken links
    • Offer fuzzy match suggestions for typos

Check 2: Bidirectional Connection Audit

Goal: Ensure connections are reciprocal.

Process:

  1. For each entity, extract its ## Connections section
  2. Parse all outgoing links
  3. For each outgoing link, check if target links back
  4. Track one-way connections

Reciprocal Relationship Matrix:

See [[Connection Matrix]] for complete bidirectional linking rules.

| Source Links To | Target Should Have | |-----------------|-------------------| | Settlement (as location) | Characters > Residents/Notable NPCs | | Organization (as member) | Characters > Members | | Region (as parent) | Settlements/Geography > Contains | | Deity (as patron) | Characters > Worshippers | | Character (as ally) | Characters > Allies | | Character (as enemy) | Characters > Rivals/Enemies | | Government (as ruler) | Characters > Leadership | | Settlement (as HQ) | Organizations > Based Here | | Parent Geography | Child Geography > Part Of | | Historical Event | Locations > Site Of | | Military (as army) | Government > Armed Forces | | Criminal Organization (as operating) | Government > Criminal Elements | | Creature (as habitat) | Geography > Native Wildlife/Monsters |

Report:

## One-Way Connection Report

Found X connections missing reciprocal links.

### [Entity A] → [Entity B]
- A links to B in: Connections > Organizations > Member
- B should link back in: Characters > Members
- Status: MISSING

### [Entity C] → [Entity D]
...

Auto-fix (if --fix):

  • Add reciprocal links to target entities
  • Use appropriate section based on relationship type

Check 3: D&D 5e 2024 Stat Block Validation

Goal: Verify all stat blocks are mechanically correct.

Applies to: Characters (Protagonist, Antagonist, Support Character), Creatures (Monster, Animal, Insect)

3-Pre: Stat Block Mode Detection (Characters Only)

Before validating characters, detect which stat block mode they use:

| Condition | Mode | Validation | |-----------|------|------------| | level: filled, challenge_rating: empty | PC-style | Use level-based proficiency, class features | | challenge_rating: filled, level: empty | NPC-style | Use CR-based proficiency, monster rules | | Both filled | WARNING | Ambiguous mode - flag for manual review | | Neither filled | WARNING | Missing stat block info - flag for manual review |

PC-style validation applies:

  • Proficiency from level (Check 3B)
  • HP from class hit dice + CON (Check 3F)
  • Spell slots from class progression
  • Features match class/subclass

NPC-style validation applies:

  • Proficiency from CR (Check 3A)
  • HP from size hit dice + CON (Check 3F)
  • CR/XP correlation (Check 3A)
  • Legendary features for high CR (Check 3G)

Note: Creatures (Monster, Animal, Insect) always use NPC-style validation with challenge_rating:.


3A: Challenge Rating & XP

Verify CR matches XP using official table:

| CR | XP | Proficiency | |----|-----|-------------| | 0 | 0 or 10 | +2 | | 1/8 | 25 | +2 | | 1/4 | 50 | +2 | | 1/2 | 100 | +2 | | 1 | 200 | +2 | | 2 | 450 | +2 | | 3 | 700 | +2 | | 4 | 1,100 | +2 | | 5 | 1,800 | +3 | | 6 | 2,300 | +3 | | 7 | 2,900 | +3 | | 8 | 3,900 | +3 | | 9 | 5,000 | +4 | | 10 | 5,900 | +4 | | 11 | 7,200 | +4 | | 12 | 8,400 | +4 | | 13 | 10,000 | +5 | | 14 | 11,500 | +5 | | 15 | 13,000 | +5 | | 16 | 15,000 | +5 | | 17 | 18,000 | +6 | | 18 | 20,000 | +6 | | 19 | 22,000 | +6 | | 20 | 25,000 | +6 | | 21 | 33,000 | +7 | | 22 | 41,000 | +7 | | 23 | 50,000 | +7 | | 24 | 62,000 | +7 | | 25 | 75,000 | +8 | | 26 | 90,000 | +8 | | 27 | 105,000 | +8 | | 28 | 120,000 | +8 | | 29 | 135,000 | +9 | | 30 | 155,000 | +9 |

Check: experience_points in YAML matches CR from table.

3B: Proficiency Bonus

By Level (Characters): | Level | Proficiency | |-------|-------------| | 1-4 | +2 | | 5-8 | +3 | | 9-12 | +4 | | 13-16 | +5 | | 17-20 | +6 |

By CR (Monsters): Use CR table above.

Check: proficiency_bonus matches level/CR.

3C: Ability Modifiers

Formula: modifier = floor((score - 10) / 2)

| Score | Modifier | |-------|----------| | 1 | -5 | | 2-3 | -4 | | 4-5 | -3 | | 6-7 | -2 | | 8-9 | -1 | | 10-11 | +0 | | 12-13 | +1 | | 14-15 | +2 | | 16-17 | +3 | | 18-19 | +4 | | 20-21 | +5 | | 22-23 | +6 | | 24-25 | +7 | | 26-27 | +8 | | 28-29 | +9 | | 30 | +10 |

Check: Modifiers in ability score tables are calculated correctly.

3D: Attack Bonuses

Formula: attack_bonus = proficiency_bonus + ability_modifier

  • Melee: Usually STR (or DEX for finesse)
  • Ranged: Usually DEX (or STR for thrown)

Check: Attack bonus in action descriptions matches formula.

3E: Spell Save DC

Formula: spell_save_DC = 8 + proficiency_bonus + spellcasting_ability_modifier

| Class | Spellcasting Ability | |-------|---------------------| | Bard | Charisma | | Cleric | Wisdom | | Druid | Wisdom | | Paladin | Charisma | | Ranger | Wisdom | | Sorcerer | Charisma | | Warlock | Charisma | | Wizard | Intelligence |

Check: Spell save DC in spellcasting section matches formula.

3F: Hit Points

Formula for Characters:

HP = (hit_die_max + CON_mod) + ((level - 1) × (hit_die_avg + CON_mod))

Hit Die by Class: | Class | Hit Die | Average | |-------|---------|---------| | Barbarian | d12 | 7 | | Fighter, Paladin, Ranger | d10 | 6 | | Bard, Cleric, Druid, Monk, Rogue, Warlock | d8 | 5 | | Sorcerer, Wizard | d6 | 4 |

Formula for Monsters:

HP = hit_dice_count × hit_die_average + (hit_dice_count × CON_mod)

Hit Die by Size: | Size | Hit Die | Average | |------|---------|---------| | Tiny | d4 | 2.5 | | Small | d6 | 3.5 | | Medium | d8 | 4.5 | | Large | d10 | 5.5 | | Huge | d12 | 6.5 | | Gargantuan | d20 | 10.5 |

Check: HP matches hit dice formula with CON modifier.

3G: Legendary Features (CR 5+)

For creatures CR 5 and above, check for:

  • Legendary Resistance (3/Day) for CR 10+
  • Legendary Actions for bosses
  • Lair Actions if lair is defined

Report:

## D&D 5e Stat Block Errors

Found X errors across Y entities.

### [Monster Name] (CR 5)
- ERROR: XP is 1500, should be 1800 for CR 5
- ERROR: Proficiency bonus is +2, should be +3 for CR 5
- WARNING: CR 5+ creature missing Legendary Actions (optional but recommended)

### [Character Name] (Level 8)
- ERROR: Proficiency bonus is +2, should be +3 for level 8
- ERROR: Spell Save DC is 14, should be 15 (8 + 3 + 4)
- ERROR: Attack bonus is +5, should be +7 (proficiency 3 + STR 4)

Auto-fix (if --fix):

  • Recalculate and update XP, proficiency, modifiers
  • Update attack bonuses and spell save DCs
  • Flag HP for manual review (hit dice formula)

Check 4: Orphan Entity Detection

Goal: Find entities with no incoming links.

Process:

  1. Build incoming link count for each entity
  2. Entities with 0 incoming links are orphans
  3. Exception: World Overview.md (always root)

Report:

## Orphan Entities

Found X entities with no incoming links.

### Characters
- [[Forgotten NPC]] - 0 incoming links

### Geography
- [[Unnamed Valley]] - 0 incoming links

Auto-fix (if --fix):

  • Suggest parent entities to link from
  • Offer to add to World Overview Quick Reference
  • Offer to delete if truly orphaned

Check 5: Template Compliance

Goal: Verify entities match their templates.

Process:

  1. Determine entity type from:

    • File location (folder)
    • YAML tags
    • Content structure
  2. Compare against expected template structure:

    • Required YAML fields present
    • Required sections present
    • Section ordering correct

Template Requirements by Category:

Characters (All):

  • YAML: name, status, tags containing character type
  • Sections: Overview, Connections

Characters (Protagonist/Antagonist/Support Character):

  • YAML: species, class, armor_class, hit_points
  • YAML (Stat Block Mode): level OR challenge_rating (one required, not both)
  • Sections: Stat Block, Ability Scores, Combat Statistics, Personality, Background

Creatures (Monster):

  • YAML: size, creature_type, challenge_rating, experience_points
  • Sections: Stat Block, Classification, Ability Scores, Traits, Actions

Settlements:

  • YAML: settlement_type, population, government_type
  • Sections: Overview, Districts/Areas, Notable Locations

Organizations:

  • YAML: organization_type or appropriate tag
  • Sections: Overview, Leadership, Goals, Resources

Geography:

  • YAML: terrain_type or geographic tag
  • Sections: Overview, Features, Inhabitants

Report:

## Template Compliance Issues

Found X compliance issues across Y entities.

### [Entity Name] (Characters/Protagonist.md)
- AMBIGUOUS YAML: Both `level` and `challenge_rating` are filled (use only one)
- MISSING SECTION: ## Ability Scores
- WRONG FOLDER: Located in Items/, should be Characters/

### [Entity Name] (Characters/Antagonist.md)
- MISSING YAML: Neither `level` nor `challenge_rating` (one required for stat block)
- WARNING: Cannot validate proficiency bonus without level/CR

### [Entity Name] (Settlements/City.md)
- MISSING YAML: `population`
- EMPTY SECTION: ## Districts

Auto-fix (if --fix):

  • Add missing YAML fields with placeholder values
  • Add missing section headers
  • Suggest moving misplaced files

Check 6: Cross-Entity Consistency

Goal: Verify logical consistency across entities.

Checks:

  1. Religious Consistency:

    • Temples reference deities that exist
    • Religious orders serve established deities
    • Characters with deity patrons link to real deities
  2. Political Consistency:

    • Settlements reference governments that exist
    • Military organizations belong to real governments
    • Rulers are linked to their domains
  3. Geographic Consistency:

    • Settlements are in regions that exist
    • Rivers flow from mountains to bodies of water
    • Roads connect real settlements
    • Terrain types match climate of parent region
  4. Historical Consistency:

    • Events reference locations that exist
    • Battles are part of wars that exist
    • Dynasties connect to governments
    • Characters in historical events existed at that time
  5. Economic Consistency:

    • Currency matches issuing government
    • Trade agreements connect trading partners
    • Shops sell goods appropriate to region

Report:

## Cross-Entity Consistency Issues

### Religious Inconsistencies
- Temple of [[Nonexistent God]] references deity not in pantheon
- Religious Order [[Knights of X]] serves [[Y]] but Y's domain doesn't match order purpose

### Political Inconsistencies
- [[City A]] claims to be capital of [[Kingdom B]] but B lists different capital
- [[Military X]] serves [[Government Y]] but Y doesn't list X in armed forces

### Geographic Inconsistencies
- [[River A]] claims to flow from [[Desert B]] (deserts don't have river sources)
- [[Settlement A]] is in [[Region B]] but B's climate is tundra, A's description is tropical

Check 7: Image Prompt Validation

Goal: Verify image prompt sections are properly filled for /generate-image readiness.

Process:

  1. For each entity file, locate the Image Prompts section (usually near the end)
  2. Find all **Prompt:** fields
  3. Check if they contain actual content vs template placeholders

Template Placeholder Patterns to Detect:

  • Empty field: **Prompt:** followed by nothing or whitespace
  • Unfilled brackets: **Prompt:** [describe scene here]
  • Generic text: **Prompt:** Describe the scene...
  • Template instructions: **Prompt:** Write a detailed prompt for...

Valid Prompt Patterns:

  • Specific descriptions: **Prompt:** A weathered dwarven blacksmith...
  • Detailed scenes: **Prompt:** Interior of a dimly lit tavern...
  • Minimum 20 characters of descriptive content

Report:

## Image Prompt Status

### Ready for Image Generation
| Entity | Prompts Filled | Status |
|--------|----------------|--------|
| [[Lord Varic]] | 2/2 | ✓ Ready |
| [[Ironhold City]] | 2/2 | ✓ Ready |

### Missing or Incomplete Prompts
| Entity | Issue | Line |
|--------|-------|------|
| [[The Sunken Palace]] | Empty prompt field | 245 |
| [[Captain Alonzo]] | Placeholder text only | 189 |
| [[Mountain Pass]] | Missing Image Prompts section | - |

Summary:
- Entities with complete prompts: X
- Entities with incomplete prompts: Y
- Entities missing Image Prompts section: Z

Auto-fix (if --fix):

  • Cannot auto-fill image prompts (requires creative content)
  • Flag entities needing attention
  • Suggest running /create-entity to regenerate Image Prompts section

Check 8: Circular Reference Detection

Goal: Detect potentially problematic circular reference chains.

Process:

  1. Build a directed graph of entity relationships
  2. For each relationship type, check for cycles
  3. Categorize cycles as valid (expected) or warning (potential error)

Valid Circular Patterns: | Pattern | Example | Why Valid | |---------|---------|-----------| | Mutual relationship | A → B (ally), B → A (ally) | Symmetric relationship | | Parent-child | Region → City (contains), City → Region (part of) | Bidirectional by design | | Organization loop | Org → Member, Member → Org | Membership is bidirectional |

Warning Patterns: | Pattern | Example | Why Problematic | |---------|---------|-----------------| | Geographic containment loop | A contains B contains C contains A | Impossible geography | | Temporal causation loop | Event A caused B caused C caused A | Paradox | | Hierarchical loop | God A serves B serves C serves A | Impossible hierarchy | | "Part of" chain loop | Region A part of B part of C part of A | Invalid nesting |

Detection Algorithm:

1. Extract relationships by type:
   - containment: "contains", "part of", "in"
   - hierarchy: "serves", "reports to", "rules"
   - causation: "caused", "led to", "resulted in"
   - temporal: "before", "after", "during"

2. For each relationship type:
   - Build directed graph
   - Run cycle detection (DFS-based)
   - Classify each cycle found

3. Report cycles by severity

Report:

## Circular Reference Analysis

### Valid Bidirectional Links: X
(These are expected and correct)

### Warning: Potential Problematic Cycles

#### Geographic Containment Loop
[[Region A]] → contains → [[Region B]] → contains → [[Region C]] → contains → [[Region A]]
Severity: HIGH - Geographic impossibility
Suggestion: Review containment relationships; one link is likely incorrect

#### Hierarchical Loop
[[Organization X]] → parent of → [[Organization Y]] → parent of → [[Organization X]]
Severity: MEDIUM - Circular hierarchy
Suggestion: Determine which org is truly the parent

No auto-fix available for circular references - requires manual review.

Summary Report

After all checks, provide comprehensive summary:

# World Audit Report: [World Name]

## Overview
- **Total Entities:** X
- **Audit Date:** YYYY-MM-DD
- **Issues Found:** X (Y critical, Z warnings)

## Entity Count
| Category | Count | Issues |
|----------|-------|--------|
| Characters | X | Y |
| Settlements | X | Y |
| Items | X | Y |
| Creatures | X | Y |
| Organizations | X | Y |
| Concepts | X | Y |
| History | X | Y |
| Geography | X | Y |
| **TOTAL** | **X** | **Y** |

## Issue Summary

### Critical Issues (Must Fix)
| Issue Type | Count | Example |
|------------|-------|---------|
| Broken Links | X | [[Missing Entity]] in Entity.md |
| Stat Block Errors | X | Wrong XP for CR in Monster.md |
| Orphan Entities | X | Forgotten NPC.md |

### Warnings (Should Review)
| Issue Type | Count | Example |
|------------|-------|---------|
| One-Way Links | X | A→B without B→A |
| Missing Sections | X | No Connections in Entity.md |
| Consistency Issues | X | Temple references wrong deity |

## Connection Statistics
- **Total Wikilinks:** X
- **Average Links Per Entity:** X.X
- **Most Connected Entity:** [[Entity]] (X links)
- **Least Connected Entity:** [[Entity]] (X links)

## Recommendations

### High Priority
1. Fix X broken links in Y entities
2. Add reciprocal links for Z one-way connections
3. Correct stat block errors in W creatures

### Medium Priority
1. Review X orphan entities for relevance
2. Fill missing sections in Y entities
3. Resolve Z consistency issues

### Low Priority
1. Increase connections in sparse entities
2. Add missing optional YAML fields
3. Consider additional entities for coverage gaps

## Next Steps
- Run `/audit-world [world] --fix` to auto-repair issues
- Use `/create-entity` to fill coverage gaps
- Review orphan entities for deletion or integration

Auto-Fix Mode (--fix)

When --fix is specified:

  1. Ask before each fix category:

    • "Found X broken links. Fix by creating stubs? (y/n)"
    • "Found X one-way connections. Add reciprocal links? (y/n)"
    • "Found X stat errors. Auto-correct calculations? (y/n)"
  2. Create backup before modifying:

    • Copy modified files to .audit-backup/ folder
    • Log all changes made
  3. Report changes:

    ## Auto-Fix Results
    
    ### Files Modified: X
    - Entity1.md: Added 3 reciprocal links
    - Entity2.md: Corrected XP (1500 → 1800)
    - Entity3.md: Added missing YAML fields
    
    ### Files Created: X
    - Missing Entity (stub).md: Created from broken link
    
    ### Backup Location: .audit-backup/[timestamp]/
    

Rollback & Restore Procedure

If auto-fix made unwanted changes, you can restore from backup:

Backup Structure

Worlds/[World Name]/.audit-backup/
└── [YYYY-MM-DD_HH-MM-SS]/
    ├── manifest.json         # List of all modified files
    ├── Characters/
    │   └── [backed up files]
    ├── Settlements/
    │   └── [backed up files]
    └── ...

Manual Restore Steps

  1. Find the backup timestamp:

    ls Worlds/[World Name]/.audit-backup/
    
  2. Review what was changed: Read the manifest file to see what was modified:

    cat Worlds/[World Name]/.audit-backup/[timestamp]/manifest.json
    
  3. Restore specific files:

    # Copy backed up file over current version
    cp "Worlds/[World Name]/.audit-backup/[timestamp]/Characters/Lord Varic.md" \
       "Worlds/[World Name]/Characters/Lord Varic.md"
    
  4. Restore all files from a backup:

    # Restore entire backup (overwrite current files)
    cp -r "Worlds/[World Name]/.audit-backup/[timestamp]/"* "Worlds/[World Name]/"
    

Backup Retention

  • Backups are kept for 7 days by default
  • Each --fix run creates a new timestamped backup
  • Old backups can be manually deleted from .audit-backup/

Partial Restore

To restore only certain changes:

  1. Open the backed-up file
  2. Compare with current file (use diff tool or Obsidian)
  3. Manually copy specific sections you want to restore

Integration with Other Skills

After /generate-world

Run /audit-world [world] to:

  • Verify all generated entities are linked
  • Check stat blocks on generated monsters
  • Ensure no orphans from generation

After /create-entity

Reciprocal link logic in create-entity should prevent most issues, but audit can catch edge cases.

Before /generate-image

Audit can verify image prompt sections are filled before batch image generation.


Usage Examples

# Full audit
/audit-world Eldoria

# Audit with auto-fix
/audit-world Eldoria --fix

# Only check links
/audit-world Eldoria --check links

# Only check D&D stats
/audit-world Eldoria --check stats

# Only audit Characters
/audit-world Eldoria --category Characters

# Combination
/audit-world Eldoria --category Creatures --check stats --fix