Install the "drawing-analyzer" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/2.4-PDF-CAD-to-Data/drawing-analyzer into .claude/skills/drawing-analyzer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drawing-analyzer", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill drawing-analyzer -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "drawing-analyzer" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/2.4-PDF-CAD-to-Data/drawing-analyzer into .agents/skills/drawing-analyzer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drawing-analyzer", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill drawing-analyzer -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "drawing-analyzer" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/2.4-PDF-CAD-to-Data/drawing-analyzer into .cursor/skills/drawing-analyzer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drawing-analyzer", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill drawing-analyzer -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "drawing-analyzer" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/2.4-PDF-CAD-to-Data/drawing-analyzer into .gemini/skills/drawing-analyzer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drawing-analyzer", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill drawing-analyzer -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "drawing-analyzer" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/2.4-PDF-CAD-to-Data/drawing-analyzer into .github/skills/drawing-analyzer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drawing-analyzer", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill drawing-analyzer -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "drawing-analyzer" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/2.4-PDF-CAD-to-Data/drawing-analyzer into .opencode/skills/drawing-analyzer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drawing-analyzer", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
drawing-analyzer
GitHub stars
345
Used in
1 other repo
Token cost
~4k tokens
SKILL.md length
61 words
Files
3
Skills in repo
36
Repo updated
First seen
Licence
MIT
At a glance
Analyze construction drawings to extract dimensions, annotations, symbols, and metadata.
Tasks that involve Design review and critique
SKILL.md covers Overview, Business Case, Technical Implementation and Quick Start, plus 1 more section
Calls pip
What it does
Drawing Analyzer is an agent skill from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction. Analyze construction drawings to extract dimensions, annotations, symbols, and metadata. Support quantity takeoff and design review automation.
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `claw.json` and `instructions.md`).
It sits in Media & Creative, covering Design review and critique. The repository describes itself as: 221 AI skills for construction: BIM analysis, cost estimation, scheduling, document control, and automation with Claude Code. The licence is MIT.
When your agent uses it
Tasks that involve Design review and critique
Example prompts
“/drawing-analyzer”
Requirements
Python 3
What it can do on your machine
Read from SKILL.md and the folder at commit ce45bbf. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
pip
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Drawing Analyzer loads about 4k tokens when it runs. Until then it costs about 40 tokens; SKILL.md has 61 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~40
When it runs· the whole SKILL.md, loaded when a task matches
~4k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/drawing-analyzer/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
drawing-analyzer
description
Analyze construction drawings to extract dimensions, annotations, symbols, and metadata. Support quantity takeoff and design review automation.
homepage
https://datadrivenconstruction.io
Drawing Analyzer for Construction
Overview
Analyze construction drawings (PDF, DWG) to extract dimensions, annotations, symbols, title block data, and support automated quantity takeoff and design review.
Business Case
Drawing analysis automation enables:
Faster Takeoffs: Extract quantities from drawings
Quality Control: Verify drawing completeness
Data Extraction: Pull metadata for project systems
Design Review: Automated checking against standards
Technical Implementation
python
from dataclasses import dataclass, field
from typing import List, Dict, Any, Optional, Tuple
import re
import pdfplumber
from pathlib import Path
@dataclass
class TitleBlockData:
project_name: str
project_number: str
sheet_number: str
sheet_title: str
discipline: str
scale: str
date: str
revision: str
drawn_by: str
checked_by: str
approved_by: str
@dataclass
class Dimension:
value: float
unit: str
dimension_type: str # linear, angular, radial
location: Tuple[float, float]
associated_text: str
@dataclass
class Annotation:
text: str
annotation_type: str # note, callout, tag, keynote
location: Tuple[float, float]
references: List[str]
@dataclass
class Symbol:
symbol_type: str # door, window, equipment, etc.
tag: str
location: Tuple[float, float]
properties: Dict[str, Any]
@dataclass
class DrawingAnalysisResult:
file_name: str
title_block: Optional[TitleBlockData]
dimensions: List[Dimension]
annotations: List[Annotation]
symbols: List[Symbol]
scale_factor: float
drawing_area: Tuple[float, float]
quality_issues: List[str]
class DrawingAnalyzer:
"""Analyze construction drawings for data extraction."""
# Common dimension patterns
DIMENSION_PATTERNS = [
r"(\d+'-\s*\d+(?:\s*\d+/\d+)?\"?)", # Feet-inches: 10'-6", 10' - 6 1/2"
r"(\d+(?:\.\d+)?)\s*(?:mm|cm|m|ft|in)", # Metric/imperial with unit
r"(\d+'-\d+\")", # Compact feet-inches
r"(\d+)\s*(?:SF|LF|CY|EA)", # Quantity dimensions
]
# Common annotation patterns
ANNOTATION_PATTERNS = {
'keynote': r'^\d{1,2}[A-Z]?$', # 1A, 12, 5B
'room_tag': r'^(?:RM|ROOM)\s*\d+',
'door_tag': r'^[A-Z]?\d{2,3}[A-Z]?$',
'grid_line': r'^[A-Z]$|^\d+$',
'elevation': r'^(?:EL|ELEV)\.?\s*\d+',
'detail_ref': r'^\d+/[A-Z]\d+',
}
# Scale patterns
SCALE_PATTERNS = [
r"SCALE:\s*(\d+(?:/\d+)?)\s*[\"']\s*=\s*(\d+)\s*['\-]", # 1/4" = 1'-0"
r"(\d+):(\d+)", # 1:100
r"NTS|NOT TO SCALE",
]
def __init__(self):
self.results: Dict[str, DrawingAnalysisResult] = {}
def analyze_pdf_drawing(self, pdf_path: str) -> DrawingAnalysisResult:
"""Analyze a PDF drawing."""
path = Path(pdf_path)
all_text = ""
dimensions = []
annotations = []
symbols = []
quality_issues = []
with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
# Extract text
text = page.extract_text() or ""
all_text += text + "\n"
# Extract dimensions
page_dims = self._extract_dimensions(text)
dimensions.extend(page_dims)
# Extract annotations
page_annots = self._extract_annotations(text)
annotations.extend(page_annots)
# Extract from tables (often contain schedules)
tables = page.extract_tables()
for table in tables:
symbols.extend(self._parse_schedule_table(table))
# Parse title block
title_block = self._extract_title_block(all_text)
# Determine scale
scale_factor = self._determine_scale(all_text)
# Quality checks
quality_issues = self._check_drawing_quality(
title_block, dimensions, annotations
)
result = DrawingAnalysisResult(
file_name=path.name,
title_block=title_block,
dimensions=dimensions,
annotations=annotations,
symbols=symbols,
scale_factor=scale_factor,
drawing_area=(0, 0), # Would need image analysis
quality_issues=quality_issues
)
self.results[path.name] = result
return result
def _extract_dimensions(self, text: str) -> List[Dimension]:
"""Extract dimensions from text."""
dimensions = []
for pattern in self.DIMENSION_PATTERNS:
matches = re.findall(pattern, text)
for match in matches:
value, unit = self._parse_dimension_value(match)
if value > 0:
dimensions.append(Dimension(
value=value,
unit=unit,
dimension_type='linear',
location=(0, 0),
associated_text=match
))
return dimensions
def _parse_dimension_value(self, dim_text: str) -> Tuple[float, str]:
"""Parse dimension text to value and unit."""
dim_text = dim_text.strip()
# Feet and inches: 10'-6"
ft_in_match = re.match(r"(\d+)'[-\s]*(\d+)?(?:\s*(\d+)/(\d+))?\"?", dim_text)
if ft_in_match:
feet = int(ft_in_match.group(1))
inches = int(ft_in_match.group(2) or 0)
if ft_in_match.group(3) and ft_in_match.group(4):
inches += int(ft_in_match.group(3)) / int(ft_in_match.group(4))
return feet * 12 + inches, 'in'
# Metric with unit
metric_match = re.match(r"(\d+(?:\.\d+)?)\s*(mm|cm|m)", dim_text)
if metric_match:
return float(metric_match.group(1)), metric_match.group(2)
# Just a number
num_match = re.match(r"(\d+(?:\.\d+)?)", dim_text)
if num_match:
return float(num_match.group(1)), ''
return 0, ''
def _extract_annotations(self, text: str) -> List[Annotation]:
"""Extract annotations from text."""
annotations = []
lines = text.split('\n')
for line in lines:
line = line.strip()
if not line:
continue
for annot_type, pattern in self.ANNOTATION_PATTERNS.items():
if re.match(pattern, line, re.IGNORECASE):
annotations.append(Annotation(
text=line,
annotation_type=annot_type,
location=(0, 0),
references=[]
))
break
# General notes
if line.startswith(('NOTE:', 'SEE ', 'REFER TO', 'TYP', 'U.N.O.')):
annotations.append(Annotation(
text=line,
annotation_type='note',
location=(0, 0),
references=[]
))
return annotations
def _extract_title_block(self, text: str) -> Optional[TitleBlockData]:
"""Extract title block information."""
# Common title block patterns
patterns = {
'project_name': r'PROJECT(?:\s*NAME)?:\s*(.+?)(?:\n|$)',
'project_number': r'(?:PROJECT\s*)?(?:NO|NUMBER|#)\.?:\s*(\S+)',
'sheet_number': r'SHEET(?:\s*NO)?\.?:\s*([A-Z]?\d+(?:\.\d+)?)',
'sheet_title': r'SHEET\s*TITLE:\s*(.+?)(?:\n|$)',
'scale': r'SCALE:\s*(.+?)(?:\n|$)',
'date': r'DATE:\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})',
'revision': r'REV(?:ISION)?\.?:\s*(\S+)',
'drawn_by': r'(?:DRAWN|DRN)\s*(?:BY)?:\s*(\S+)',
'checked_by': r'(?:CHECKED|CHK)\s*(?:BY)?:\s*(\S+)',
}
extracted = {}
for field, pattern in patterns.items():
match = re.search(pattern, text, re.IGNORECASE)
extracted[field] = match.group(1).strip() if match else ''
# Determine discipline from sheet number
sheet_num = extracted.get('sheet_number', '')
discipline = ''
if sheet_num:
prefix = sheet_num[0].upper() if sheet_num[0].isalpha() else ''
discipline_map = {
'A': 'Architectural', 'S': 'Structural', 'M': 'Mechanical',
'E': 'Electrical', 'P': 'Plumbing', 'C': 'Civil',
'L': 'Landscape', 'I': 'Interior', 'F': 'Fire Protection'
}
discipline = discipline_map.get(prefix, '')
return TitleBlockData(
project_name=extracted.get('project_name', ''),
project_number=extracted.get('project_number', ''),
sheet_number=sheet_num,
sheet_title=extracted.get('sheet_title', ''),
discipline=discipline,
scale=extracted.get('scale', ''),
date=extracted.get('date', ''),
revision=extracted.get('revision', ''),
drawn_by=extracted.get('drawn_by', ''),
checked_by=extracted.get('checked_by', ''),
approved_by=''
)
def _parse_schedule_table(self, table: List[List]) -> List[Symbol]:
"""Parse schedule table to extract symbols/elements."""
symbols = []
if not table or len(table) < 2:
return symbols
# First row is usually headers
headers = [str(cell).lower() if cell else '' for cell in table[0]]
# Find key columns
tag_col = next((i for i, h in enumerate(headers) if 'tag' in h or 'mark' in h or 'no' in h), 0)
type_col = next((i for i, h in enumerate(headers) if 'type' in h or 'size' in h), -1)
for row in table[1:]:
if len(row) > tag_col and row[tag_col]:
tag = str(row[tag_col]).strip()
symbol_type = str(row[type_col]).strip() if type_col >= 0 and len(row) > type_col else ''
if tag:
props = {}
for i, header in enumerate(headers):
if i < len(row) and row[i]:
props[header] = str(row[i])
symbols.append(Symbol(
symbol_type=symbol_type or 'unknown',
tag=tag,
location=(0, 0),
properties=props
))
return symbols
def _determine_scale(self, text: str) -> float:
"""Determine drawing scale factor."""
for pattern in self.SCALE_PATTERNS:
match = re.search(pattern, text, re.IGNORECASE)
if match:
if 'NTS' in match.group(0).upper():
return 0 # Not to scale
if '=' in match.group(0):
# Imperial: 1/4" = 1'-0"
return self._parse_imperial_scale(match.group(0))
else:
# Metric: 1:100
return 1 / float(match.group(2))
return 1.0 # Default
def _parse_imperial_scale(self, scale_text: str) -> float:
"""Parse imperial scale to factor."""
match = re.search(r'(\d+)(?:/(\d+))?\s*["\']?\s*=\s*(\d+)', scale_text)
if match:
numerator = float(match.group(1))
denominator = float(match.group(2)) if match.group(2) else 1
feet = float(match.group(3))
inches_per_foot = (numerator / denominator)
return inches_per_foot / (feet * 12)
return 1.0
def _check_drawing_quality(self, title_block: TitleBlockData,
dimensions: List, annotations: List) -> List[str]:
"""Check drawing for quality issues."""
issues = []
if title_block:
if not title_block.project_number:
issues.append("Missing project number in title block")
if not title_block.sheet_number:
issues.append("Missing sheet number")
if not title_block.scale:
issues.append("Missing scale indication")
if not title_block.date:
issues.append("Missing date")
if len(dimensions) == 0:
issues.append("No dimensions found - verify drawing content")
# Check for typical construction notes
note_types = [a.annotation_type for a in annotations]
if 'note' not in note_types:
issues.append("No general notes found")
return issues
def generate_drawing_index(self, results: List[DrawingAnalysisResult]) -> str:
"""Generate drawing index from multiple analyzed drawings."""
lines = ["# Drawing Index", ""]
lines.append("| Sheet | Title | Discipline | Scale | Rev |")
lines.append("|-------|-------|------------|-------|-----|")
for result in sorted(results, key=lambda r: r.title_block.sheet_number if r.title_block else ''):
if result.title_block:
tb = result.title_block
lines.append(f"| {tb.sheet_number} | {tb.sheet_title} | {tb.discipline} | {tb.scale} | {tb.revision} |")
return "\n".join(lines)
def generate_report(self, result: DrawingAnalysisResult) -> str:
"""Generate analysis report for a drawing."""
lines = ["# Drawing Analysis Report", ""]
lines.append(f"**File:** {result.file_name}")
if result.title_block:
tb = result.title_block
lines.append("")
lines.append("## Title Block")
lines.append(f"- **Project:** {tb.project_name}")
lines.append(f"- **Project No:** {tb.project_number}")
lines.append(f"- **Sheet:** {tb.sheet_number}")
lines.append(f"- **Title:** {tb.sheet_title}")
lines.append(f"- **Discipline:** {tb.discipline}")
lines.append(f"- **Scale:** {tb.scale}")
lines.append(f"- **Date:** {tb.date}")
lines.append(f"- **Revision:** {tb.revision}")
lines.append("")
lines.append("## Content Summary")
lines.append(f"- **Dimensions Found:** {len(result.dimensions)}")
lines.append(f"- **Annotations Found:** {len(result.annotations)}")
lines.append(f"- **Symbols/Elements:** {len(result.symbols)}")
if result.quality_issues:
lines.append("")
lines.append("## Quality Issues")
for issue in result.quality_issues:
lines.append(f"- ⚠️ {issue}")
if result.symbols:
lines.append("")
lines.append("## Elements Found")
for symbol in result.symbols[:20]:
lines.append(f"- {symbol.tag}: {symbol.symbol_type}")
return "\n".join(lines)
Quick Start
python
# Initialize analyzer
analyzer = DrawingAnalyzer()
# Analyze a drawing
result = analyzer.analyze_pdf_drawing("A101_Floor_Plan.pdf")
# Check title block
if result.title_block:
print(f"Sheet: {result.title_block.sheet_number}")
print(f"Title: {result.title_block.sheet_title}")
print(f"Scale: {result.title_block.scale}")
# Review extracted data
print(f"Dimensions: {len(result.dimensions)}")
print(f"Annotations: {len(result.annotations)}")
print(f"Symbols: {len(result.symbols)}")
# Check quality
for issue in result.quality_issues:
print(f"Issue: {issue}")
# Generate report
report = analyzer.generate_report(result)
print(report)
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction, which our catalogue first saw on October 9, 2026.
Drawing Analyzer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Drawing Analyzer compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Drawing Analyzer this skilldatadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction
Present a design to a client so they can make a decision rather than react to a picture — the brief restated, the moves explained against it, the options with their trade-offs, and a specific…
Build and maintain an explorable, progressively-disclosed isometric "atlas" of a system's architecture — an interactive page (hover to read, click to pin, go inside for steps, moving data packets…
Orchestrate multiple AI agents for construction workflows: estimator, scheduler, document, QA and safety agents coordinated by a supervisor agent, with human checkpoints.
Estimate embodied carbon and produce ESG/climate reporting for construction: LCA per work item, material-based carbon factors, EU taxonomy and CSRD alignment.
Material passports and circular construction: generate per-element material inventories from BOQ/BIM, mark reuse potential and recycled content, and prepare deconstruction data.
Browse and search the OpenConstructionERP cost database: classification tree, SQL and semantic search, autocomplete, certainty badges, and the resource catalog.
Analyze construction drawings to extract dimensions, annotations, symbols, and metadata. Drawing Analyzer is an agent skill from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction. Analyze construction drawings to extract dimensions, annotations, symbols, and metadata.
When should I use Drawing Analyzer?
Drawing Analyzer fits situations like: tasks that involve Design review and critique.
How do I install Drawing Analyzer in Claude Code?
Run `npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill drawing-analyzer -a claude-code`. Or copy the skill folder (2_DDC_Book/2.4-PDF-CAD-to-Data/drawing-analyzer in datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction) into .claude/skills/drawing-analyzer in your project. Claude Code loads it when a task matches its description.
How do I install Drawing Analyzer in Codex?
Run `npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill drawing-analyzer -a codex`. Or copy the skill folder (2_DDC_Book/2.4-PDF-CAD-to-Data/drawing-analyzer in datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction) into .agents/skills/drawing-analyzer in your project. Codex loads it when a task matches its description.
Can I use Drawing Analyzer in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill drawing-analyzer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/drawing-analyzer, .gemini/skills/drawing-analyzer, .github/skills/drawing-analyzer and .opencode/skills/drawing-analyzer in your project.
What does Drawing Analyzer need to run?
Going by SKILL.md and its folder, Drawing Analyzer needs the command-line tools its instructions call (pip). Our summary lists: Python 3.
Does Drawing Analyzer access the network?
SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Is Drawing Analyzer safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Drawing Analyzer use?
Drawing Analyzer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Drawing Analyzer use?
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
What are the alternatives to Drawing Analyzer?
Skills that share tags, products or a category with Drawing Analyzer: Architecture Client Presentation (mohitagw15856/pm-claude-skills, 1.4k stars), Consult Claude (EpicenterHQ/epicenter, 4.8k stars), System Atlas (inkboard/system-atlas, 429 stars) and Design Image Studio (kangarooking/design-image-studio, 102 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Drawing Analyzer?
datadrivenconstruction (a GitHub user) maintains it in datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction, which has 345 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on August 22, 2026.