Agent skill

fmea-facilitator

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

Stars 514
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/a5c-ai/babysitter/tree/main/library/specializations/domains/science/industrial-engineering/skills/fmea-facilitator

Metadata

Additional technical details for this skill

author
babysitter-sdk
version
1.0.0
category
quality-engineering
backlog id
SK-IE-018

SKILL.md

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

python
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

python
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

python
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

python
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)

python
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

python
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

json
{
  "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

Expand your agent's capabilities with these related and highly-rated skills.

a5c-ai/babysitter

gsd-tools

Central utility skill for GSD operations. Provides config parsing, slug generation, timestamps, path operations, and orchestrates calls to other specialized skills. Acts as the unified entry point that the original gsd-tools.cjs provided via its lib/ modules (commands, config, core, init).

514 31
Explore
a5c-ai/babysitter

model-profile-resolution

Resolve model profile (quality/balanced/budget) at orchestration start and map agents to specific models. Enables cost/quality tradeoffs by selecting appropriate AI models for each agent role.

514 31
Explore
a5c-ai/babysitter

verification-suite

Plan structure validation, phase completeness checks, reference integrity verification, and artifact existence confirmation. Provides the structured verification layer ensuring GSD artifacts are well-formed and complete.

514 31
Explore
a5c-ai/babysitter

state-management

STATE.md reading, writing, and field-level updates. Provides cross-session state persistence via .planning/STATE.md with structured fields for current task, completed phases, blockers, decisions, and quick tasks.

514 31
Explore
a5c-ai/babysitter

git-integration

Git commit patterns, formats, and conventions for GSD methodology. Provides atomic commits per task, structured commit messages, planning file commits, branch management, and milestone tag operations.

514 31
Explore
a5c-ai/babysitter

frontmatter-parsing

YAML frontmatter parsing and manipulation for .planning/ documents. Provides read, write, update, query, and validation operations on frontmatter blocks in GSD markdown artifacts.

514 31
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results