Convert an unstructured risk question into a structured Monte Carlo run via the
bundled scripts/monte_carlo.py toolkit. Sample from the right distribution,
summarise percentiles, and return a histogram PNG plus spreadsheet export.
Offer an interactive HTML chart when the user asks for it.
Instructions
Cognitive intake. Detect the core question (timeline, financial risk,
yield, downtime, claims, etc.). If the user did not give enough numbers to
parameterise a distribution, stop and ask — do not invent bounds. Prompt
with the distribution options below.
Choose a distribution:
- Triangular — user gives Minimum, Most Likely (peak), Maximum.
- Normal — user gives Mean and Std Dev (optional
base_modifier for
portfolio / compounding style: outcome = base * (1 + return)).
- Uniform — every value between Minimum and Maximum is equally likely.
- Log-normal — non-negative, right-skewed risks; user gives log-scale
mean and sigma. Highlight the Mean vs P50 gap when skew is large.
- Poisson — count of rare events in a fixed interval; user gives
lambda
(expected count per interval, e.g. outages per month).
- Weibull — time-to-failure / reliability; user gives
shape (k) and
scale (λ). Shape < 1 → infant mortality, = 1 → exponential, > 1 → wear-out.
- Beta — bounded probability [0, 1] or percentage; user gives
alpha and
beta. Useful for proportions, conversion rates, or task-completion estimates.
- Exponential — memoryless inter-arrival times; user gives
scale (mean =
1 / rate). Good for time between random events (calls, failures, requests).
Defaults. If simulations are unspecified, use 10000. Prefer a clear
chart_title and x_axis_label in the user's domain units (days, USD, hours).
Execute with the toolkit (import or CLI). Always produce:
- Summary stats: mean, P5, P50, P95
- PNG histogram with P5 / P50 / P95 marker lines
- CSV of all iterations (opens in Excel)
Also produce when asked:
- Interactive HTML — self-contained Chart.js page with live sliders per
distribution parameter, a simulations count slider, and a P-threshold
calculator (
P(outcome < X) = ?)
.xlsx workbook (requires openpyxl; otherwise point them to the CSV)
import sys
sys.path.insert(0, "scripts")
from monte_carlo import simulate
result = simulate({
"distribution": "triangular",
"low": 12, "peak": 18, "high": 45,
"simulations": 10000,
"chart_title": "Cloud migration duration (days)",
"x_axis_label": "Days",
"html": True, # optional interactive Chart.js page with live controls
"excel": True, # optional .xlsx (falls back to CSV if openpyxl missing)
"out_prefix": "simulation",
})
# result keys: mean, p5, p50, p95, brief_summary, chart_path, csv_path, …
Present results in domain language:
- P5 = downside / late / risk baseline
- P50 = median expectation
- P95 = optimistic / upper ceiling (or severe upside for cost/risk)
- Show or link the PNG; mention CSV/Excel paths; offer HTML if not requested yet.
- Always end with a brief summary (2–3 sentences). Prefer
result["brief_summary"] from the toolkit; you may lightly rephrase it into
the user's domain (days, dollars, hours) without changing the numbers.
Response layout (adapt labels to the domain):
### Simulation Analytics Report
Ran {simulations} iterations ({distribution}).
| Metric | Value |
| --- | --- |
| P5 (risk baseline) | {p5} |
| P50 (median) | {p50} |
| P95 (upper) | {p95} |
| Mean | {mean} |
Histogram: {chart_path}
Raw iterations: {csv_path}
### Brief summary
{brief_summary}
Guardrails
- Never run the script when required parameters are missing — ask first.
- Do not fabricate distribution parameters or claim false precision.
- Prefer the bundled toolkit over hand-rolled NumPy each time, for consistent
charts and exports.
- Keep LLM replies to the summary payload; do not dump all iteration rows
into chat.
Bundled files
scripts/monte_carlo.py — simulation engine, PNG, CSV/Excel, interactive HTML
references/cheatsheet.md — parameters, CLI, test prompts
assets/sample_triangular.json — demo payload (project timeline)
assets/sample_normal.json — demo payload (portfolio returns)
assets/sample_lognormal.json — demo payload (skewed downtime)
assets/sample_poisson.json — demo payload (event count per interval)
assets/sample_weibull.json — demo payload (component lifetime)
assets/sample_exponential.json — demo payload (time between arrivals)
Run this — do not improvise
This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as monte_carlo_analysis_agent.py and embedded as the fenced Python below (sha256 30c674a5f46cdc92…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to monte_carlo_analysis_agent.py first:
python3 monte_carlo_analysis_agent.py '{"key": "value"}' # arguments as one JSON object
echo '{"key": "value"}' | python3 monte_carlo_analysis_agent.py # or on stdin
python3 monte_carlo_analysis_agent.py --tool # emit the JSON tool contract
Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns steps, execute those steps in order exactly as returned; if it returns instructions, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent.
"""MonteCarloAnalysis -- Use this skill whenever the user asks to run a Monte Carlo simulation, model risk or uncertainty with random sampling, estimate P5/P50/P95 outcomes, or produce a probability distribution for project timelines, portfolio returns, downtime, costs, or similar uncertain variables. Trigger on phrases like 'run a Monte Carlo', 'simulate outcomes', 'probability chart for best and worst case', or when they give min/most-likely/max (or mean/std) and want thousands of iterations. Do NOT trigger for deterministic forecasts with no uncertainty, or for generic charts unrelated to simulation.
Generated by the rapp skill from monte-carlo-analysis. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""
import json
import re
import sys
try:
from agents.basic_agent import BasicAgent
except ImportError: # running OUTSIDE a brainstem -- stay executable anyway.
class BasicAgent: # noqa: D101 - minimal stand-in, same contract
def __init__(self, name=None, metadata=None):
if name:
self.name = name
if metadata:
self.metadata = metadata
def perform(self, **kwargs):
return "Not implemented."
def system_context(self):
return None
def to_tool(self):
return {"type": "function", "function": {
"name": self.name,
"description": self.metadata.get("description", ""),
"parameters": self.metadata.get("parameters", {})}}
# The procedural layer, verbatim from the source capability.
INSTRUCTIONS = 'Convert an unstructured risk question into a structured Monte Carlo run via the\nbundled `scripts/monte_carlo.py` toolkit. Sample from the right distribution,\nsummarise percentiles, and return a histogram PNG plus spreadsheet export.\nOffer an interactive HTML chart when the user asks for it.\n\n## Instructions\n\n1. **Cognitive intake.** Detect the core question (timeline, financial risk,\n yield, downtime, claims, etc.). If the user did not give enough numbers to\n parameterise a distribution, **stop and ask** — do not invent bounds. Prompt\n with the distribution options below.\n\n2. **Choose a distribution:**\n - **Triangular** — user gives Minimum, Most Likely (peak), Maximum.\n - **Normal** — user gives Mean and Std Dev (optional `base_modifier` for\n portfolio / compounding style: `outcome = base * (1 + return)`).\n - **Uniform** — every value between Minimum and Maximum is equally likely.\n - **Log-normal** — non-negative, right-skewed risks; user gives log-scale\n `mean` and `sigma`. Highlight the Mean vs P50 gap when skew is large.\n - **Poisson** — count of rare events in a fixed interval; user gives `lambda`\n (expected count per interval, e.g. outages per month).\n - **Weibull** — time-to-failure / reliability; user gives `shape` (k) and\n `scale` (λ). Shape < 1 → infant mortality, = 1 → exponential, > 1 → wear-out.\n - **Beta** — bounded probability [0, 1] or percentage; user gives `alpha` and\n `beta`. Useful for proportions, conversion rates, or task-completion estimates.\n - **Exponential** — memoryless inter-arrival times; user gives `scale` (mean =\n 1 / rate). Good for time between random events (calls, failures, requests).\n\n3. **Defaults.** If simulations are unspecified, use `10000`. Prefer a clear\n `chart_title` and `x_axis_label` in the user's domain units (days, USD, hours).\n\n4. **Execute** with the toolkit (import or CLI). Always produce:\n - Summary stats: mean, P5, P50, P95\n - PNG histogram with P5 / P50 / P95 marker lines\n - CSV of all iterations (opens in Excel)\n\n Also produce when asked:\n - Interactive HTML — self-contained Chart.js page with live sliders per\n distribution parameter, a simulations count slider, and a P-threshold\n calculator (`P(outcome < X) = ?`)\n - `.xlsx` workbook (requires `openpyxl`; otherwise point them to the CSV)\n\n```python\nimport sys\nsys.path.insert(0, "scripts")\nfrom monte_carlo import simulate\n\nresult = simulate({\n "distribution": "triangular",\n "low": 12, "peak": 18, "high": 45,\n "simulations": 10000,\n "chart_title": "Cloud migration duration (days)",\n "x_axis_label": "Days",\n "html": True, # optional interactive Chart.js page with live controls\n "excel": True, # optional .xlsx (falls back to CSV if openpyxl missing)\n "out_prefix": "simulation",\n})\n# result keys: mean, p5, p50, p95, brief_summary, chart_path, csv_path, …\n```\n\n5. **Present results** in domain language:\n - P5 = downside / late / risk baseline\n - P50 = median expectation\n - P95 = optimistic / upper ceiling (or severe upside for cost/risk)\n - Show or link the PNG; mention CSV/Excel paths; offer HTML if not requested yet.\n - Always end with a **brief summary** (2–3 sentences). Prefer\n `result["brief_summary"]` from the toolkit; you may lightly rephrase it into\n the user's domain (days, dollars, hours) without changing the numbers.\n\n6. **Response layout** (adapt labels to the domain):\n\n```markdown\n### Simulation Analytics Report\nRan {simulations} iterations ({distribution}).\n\n| Metric | Value |\n| --- | --- |\n| P5 (risk baseline) | {p5} |\n| P50 (median) | {p50} |\n| P95 (upper) | {p95} |\n| Mean | {mean} |\n\nHistogram: {chart_path}\nRaw iterations: {csv_path}\n\n### Brief summary\n{brief_summary}\n```\n\n## Guardrails\n\n- Never run the script when required parameters are missing — ask first.\n- Do not fabricate distribution parameters or claim false precision.\n- Prefer the bundled toolkit over hand-rolled NumPy each time, for consistent\n charts and exports.\n- Keep LLM replies to the summary payload; do not dump all iteration rows\n into chat.\n\n## Bundled files\n\n- `scripts/monte_carlo.py` — simulation engine, PNG, CSV/Excel, interactive HTML\n- `references/cheatsheet.md` — parameters, CLI, test prompts\n- `assets/sample_triangular.json` — demo payload (project timeline)\n- `assets/sample_normal.json` — demo payload (portfolio returns)\n- `assets/sample_lognormal.json` — demo payload (skewed downtime)\n- `assets/sample_poisson.json` — demo payload (event count per interval)\n- `assets/sample_weibull.json` — demo payload (component lifetime)\n- `assets/sample_exponential.json` — demo payload (time between arrivals)'
# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = []
class MonteCarloAnalysisAgent(BasicAgent):
def __init__(self):
self.name = 'MonteCarloAnalysis'
self.metadata = {
"name": "MonteCarloAnalysis",
"description": "Use this skill whenever the user asks to run a Monte Carlo simulation, model risk or uncertainty with random sampling, estimate P5/P50/P95 outcomes, or produce a probability distribution for project timelines, portfolio returns, downtime, costs, or similar uncertain variables. Trigger on phrases like 'run a Monte Carlo', 'simulate outcomes', 'probability chart for best and worst case', or when they give min/most-likely/max (or mean/std) and want thousands of iterations. Do NOT trigger for deterministic forecasts with no uncertainty, or for generic charts unrelated to simulation.",
"parameters": {
"type": "object",
"properties": {},
"required": []
}
}
super().__init__(name=self.name, metadata=self.metadata)
def perform(self, **kwargs): # toaster:generated-perform
return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,
"inputs": kwargs,
"note": "Prose-only capability: follow INSTRUCTIONS "
"with the given inputs."}, indent=2)
if __name__ == "__main__":
# echo '{"arg": "value"}' | python3 monte_carlo_analysis_agent.py
# python3 monte_carlo_analysis_agent.py '{"arg": "value"}'
# python3 monte_carlo_analysis_agent.py --tool # emit the JSON tool contract
_a = sys.argv[1:]
if _a and _a[0] == "--tool":
print(json.dumps(MonteCarloAnalysisAgent().to_tool(), indent=2))
else:
_raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
print(MonteCarloAnalysisAgent().perform(**json.loads(_raw)))
# rci-capsule:v1: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
1---2name: monte-carlo-analysis3description: Use this skill whenever the user asks to run a Monte Carlo simulation, model risk or uncertainty with random sampling, estimate P5/P50/P95 outcomes, or produce a probability distribution for project timelines, portfolio returns, downtime, costs, or similar uncertain variables. Trigger on phrases like 'run a Monte Carlo', 'simulate outcomes', 'probability chart for best and worst case', or when they give min/most-likely/max (or mean/std) and want thousands of iterations. Do NOT trigger for deterministic forecasts with no uncertainty, or for generic charts unrelated to simulation.4---56Convert an unstructured risk question into a structured Monte Carlo run via the7bundled `scripts/monte_carlo.py` toolkit. Sample from the right distribution,8summarise percentiles, and return a histogram PNG plus spreadsheet export.9Offer an interactive HTML chart when the user asks for it.1011## Instructions12131. **Cognitive intake.** Detect the core question (timeline, financial risk,14 yield, downtime, claims, etc.). If the user did not give enough numbers to15 parameterise a distribution, **stop and ask** — do not invent bounds. Prompt16 with the distribution options below.17182. **Choose a distribution:**19 - **Triangular** — user gives Minimum, Most Likely (peak), Maximum.20 - **Normal** — user gives Mean and Std Dev (optional `base_modifier` for21 portfolio / compounding style: `outcome = base * (1 + return)`).22 - **Uniform** — every value between Minimum and Maximum is equally likely.23 - **Log-normal** — non-negative, right-skewed risks; user gives log-scale24 `mean` and `sigma`. Highlight the Mean vs P50 gap when skew is large.25 - **Poisson** — count of rare events in a fixed interval; user gives `lambda`26 (expected count per interval, e.g. outages per month).27 - **Weibull** — time-to-failure / reliability; user gives `shape` (k) and28 `scale` (λ). Shape < 1 → infant mortality, = 1 → exponential, > 1 → wear-out.29 - **Beta** — bounded probability [0, 1] or percentage; user gives `alpha` and30 `beta`. Useful for proportions, conversion rates, or task-completion estimates.31 - **Exponential** — memoryless inter-arrival times; user gives `scale` (mean =32 1 / rate). Good for time between random events (calls, failures, requests).33343. **Defaults.** If simulations are unspecified, use `10000`. Prefer a clear35 `chart_title` and `x_axis_label` in the user's domain units (days, USD, hours).36374. **Execute** with the toolkit (import or CLI). Always produce:38 - Summary stats: mean, P5, P50, P9539 - PNG histogram with P5 / P50 / P95 marker lines40 - CSV of all iterations (opens in Excel)4142 Also produce when asked:43 - Interactive HTML — self-contained Chart.js page with live sliders per44 distribution parameter, a simulations count slider, and a P-threshold45 calculator (`P(outcome < X) = ?`)46 - `.xlsx` workbook (requires `openpyxl`; otherwise point them to the CSV)4748```python49import sys50sys.path.insert(0, "scripts")51from monte_carlo import simulate5253result = simulate({54 "distribution": "triangular",55 "low": 12, "peak": 18, "high": 45,56 "simulations": 10000,57 "chart_title": "Cloud migration duration (days)",58 "x_axis_label": "Days",59 "html": True, # optional interactive Chart.js page with live controls60 "excel": True, # optional .xlsx (falls back to CSV if openpyxl missing)61 "out_prefix": "simulation",62})63# result keys: mean, p5, p50, p95, brief_summary, chart_path, csv_path, …64```65665. **Present results** in domain language:67 - P5 = downside / late / risk baseline68 - P50 = median expectation69 - P95 = optimistic / upper ceiling (or severe upside for cost/risk)70 - Show or link the PNG; mention CSV/Excel paths; offer HTML if not requested yet.71 - Always end with a **brief summary** (2–3 sentences). Prefer72 `result["brief_summary"]` from the toolkit; you may lightly rephrase it into73 the user's domain (days, dollars, hours) without changing the numbers.74756. **Response layout** (adapt labels to the domain):7677```markdown78### Simulation Analytics Report79Ran {simulations} iterations ({distribution}).8081| Metric | Value |82| --- | --- |83| P5 (risk baseline) | {p5} |84| P50 (median) | {p50} |85| P95 (upper) | {p95} |86| Mean | {mean} |8788Histogram: {chart_path}89Raw iterations: {csv_path}9091### Brief summary92{brief_summary}93```9495## Guardrails9697- Never run the script when required parameters are missing — ask first.98- Do not fabricate distribution parameters or claim false precision.99- Prefer the bundled toolkit over hand-rolled NumPy each time, for consistent100 charts and exports.101- Keep LLM replies to the summary payload; do not dump all iteration rows102 into chat.103104## Bundled files105106- `scripts/monte_carlo.py` — simulation engine, PNG, CSV/Excel, interactive HTML107- `references/cheatsheet.md` — parameters, CLI, test prompts108- `assets/sample_triangular.json` — demo payload (project timeline)109- `assets/sample_normal.json` — demo payload (portfolio returns)110- `assets/sample_lognormal.json` — demo payload (skewed downtime)111- `assets/sample_poisson.json` — demo payload (event count per interval)112- `assets/sample_weibull.json` — demo payload (component lifetime)113- `assets/sample_exponential.json` — demo payload (time between arrivals)114115<!-- toaster:generated:begin -->116117## Run this — do not improvise118119This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as `monte_carlo_analysis_agent.py` and embedded as the fenced Python below (sha256 30c674a5f46cdc92…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to `monte_carlo_analysis_agent.py` first:120121```bash122python3 monte_carlo_analysis_agent.py '{"key": "value"}' # arguments as one JSON object123echo '{"key": "value"}' | python3 monte_carlo_analysis_agent.py # or on stdin124python3 monte_carlo_analysis_agent.py --tool # emit the JSON tool contract125```126127Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns `steps`, execute those steps in order exactly as returned; if it returns `instructions`, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed `rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent`.128129````python # rapp:deterministic130"""MonteCarloAnalysis -- Use this skill whenever the user asks to run a Monte Carlo simulation, model risk or uncertainty with random sampling, estimate P5/P50/P95 outcomes, or produce a probability distribution for project timelines, portfolio returns, downtime, costs, or similar uncertain variables. Trigger on phrases like 'run a Monte Carlo', 'simulate outcomes', 'probability chart for best and worst case', or when they give min/most-likely/max (or mean/std) and want thousands of iterations. Do NOT trigger for deterministic forecasts with no uncertainty, or for generic charts unrelated to simulation.131132Generated by the rapp skill from monte-carlo-analysis. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""133134import json135import re136import sys137138try:139 from agents.basic_agent import BasicAgent140except ImportError: # running OUTSIDE a brainstem -- stay executable anyway.141 class BasicAgent: # noqa: D101 - minimal stand-in, same contract142 def __init__(self, name=None, metadata=None):143 if name:144 self.name = name145 if metadata:146 self.metadata = metadata147148 def perform(self, **kwargs):149 return "Not implemented."150151 def system_context(self):152 return None153154 def to_tool(self):155 return {"type": "function", "function": {156 "name": self.name,157 "description": self.metadata.get("description", ""),158 "parameters": self.metadata.get("parameters", {})}}159160# The procedural layer, verbatim from the source capability.161INSTRUCTIONS = 'Convert an unstructured risk question into a structured Monte Carlo run via the\nbundled `scripts/monte_carlo.py` toolkit. Sample from the right distribution,\nsummarise percentiles, and return a histogram PNG plus spreadsheet export.\nOffer an interactive HTML chart when the user asks for it.\n\n## Instructions\n\n1. **Cognitive intake.** Detect the core question (timeline, financial risk,\n yield, downtime, claims, etc.). If the user did not give enough numbers to\n parameterise a distribution, **stop and ask** — do not invent bounds. Prompt\n with the distribution options below.\n\n2. **Choose a distribution:**\n - **Triangular** — user gives Minimum, Most Likely (peak), Maximum.\n - **Normal** — user gives Mean and Std Dev (optional `base_modifier` for\n portfolio / compounding style: `outcome = base * (1 + return)`).\n - **Uniform** — every value between Minimum and Maximum is equally likely.\n - **Log-normal** — non-negative, right-skewed risks; user gives log-scale\n `mean` and `sigma`. Highlight the Mean vs P50 gap when skew is large.\n - **Poisson** — count of rare events in a fixed interval; user gives `lambda`\n (expected count per interval, e.g. outages per month).\n - **Weibull** — time-to-failure / reliability; user gives `shape` (k) and\n `scale` (λ). Shape < 1 → infant mortality, = 1 → exponential, > 1 → wear-out.\n - **Beta** — bounded probability [0, 1] or percentage; user gives `alpha` and\n `beta`. Useful for proportions, conversion rates, or task-completion estimates.\n - **Exponential** — memoryless inter-arrival times; user gives `scale` (mean =\n 1 / rate). Good for time between random events (calls, failures, requests).\n\n3. **Defaults.** If simulations are unspecified, use `10000`. Prefer a clear\n `chart_title` and `x_axis_label` in the user's domain units (days, USD, hours).\n\n4. **Execute** with the toolkit (import or CLI). Always produce:\n - Summary stats: mean, P5, P50, P95\n - PNG histogram with P5 / P50 / P95 marker lines\n - CSV of all iterations (opens in Excel)\n\n Also produce when asked:\n - Interactive HTML — self-contained Chart.js page with live sliders per\n distribution parameter, a simulations count slider, and a P-threshold\n calculator (`P(outcome < X) = ?`)\n - `.xlsx` workbook (requires `openpyxl`; otherwise point them to the CSV)\n\n```python\nimport sys\nsys.path.insert(0, "scripts")\nfrom monte_carlo import simulate\n\nresult = simulate({\n "distribution": "triangular",\n "low": 12, "peak": 18, "high": 45,\n "simulations": 10000,\n "chart_title": "Cloud migration duration (days)",\n "x_axis_label": "Days",\n "html": True, # optional interactive Chart.js page with live controls\n "excel": True, # optional .xlsx (falls back to CSV if openpyxl missing)\n "out_prefix": "simulation",\n})\n# result keys: mean, p5, p50, p95, brief_summary, chart_path, csv_path, …\n```\n\n5. **Present results** in domain language:\n - P5 = downside / late / risk baseline\n - P50 = median expectation\n - P95 = optimistic / upper ceiling (or severe upside for cost/risk)\n - Show or link the PNG; mention CSV/Excel paths; offer HTML if not requested yet.\n - Always end with a **brief summary** (2–3 sentences). Prefer\n `result["brief_summary"]` from the toolkit; you may lightly rephrase it into\n the user's domain (days, dollars, hours) without changing the numbers.\n\n6. **Response layout** (adapt labels to the domain):\n\n```markdown\n### Simulation Analytics Report\nRan {simulations} iterations ({distribution}).\n\n| Metric | Value |\n| --- | --- |\n| P5 (risk baseline) | {p5} |\n| P50 (median) | {p50} |\n| P95 (upper) | {p95} |\n| Mean | {mean} |\n\nHistogram: {chart_path}\nRaw iterations: {csv_path}\n\n### Brief summary\n{brief_summary}\n```\n\n## Guardrails\n\n- Never run the script when required parameters are missing — ask first.\n- Do not fabricate distribution parameters or claim false precision.\n- Prefer the bundled toolkit over hand-rolled NumPy each time, for consistent\n charts and exports.\n- Keep LLM replies to the summary payload; do not dump all iteration rows\n into chat.\n\n## Bundled files\n\n- `scripts/monte_carlo.py` — simulation engine, PNG, CSV/Excel, interactive HTML\n- `references/cheatsheet.md` — parameters, CLI, test prompts\n- `assets/sample_triangular.json` — demo payload (project timeline)\n- `assets/sample_normal.json` — demo payload (portfolio returns)\n- `assets/sample_lognormal.json` — demo payload (skewed downtime)\n- `assets/sample_poisson.json` — demo payload (event count per interval)\n- `assets/sample_weibull.json` — demo payload (component lifetime)\n- `assets/sample_exponential.json` — demo payload (time between arrivals)'162163# Ordered commands lifted verbatim from the capability's own documentation.164STEPS = []165166167class MonteCarloAnalysisAgent(BasicAgent):168 def __init__(self):169 self.name = 'MonteCarloAnalysis'170 self.metadata = {171 "name": "MonteCarloAnalysis",172 "description": "Use this skill whenever the user asks to run a Monte Carlo simulation, model risk or uncertainty with random sampling, estimate P5/P50/P95 outcomes, or produce a probability distribution for project timelines, portfolio returns, downtime, costs, or similar uncertain variables. Trigger on phrases like 'run a Monte Carlo', 'simulate outcomes', 'probability chart for best and worst case', or when they give min/most-likely/max (or mean/std) and want thousands of iterations. Do NOT trigger for deterministic forecasts with no uncertainty, or for generic charts unrelated to simulation.",173 "parameters": {174 "type": "object",175 "properties": {},176 "required": []177 }178 }179 super().__init__(name=self.name, metadata=self.metadata)180181 def perform(self, **kwargs): # toaster:generated-perform182 return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,183 "inputs": kwargs,184 "note": "Prose-only capability: follow INSTRUCTIONS "185 "with the given inputs."}, indent=2)186187if __name__ == "__main__":188 # echo '{"arg": "value"}' | python3 monte_carlo_analysis_agent.py189 # python3 monte_carlo_analysis_agent.py '{"arg": "value"}'190 # python3 monte_carlo_analysis_agent.py --tool # emit the JSON tool contract191 _a = sys.argv[1:]192 if _a and _a[0] == "--tool":193 print(json.dumps(MonteCarloAnalysisAgent().to_tool(), indent=2))194 else:195 _raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")196 print(MonteCarloAnalysisAgent().perform(**json.loads(_raw)))197198# rci-capsule:v1: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199````200201<!-- toaster:generated:end -->202203<!-- rci-capsule:v1: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…(truncated)