safety-inspection-checklist

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

A digital safety inspection checklist helps site teams create, complete, and track construction safety inspections. It can attach photos, record findings, and produce compliance reports.

In plain words
What is it for?
It is for generating inspection forms, conducting mobile site checks, documenting findings with photos, tracking compliance, and producing reports.
Why use it?
It replaces scattered paper forms with consistent records that can be reviewed and followed up. Teams can see issues sooner and identify hazards that recur over time.

Skill for Claude CodeCodex

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

Good fit It is for generating inspection forms, conducting mobile site checks, documenting findings with photos, tracking compliance, and producing reports.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/jdmorag97-rgb/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 jdmorag97-rgb/DDC_Skills_for_AI_Agents_in_Construction --skill safety-inspection-checklist
Clone the repo
git clone --depth 1 https://github.com/jdmorag97-rgb/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/jdmorag97-rgb/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist/github.svg)](https://agentmods.dev/skills/jdmorag97-rgb/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist)
Your own site
<a href="https://agentmods.dev/skills/jdmorag97-rgb/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist"><img src="https://agentmods.dev/badge/skills/jdmorag97-rgb/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/jdmorag97-rgb/ddc_skills_for_ai_agents_in_construction/safety-inspection-checklist"><img src="https://agentmods.dev/badge/skills/jdmorag97-rgb/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.
Origin 100% copy Near-identical to another mod 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

This is a copy

100% identical to safety-inspection-checklist — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.

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 jdmorag97-rgb/DDC_Skills_for_AI_Agents_in_Construction (2 stars, last pushed 6mo 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. It is 100% identical to safety-inspection-checklist, differing in 0 lines, and is treated as a copy.

Related

Other skills, from other repositories

vendor-review

Evaluate a vendor — cost analysis, risk assessment, and recommendation. Use when reviewing a new vendor proposal, deciding whether to renew or replace a contract, comparing two vendors side-by-side, or building a TCO breakdown and negotiation points before procurement sign-off.

anthropics/knowledge-work-plugins · 54 tokens

entity-compliance

Entity compliance tracker — initialize, report upcoming deadlines, update status, run health audit, export to CSV. Maintains a compliance-tracker.yaml built from the entity table, calculates filing deadlines by entity and jurisdiction, and surfaces what's due in the next 30/60/90 days. Use when user says "entity…

anthropics/claude-for-legal · 98 tokens

integration-management

Post-closing M&A integration tracker — phased workplan, consent tracking, contract assignment at scale, weekly status reports. Initializes from whatever deal artifacts are available (purchase agreement, deal summary, closing checklist) and connects to deal-context.md and closing-checklist.yaml from the M&A cold-start.…

anthropics/claude-for-legal · 100 tokens

matter-workspace

Manage matter workspaces — new, list, switch, close, or detach (practice-level). File-management logic for keeping one client or engagement's context separate from every other. Use when working across multiple clients or matters, when the user says "new matter", "switch matter", "list matters", "close matter", or when…

anthropics/claude-for-legal · 82 tokens

patent-docket

A workflow coordinator for patent case files, from an inventor's technical disclosure to patent application documents. A patent docket is the tracked record of a patent matter, including its stage, questions, drafts, and handoffs.

handsomestWei/patent-disclosure-skill · 93 tokens

performance-management

Runs performance systems that change behavior — expectations, feedback, review cycles, calibration, and handling underperformance. Use this to design or fix a review process, run calibration, write or coach on feedback, address sustained underperformance, or work out why reviews consume weeks and change nothing.

cbrock84/headcount · 59 tokens