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](path#anchor)) - •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: 1. **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 2. **Status Inconsistencies**: Check metadata vs content alignment - Status: Approved but content has TBD markers - Version mismatches between header and changelog 3. **Date Inconsistencies**: Validate date logic - Last Updated should be >= Created date - Referenced dates should be valid 4. **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: 1. **Broken Links**: Verify all markdown links resolve - [text](path) - file exists - [text](path#anchor) - anchor exists 2. **Invalid Cross-References**: Check traceability tags - @brd: BRD.NN.TT.SS format - @prd: PRD.NN.TT.SS format - Document referenced must exist 3. **Relative Path Errors**: Validate ../ paths resolve correctly 4. **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: 1. **Spelling Errors**: Common misspellings and technical terms - Use standard English dictionary + technical glossary - Flag words not in either 2. **Markdown Syntax**: Validate proper formatting - Unclosed code blocks - Mismatched brackets/parentheses - Broken table syntax 3. **Punctuation Issues**: Common punctuation errors - Double periods, missing spaces after periods - Comma usage 4. **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: 1. **Undefined Acronyms**: Find uppercase abbreviations without definitions - Check if defined on first use - Check if in glossary section 2. **Inconsistent Naming**: Same concept, different names - user/User/USER - login/sign-in/authenticate - Build term consistency map 3. **Ambiguous Language**: Unclear references - Pronouns with unclear antecedents (it, this, that) - Vague quantifiers (some, many, few) 4. **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