dnd5e-srd
skillRetrieval-augmented generation (RAG) skill for the D&D 5e System Reference Document (SRD). Use when answering questions about D&D 5e core rules, spells, combat, equipment, conditions, monsters, and other SRD content. This skill provides agentic search-based access to the SRD split into page-range markdown files.
apm::install
apm install @microck/dnd5e-srdapm::skill.md
---
name: dnd5e-srd
description: Retrieval-augmented generation (RAG) skill for the D&D 5e System Reference Document (SRD). Use when answering questions about D&D 5e core rules, spells, combat, equipment, conditions, monsters, and other SRD content. This skill provides agentic search-based access to the SRD split into page-range markdown files.
---
# D&D 5e SRD RAG
This skill provides search-based retrieval access to the Dungeons & Dragons 5th Edition System Reference Document (SRD), organized by page ranges as markdown files in the `references/` directory.
## When to Use This Skill
Use this skill whenever answering questions about D&D 5e SRD content, including:
- Core rules and gameplay procedures
- Ability checks, saving throws, and skill use
- Combat, actions, conditions, and movement
- Classes, backgrounds, equipment, and magic items
- Spells and spellcasting
- Creatures and stat blocks included in the SRD
## Search Strategy
Follow this agentic search process for D&D 5e SRD queries:
### 1. Identify Relevant Page Ranges
The SRD is organized by page ranges. Use this file index to locate content:
**Important: Always use the Python search tool (`scripts/search_with_positions.py`) to get exact character positions for source citations.**
#### File Index (by page range)
Note: Topics below follow your provided outline and are aligned to the actual file splits; where a topic spans multiple files, it's marked as continued.
- `DND5eSRD_001-018.md`: Intro through Character Creation
- `DND5eSRD_019-035.md`: Barbarian, Bard, Cleric (start)
- `DND5eSRD_036-046.md`: Cleric/Druid, Fighter, Monk (start)
- `DND5eSRD_047-063.md`: Monk, Paladin, Ranger, Rogue
- `DND5eSRD_064-076.md`: Sorcerer, Warlock, Wizard (start)
- `DND5eSRD_077-086.md`: Wizard, Origins, Feats
- `DND5eSRD_087-103.md`: Equipment
- `DND5eSRD_104-120.md`: Spells
- `DND5eSRD_121-137.md`: Spells
- `DND5eSRD_138-154.md`: Spells
- `DND5eSRD_155-175.md`: Spells
- `DND5eSRD_176-191.md`: Rules Glossary (part)
- `DND5eSRD_192-203.md`: Gameplay Toolbox, Magic Items (start, part 1)
- `DND5eSRD_204-229.md`: Gameplay Toolbox, Magic Items (continued)
- `DND5eSRD_230-252.md`: Magic Items (continued)
- `DND5eSRD_253-272.md`: Monsters intro + early entries
- `DND5eSRD_273-292.md`: Monsters
- `DND5eSRD_293-312.md`: Monsters
- `DND5eSRD_313-332.md`: Monsters
- `DND5eSRD_333-364.md`: Monsters / Animals (continued)
### 2. Search Using the Python Tools
Primary method: use the search + expand workflow for accurate positions and structured context.
```bash
# Step 1: Search to find content with exact character positions
python /skills/dnd5e-srd/scripts/search_with_positions.py "search term" --all
# Step 2: If you need more context, expand specific result(s)
python /skills/dnd5e-srd/scripts/expand_context.py "search term" --result 3 --mode section --all
# Examples
# Search combat-related terms
python /skills/dnd5e-srd/scripts/search_with_positions.py "grapple" --all
# Search spells and expand result #1 by section
python /skills/dnd5e-srd/scripts/expand_context.py "fireball" --result 1 --mode section --all
# Search specific page ranges
python /skills/dnd5e-srd/scripts/search_with_positions.py "longsword" --pages 200-300
# Batch expand multiple results
python /skills/dnd5e-srd/scripts/expand_context.py "Attack" --results 1,3,5 --mode paragraph --all
```
The search tool returns:
- Filename
- Character range (start-end positions)
- Matched text with context
- Ready-to-use citation format: `[filename, chars START-END]`
The expand tool returns:
- Expanded text (paragraph, section, or entire document)
- Heading breadcrumb trail
- Original match position within the expansion
- Expansion bounds and metadata
### 3. Expand Context When Needed
After searching, expand results that need deeper context:
- Use `--mode paragraph` for surrounding text
- Use `--mode section` to get the full rule section with headings
- Use `--results 1,3,5` to batch expand multiple results
### 4. Multi-hop Queries
For questions requiring multiple pieces of information:
1. Break down the query into components
2. Search for each component separately
3. Synthesize the information from multiple sources
### 5. Provide Accurate Answers with Source Citations
After retrieving information:
- Quote or paraphrase the exact rules as needed
- **Always cite sources using the character position format**: `[filename, chars START-END]`
- Include multiple sources when relevant
- Cite at the end of the relevant information, not inline
Citation examples:
```
The spell Fireball deals 8d6 fire damage on a failed save. [DND5eSRD_293-312.md, chars 12000-12100]
A grapple check uses Athletics vs. the target's escape DC (see Conditions). [DND5eSRD_087-103.md, chars 5400-5600]
```
## References Directory Structure
The `references/` directory contains the SRD split into page-range files.
Files are named `DND5eSRD_XXX-YYY.md` where `XXX-YYY` is the page range.
To list all files:
```bash
ls -lh /skills/dnd5e-srd/references/
```
To find which file contains specific content:
```bash
grep -l "search term" /skills/dnd5e-srd/references/*.md
```
## Python Tools
### 1. Search Tool (`search_with_positions.py`)
Features:
- Searches SRD reference files with regex-based term matching
- Returns precise character ranges for each match
- Includes contextual text around matches
- Supports filtering by page ranges or specific files
Usage:
```bash
# Basic search across all files
python scripts/search_with_positions.py "term" --all
# Search specific page range
python scripts/search_with_positions.py "term" --pages 200-300
# Control output
python scripts/search_with_positions.py "term" --all --max-results 10 --context 200
# Case-sensitive search
python scripts/search_with_positions.py "Attack" --all --case-sensitive
```
### 2. Context Expansion Tool (`expand_context.py`)
Features:
- Expands specific search results with boundary-aware modes
- Modes: `paragraph` (default), `section`, `section-only`, `char`, `document`
- Provides heading breadcrumb trails for context
- Supports batch expansion and JSON output
Usage:
```bash
# Expand a specific search result by section
python scripts/expand_context.py "fireball" --result 3 --mode section --all-search
# Expand multiple results at once
python scripts/expand_context.py "Attack" --results 1,3,5 --mode paragraph --all-search
# Direct expansion from known file position
python scripts/expand_context.py --file "DND5eSRD_121-137.md" --position 1234 --mode section
# JSON output for machine processing
python scripts/expand_context.py "wizard" --result 1 --all-search --format json
```
## Best Practices
- **Use the Python tools**: search first, then expand for deeper context
- **Always cite sources** with `[filename, chars START-END]`
- **Leverage structure**: use `--mode section` to get full rules and headings
- **Be specific**: search for exact SRD terminology
- **Check multiple files**: related rules may span multiple ranges
- **Handle ambiguity**: present possible interpretations with citations
## Notes
- Files are organized by page ranges (e.g., 001-018, 019-035)
- Some files are large (up to 120K+); prefer targeted searches
- This skill includes SRD content only; not supplements or non-SRD material