Babysitter fmea-facilitator

Failure Mode and Effects Analysis facilitation skill for risk identification and prioritization.

install
source · Clone the upstream repo
git clone https://github.com/a5c-ai/babysitter
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/a5c-ai/babysitter "$T" && mkdir -p ~/.claude/skills && cp -r "$T/library/specializations/domains/science/industrial-engineering/skills/fmea-facilitator" ~/.claude/skills/a5c-ai-babysitter-fmea-facilitator-65cde1 && rm -rf "$T"
manifest: library/specializations/domains/science/industrial-engineering/skills/fmea-facilitator/SKILL.md
source content

fmea-facilitator

You are fmea-facilitator - a specialized skill for facilitating Failure Mode and Effects Analysis for risk identification and prioritization.

Overview

This skill enables AI-powered FMEA including:

  • FMEA scope and boundary definition
  • Failure mode brainstorming facilitation
  • Severity, Occurrence, Detection rating guidance
  • RPN (Risk Priority Number) calculation
  • AIAG-VDA Action Priority (AP) methodology
  • Control plan integration
  • Recommended action tracking
  • FMEA revision and living document management

Capabilities

1. FMEA Structure

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

class FMEAType(Enum):
    DESIGN = "DFMEA"
    PROCESS = "PFMEA"
    SYSTEM = "SFMEA"

@dataclass
class FailureMode:
    id: str
    item_function: str
    potential_failure_mode: str
    potential_effects: List[str]
    severity: int  # 1-10
    potential_causes: List[str]
    occurrence: int  # 1-10
    current_controls_prevention: List[str]
    current_controls_detection: List[str]
    detection: int  # 1-10
    recommended_actions: List[str] = field(default_factory=list)
    responsibility: str = ""
    target_date: Optional[datetime] = None
    actions_taken: str = ""
    severity_after: Optional[int] = None
    occurrence_after: Optional[int] = None
    detection_after: Optional[int] = None

    @property
    def rpn(self):
        return self.severity * self.occurrence * self.detection

    @property
    def rpn_after(self):
        if all([self.severity_after, self.occurrence_after, self.detection_after]):
            return self.severity_after * self.occurrence_after * self.detection_after
        return None

@dataclass
class FMEA:
    fmea_type: FMEAType
    item_name: str
    revision: str
    team_members: List[str]
    start_date: datetime
    failure_modes: List[FailureMode] = field(default_factory=list)

    def add_failure_mode(self, fm: FailureMode):
        self.failure_modes.append(fm)

    def get_high_rpn_items(self, threshold=100):
        return [fm for fm in self.failure_modes if fm.rpn >= threshold]

2. Severity Rating Guide

SEVERITY_RATINGS = {
    10: {
        "effect": "Hazardous without warning",
        "description": "Very high severity ranking when potential failure mode affects safe operation without warning",
        "criteria": "May endanger operator; Noncompliance with regulations"
    },
    9: {
        "effect": "Hazardous with warning",
        "description": "Very high severity ranking when potential failure mode affects safe operation with warning",
        "criteria": "May endanger operator with warning"
    },
    8: {
        "effect": "Very High",
        "description": "Product inoperable, loss of primary function",
        "criteria": "100% of product affected, customer very dissatisfied"
    },
    7: {
        "effect": "High",
        "description": "Product operable but performance level reduced",
        "criteria": "Most customers dissatisfied"
    },
    6: {
        "effect": "Moderate",
        "description": "Product operable but comfort/convenience items inoperable",
        "criteria": "Customer experiences discomfort"
    },
    5: {
        "effect": "Low",
        "description": "Product operable but comfort/convenience items reduced",
        "criteria": "Customer somewhat dissatisfied"
    },
    4: {
        "effect": "Very Low",
        "description": "Fit and finish items do not conform, noticed by most customers",
        "criteria": "Defect noticed by most customers"
    },
    3: {
        "effect": "Minor",
        "description": "Fit and finish items do not conform, noticed by average customers",
        "criteria": "Defect noticed by average customers"
    },
    2: {
        "effect": "Very Minor",
        "description": "Fit and finish items do not conform, noticed by discriminating customers",
        "criteria": "Defect noticed by discriminating customers"
    },
    1: {
        "effect": "None",
        "description": "No discernible effect",
        "criteria": "No effect"
    }
}

def get_severity_guidance(context="process"):
    """Return severity rating guidance"""
    return SEVERITY_RATINGS

3. Occurrence Rating Guide

OCCURRENCE_RATINGS = {
    10: {"probability": "Very High", "rate": ">= 100 per 1000", "cpk": "< 0.33"},
    9: {"probability": "High", "rate": "50 per 1000", "cpk": ">= 0.33"},
    8: {"probability": "High", "rate": "20 per 1000", "cpk": ">= 0.51"},
    7: {"probability": "Moderately High", "rate": "10 per 1000", "cpk": ">= 0.67"},
    6: {"probability": "Moderate", "rate": "5 per 1000", "cpk": ">= 0.83"},
    5: {"probability": "Moderate", "rate": "2 per 1000", "cpk": ">= 1.00"},
    4: {"probability": "Moderately Low", "rate": "1 per 1000", "cpk": ">= 1.17"},
    3: {"probability": "Low", "rate": "0.5 per 1000", "cpk": ">= 1.33"},
    2: {"probability": "Very Low", "rate": "0.1 per 1000", "cpk": ">= 1.50"},
    1: {"probability": "Remote", "rate": "<= 0.01 per 1000", "cpk": ">= 1.67"}
}

4. Detection Rating Guide

DETECTION_RATINGS = {
    10: {
        "likelihood": "Almost Impossible",
        "description": "No known controls to detect failure mode",
        "criteria": "Cannot detect or not checked"
    },
    9: {
        "likelihood": "Very Remote",
        "description": "Controls probably will not detect",
        "criteria": "Control achieved with indirect or random checks only"
    },
    8: {
        "likelihood": "Remote",
        "description": "Controls have poor chance of detection",
        "criteria": "Control achieved with visual inspection only"
    },
    7: {
        "likelihood": "Very Low",
        "description": "Controls have poor chance of detection",
        "criteria": "Control achieved with double visual inspection"
    },
    6: {
        "likelihood": "Low",
        "description": "Controls may detect",
        "criteria": "Control achieved with charting methods (SPC)"
    },
    5: {
        "likelihood": "Moderate",
        "description": "Controls may detect",
        "criteria": "Control based on variable gauging after parts leave station"
    },
    4: {
        "likelihood": "Moderately High",
        "description": "Controls have good chance to detect",
        "criteria": "Error detection in subsequent operations"
    },
    3: {
        "likelihood": "High",
        "description": "Controls have good chance to detect",
        "criteria": "Error detection at station (gauging)"
    },
    2: {
        "likelihood": "Very High",
        "description": "Controls almost certain to detect",
        "criteria": "Error detection at station (automatic gauging)"
    },
    1: {
        "likelihood": "Almost Certain",
        "description": "Controls certain to detect",
        "criteria": "Error proofing - cannot produce discrepant part"
    }
}

5. AIAG-VDA Action Priority (AP)

def calculate_action_priority(severity, occurrence, detection):
    """
    Calculate Action Priority per AIAG-VDA FMEA handbook

    Returns: 'H' (High), 'M' (Medium), 'L' (Low)
    """
    # High Priority
    if severity >= 9 and occurrence >= 4:
        return "H"
    if severity >= 9 and detection >= 7:
        return "H"
    if severity >= 5 and occurrence >= 7 and detection >= 5:
        return "H"

    # Low Priority
    if severity <= 4 and occurrence <= 3:
        return "L"
    if severity <= 4 and detection <= 3:
        return "L"
    if severity <= 6 and occurrence <= 2 and detection <= 4:
        return "L"

    # Medium Priority (default)
    return "M"

def get_ap_table():
    """
    Return AP lookup table summary
    """
    return {
        "H": {
            "description": "High Priority",
            "action": "Required - Must take action to improve controls",
            "review": "Management attention required"
        },
        "M": {
            "description": "Medium Priority",
            "action": "Recommended - Should take action to improve controls",
            "review": "Team decision"
        },
        "L": {
            "description": "Low Priority",
            "action": "Optional - May take action to improve controls",
            "review": "Team discretion"
        }
    }

6. FMEA Analysis and Reporting

def analyze_fmea(fmea: FMEA):
    """
    Analyze FMEA and generate summary report
    """
    analysis = {
        "total_failure_modes": len(fmea.failure_modes),
        "rpn_statistics": {},
        "ap_distribution": {"H": 0, "M": 0, "L": 0},
        "top_risks": [],
        "actions_status": {
            "pending": 0,
            "in_progress": 0,
            "completed": 0
        }
    }

    rpns = [fm.rpn for fm in fmea.failure_modes]
    if rpns:
        analysis["rpn_statistics"] = {
            "max": max(rpns),
            "min": min(rpns),
            "average": sum(rpns) / len(rpns),
            "above_100": sum(1 for r in rpns if r >= 100),
            "above_200": sum(1 for r in rpns if r >= 200)
        }

    # AP distribution
    for fm in fmea.failure_modes:
        ap = calculate_action_priority(fm.severity, fm.occurrence, fm.detection)
        analysis["ap_distribution"][ap] += 1

    # Top risks (by RPN)
    sorted_fms = sorted(fmea.failure_modes, key=lambda x: x.rpn, reverse=True)
    analysis["top_risks"] = [
        {
            "id": fm.id,
            "failure_mode": fm.potential_failure_mode,
            "rpn": fm.rpn,
            "severity": fm.severity,
            "occurrence": fm.occurrence,
            "detection": fm.detection,
            "ap": calculate_action_priority(fm.severity, fm.occurrence, fm.detection)
        }
        for fm in sorted_fms[:10]
    ]

    # Actions status
    for fm in fmea.failure_modes:
        if fm.actions_taken:
            analysis["actions_status"]["completed"] += 1
        elif fm.recommended_actions:
            analysis["actions_status"]["in_progress"] += 1
        else:
            analysis["actions_status"]["pending"] += 1

    return analysis

def generate_control_plan_items(fmea: FMEA):
    """
    Generate control plan items from FMEA
    """
    control_items = []

    for fm in fmea.failure_modes:
        for control in fm.current_controls_prevention + fm.current_controls_detection:
            control_items.append({
                "process_step": fm.item_function,
                "characteristic": fm.potential_failure_mode,
                "control_method": control,
                "sample_size": "TBD",
                "frequency": "TBD",
                "reaction_plan": f"If out of control, refer to FMEA ID {fm.id}"
            })

    return control_items

Process Integration

This skill integrates with the following processes:

  • failure-mode-effects-analysis.js
  • root-cause-analysis-investigation.js
  • statistical-process-control-implementation.js

Output Format

{
  "fmea_summary": {
    "type": "PFMEA",
    "item": "Assembly Process",
    "revision": "1.2",
    "total_failure_modes": 45
  },
  "risk_analysis": {
    "high_priority_count": 8,
    "medium_priority_count": 22,
    "low_priority_count": 15,
    "max_rpn": 392,
    "avg_rpn": 112
  },
  "top_risks": [
    {
      "failure_mode": "Missing fastener",
      "rpn": 392,
      "ap": "H",
      "recommended_action": "Add vision system verification"
    }
  ],
  "actions_required": 12
}

Best Practices

  1. Cross-functional team - Include design, manufacturing, quality, service
  2. Start early - Begin FMEA during design phase
  3. Focus on prevention - Prioritize prevention over detection
  4. Living document - Update FMEA when process changes
  5. Use AP not just RPN - Consider AIAG-VDA AP methodology
  6. Track actions - Close the loop on recommended actions

Constraints

  • Document all assumptions
  • Use consistent rating criteria
  • Review periodically
  • Link to control plans