safety-inspection-checklist

safety-inspection-checklist is a skill for Claude Code, Codex from datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction. It costs 31 tokens per session (3,607 once invoked), scanned A, original, MIT.

A digital checklist system for inspecting construction sites for safety hazards and recording findings.

In plain words
What is it for?
Use it to create inspection forms, conduct site checks, document hazards, monitor corrective work, and prepare recurring reports.
Why use it?
It replaces scattered inspection notes with consistent records, photo evidence, issue tracking, and compliance reports.

Skill for Claude CodeCodex

Which agent this was written for is unclear — built for openclaw. Also seen: built for openclaw.

Good fit Use it to create inspection forms, conduct site checks, document hazards, monitor corrective work, and prepare recurring reports.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill safety-inspection-checklist
Clone the repo
git clone --depth 1 https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for safety-inspection-checklist

README.md
[![agentmods](https://agentmods.dev/badge/skills/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist/github.svg)](https://agentmods.dev/skills/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist)
Your own site
<a href="https://agentmods.dev/skills/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist"><img src="https://agentmods.dev/badge/skills/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for safety-inspection-checklist

Your own site · 80×15
<a href="https://agentmods.dev/skills/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist"><img src="https://agentmods.dev/badge/skills/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 31 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,607 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00031 $0.03607
Opus 5 $0.00015 $0.01803
Sonnet 5 $0.00006 $0.00721
Haiku 4.5 $0.00003 $0.00361

Measured 9d ago against content hash bcb32b17184a, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

safety-inspection-checklist scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

Origin

Copies of this mod

1 near-identical copy found in the catalogue:

3_DDC_Insights/Safety-Quality/safety-inspection-checklist/SKILL.md · 400 lines

How it starts

The opening of the file, as written. The whole thing — 400 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Safety Inspection Checklist

Overview

Digital safety inspection checklists streamline site safety management. Generate inspection forms, conduct mobile inspections, track findings, and automate compliance reporting.

"Digital checklists reduce inspection time by 60% and improve compliance tracking" — DDC Community

Why Digital Checklists?

Feature Benefit
Mobile-first Inspect anywhere on site
Photo documentation Visual evidence attached
Real-time sync Immediate notification of issues
Automated reports Weekly/monthly summaries
Trend analysis Identify recurring hazards
Compliance tracking OSHA/local regulation alignment

Architecture

┌─────────────────────────────────────────────────────────────────┐
│                SAFETY INSPECTION SYSTEM                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Templates         Mobile App           Backend                  │
│  ─────────         ──────────           ───────                  │
│                                                                  │
│  📋 OSHA forms  →  📱 Conduct    →   💾 Store                   │
│  🏗️ Site-specific   📸 Photos        📊 Analyze                 │
│  ⚡ Quick checks    📍 Location       📧 Alert                   │
│                     ✅ Sign-off       📈 Report                  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Technical Implementation

from dataclasses import dataclass, field
from typing import List, Dict, Optional
from enum import Enum
from datetime import datetime
import json

class InspectionType(Enum):
    DAILY_SITE = "daily_site"
    WEEKLY_SAFETY = "weekly_safety"
    SCAFFOLD = "scaffold"
    EXCAVATION = "excavation"
    ELECTRICAL = "electrical"
    CRANE_LIFT = "crane_lift"
    HOT_WORK = "hot_work"
    CONFINED_SPACE = "confined_space"
    FALL_PROTECTION = "fall_protection"

class FindingSeverity(Enum):
    CRITICAL = "critical"      # Stop work immediately
    MAJOR = "major"            # Correct within 24 hours
    MINOR = "minor"            # Correct within 1 week
    OBSERVATION = "observation" # Best practice recommendation

class FindingStatus(Enum):
    OPEN = "open"
    IN_PROGRESS = "in_progress"
    CORRECTED = "corrected"
    VERIFIED = "verified"

@dataclass
class ChecklistItem:
    id: str
    category: str
    question: str
    regulation_ref: str = ""
    guidance: str = ""
    requires_photo: bool = False
    critical: bool = False

@dataclass
class InspectionFinding:
    item_id: str
    status: str  # pass, fail, na
    severity: Optional[FindingSeverity] = None
    description: str = ""
    photo_urls: List[str] = field(default_factory=list)
    location: str = ""
    assigned_to: str = ""
    due_date: Optional[datetime] = None
    corrective_action: str = ""
    finding_status: FindingStatus = FindingStatus.OPEN

@dataclass
class SafetyInspection:
    id: str
    inspection_type: InspectionType
    project_id: str
    project_name: str
    location: str
    inspector: str
    date: datetime
    weather: str
    workers_on_site: int
    findings: List[InspectionFinding] = field(default_factory=list)
    overall_score: float = 0.0
    signed_off: bool = False
    sign_off_by: str = ""

class SafetyInspectionManager:
    """Manage construction safety inspections."""

    # OSHA-aligned checklist templates
    CHECKLIST_TEMPLATES = {
        InspectionType.DAILY_SITE: [
            ChecklistItem("DS001", "General", "Site access controlled and secure?", "1926.20"),
            ChecklistItem("DS002", "General", "Emergency exits clear and marked?", "1926.34"),
            ChecklistItem("DS003", "Housekeeping", "Work areas clean and organized?", "1926.25"),
            ChecklistItem("DS004", "Housekeeping", "Waste properly disposed?", "1926.25"),
            ChecklistItem("DS005", "PPE", "All workers wearing required PPE?", "1926.28", critical=True),
            ChecklistItem("DS006", "PPE", "Hard hats worn in designated areas?", "1926.100"),
            ChecklistItem("DS007", "Fall Protection", "Guardrails in place at open edges?", "1926.502", critical=True),
            ChecklistItem("DS008", "Fall Protection", "Floor openings covered/protected?", "1926.502"),
            ChecklistItem("DS009", "Electrical", "No exposed wiring or damaged cords?", "1926.405"),
            ChecklistItem("DS010", "Electrical", "GFCIs in use for power tools?", "1926.404"),
            ChecklistItem("DS011", "Fire", "Fire extinguishers accessible?", "1926.150"),
            ChecklistItem("DS012", "Fire", "Hot work permits in place?", "1926.352"),
            ChecklistItem("DS013", "Equipment", "Equipment inspected before use?", "1926.20"),
            ChecklistItem("DS014", "Scaffolding", "Scaffolds properly erected?", "1926.451"),
            ChecklistItem("DS015", "Excavation", "Excavations properly sloped/shored?", "1926.652", critical=True),
        ],
        InspectionType.SCAFFOLD: [
            ChecklistItem("SC001", "Foundation", "Base plates on solid foundation?", "1926.451(c)"),
            ChecklistItem("SC002", "Foundation", "Mudsills adequate for load?", "1926.451(c)"),
            ChecklistItem("SC003", "Erection", "Plumb and level?", "1926.451(c)"),
            ChecklistItem("SC004", "Erection", "Cross bracing installed?", "1926.451(c)"),
            ChecklistItem("SC005", "Platforms", "Fully planked (no gaps >1 inch)?", "1926.451(b)"),
            ChecklistItem("SC006", "Platforms", "Planks secured against movement?", "1926.451(b)"),
            ChecklistItem("SC007", "Guardrails", "Top rail at 42 inches?", "1926.451(g)"),
            ChecklistItem("SC008", "Guardrails", "Mid-rail installed?", "1926.451(g)"),
            ChecklistItem("SC009", "Guardrails", "Toeboards at open edges?", "1926.451(h)"),
            ChecklistItem("SC010", "Access", "Safe access provided (ladder, stairs)?", "1926.451(e)"),
            ChecklistItem("SC011", "Capacity", "Load rating posted?", "1926.451(f)"),
            ChecklistItem("SC012", "Inspection", "Competent person inspection tag?", "1926.451(f)"),
        ],
        InspectionType.EXCAVATION: [
            ChecklistItem("EX001", "Planning", "Dig permit obtained?", "1926.651"),
            ChecklistItem("EX002", "Planning", "Utilities located and marked?", "1926.651(b)", critical=True),
            ChecklistItem("EX003", "Soil", "Soil classification completed?", "1926.652(a)"),
            ChecklistItem("EX004", "Protection", "Proper sloping/benching?", "1926.652(b)"),
            ChecklistItem("EX005", "Protection", "Shoring/shielding in place?", "1926.652(c)"),
            ChecklistItem("EX006", "Access", "Safe access within 25 feet?", "1926.651(c)"),
            ChecklistItem("EX007", "Spoils", "Spoils 2+ feet from edge?", "1926.651(j)"),
            ChecklistItem("EX008", "Water", "Water accumulation controlled?", "1926.651(h)"),
            ChecklistItem("EX009", "Atmosphere", "Hazardous atmosphere tested?", "1926.651(g)"),
            ChecklistItem("EX010", "Inspection", "Daily inspection by competent person?", "1926.651(k)"),
        ],
    }

    def __init__(self):
        self.inspections: Dict[str, SafetyInspection] = {}
        self.findings_db: List[InspectionFinding] = []

    def create_inspection(self, inspection_type: InspectionType,
                         project_id: str, project_name: str,
                         location: str, inspector: str,
                         weather: str = "", workers: int = 0) -> SafetyInspection:
        """Create new inspection from template."""
        inspection_id = f"INS-{datetime.now().strftime('%Y%m%d%H%M%S')}"

        inspection = SafetyInspection(
            id=inspection_id,
            inspection_type=inspection_type,
            project_id=project_id,
            project_name=project_name,
            location=location,
            inspector=inspector,
            date=datetime.now(),
            weather=weather,
            workers_on_site=workers
        )

        self.inspections[inspection_id] = inspection
        return inspection

    def get_checklist(self, inspection_type: InspectionType) -> List[ChecklistItem]:
        """Get checklist template for inspection type."""
        return self.CHECKLIST_TEMPLATES.get(inspection_type, [])

    def record_finding(self, inspection_id: str, item_id: str,
                      status: str, severity: FindingSeverity = None,
                      description: str = "", photos: List[str] = None,
                      location: str = "", assigned_to: str = "") -> InspectionFinding:
        """Record inspection finding."""
        finding = InspectionFinding(
            item_id=item_id,
            status=status,
            severity=severity,
            description=description,
            photo_urls=photos or [],
            location=location,
            assigned_to=assigned_to
        )

        if inspection_id in self.inspections:
            self.inspections[inspection_id].findings.append(finding)

        if status == "fail":
            self.findings_db.append(finding)

        return finding

    def calculate_score(self, inspection_id: str) -> float:
        """Calculate inspection score (pass rate)."""
        if inspection_id not in self.inspections:
            return 0.0

        inspection = self.inspections[inspection_id]
        if not inspection.findings:
            return 0.0

        applicable = [f for f in inspection.findings if f.status != "na"]
        if not applicable:
            return 100.0

        passed = len([f for f in applicable if f.status == "pass"])
        score = (passed / len(applicable)) * 100

        inspection.overall_score = score
        return score

    def get_open_findings(self, project_id: str = None) -> List[InspectionFinding]:
        """Get all open findings, optionally filtered by project."""
        open_findings = []

        for inspection in self.inspections.values():
            if project_id and inspection.project_id != project_id:
                continue

            for finding in inspection.findings:
                if finding.status == "fail" and finding.finding_status in [FindingStatus.OPEN, FindingStatus.IN_PROGRESS]:
                    open_findings.append(finding)

        return sorted(open_findings, key=lambda f: (
            0 if f.severity == FindingSeverity.CRITICAL else
            1 if f.severity == FindingSeverity.MAJOR else 2
        ))

    def generate_report(self, inspection_id: str) -> str:
        """Generate inspection report."""
        if inspection_id not in self.inspections:
            return "Inspection not found"

        insp = self.inspections[inspection_id]
        score = self.calculate_score(inspection_id)

        lines = [
            f"# Safety Inspection Report",
            f"",
            f"**Inspection ID:** {insp.id}",
            f"**Type:** {insp.inspection_type.value}",
            f"**Project:** {insp.project_name}",
            f"**Location:** {insp.location}",
            f"**Date:** {insp.date.strftime('%Y-%m-%d %H:%M')}",
            f"**Inspector:** {insp.inspector}",
            f"**Weather:** {insp.weather}",
            f"**Workers on Site:** {insp.workers_on_site}",
            f"",
            f"## Overall Score: {score:.1f}%",
            f"",
        ]

        # Summary by severity
        critical = [f for f in insp.findings if f.severity == FindingSeverity.CRITICAL]
        major = [f for f in insp.findings if f.severity == FindingSeverity.MAJOR]
        minor = [f for f in insp.findings if f.severity == FindingSeverity.MINOR]

        if critical:
            lines.append(f"### CRITICAL FINDINGS ({len(critical)})")
            for f in critical:
                lines.append(f"- **{f.item_id}**: {f.description}")
                lines.append(f"  - Location: {f.location}")
                lines.append(f"  - Assigned: {f.assigned_to}")
            lines.append("")

        if major:
            lines.append(f"### Major Findings ({len(major)})")
            for f in major:
                lines.append(f"- **{f.item_id}**: {f.description}")
            lines.append("")

        if minor:
            lines.append(f"### Minor Findings ({len(minor)})")
            for f in minor:
                lines.append(f"- {f.item_id}: {f.description}")
            lines.append("")

        return "\n".join(lines)

    def generate_weekly_summary(self, project_id: str, week_start: datetime) -> Dict:
        """Generate weekly safety summary."""
        week_inspections = [
            insp for insp in self.inspections.values()
            if insp.project_id == project_id
            and insp.date >= week_start
        ]

        total_findings = sum(len([f for f in insp.findings if f.status == "fail"])
                            for insp in week_inspections)

        critical_count = sum(
            len([f for f in insp.findings if f.severity == FindingSeverity.CRITICAL])
            for insp in week_inspections
        )

        avg_score = sum(insp.overall_score for insp in week_inspections) / len(week_inspections) if week_inspections else 0

        return {
            "week_start": week_start.isoformat(),
            "inspections_conducted": len(week_inspections),
            "total_findings": total_findings,
            "critical_findings": critical_count,
            "average_score": avg_score,
            "trend": "improving" if avg_score > 85 else "needs_attention"
        }

Read the full file on GitHub · 400 lines

Files

What ships with it

2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 9d ago First seen · 400 lines · 31 tokens per session scan A bcb32b17184a

Subscribe to this mod's changes

safety-inspection-checklist is a skill published in the GitHub repository datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction (310 stars, last pushed 21d ago), licensed MIT. It adds 31 tokens to every session and 3,607 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.

Related

Other skills, from other repositories

disability-services

Analyze disability services software — IEP and ISP management, person-centered planning workflows, HCBS Settings Rule compliance, accommodation tracking, assistive technology integration, EVV (Electronic Visit Verification), caregiver and DSP scheduling, and outcome measurement.

tinh2/skills-hub-registry · 50 tokens

grant-writer

Audit a grant management system for proposal workflow efficiency, deadline tracking, budget-narrative alignment, outcome reporting, compliance readiness, and win rate optimization. Use when reviewing nonprofit grant software, building a grants CRM, analyzing proposal pipelines, or evaluating funder reporting tools.

tinh2/skills-hub-registry · 57 tokens

safety-training

Audit OSHA training compliance, certification expirations, competency tracking, and LMS integration. Triggers: you need to evaluate safety training programs, check ANSI Z490.

tinh2/skills-hub-registry · 36 tokens

grant-management

Analyze grant management and sponsored research operations including proposal lifecycle tracking, pre-award routing and budget development, post-award expenditure monitoring and burn rate analysis, 2 CFR 200 Uniform Guidance cost allowability enforcement.

tinh2/skills-hub-registry · 45 tokens

rehab-scheduling

Audit a rehabilitation scheduling system -- evaluate therapist productivity and utilization rates, PTA/COTA supervision compliance, patient flow and no-show management, equipment and treatment room allocation, insurance authorization tracking with expiration alerts.

tinh2/skills-hub-registry · 44 tokens

catchup

Summarize and review what changed while you were away. Use after a weekend, vacation, or flight to check missed PRs, git commits, Linear tickets, and meetings — one prioritized brief, not a firehose.

oliver-kriska/claude-elixir-phoenix · 48 tokens