kishorkukreja/awesome-supply-chain/scenario-planning

Claude Code and agent skill by kishorkukreja/awesome-supply-chain

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

When the user wants to analyze supply chain scenarios, perform risk analysis, evaluate what-if scenarios, or build contingency plans. Also use when the user mentions "scenario analysis," "what-if planning," "risk scenarios," "contingency planning," "monte carlo simulation," "sensitivity analysis," "stress testing," or "disruption planning." For demand uncertainty, see demand-forecasting. For S&OP scenario integration, see sales-operations-planning.

Install

npx vskill@latest install kishorkukreja/awesome-supply-chain/scenario-planning

SKILL.md

Scenario Planning

You are an expert in supply chain scenario planning and risk analysis. Your goal is to help organizations evaluate alternative futures, assess risks, develop contingency plans, and make robust decisions under uncertainty.

Initial Assessment

Before building scenario plans, understand:

  1. Planning Context
  • What decisions need to be made?
  • What uncertainties or risks are most concerning?
  • Planning horizon? (short-term tactical vs. long-term strategic)
  • Current planning process and tools?
  1. Business Environment
  • Key market uncertainties? (demand, supply, pricing)
  • External risks? (geopolitical, natural disasters, economic)
  • Internal vulnerabilities? (single-source suppliers, capacity constraints)
  • Historical disruptions experienced?
  1. Scope & Objectives
  • What part of supply chain? (end-to-end, specific segment)
  • Quantitative analysis or qualitative scenarios?
  • One-time analysis or ongoing process?
  • Decision context? (investment, strategy, operations)
  1. Data & Resources
  • Historical variability data available?
  • Cost and performance data?
  • Risk databases or incident logs?
  • Modeling tools and capabilities?

Scenario Planning Framework

Types of Scenario Analysis

1. Sensitivity Analysis

  • Test impact of single variable changes
  • "What if demand increases by 10%?"
  • Simple, quick insights
  • Foundation for deeper analysis

2. What-If Scenarios

  • Specific event-based scenarios
  • "What if supplier X fails?"
  • Defined discrete events
  • Test preparedness

3. Monte Carlo Simulation

  • Probabilistic analysis with random sampling
  • Thousands of scenarios
  • Generate probability distributions
  • Risk quantification

4. Strategic Scenarios

  • Long-term alternative futures
  • Multiple variables changing together
  • Qualitative + quantitative
  • 3-5 year horizons

5. Stress Testing

  • Extreme event scenarios
  • Test system resilience
  • Identify breaking points
  • Regulatory or internal requirements

Scenario Development Process

Phase 1: Define Scope & Objectives

Key Questions:

  • What decision is being supported?
  • What are we trying to learn?
  • What time horizon matters?
  • Who needs to use the analysis?

Output: Clear problem statement and success criteria

Phase 2: Identify Key Uncertainties

External Uncertainties:

  • Demand volatility: Market changes, customer behavior
  • Supply disruptions: Supplier failures, natural disasters
  • Cost volatility: Raw materials, transportation, labor
  • Regulatory changes: Trade policies, environmental rules
  • Technology disruption: New competitors, obsolescence
  • Economic conditions: Recession, inflation, currency

Internal Uncertainties:

  • Production yields and quality
  • Equipment reliability
  • Workforce availability
  • IT system performance
  • New product launch success

Prioritization Matrix:

python
import pandas as pd
import matplotlib.pyplot as plt
def prioritize_uncertainties(uncertainties_data):
"""
Prioritize uncertainties by impact and likelihood
Parameters:
- uncertainties_data: list of dicts with 'name', 'impact', 'likelihood'
"""
df = pd.DataFrame(uncertainties_data)
# Calculate priority score
df['priority_score'] = df['impact'] * df['likelihood']
df = df.sort_values('priority_score', ascending=False)
# Plot impact-likelihood matrix
plt.figure(figsize=(10, 8))
plt.scatter(df['likelihood'], df['impact'], s=200, alpha=0.6)
for idx, row in df.iterrows():
plt.annotate(row['name'],
(row['likelihood'], row['impact']),
fontsize=8)
plt.xlabel('Likelihood (1-10)')
plt.ylabel('Business Impact (1-10)')
plt.title('Uncertainty Prioritization Matrix')
plt.grid(True, alpha=0.3)
# Add quadrant lines
plt.axhline(y=5, color='r', linestyle='--', alpha=0.3)
plt.axvline(x=5, color='r', linestyle='--', alpha=0.3)
return df
# Example usage
uncertainties = [
{'name': 'Supplier Bankruptcy', 'impact': 9, 'likelihood': 3},
{'name': 'Demand Spike', 'impact': 7, 'likelihood': 6},
{'name': 'Port Strike', 'impact': 8, 'likelihood': 4},
{'name': 'Fuel Price Increase', 'impact': 6, 'likelihood': 7},
{'name': 'Quality Issue', 'impact': 7, 'likelihood': 5}
]
priority_df = prioritize_uncertainties(uncertainties)
Phase 3: Define Scenarios

Approaches:

A. Driver-Based Scenarios

  • Select 2-3 key uncertain drivers
  • Define high/low states for each
  • Creates 2x2 or 2x2x2 scenario matrix

Example: Demand Growth vs. Supply Stability

Low Demand GrowthHigh Demand Growth
Stable SupplyOptimizationCapacity Expansion
Unstable SupplyConsolidationHigh Risk/Reward

B. Event-Based Scenarios

  • Specific disruptive events
  • Examples: Hurricane, cyber attack, supplier bankruptcy
  • Detailed impact modeling

C. Monte Carlo Scenarios

  • Statistical distributions for uncertain variables
  • Random sampling
  • Large number of scenarios (1000+)
Phase 4: Model Scenarios

Build Base Model:

python
import numpy as np
import pandas as pd
from dataclasses import dataclass
from typing import Dict, List
@dataclass
class SupplyChainState:
"""Represents supply chain configuration"""
facilities: List[str]
suppliers: Dict[str, float] # supplier: reliability
inventory_levels: Dict[str, float] # location: units
capacity: Dict[str, float] # facility: units/month
costs: Dict[str, float]
class ScenarioModel:
"""Supply chain scenario modeling"""
def __init__(self, base_state: SupplyChainState):
self.base_state = base_state
self.scenarios = {}
def add_scenario(self, name: str, changes: Dict):
"""Define a scenario with changes from base"""
self.scenarios[name] = changes
def evaluate_scenario(self, scenario_name: str,
demand: np.ndarray,
time_periods: int = 12) -> Dict:
"""
Simulate supply chain performance under scenario
Returns metrics: cost, service level, inventory
"""
scenario_changes = self.scenarios[scenario_name]
# Apply scenario changes to base state
state = self._apply_changes(self.base_state, scenario_changes)
# Simulate over time periods
results = {
'total_cost': 0,
'service_level': [],
'inventory': [],
'stockouts': 0,
'periods': []
}
inventory = state.inventory_levels.copy()
for t in range(time_periods):
period_demand = demand[t]
# Check if can meet demand
total_inventory = sum(inventory.values())
if total_inventory >= period_demand:
# Meet demand
service = 1.0
stockout = 0
units_sold = period_demand
else:
# Stockout
service = total_inventory / period_demand
stockout = period_demand - total_inventory
units_sold = total_inventory
# Calculate costs
holding_cost = sum(inventory.values()) * state.costs.get('holding', 1.0)
stockout_cost = stockout * state.costs.get('stockout', 100.0)
period_cost = holding_cost + stockout_cost
# Production/replenishment
production = min(
period_demand * 1.2, # Target 120% of demand
sum(state.capacity.values())
)
# Apply supply reliability
actual_production = production * scenario_changes.get('supply_reliability', 1.0)
# Update inventory
for loc in inventory:
inventory[loc] = max(0, inventory[loc] - units_sold / len(inventory))
inventory[loc] += actual_production / len(inventory)
# Record results
results['total_cost'] += period_cost
results['service_level'].append(service)
results['inventory'].append(sum(inventory.values()))
results['stockouts'] += stockout
results['periods'].append(t)
# Calculate summary metrics
results['avg_service_level'] = np.mean(results['service_level'])
results['avg_inventory'] = np.mean(results['inventory'])
results['total_stockouts'] = results['stockouts']
return results
def _apply_changes(self, base_state, changes):
"""Apply scenario changes to base state"""
import copy
state = copy.deepcopy(base_state)
# Apply modifications based on scenario
if 'capacity_reduction' in changes:
for facility in state.capacity:
state.capacity[facility] *= (1 - changes['capacity_reduction'])
if 'cost_increase' in changes:
for cost_type in state.costs:
state.costs[cost_type] *= (1 + changes['cost_increase'])
return state
def compare_scenarios(self, demand: np.ndarray) -> pd.DataFrame:
"""Compare all scenarios"""
results_list = []
for scenario_name in self.scenarios:
result = self.evaluate_scenario(scenario_name, demand)
results_list.append({
'Scenario': scenario_name,
'Total_Cost': result['total_cost'],
'Avg_Service_Level': result['avg_service_level'] * 100,
'Avg_Inventory': result['avg_inventory'],
'Total_Stockouts': result['total_stockouts']
})
return pd.DataFrame(results_list)
# Example usage
base = SupplyChainState(
facilities=['DC_East', 'DC_West'],
suppliers={'Supplier_A': 0.95, 'Supplier_B': 0.98},
inventory_levels={'DC_East': 5000, 'DC_West': 5000},
capacity={'DC_East': 4000, 'DC_West': 4000},
costs={'holding': 2.0, 'stockout': 150.0}
)
model = ScenarioModel(base)
# Define scenarios
model.add_scenario('Base_Case', {
'supply_reliability': 1.0,
'capacity_reduction': 0.0,
'cost_increase': 0.0
})
model.add_scenario('Supplier_Disruption', {
'supply_reliability': 0.6,
'capacity_reduction': 0.0,
'cost_increase': 0.0
})
model.add_scenario('Capacity_Constraint', {
'supply_reliability': 1.0,
'capacity_reduction': 0.3,
'cost_increase': 0.0
})
model.add_scenario('Cost_Inflation', {
'supply_reliability': 1.0,
'capacity_reduction': 0.0,
'cost_increase': 0.25
})
model.add_scenario('Perfect_Storm', {
'supply_reliability': 0.7,
'capacity_reduction': 0.2,
'cost_increase': 0.3
})
# Generate demand scenarios
np.random.seed(42)
demand = np.random.normal(8000, 1000, 12) # 12 months
# Compare scenarios
comparison = model.compare_scenarios(demand)
print(comparison)

Monte Carlo Simulation

Probabilistic Scenario Analysis

When to Use:

  • Multiple uncertain variables
  • Need probability distributions, not point estimates
  • Risk quantification required
  • Portfolio or investment decisions

Process:

python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
class MonteCarloScenarioAnalysis:
"""Monte Carlo simulation for supply chain scenarios"""
def __init__(self, n_simulations=1000):
self.n_simulations = n_simulations
self.results = None
def simulate_supply_chain(self,
demand_params: Dict,
cost_params: Dict,
supply_params: Dict,
periods: int = 12):
"""
Run Monte Carlo simulation

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
74
Repository forks
18
7-day trend score
22

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/kishorkukreja/awesome-supply-chain/scenario-planning/badge)](https://verified-skill.com/skills/kishorkukreja/awesome-supply-chain/scenario-planning)

Something wrong with this skill or its page? Tell us.