doc-review
Description: Multi-agent documentation quality review system that analyzes a single file or all files in a folder for data inconsistencies, reference errors, typos, and unclear terminology.
Category: Quality Assurance
Complexity: High (multi-agent coordination)
Purpose
Comprehensive documentation quality review using specialized sub-agents to detect:
-
Data inconsistencies: Contradictory information, wrong data, confusing content
-
Reference errors: Broken links, invalid cross-references, missing anchors
-
Typos and spelling: Misspellings, grammatical errors, formatting issues
-
Terminology issues: Undefined terms, inconsistent naming, ambiguous language
Analysis Modes
Mode Input Behavior
Single File /doc-review path/to/file.md
Analyzes one file in depth
Folder /doc-review path/to/folder/
Analyzes ALL files in folder together, including cross-file consistency
Folder mode provides additional cross-file checks:
-
Terminology consistency across all documents
-
Cross-document reference validation
-
Duplicate content detection across files
-
Consistent naming conventions
When to Use This Skill
Use doc-review when:
-
Reviewing documentation before publication
-
Validating files after batch creation
-
Performing quality audits on markdown/YAML files
-
Checking cross-reference integrity
-
Pre-commit quality validation
-
Reviewing a single file or entire folder
Do NOT use when:
-
Full traceability validation needed (use trace-check)
-
Code-specific review needed (use code-review)
-
Single document structure validation (use doc-*-validator skills)
Skill Inputs
Input Type Required Description Example
path string Yes Single file path or folder path to review ai_dev_flow/PRD/PRD-001.md , docs/EARS/
scope string No Review scope "full" (default), "quick" , "deep"
focus array No Specific checks to run ["data", "references", "typos", "terms"]
report_format string No Output format "markdown" (default), "json" , "summary"
auto_fix boolean No Attempt automatic fixes false (default)
Sub-Agent Architecture
The skill coordinates 4 specialized sub-agents that run in parallel:
graph TD A[doc-review Skill] --> B[Input: File or Folder] B --> C[File Discovery] C --> D[Parallel Sub-Agents]
D --> E[Data Consistency Agent]
D --> F[Reference Checker Agent]
D --> G[Typo Detection Agent]
D --> H[Terminology Agent]
E --> I[Merge Results]
F --> I
G --> I
H --> I
I --> J[Generate Report]
J --> K[Output: Quality Report]
Sub-Agent 1: Data Consistency Agent
Purpose: Detect inconsistent, wrong, or confusing information
Checks:
-
Contradictory statements within same document
-
Numerical inconsistencies (counts, dates, versions)
-
Status field mismatches (metadata vs content)
-
Duplicate content with variations
-
Logical contradictions
-
Outdated information markers
Detection Patterns:
data_consistency_checks: count_mismatch: pattern: "\d+ (requirements|items|sections)" validate: "count matches actual items" error_code: "DATA-E001"
status_mismatch: pattern: "Status:\s*(Draft|Approved|Implemented)" validate: "matches content maturity" error_code: "DATA-E002"
date_inconsistency: pattern: "\d{4}-\d{2}-\d{2}" validate: "Last Updated >= Created" error_code: "DATA-E003"
version_format: pattern: "Version:\s*[\d.]+" validate: "semantic versioning compliance" error_code: "DATA-E004"
duplicate_content: pattern: "similar paragraphs >80%" validate: "intentional or error" error_code: "DATA-W001"
Sub-Agent 2: Reference Checker Agent
Purpose: Validate all links, references, and cross-document connections
Checks:
-
Markdown link resolution (text )
-
Internal anchor existence (#section-id )
-
Cross-document reference validity
-
Relative path correctness
-
External URL accessibility (optional)
-
Traceability tag format (@brd: , @prd: , etc.)
Detection Patterns:
reference_checks: broken_link: pattern: "\[.?\]\(.?\)" validate: "target file exists" error_code: "REF-E001"
invalid_anchor: pattern: "\[.?\]\(.?#.*?\)" validate: "anchor exists in target" error_code: "REF-E002"
orphan_anchor: pattern: "^#{1,6}\s+.*$" validate: "has incoming references" error_code: "REF-W001"
relative_path: pattern: "\.\./|\./" validate: "path resolves correctly" error_code: "REF-E003"
tag_format: pattern: "@(brd|prd|ears|bdd|adr|sys|req|spec|impl|ctr|tasks):" validate: "follows TYPE.NN.TT.SS format" error_code: "REF-E004"
circular_reference: pattern: "A→B→...→A" validate: "no circular chains" error_code: "REF-E005"
Sub-Agent 3: Typo Detection Agent
Purpose: Find spelling errors, grammatical issues, and formatting problems
Checks:
-
Common misspellings
-
Technical term spelling
-
Capitalization inconsistencies
-
Punctuation errors
-
Whitespace issues
-
Markdown syntax errors
Detection Patterns:
typo_checks: common_misspellings: dictionary: "en_US + technical_terms" error_code: "TYPO-E001"
case_inconsistency: pattern: "same term, different cases" examples: ["GitHub/github", "API/api", "JavaScript/Javascript"] error_code: "TYPO-W001"
double_words: pattern: "\b(\w+)\s+\1\b" error_code: "TYPO-E002"
markdown_syntax: patterns: - "unclosed_code_block" - "mismatched_brackets" - "broken_table" error_code: "TYPO-E003"
punctuation: patterns: - "double_period: \.\." - "space_before_comma: \s," - "missing_space_after_period: \.[A-Z]" error_code: "TYPO-W002"
whitespace: patterns: - "trailing_whitespace" - "multiple_blank_lines" - "tabs_vs_spaces" error_code: "TYPO-W003"
Sub-Agent 4: Terminology Agent
Purpose: Identify unclear, undefined, or inconsistent terminology
Checks:
-
Undefined acronyms
-
Inconsistent term usage
-
Ambiguous language
-
Jargon without definition
-
Conflicting definitions
-
Domain-specific term validation
Detection Patterns:
terminology_checks: undefined_acronym: pattern: "\b[A-Z]{2,}\b" validate: "defined on first use or in glossary" error_code: "TERM-E001"
inconsistent_naming: examples: - "user/User/USER" - "login/sign-in/authenticate" - "config/configuration/settings" error_code: "TERM-E002"
ambiguous_terms: flagged_words: - "it" - "this" - "that" - "they" context: "unclear antecedent" error_code: "TERM-W001"
subjective_qualifiers: flagged_words: - "easy" - "simple" - "fast" - "efficient" - "powerful" context: "lacks quantification" error_code: "TERM-W002"
undefined_jargon: pattern: "domain-specific terms without definition" error_code: "TERM-W003"
conflicting_definitions: pattern: "same term, different meanings" error_code: "TERM-E003"
Workflow Execution
Step 1: File Discovery
Expand path/pattern to file list
def discover_files(path_pattern): if is_glob_pattern(path_pattern): return glob.glob(path_pattern, recursive=True) elif os.path.isfile(path_pattern): return [path_pattern] elif os.path.isdir(path_pattern): return glob.glob(f"{path_pattern}/**/*.md", recursive=True) else: raise FileNotFoundError(f"Path not found: {path_pattern}")
Step 2: Launch Parallel Sub-Agents
Launch 4 sub-agents in parallel using Task tool
async def run_review(files, scope, focus): tasks = []
if "data" in focus or focus == "all":
tasks.append(Task(
subagent_type="general-purpose",
prompt=f"Review files for data consistency: {files}",
description="Data consistency check"
))
if "references" in focus or focus == "all":
tasks.append(Task(
subagent_type="general-purpose",
prompt=f"Validate all references and links: {files}",
description="Reference validation"
))
if "typos" in focus or focus == "all":
tasks.append(Task(
subagent_type="general-purpose",
prompt=f"Check for typos and formatting: {files}",
description="Typo detection"
))
if "terms" in focus or focus == "all":
tasks.append(Task(
subagent_type="general-purpose",
prompt=f"Validate terminology consistency: {files}",
description="Terminology review"
))
# Run all tasks in parallel
results = await asyncio.gather(*tasks)
return merge_results(results)
Step 3: Merge and Prioritize Results
def merge_results(agent_results): merged = { "errors": [], # Severity: ERROR (must fix) "warnings": [], # Severity: WARNING (should fix) "info": [], # Severity: INFO (consider) "stats": {} }
for result in agent_results:
merged["errors"].extend(result.get("errors", []))
merged["warnings"].extend(result.get("warnings", []))
merged["info"].extend(result.get("info", []))
# Deduplicate and sort by severity
merged["errors"] = deduplicate(merged["errors"])
merged["warnings"] = deduplicate(merged["warnings"])
return merged
Step 4: Generate Report
Output format based on report_format parameter.
Error Codes Reference
Data Consistency (DATA)
Code Severity Description Auto-Fix
DATA-E001 ERROR Count mismatch (stated vs actual) Yes
DATA-E002 ERROR Status/content maturity mismatch Manual
DATA-E003 ERROR Date inconsistency Yes
DATA-E004 ERROR Invalid version format Yes
DATA-W001 WARNING Potential duplicate content Manual
DATA-W002 WARNING Outdated information marker Manual
References (REF)
Code Severity Description Auto-Fix
REF-E001 ERROR Broken link (file not found) Manual
REF-E002 ERROR Invalid anchor Manual
REF-E003 ERROR Relative path error Yes
REF-E004 ERROR Invalid traceability tag format Yes
REF-E005 ERROR Circular reference detected Manual
REF-W001 WARNING Orphan anchor (no incoming refs) Manual
Typos (TYPO)
Code Severity Description Auto-Fix
TYPO-E001 ERROR Misspelled word Yes
TYPO-E002 ERROR Double word Yes
TYPO-E003 ERROR Markdown syntax error Manual
TYPO-W001 WARNING Case inconsistency Manual
TYPO-W002 WARNING Punctuation issue Yes
TYPO-W003 WARNING Whitespace issue Yes
Terminology (TERM)
Code Severity Description Auto-Fix
TERM-E001 ERROR Undefined acronym Manual
TERM-E002 ERROR Inconsistent term usage Manual
TERM-E003 ERROR Conflicting definitions Manual
TERM-W001 WARNING Ambiguous pronoun Manual
TERM-W002 WARNING Subjective qualifier Manual
TERM-W003 WARNING Undefined jargon Manual
Usage Examples
Example 1: Review Single File
/doc-review ai_dev_flow/EARS/EARS_CREATION_RULES.md
Output:
=== Documentation Review Report === File: ai_dev_flow/EARS/EARS_CREATION_RULES.md Mode: Single File Scope: full
Data Consistency: 2 issues [DATA-E001] Line 547: States "total_requirements: 135" but only 130 found [DATA-W001] Line 89-95: Similar content to lines 105-111
References: 1 issue [REF-E002] Line 137: Anchor #cross-reference-link-format-mandatory not found
Typos: 0 issues
Terminology: 1 issue [TERM-W002] Line 26: "Complete reference" - subjective qualifier
Summary: 4 issues (2 errors, 2 warnings)
Example 2: Review All Files in Folder
/doc-review docs/EARS/
Output:
=== Documentation Review Report === Folder: docs/EARS/ Mode: Folder (all files together) Files analyzed: 12 Scope: full
Cross-File Analysis: [TERM-E002] Inconsistent term: "requirement" vs "EARS requirement" across 4 files [REF-E001] Broken cross-reference: EARS-001.md → EARS-005.md#section-missing
Per-File Issues: EARS-001.md: 2 errors, 1 warning EARS-002.md: 0 errors, 3 warnings ...
Summary: 8 errors, 15 warnings across 12 files
Example 3: Focus on Specific Checks
/doc-review ai_dev_flow/PRD/ --focus references,typos
Example 4: Quick Pre-Commit Check
/doc-review docs/ --scope quick --report_format summary
Output:
Quick Review: docs/ Files scanned: 87 Errors: 3 Warnings: 12 Status: NEEDS ATTENTION (fix errors before commit)
Integration Points
With Other Skills
Skill Integration
trace-check Shares reference validation logic
doc-validator Complementary (cross-doc vs single-file)
quality-advisor Real-time vs batch validation
code-review Source code vs documentation focus
With CI/CD
.github/workflows/docs-review.yml
name: Documentation Review
on: [pull_request]
jobs: doc-review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run doc review run: | claude-code /doc-review docs/ --scope quick --report_format json > review.json - name: Check for errors run: | if jq '.errors | length > 0' review.json; then echo "Documentation errors found" exit 1 fi
Quality Gates
Definition of Done
-
All ERROR-level issues resolved
-
WARNING-level issues reviewed and addressed or justified
-
No broken links
-
All acronyms defined
-
Terminology consistent across documents
-
No typos in headers or critical content
Severity Thresholds
Scope Errors Allowed Warnings Allowed
quick 0 10
full 0 5
deep 0 0
Sub-Agent Prompts
Data Consistency Agent Prompt
You are a data consistency reviewer. Analyze the following file(s) for:
-
Count Mismatches: Find stated counts that don't match actual items
- "N requirements" should match actual requirement count
- "N sections" should match actual section count
-
Status Inconsistencies: Check metadata vs content alignment
- Status: Approved but content has TBD markers
- Version mismatches between header and changelog
-
Date Inconsistencies: Validate date logic
- Last Updated should be >= Created date
- Referenced dates should be valid
-
Duplicate Content: Flag similar paragraphs that may be errors
Output format: JSON with error_code, line_number, description, severity
Reference Checker Agent Prompt
You are a reference validation expert. Analyze the following file(s) for:
-
Broken Links: Verify all markdown links resolve
-
Invalid Cross-References: Check traceability tags
- @brd: BRD.NN.TT.SS format
- @prd: PRD.NN.TT.SS format
- Document referenced must exist
-
Relative Path Errors: Validate ../ paths resolve correctly
-
Orphan Anchors: Find headers with no incoming links (optional)
Output format: JSON with error_code, line_number, target, description, severity
Typo Detection Agent Prompt
You are a proofreading expert. Analyze the following file(s) for:
-
Spelling Errors: Common misspellings and technical terms
- Use standard English dictionary + technical glossary
- Flag words not in either
-
Markdown Syntax: Validate proper formatting
- Unclosed code blocks
- Mismatched brackets/parentheses
- Broken table syntax
-
Punctuation Issues: Common punctuation errors
- Double periods, missing spaces after periods
- Comma usage
-
Whitespace Problems: Formatting consistency
- Trailing whitespace
- Multiple blank lines
- Inconsistent indentation
Output format: JSON with error_code, line_number, word/pattern, suggestion, severity
Terminology Agent Prompt
You are a terminology consistency expert. Analyze the following file(s) for:
-
Undefined Acronyms: Find uppercase abbreviations without definitions
- Check if defined on first use
- Check if in glossary section
-
Inconsistent Naming: Same concept, different names
- user/User/USER
- login/sign-in/authenticate
- Build term consistency map
-
Ambiguous Language: Unclear references
- Pronouns with unclear antecedents (it, this, that)
- Vague quantifiers (some, many, few)
-
Subjective Qualifiers: Unmeasurable claims
- "easy to use", "fast", "efficient"
- "simple configuration"
Output format: JSON with error_code, line_number, term, issue, suggestion, severity
Configuration
Custom Dictionary
Add project-specific terms to skip false positives:
.doc-review.yaml
custom_dictionary:
- "EARS"
- "BDD"
- "ADR"
- "Gherkin"
- "SDD"
- "traceability"
ignored_patterns:
- "node_modules/"
- "*.min.js"
- "vendor/"
severity_overrides: TERM-W002: "INFO" # Downgrade subjective qualifiers to INFO
Performance
Benchmarks
Files Scope Time Memory
10 quick <5s 50MB
50 full <30s 200MB
100 deep <60s 400MB
Optimization
-
Parallel sub-agents reduce wall-clock time by ~60%
-
Caching of dictionary lookups
-
Incremental mode for changed files only
Limitations
-
Cannot understand semantic meaning deeply (may miss logical contradictions)
-
May produce false positives for domain-specific terminology
-
External URL validation requires network access
-
Auto-fix limited to simple patterns (typos, formatting)
-
Complex reference chains require manual review
Version Information
Version: 1.0.0 Created: 2026-01-01 Status: Active Author: AI Dev Flow Framework
Change Log:
-
1.1.0 (2026-01-01): Renamed to doc-review, clarified analysis modes
-
Single file mode: deep analysis of one file
-
Folder mode: analyze all files together with cross-file checks
-
Added cross-file consistency checks in folder mode
-
1.0.0 (2026-01-01): Initial release as file-review with 4 sub-agents
-
Data consistency checking
-
Reference validation
-
Typo detection
-
Terminology review
-
Parallel execution support
-
Multiple output formats