Organization
thedaviddias/Front-End-Checklist
A skill your agent uses when auditing structured data on a business or brand website homepage.
Agent skill
by datadrivenconstruction in datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction
Detect and map data silos in construction organizations. An agent skill from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill data-silo-detection -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction data-silo-detection --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.git skills-src && mkdir -p .claude/skills && cp -r skills-src/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection .claude/skills/data-silo-detection && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "data-silo-detection" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection into .claude/skills/data-silo-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data-silo-detection", 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.
$skill-installer install https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detectionType 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.
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill data-silo-detection -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction data-silo-detection --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.git skills-src && mkdir -p .agents/skills && cp -r skills-src/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection .agents/skills/data-silo-detection && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "data-silo-detection" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection into .agents/skills/data-silo-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data-silo-detection", 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.
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill data-silo-detection -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction data-silo-detection --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection .cursor/skills/data-silo-detection && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "data-silo-detection" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection into .cursor/skills/data-silo-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data-silo-detection", 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.
$ gemini skills install https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.git --path 2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill data-silo-detection -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction data-silo-detection --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection .gemini/skills/data-silo-detection && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "data-silo-detection" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection into .gemini/skills/data-silo-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data-silo-detection", 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.
$ gh skill install datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction data-silo-detectionInstalls 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).
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill data-silo-detection -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.git skills-src && mkdir -p .github/skills && cp -r skills-src/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection .github/skills/data-silo-detection && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "data-silo-detection" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection into .github/skills/data-silo-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data-silo-detection", 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.
$ npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill data-silo-detection -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction data-silo-detection --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection .opencode/skills/data-silo-detection && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "data-silo-detection" agent skill from https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction/tree/main/2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection into .opencode/skills/data-silo-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data-silo-detection", 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.
data-silo-detectionDetect and map data silos in construction organizations. An agent skill from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.
Data Silo Detection is an agent skill from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction. Detect and map data silos in construction organizations. Identify disconnected data sources and integration opportunities
Its SKILL.md is about 6.1k 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`).
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.
Read from SKILL.md and the folder at commit ce45bbf. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
datadrivenconstruction.ioFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Data Silo Detection loads about 6.1k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 115 words of instructions outside code blocks.
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.
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.
The full file from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction at commit ce45bbf, republished under its MIT licence (© datadrivenconstruction). 115 words, ~6,133 tokens.
.claude/skills/data-silo-detection/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Based on DDC methodology (Chapter 1.2), this skill detects and maps data silos in construction organizations, identifying disconnected data sources, duplicate data, and integration opportunities.
Book Reference: "Технологии и системы управления в современном строительстве" / "Technologies and Management Systems in Modern Construction"
from dataclasses import dataclass, field
from enum import Enum
from typing import List, Dict, Optional, Set, Tuple
from datetime import datetime
import json
from collections import defaultdict
class DataDomain(Enum):
"""Construction data domains"""
DESIGN = "design"
COST = "cost"
SCHEDULE = "schedule"
QUALITY = "quality"
SAFETY = "safety"
PROCUREMENT = "procurement"
SITE = "site"
DOCUMENT = "document"
FINANCIAL = "financial"
HR = "hr"
class SiloSeverity(Enum):
"""Severity level of data silo"""
CRITICAL = "critical" # Major business impact
HIGH = "high" # Significant inefficiency
MEDIUM = "medium" # Noticeable issues
LOW = "low" # Minor inconvenience
class DataSourceType(Enum):
"""Types of data sources"""
DATABASE = "database"
SPREADSHEET = "spreadsheet"
FILE_SHARE = "file_share"
CLOUD_APP = "cloud_app"
DESKTOP_APP = "desktop_app"
PAPER = "paper"
EMAIL = "email"
PERSONAL = "personal"
@dataclass
class DataSource:
"""Represents a data source in the organization"""
id: str
name: str
type: DataSourceType
domain: DataDomain
owner: str
department: str
users: List[str]
data_entities: List[str]
connections: List[str] = field(default_factory=list)
update_frequency: str = "unknown"
access_level: str = "department" # personal, department, organization
has_api: bool = False
last_modified: Optional[datetime] = None
@dataclass
class DataSilo:
"""Detected data silo"""
id: str
sources: List[DataSource]
domain: DataDomain
severity: SiloSeverity
issue_type: str
description: str
impact: str
affected_users: int
affected_processes: List[str]
recommendations: List[str]
estimated_cost: Optional[float] = None
@dataclass
class DuplicateData:
"""Detected duplicate data across sources"""
entity_name: str
sources: List[str]
discrepancy_rate: float # 0-1
master_source: Optional[str] = None
issues: List[str] = field(default_factory=list)
@dataclass
class SiloAnalysis:
"""Complete silo analysis results"""
organization: str
analysis_date: datetime
total_sources: int
silos_detected: List[DataSilo]
duplicates: List[DuplicateData]
connectivity_score: float
data_flow_gaps: List[Dict]
priority_actions: List[str]
integration_roadmap: Dict
class DataSiloDetector:
"""
Detect and analyze data silos in construction organizations.
Based on DDC methodology Chapter 1.2.
"""
def __init__(self):
self.domain_relationships = self._define_domain_relationships()
self.critical_entities = self._define_critical_entities()
def _define_domain_relationships(self) -> Dict[DataDomain, List[DataDomain]]:
"""Define expected relationships between domains"""
return {
DataDomain.DESIGN: [
DataDomain.COST, DataDomain.SCHEDULE,
DataDomain.PROCUREMENT, DataDomain.QUALITY
],
DataDomain.COST: [
DataDomain.DESIGN, DataDomain.SCHEDULE,
DataDomain.FINANCIAL, DataDomain.PROCUREMENT
],
DataDomain.SCHEDULE: [
DataDomain.DESIGN, DataDomain.COST,
DataDomain.SITE, DataDomain.HR
],
DataDomain.PROCUREMENT: [
DataDomain.COST, DataDomain.DESIGN,
DataDomain.SITE, DataDomain.FINANCIAL
],
DataDomain.SITE: [
DataDomain.SCHEDULE, DataDomain.SAFETY,
DataDomain.QUALITY, DataDomain.HR
],
DataDomain.QUALITY: [
DataDomain.DESIGN, DataDomain.SITE,
DataDomain.DOCUMENT
],
DataDomain.SAFETY: [
DataDomain.SITE, DataDomain.HR,
DataDomain.DOCUMENT
],
DataDomain.FINANCIAL: [
DataDomain.COST, DataDomain.PROCUREMENT,
DataDomain.HR
]
}
def _define_critical_entities(self) -> Dict[str, List[DataDomain]]:
"""Define entities that should be shared across domains"""
return {
"project": [DataDomain.DESIGN, DataDomain.COST, DataDomain.SCHEDULE],
"budget": [DataDomain.COST, DataDomain.FINANCIAL, DataDomain.PROCUREMENT],
"schedule": [DataDomain.SCHEDULE, DataDomain.SITE, DataDomain.PROCUREMENT],
"material": [DataDomain.DESIGN, DataDomain.COST, DataDomain.PROCUREMENT],
"labor": [DataDomain.HR, DataDomain.COST, DataDomain.SCHEDULE],
"subcontractor": [DataDomain.PROCUREMENT, DataDomain.COST, DataDomain.SCHEDULE],
"rfi": [DataDomain.DESIGN, DataDomain.DOCUMENT, DataDomain.SITE],
"change_order": [DataDomain.COST, DataDomain.DESIGN, DataDomain.SCHEDULE]
}
def detect_silos(
self,
organization: str,
data_sources: List[DataSource],
process_flows: Optional[List[Dict]] = None
) -> SiloAnalysis:
"""
Detect data silos in the organization.
Args:
organization: Organization name
data_sources: List of data sources to analyze
process_flows: Optional business process flows
Returns:
Complete silo analysis
"""
# Build connectivity graph
connectivity = self._build_connectivity_graph(data_sources)
# Detect isolated sources
isolated_silos = self._detect_isolated_sources(
data_sources, connectivity
)
# Detect domain silos
domain_silos = self._detect_domain_silos(data_sources)
# Detect duplicate data
duplicates = self._detect_duplicates(data_sources)
# Detect data flow gaps
flow_gaps = self._detect_flow_gaps(
data_sources, process_flows
)
# Calculate connectivity score
connectivity_score = self._calculate_connectivity_score(
data_sources, connectivity
)
# Combine all silos
all_silos = isolated_silos + domain_silos
# Prioritize silos
prioritized_silos = self._prioritize_silos(all_silos)
# Generate priority actions
priority_actions = self._generate_priority_actions(
prioritized_silos, duplicates
)
# Create integration roadmap
roadmap = self._create_integration_roadmap(
prioritized_silos, flow_gaps
)
return SiloAnalysis(
organization=organization,
analysis_date=datetime.now(),
total_sources=len(data_sources),
silos_detected=prioritized_silos,
duplicates=duplicates,
connectivity_score=connectivity_score,
data_flow_gaps=flow_gaps,
priority_actions=priority_actions,
integration_roadmap=roadmap
)
def _build_connectivity_graph(
self,
sources: List[DataSource]
) -> Dict[str, Set[str]]:
"""Build graph of source connections"""
graph = defaultdict(set)
for source in sources:
for connection in source.connections:
graph[source.id].add(connection)
graph[connection].add(source.id)
return graph
def _detect_isolated_sources(
self,
sources: List[DataSource],
connectivity: Dict[str, Set[str]]
) -> List[DataSilo]:
"""Detect sources with no connections"""
silos = []
for source in sources:
connections = len(connectivity.get(source.id, set()))
if connections == 0:
severity = SiloSeverity.CRITICAL if source.domain in [
DataDomain.COST, DataDomain.SCHEDULE
] else SiloSeverity.HIGH
silos.append(DataSilo(
id=f"isolated_{source.id}",
sources=[source],
domain=source.domain,
severity=severity,
issue_type="isolated_source",
description=f"{source.name} has no connections to other systems",
impact="Data must be manually transferred, risking errors and delays",
affected_users=len(source.users),
affected_processes=self._get_affected_processes(source.domain),
recommendations=[
f"Connect {source.name} via API or ETL to related systems",
"Establish data synchronization schedule",
"Define master data source for shared entities"
]
))
elif connections == 1 and source.access_level == "personal":
silos.append(DataSilo(
id=f"personal_{source.id}",
sources=[source],
domain=source.domain,
severity=SiloSeverity.MEDIUM,
issue_type="personal_silo",
description=f"{source.name} is a personal data store with limited access",
impact="Data not accessible to team, knowledge loss risk",
affected_users=1,
affected_processes=self._get_affected_processes(source.domain),
recommendations=[
"Move data to shared organizational repository",
"Implement access controls instead of isolation",
"Document data structure and usage"
]
))
return silos
def _detect_domain_silos(
self,
sources: List[DataSource]
) -> List[DataSilo]:
"""Detect silos between domains that should be connected"""
silos = []
# Group sources by domain
domain_sources = defaultdict(list)
for source in sources:
domain_sources[source.domain].append(source)
# Check for missing domain connections
for domain, related_domains in self.domain_relationships.items():
domain_srcs = domain_sources.get(domain, [])
for related in related_domains:
related_srcs = domain_sources.get(related, [])
if domain_srcs and related_srcs:
# Check if any connections exist between domains
has_connection = False
for src in domain_srcs:
for rel_src in related_srcs:
if rel_src.id in src.connections:
has_connection = True
break
if not has_connection:
silos.append(DataSilo(
id=f"domain_gap_{domain.value}_{related.value}",
sources=domain_srcs + related_srcs,
domain=domain,
severity=SiloSeverity.HIGH,
issue_type="domain_disconnect",
description=f"No data flow between {domain.value} and {related.value}",
impact="Related information not synchronized, decision delays",
affected_users=sum(len(s.users) for s in domain_srcs + related_srcs),
affected_processes=self._get_affected_processes(domain) +
self._get_affected_processes(related),
recommendations=[
f"Establish integration between {domain.value} and {related.value} systems",
"Define shared data entities and master sources",
"Implement automated data synchronization"
]
))
return silos
def _detect_duplicates(
self,
sources: List[DataSource]
) -> List[DuplicateData]:
"""Detect duplicate data across sources"""
duplicates = []
# Map entities to sources
entity_sources = defaultdict(list)
for source in sources:
for entity in source.data_entities:
entity_sources[entity].append(source.id)
# Find duplicates
for entity, source_ids in entity_sources.items():
if len(source_ids) > 1:
# Check if it's a critical entity
is_critical = entity.lower() in self.critical_entities
duplicate = DuplicateData(
entity_name=entity,
sources=source_ids,
discrepancy_rate=0.0, # Would need actual data to calculate
issues=[]
)
if is_critical and len(source_ids) > 2:
duplicate.issues.append(
"Critical entity duplicated in multiple systems"
)
if not any(s for s in sources if s.id in source_ids and "master" in s.name.lower()):
duplicate.issues.append("No clear master source defined")
duplicates.append(duplicate)
return duplicates
def _detect_flow_gaps(
self,
sources: List[DataSource],
process_flows: Optional[List[Dict]]
) -> List[Dict]:
"""Detect gaps in expected data flows"""
gaps = []
# Check critical entity coverage
for entity, required_domains in self.critical_entities.items():
entity_domains = set()
for source in sources:
if entity in [e.lower() for e in source.data_entities]:
entity_domains.add(source.domain)
missing = set(required_domains) - entity_domains
if missing:
gaps.append({
"entity": entity,
"missing_domains": [d.value for d in missing],
"impact": f"{entity} data not available in {len(missing)} domains"
})
return gaps
def _calculate_connectivity_score(
self,
sources: List[DataSource],
connectivity: Dict[str, Set[str]]
) -> float:
"""Calculate overall connectivity score"""
if not sources:
return 0.0
# Calculate average connections per source
total_connections = sum(len(conns) for conns in connectivity.values())
avg_connections = total_connections / len(sources)
# Ideal connections per source
ideal_connections = 3
# Score based on average connections
connection_score = min(1.0, avg_connections / ideal_connections)
# Penalize for isolated sources
isolated = sum(1 for s in sources if s.id not in connectivity or not connectivity[s.id])
isolation_penalty = isolated / len(sources)
# API availability bonus
api_count = sum(1 for s in sources if s.has_api)
api_bonus = (api_count / len(sources)) * 0.2
return max(0, min(1.0, connection_score - isolation_penalty + api_bonus))
def _get_affected_processes(self, domain: DataDomain) -> List[str]:
"""Get business processes affected by domain"""
process_map = {
DataDomain.DESIGN: ["Design Review", "RFI Processing", "Drawing Distribution"],
DataDomain.COST: ["Budgeting", "Cost Tracking", "Invoice Processing"],
DataDomain.SCHEDULE: ["Planning", "Progress Tracking", "Resource Allocation"],
DataDomain.PROCUREMENT: ["Vendor Selection", "Purchase Orders", "Material Tracking"],
DataDomain.SITE: ["Daily Reports", "Progress Photos", "Issue Management"],
DataDomain.QUALITY: ["Inspections", "Defect Tracking", "Compliance"],
DataDomain.SAFETY: ["Incident Reporting", "Safety Inspections", "Training"],
DataDomain.FINANCIAL: ["Billing", "Payments", "Financial Reporting"],
DataDomain.HR: ["Timekeeping", "Resource Management", "Certifications"]
}
return process_map.get(domain, [])
def _prioritize_silos(
self,
silos: List[DataSilo]
) -> List[DataSilo]:
"""Prioritize silos by severity and impact"""
severity_order = {
SiloSeverity.CRITICAL: 0,
SiloSeverity.HIGH: 1,
SiloSeverity.MEDIUM: 2,
SiloSeverity.LOW: 3
}
return sorted(
silos,
key=lambda s: (severity_order[s.severity], -s.affected_users)
)
def _generate_priority_actions(
self,
silos: List[DataSilo],
duplicates: List[DuplicateData]
) -> List[str]:
"""Generate prioritized action items"""
actions = []
# Critical silos first
critical_silos = [s for s in silos if s.severity == SiloSeverity.CRITICAL]
for silo in critical_silos[:3]:
actions.append(f"URGENT: {silo.recommendations[0]}")
# Duplicate data issues
critical_dups = [d for d in duplicates if d.issues]
for dup in critical_dups[:2]:
actions.append(
f"Define master source for '{dup.entity_name}' "
f"(currently in {len(dup.sources)} sources)"
)
# High priority silos
high_silos = [s for s in silos if s.severity == SiloSeverity.HIGH]
for silo in high_silos[:3]:
if silo.recommendations:
actions.append(silo.recommendations[0])
return actions[:10]
def _create_integration_roadmap(
self,
silos: List[DataSilo],
gaps: List[Dict]
) -> Dict:
"""Create phased integration roadmap"""
roadmap = {
"Phase 1 - Quick Wins (0-3 months)": [],
"Phase 2 - Core Integration (3-6 months)": [],
"Phase 3 - Advanced Integration (6-12 months)": [],
"Phase 4 - Optimization (12+ months)": []
}
# Phase 1: Address personal silos and easy integrations
for silo in silos:
if silo.issue_type == "personal_silo":
roadmap["Phase 1 - Quick Wins (0-3 months)"].append(
f"Migrate {silo.sources[0].name} to shared repository"
)
# Phase 2: Core domain integrations
domain_gaps = [s for s in silos if s.issue_type == "domain_disconnect"]
for silo in domain_gaps[:3]:
roadmap["Phase 2 - Core Integration (3-6 months)"].append(
silo.recommendations[0] if silo.recommendations else silo.description
)
# Phase 3: Critical entity master data
roadmap["Phase 3 - Advanced Integration (6-12 months)"].extend([
"Implement master data management for shared entities",
"Deploy integration middleware/ESB",
"Establish data governance policies"
])
# Phase 4: Optimization
roadmap["Phase 4 - Optimization (12+ months)"].extend([
"Implement real-time data synchronization",
"Deploy integration monitoring and alerting",
"Continuous improvement based on metrics"
])
return roadmap
def generate_report(self, analysis: SiloAnalysis) -> str:
"""Generate silo analysis report"""
report = f"""
# Data Silo Analysis Report
## {analysis.organization}
**Analysis Date:** {analysis.analysis_date.strftime('%Y-%m-%d')}
**Data Sources Analyzed:** {analysis.total_sources}
**Connectivity Score:** {analysis.connectivity_score:.0%}
## Executive Summary
Detected **{len(analysis.silos_detected)}** data silos and **{len(analysis.duplicates)}** duplicate data issues.
### Silos by Severity
"""
severity_counts = defaultdict(int)
for silo in analysis.silos_detected:
severity_counts[silo.severity.value] += 1
for severity in ["critical", "high", "medium", "low"]:
count = severity_counts.get(severity, 0)
if count > 0:
report += f"- **{severity.title()}**: {count}\n"
report += "\n## Priority Actions\n\n"
for i, action in enumerate(analysis.priority_actions, 1):
report += f"{i}. {action}\n"
report += "\n## Detected Silos\n\n"
for silo in analysis.silos_detected[:5]:
report += f"""
### {silo.id}
- **Type:** {silo.issue_type}
- **Severity:** {silo.severity.value}
- **Impact:** {silo.impact}
- **Affected Users:** {silo.affected_users}
"""
report += "\n## Integration Roadmap\n"
for phase, items in analysis.integration_roadmap.items():
report += f"\n### {phase}\n"
for item in items:
report += f"- {item}\n"
return reportdetector = DataSiloDetector()
# Define data sources
sources = [
DataSource(
id="revit",
name="Revit Models",
type=DataSourceType.DESKTOP_APP,
domain=DataDomain.DESIGN,
owner="Design Team",
department="Engineering",
users=["architect1", "engineer1", "engineer2"],
data_entities=["building_model", "drawings", "schedules"],
connections=["navisworks"],
has_api=True
),
DataSource(
id="excel_estimates",
name="Excel Cost Estimates",
type=DataSourceType.SPREADSHEET,
domain=DataDomain.COST,
owner="Estimator",
department="Pre-construction",
users=["estimator1"],
data_entities=["costs", "quantities", "labor_rates"],
connections=[], # No connections - silo!
access_level="personal"
),
DataSource(
id="procore",
name="Procore",
type=DataSourceType.CLOUD_APP,
domain=DataDomain.SITE,
owner="Project Manager",
department="Operations",
users=["pm1", "pm2", "super1"],
data_entities=["daily_reports", "photos", "punch_list"],
connections=["primavera"],
has_api=True
)
]
analysis = detector.detect_silos(
organization="ABC Construction",
data_sources=sources
)
print(f"Silos detected: {len(analysis.silos_detected)}")
print(f"Connectivity score: {analysis.connectivity_score:.0%}")report = detector.generate_report(analysis)
print(report)
# Save to file
with open("silo_report.md", "w") as f:
f.write(report)print("Priority Actions:")
for i, action in enumerate(analysis.priority_actions, 1):
print(f"{i}. {action}")
print("\nIntegration Roadmap:")
for phase, items in analysis.integration_roadmap.items():
print(f"\n{phase}:")
for item in items:
print(f" - {item}")| Component | Purpose |
|---|---|
DataSiloDetector | Main detection engine |
DataSource | Data source definition |
DataSilo | Detected silo with details |
DuplicateData | Duplicate data detection |
SiloAnalysis | Complete analysis results |
SiloSeverity | Severity classification |
© datadrivenconstruction, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in 2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection of datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction.
Open the folder on GitHubat commit ce45bbf
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 7, 2026.
Data Silo Detection 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Data Silo Detection this skilldatadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction | 345 | 1 repos | ~6.1k | Automated safety check: Pass | MIT | |
| Organizationthedaviddias/Front-End-Checklist | 74k | — | ~609 | Automated safety check: Pass | MIT | |
| Pii Detectruvnet/ruflo | 74k | — | ~350 | Automated safety check: Notes | MIT | |
| Organize Filesjxxghp/MoviePilot | 12k | — | ~965 | Automated safety check: Pass | GPL-3.0 | |
| File Organizerdavila7/claude-code-templates | 32k | 7 repos | ~1.6k | Automated safety check: Pass | MIT | |
| Token Mapnexu-io/open-design | 100k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 |
thedaviddias/Front-End-Checklist
A skill your agent uses when auditing structured data on a business or brand website homepage.
ruvnet/ruflo
Detect and flag personally identifiable information (PII) in text, code, and configurations.
jxxghp/MoviePilot
A skill your agent uses when the user asks MoviePilot to identify and organize a local or downloaded video/music file, season folder, recording, album directory, or mixed folder that automatic…
davila7/claude-code-templates
Intelligently organizes files and folders by understanding context, finding duplicates, and suggesting better organizational structures.
nexu-io/open-design
Map an extracted Figma / source-code token bag onto the active OD design system, producing a deterministic mapping the generate stage can consume.
mukul975/Anthropic-Cybersecurity-Skills
Detect unusual API call patterns in AWS CloudTrail logs using boto3, statistical baselining, and behavioral analysis to identify credential compromise, privilege escalation, and unauthorized…
datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction
Orchestrate multiple AI agents for construction workflows: estimator, scheduler, document, QA and safety agents coordinated by a supervisor agent, with human checkpoints.
datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction
Estimate embodied carbon and produce ESG/climate reporting for construction: LCA per work item, material-based carbon factors, EU taxonomy and CSRD alignment.
datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction
Generative design for construction: text-to-BIM concepts, option generation, and AI-assisted design iteration with cost and carbon feedback.
datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction
Material passports and circular construction: generate per-element material inventories from BOQ/BIM, mark reuse potential and recycled content, and prepare deconstruction data.
datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction
Automated pipeline for retraining ML models with new construction data.
datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction
Browse and search the OpenConstructionERP cost database: classification tree, SQL and semantic search, autocomplete, certainty badges, and the resource catalog.
Detect and map data silos in construction organizations. An agent skill from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction. Data Silo Detection is an agent skill from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction. Detect and map data silos in construction organizations.
Run `npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill data-silo-detection -a claude-code`. Or copy the skill folder (2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection in datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction) into .claude/skills/data-silo-detection in your project. Claude Code loads it when a task matches its description.
Run `npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill data-silo-detection -a codex`. Or copy the skill folder (2_DDC_Book/1.2-Data-Silos-Integration/data-silo-detection in datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction) into .agents/skills/data-silo-detection in your project. Codex loads it when a task matches its description.
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 data-silo-detection -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/data-silo-detection, .gemini/skills/data-silo-detection, .github/skills/data-silo-detection and .opencode/skills/data-silo-detection in your project.
SKILL.md names no scripts, command-line tools or credentials: Data Silo Detection is instructions for the agent only. Our summary lists: Python 3.
SKILL.md names 1 domain. As links in the text: datadrivenconstruction.io. This is read from the text; nothing was executed.
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.
Data Silo Detection is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.1k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Data Silo Detection: Organization (thedaviddias/Front-End-Checklist, 74k stars), Pii Detect (ruvnet/ruflo, 74k stars), Organize Files (jxxghp/MoviePilot, 12k stars) and File Organizer (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.
Source: datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.