Claude Cursor Skill

automated-triage

Triage Monte Carlo alerts interactively or build an automated workflow. Fetch, score, and troubleshoot alerts using MCP tools now, or design a reusable workflow that runs on a schedule.

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download monte-carlo-data-mc-agent-toolkit-skills_automated-triage-bcc7373.zip · 12 KB
Part of monte-carlo-data/mc-agent-toolkit — 20 skills

Install

skills CLI npx skills add https://github.com/monte-carlo-data/mc-agent-toolkit/tree/main/skills/automated-triage
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install monte-carlo-data-mc-agent-toolkit@llmmart
Git git clone https://github.com/monte-carlo-data/mc-agent-toolkit.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole monte-carlo-data/mc-agent-toolkit collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Monte Carlo Automated Triage

This skill helps you design, test, and deploy an automated triage agent for Monte Carlo alerts. Rather than a fixed workflow, it gives you the building blocks — a set of MCP tools, a description of each triage stage, and a working example — so you can build a process that matches how your team actually responds to alerts.

Monte Carlo tool routing (required): Always call Monte Carlo MCP tools through this plugin's bundled server, whose fully-qualified tool names are mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__<tool> (e.g. mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__get_alerts). Bare tool names used in this skill (get_alerts, search, get_table, …) refer to that bundled server. If the session also has a separately-configured monte-carlo-mcp server, do not route to it — it may point at a different endpoint or credentials.

Read the reference files before proceeding:

  • Triage stages and customisation: references/triage-stages.md (relative to this file)
  • Working example workflow: references/triage-example.md (relative to this file)

When to activate this skill

Activate when the user:

  • Wants to triage or investigate recent Monte Carlo alerts (interactively or automated)
  • Wants to set up automated triage for Monte Carlo alerts
  • Asks to run agentic triage or investigate recent alert activity
  • Wants to understand what triage tools are available and how to use them
  • Is building or refining a triage prompt for their environment
  • Wants to move from manual alert review to automated or semi-automated triage

When NOT to activate this skill

Do not activate when the user is:

  • Investigating a specific known incident (help them directly)
  • Creating or configuring monitors (use the monitoring-advisor skill)
  • Running impact analysis before a code change (use the prevent skill)

Available MCP tools

All tools are available via the monte-carlo-mcp MCP server.

Tool Toolset Purpose
get_alerts default Fetch recent alerts for a time window
alert_assessment default Read-only scoring — scores an alert by incident likelihood and potential impact (HIGH/MEDIUM/LOW each) and returns the verdict without recording anything. Steerable via user_instructions; safe to run in parallel across many alerts
triage_alert default Persisted triage — scores an alert and writes the verdict back onto it, exactly like the in-app Triage button (marks the alert triaged, posts a completion notification, records ML feedback). Blocks until done; reuses an existing triage if the alert was already triaged
run_troubleshooting_agent default Run the Monte Carlo Troubleshooting Agent on a single alert; async by default — returns immediately, reuses existing results when available
get_troubleshooting_agent_results default Poll an async troubleshooting run by incident_id; returns status (not_found/running/success/failed) and results when complete
update_alert default Update an alert's status and/or declare an incident by setting severity
set_alert_owner default Assign an owner to an alert by email
create_or_update_alert_comment default Post or update a triage comment on an alert
mark_event_as_normal default Mark all anomaly events in an alert as normal, triggering ML threshold recalibration to prevent re-alerting on the same pattern

alert_assessment vs triage_alert — which to use

Both score an alert on the same two dimensions; the difference is whether the result is recorded.

  • alert_assessment — read-only scoring. Nothing is written to the alert. Use it to score in bulk and decide what to do next, to preview a verdict without committing to it, or when you want to record the outcome your own way using the action tools below (update_alert, create_or_update_alert_comment, mark_event_as_normal). It accepts user_instructions to steer the scoring. This is the tool the workflow stages below are built around.
  • triage_alert — persisted triage. Equivalent to a user clicking Triage in the product: it scores the alert and writes the verdict back (marks it triaged, posts a notification, records ML feedback), so the triage is visible in the UI and feeds the anomaly model. Use it when the user asks to triage a specific alert and have that recorded — not for bulk scoring where you don't want every alert marked triaged. It's idempotent: if the alert is already triaged it returns the existing verdict without re-running. It requires the mcp/edit scope (it's a write); read-only integrations won't see it.

How to approach automated triage

Read references/triage-stages.md for a full description of each stage and how to customise it. The high-level flow is:

  1. Fetch alerts — decide which alerts to triage and over what time window
  2. Initial investigation — score every alert by incident likelihood and potential impact using alert_assessment
  3. Deep troubleshooting — run run_troubleshooting_agent on high-signal alerts to get root cause analysis
  4. Classify — use the troubleshooting output to classify each alert
  5. Take actions — post comments, update statuses, message Slack, create tickets

The triage process is not fixed. Read the stages reference to understand the options and tradeoffs at each step, then design a workflow that fits your team's needs.

The longer-term direction

Most teams move through roughly the same arc, though the pace and path vary:

  • Start with recommendations. Run manually and have the agent post comments describing what it found and what it would do — no actual status changes or external actions. Use this to tune the workflow until the output matches how your team would respond manually.
  • Automate, still in recommendation mode. Once the output looks right, put it on a schedule. Keep it in recommendation mode while you validate it's behaving well on real traffic.
  • Replace recommendations with actions. When you're confident, swap the comment recommendations for real actions — status updates, Slack messages, ticket creation.

Don't force this progression — it's a direction, not a checklist. The path will depend on how your environment behaves and how much trust you want to build before each step.


Activation flow

When this skill is activated, follow this sequence in order.

Step 1: Check MCP tools

Verify that get_alerts, alert_assessment, and run_troubleshooting_agent are accessible. If any are missing, check that the Monte Carlo MCP server is configured and authenticated, then stop.

Step 2: Determine intent

Ask:

"Are you looking to triage some alerts right now (I'll investigate them with you using the triage tools), or set up / refine an automated triage workflow (I'll help you design a process that can run on a schedule)?"

If the user's request already makes the intent clear — e.g. "triage my freshness alerts from today" vs. "help me build a triage workflow" — skip the question and proceed directly.


Branch A: Interactive triage

The user wants to look at specific alerts now. Use the triage tools directly to investigate and report findings. Do not frame this as workflow-building.

  1. Clarify the scope (Ask about the time window and whether the user is interested in a specific domain, audience or alert type).
  2. Fetch alerts with get_alerts (applying any domain or audience filter from step 1), run alert_assessment in parallel on all of them, and report the results clearly.
  3. For any alert where both incident likelihood and potential impact are MEDIUM or higher, offer to run run_troubleshooting_agent for a deeper root cause analysis. Wait for confirmation before running it.
  4. Summarise findings. Do not prompt to save a workflow file or set up automation unless the user brings it up.

When the user wants the triage recorded: if the ask is to triage a specific alert and have it show up in the product (e.g. "triage alert X" rather than "score my alerts"), use triage_alert — it scores and persists in one step, just like the in-app Triage button. Ask first, since it writes to the alert. For scoring many alerts to decide what to do, stay on alert_assessment (read-only) and record outcomes with the action tools below.

Write tools in interactive triage: After findings are clear, proactively offer relevant actions — running triage_alert to record the triage, updating status, declaring a severity, assigning an owner, posting a comment, or marking events as normal (for alerts that are natural data variation). Ask before executing.


Branch B: Automated workflow

The user wants to build, test, or refine a triage workflow that can run on a schedule.

Ask how they'd like to get started:

"How would you like to approach this?

  • Use the built-in example — start from a working triage workflow ready to run as-is and adapt it as you go.
  • Adapt an existing workflow — point me to a file you already have and we'll review and run it.
  • Build from scratch — describe what you want your triage to do and I'll help design a workflow tailored to it."

Using the built-in example:

  1. Read references/triage-example.md (relative to this skill file). Give a brief description: it fetches alerts from the last 3 hours, scores every alert, runs deep troubleshooting on high-signal ones, and shows what actions it would take — no writes on a first run.
  2. Run in recommendation mode, step by step (see Step 3). No need to ask.

Adapting an existing file:

  1. Read the file and confirm the key settings: time window, filter threshold, and whether it includes a mode-selection step.
  2. Summarise what it will do, then ask: "Run straight through, or step through each stage one at a time? And recommendation or action mode?"

Building from scratch:

  1. Ask the user to describe what they want: which alerts to triage, what actions they want to take, how much they want to automate, and any constraints (e.g. specific domains, teams, or tables).
  2. Draw on references/triage-stages.md to propose a workflow structure that fits their goals. Present it for review — not as a finished document, but as a proposed approach — and iterate until they're happy.
  3. Run it step by step in recommendation mode (see Step 3) so they can validate each stage before committing to the design. Expect to refine as you go.

Step 3: Run the workflow (Branch B only)

Execute the workflow from the file, following its instructions exactly. Do not improvise steps or add actions not described in the file.

Action guard — workflow mode: Never call write tools (triage_alert, update_alert, set_alert_owner, create_or_update_alert_comment) while building or testing a workflow, regardless of what the workflow document says. Only describe what would be done. In workflow mode, score with alert_assessment (read-only) rather than triage_alert, which would mark every alert triaged. This guard exists to prevent accidental writes on real alerts during development; lift it only when the user explicitly switches to action mode for a production run.

For first runs (starting fresh): always run step by step — after each stage completes, summarise what it produced, proactively suggest alternatives or adjustments based on what you observed, and wait for confirmation before continuing.

At each stage, draw on the options in references/triage-stages.md to make concrete suggestions:

  • After fetching alerts — suggest filter adjustments if the set looks too broad or narrow: NOT_ACKNOWLEDGED to skip already-triaged alerts, domain/audience filters if alerts span multiple teams, a slightly longer time window for the initial testing if we need more examples to work with.
  • After scoring — Suggest whether to adjust the troubleshooting filter (e.g. run when either score is HIGH, not just both MEDIUM+) or tune alert_assessment via user_instructions.
  • After troubleshooting — if the TSA found a clear root cause, suggest whether to declare an incident severity, assign an owner.
  • After actions — note cases where the default action mapping may not fit, e.g. a verified incident that warrants a Slack message or ticket rather than just a status update.

For existing-file runs: use whichever mode the user chose in Step 2.

Step 4: Wrap up

After the workflow completes:

  1. Ask: "Want me to save a copy of our workflow to your project (e.g. triage.md) so you can customise it?" If yes, write it to the path they choose.

  2. Then present next steps based on what just happened and what you were asked to do in the first place. For example:

    "What would you like to do next?

    • Refine the workflow — walk through the stages and tune what's not working (filter, scoring weights, troubleshooting threshold, action mapping)
    • Test on a different alert set — re-run on a different time window or day to see how it handles a different set of alerts
    • Set up a schedule — automate this to run on a fixed cadence using the /schedule skill
    • Something else — just tell me"

    Adapt the options to context — if the run had many LOW-scoring alerts with no troubleshooting, lean towards refinement; if results looked solid, lean towards scheduling.

Files (mc-agent-toolkit)
  • references
    • triage-example.md 6.8 KB
      # Triage Example Workflow
      
      This is a complete triage workflow that supports two modes:
      
      - **Recommendation mode** — runs the full investigation and tells you what it would do, without writing anything to your environment. Use this while tuning your triage prompt.
      - **Action mode** — runs the full workflow and applies actions (comments, status updates) for real.
      
      Run in recommendation mode first. Once the classifications and recommendations match how your team would respond manually, switch to action mode.
      
      ---
      
      ## What this workflow does
      
      1. Asks whether to run in recommendation or action mode
      2. Fetches all alerts from the last 3 hours
      3. Scores every alert by incident likelihood and potential impact (in parallel)
      4. Fires deep troubleshooting on all high-signal alerts simultaneously, classifying each as results arrive
      5. In **action mode**: posts a triage comment on every alert and updates statuses
         In **recommendation mode**: outputs what it would comment and what status it would set — no writes
      
      ---
      
      ## Procedure
      
      ### Step 1: Choose mode
      
      Ask: "Run in **recommendation mode** (no writes — I'll show you what actions would be taken) or **action mode** (comments and status updates applied for real)?"
      
      Also ask: "Run all stages **straight through**, or **step by step** — pausing after each stage to show results before continuing?"
      
      Wait for both answers before proceeding. In step-by-step mode, after each stage completes, summarise what it produced, proactively suggest alternatives or adjustments based on what you observed, and wait for confirmation before moving to the next.
      
      ### Step 2: Fetch alerts
      
      Call `get_alerts` for the last 3 hours.
      
      If no alerts are returned, report: "No alerts in the last 3 hours." and stop.
      
      ### Step 3: Score each alert
      
      Call `alert_assessment` in parallel for every alert from step 2, in batches of up to 10 at a time. Each result includes `incident_likelihood`, `alert_impact` (HIGH/MEDIUM/LOW each), `alert_description` (plain-language description of what happened in the incident), and `triage_summary` (the key reasoning behind the incident likelihood and potential impact scores). Use `alert_description` and `triage_summary` to inform the triage comment in step 4 for alerts that don't go through troubleshooting.
      
      ### Step 4: Troubleshoot and classify high-signal alerts
      
      For each alert where BOTH `incident_likelihood` AND `alert_impact` are MEDIUM or HIGH, call `run_troubleshooting_agent` (default `async_mode=True`). Fire all eligible alerts simultaneously — each call returns immediately with one of: `success` (previous results available immediately), `queued` (accepted, not started yet), or `running` (in progress).
      
      Skip any alert where either value is LOW — troubleshooting is expensive and not warranted for low-signal alerts.
      
      For each job that returned `queued` or `running`, poll with `get_troubleshooting_agent_results(incident_id=...)` — start at ~30 seconds, then increase to 60s intervals. Classify each alert as its result arrives (`success`), before moving on. If a job returns `failed`, note it and continue.
      
      **Classifications:**
      
      | Classification                | When to use                                                                                                           |
      | ----------------------------- | --------------------------------------------------------------------------------------------------------------------- |
      | **Intentional change**        | Planned migrations, feature releases, or bug fixes                                                                    |
      | **Natural data variation**    | Seasonal patterns or expected volatility                                                                              |
      | **Possible data incident**    | Anything that requires further investigation                                                                          |
      | **Resolved incident**         | A real incident that has already been resolved                                                                        |
      | **Verified ongoing incident** | A clear incident that has not resolved, where troubleshooting identified the root cause (e.g. query change or infrastructure failure) |
      | **Other**                     | Does not fit the above                                                                                                |
      
      Alerts that did not go through troubleshooting are left unclassified.
      
      ### Step 5: Comments and status updates
      
      **Action mode:**
      
      Call `create_or_update_alert_comment` for each alert:
      - **Untroubleshot alerts**: one sentence describing the anomaly and the incident likelihood/potential impact scores. Do not explain why it wasn't troubleshot. No recommendations.
      - **Troubleshot alerts**: 2–4 sentences covering classification, reasoning from the troubleshooting output, any action taken, and a recommendation.
      
      Then call `update_alert` for each classified alert:
      
      | Classification              | Status               |
      | --------------------------- | -------------------- |
      | Natural data variation      | `NO_ACTION_NEEDED`   |
      | Intentional change          | `EXPECTED`           |
      | Resolved incident           | `FIXED`              |
      | Verified ongoing incident   | `ACKNOWLEDGED`       |
      | Possible data incident      | *(no change)*        |
      | Other                       | *(no change)*        |
      
      For alerts classified as **natural data variation**, also call `mark_event_as_normal` — this signals the ML threshold detector to recalibrate and avoid re-alerting on the same pattern. Only has an effect on monitors using automated (ML-based) thresholds.
      
      Do not update status for untroubleshot alerts.
      
      **Recommendation mode:**
      
      Do not call any write tools. Instead, for each alert output:
      - The comment you would post
      - The status you would set (or "no change")
      - Whether you would call `mark_event_as_normal`
      
      ---
      
      ## Output
      
      After completing all steps, produce a summary table:
      
      | Alert ID | Type | Incident Likelihood | Potential Impact | Classification | Action Taken |
      |----------|------|---------------------|------------------|----------------|--------------|
      
      Include every alert from step 1. For untroubleshot alerts, leave Classification blank and set Action Taken to "Comment only".
      
      ---
      
      ## Adapting this example
      
      Common adjustments:
      
      - **Change the time window** in step 2 (e.g. last 1 hour for a continuous loop, last 24 hours for a daily run)
      - **Adjust the troubleshooting filter** in step 4
      - **Add Slack or ticket creation** in step 5 for confirmed incidents
      - **Customise `alert_assessment` scoring** via `user_instructions` to tune emphasis for your environment (see `triage-stages.md`)
      - **Run step-by-step when tuning** — a useful pattern is to run the full workflow straight through first to see end-to-end behaviour, then re-run in step-by-step mode to inspect each stage's output and make decisions before proceeding
      
    • triage-stages.md 9.5 KB
      # Triage Stages
      
      Each stage of a triage workflow is optional and customisable. Design your workflow around the stages that match how your team manually reviews alerts — automate the parts that are repetitive or time-consuming, and keep humans in the loop for the parts that need judgement.
      
      ---
      
      ## Stage 1: Fetching alerts
      
      **Tool:** `get_alerts`
      
      Collect the alerts you want to triage. `get_alerts` supports the following filters — combine them to define your triage scope:
      
      **Status**
      - `statuses` — filter by alert status. Pass `NOT_ACKNOWLEDGED` to only pick up alerts that haven't been triaged yet. Other values: `ACKNOWLEDGED`, `WORK_IN_PROGRESS`, `FIXED`, `EXPECTED`, `NO_ACTION_NEEDED`.
      
      **Scope**
      - `domain_ids` — limit to one or more Monte Carlo domains. Use `getDomains` to look up IDs. Useful if different teams own different parts of the data estate.
      - `audience_ids`
      - `owners`
      
      **Alert Details**
      - `alert_types` — filter by alert category.
      - `priorities` — `P1` through `P5`.
      
      **Asset**
      - `table_mcons`, `table_names`, `table_schemas`, `table_databases` — narrow triage to specific tables or parts of the warehouse.
      
      **Pagination**
      - `first` — number of alerts per page (max 100, default 20). Check for a `truncation_note` in the response — if present, paginate using `cursor` to retrieve the remaining alerts.
      
      Take care to avoid triaging too many alerts in one batch — where required, split alerts across multiple triage runs.
      
      ---
      
      ## Stage 2: Initial investigation (alert scoring)
      
      **Tool:** `alert_assessment`
      
      This stage replicates what a knowledgeable engineer does when scanning the alert feed — quickly assessing what's fired and how serious it looks. `alert_assessment` is lightweight enough to run on every alert.
      
      It returns:
      - **`incident_likelihood`** (HIGH/MEDIUM/LOW) — how likely the alert represents a real issue. Affected by: number of events, presence of concerning root causes (query changes, failures), how much thresholds were exceeded, and how noisy the monitor typically is.
      - **`alert_impact`** (HIGH/MEDIUM/LOW) — how significant the potential downstream impact is.  Use cases impacted.  Dashboards affected etc.
      - **`alert_description`** — plain-language description of what happened in the incident.
      - **`triage_summary`** — the key reasoning behind the incident likelihood and potential impact scores.
      
      **Run `alert_assessment` in parallel**, in batches of up to 10 at a time.
      
      ### Customising the scoring
      
      `alert_assessment` runs with a default prompt but accepts a `user_instructions` parameter that lets you adjust the emphasis it places on different factors. For example:
      
      - Increase the weight given to monitors that feed particular use cases
      - Alter the emphasis placed on different features: for example historical noise
      - Emphasise alerts involving specific tables or domains
      
      Start with the defaults and tune `user_instructions` once you've seen real output.
      
      ### Scoring vs. persisting: `alert_assessment` vs `triage_alert`
      
      `alert_assessment` is **read-only** — it returns a verdict but records nothing. That's exactly what you want for this stage: score every alert cheaply, then decide per alert whether it warrants troubleshooting and which action to take. The workflow persists outcomes later, in Stage 5, through the explicit action tools — so you stay in control of what gets written and when.
      
      `triage_alert` is the **persisted** counterpart: it scores *and* writes the verdict back onto the alert (marks it triaged, posts a notification, records ML feedback), identical to the in-app Triage button. It's the right tool for interactive "triage this alert" requests where the user wants the result recorded, but it's a poor fit for the scoring stage of a batch workflow — it would mark every alert in the batch triaged and fire a notification for each. Keep batch scoring on `alert_assessment`, and reserve `triage_alert` for the case where recording a single alert's triage *is* the action. It's idempotent (re-running on an already-triaged alert returns the existing verdict) and requires the `mcp/edit` scope.
      
      ---
      
      ## Stage 3: Deep troubleshooting
      
      **Tools:** `run_troubleshooting_agent`, `get_troubleshooting_agent_results`
      
      `run_troubleshooting_agent` runs the Monte Carlo Troubleshooting Agent on a single alert. This is substantially more expensive than `alert_assessment` — it tracks the issue upstream through lineage, analyses all queries involved, examines relevant PRs, and samples affected tables to identify root cause.
      
      **Only run `run_troubleshooting_agent` on alerts that warrant it.** A common filter: run troubleshooting only when BOTH `incident_likelihood` AND `alert_impact` are MEDIUM or HIGH. Skip any alert where either is LOW.
      
      You can adjust this threshold based on your environment — for example, also running troubleshooting when either score is HIGH (even if the other is LOW), while still requiring MEDIUM/MEDIUM as the baseline.
      
      **Use async mode for parallelism.** `run_troubleshooting_agent` defaults to `async_mode=True`, returning immediately with one of three statuses:
      - `success` — a previous analysis already completed; results are available immediately, no polling needed
      - `queued` — the job was accepted but hasn't started yet; wait ~30 seconds then start polling
      - `running` — the job is in progress; poll with increasing intervals (30s, 60s, 60s…)
      
      Fire all eligible alerts simultaneously, then poll each with `get_troubleshooting_agent_results(incident_id=...)` until it returns `success` or `failed`. Classify each alert as its result arrives. This avoids the timeout issues of synchronous calls and removes the need to limit concurrency.
      
      ---
      
      ## Stage 4: Classification
      
      Classify each alert immediately after its troubleshooting result arrives. Use the troubleshooting output to determine which category fits best.
      
      | Classification              | Description                                                                                                                    |
      | --------------------------- |--------------------------------------------------------------------------------------------------------------------------------|
      | **Intentional change**      | Planned migrations, feature releases, or bug fixes                                                                             |
      | **Natural data variation**  | Seasonal patterns or expected volatility                                                                                       |
      | **Possible data incident**  | Anything that requires further investigation                                                                                   |
      | **Resolved incident**       | A real incident that has already been resolved                                                                                 |
      | **Verified ongoing incident** | A clear incident that has not resolved, where troubleshooting identified the root cause (e.g. query change or infrastructure failure) |
      | **Other**                   | Does not fit the above                                                                                                         |
      
      These categories are a starting point. Adapt them to the language your team uses — if you have an internal classification scheme, map to that instead.
      
      ---
      
      ## Stage 5: Taking actions
      
      What you do after triage depends on your integrations, your team's workflow, and the maturity of your automation process. Start conservative and expand as you validate results.
      
      ### Adding comments
      
      `create_or_update_alert_comment` — always a good starting point. Comments provide a record of what the agent found and recommended, without taking any irreversible action. Useful at every stage, regardless of whether you automate anything else.
      
      Suggested comment content:
      - **Scored but not troubleshot**: one sentence describing the anomaly and the incident likelihood/potential impact scores. Do not explain why it wasn't troubleshot. No recommendations.
      - **Troubleshot alerts**: 2–4 sentences — classification, reasoning, action taken or recommended
      
      ### Updating alert status
      
      `update_alert` — set status based on classification:
      
      | Classification              | Status               |
      | --------------------------- | -------------------- |
      | Natural data variation      | `NO_ACTION_NEEDED`   |
      | Intentional change          | `EXPECTED`           |
      | Resolved incident           | `FIXED`              |
      | Verified ongoing incident   | `ACKNOWLEDGED`       |
      | Possible data incident      | *(leave unchanged)*  |
      | Other                       | *(leave unchanged)*  |
      
      Only update status for alerts that went through full troubleshooting. Leave untroubleshot alerts unchanged.
      
      ### Additional Monte Carlo actions
      
      - **Mark events as normal** — for alerts classified as natural variation, marking the underlying events as normal allows the detector to adapt thresholds to prevent further alerts on similar patterns. Only applies to monitors using automated (ML-based) thresholds — has no effect on static-threshold monitors.
      - **Declare an incident** (`update_alert` with `declared_incident_severity`) — promotes the alert to an incident, escalating visibility. Values: `SEV_1`–`SEV_4`. Use `NO_SEVERITY` to clear. Appropriate for verified ongoing incidents.
      - **Assign ownership** (`set_alert_owner`) — route a confirmed incident or required investigation to the right person.
      
      ### External integrations
      
      - **Slack** — message a channel or individual with a triage summary or escalation
      - **Linear / Jira / Teams** — create a ticket for confirmed incidents
      
      Introduce these actions incrementally. Start with comments, validate, then enable status updates and additional actions.
      
  • SKILL.md 14.4 KB
    ---
    name: automated-triage
    description: Triage Monte Carlo alerts interactively or build an automated workflow. Fetch, score, and troubleshoot alerts using MCP tools now, or design a reusable workflow that runs on a schedule.
    when_to_use: |
      Invoke when the user wants to triage, investigate, or bulk-process Monte Carlo alerts — whether interactively or by building an automated workflow.
      Example triggers: "triage alert <uuid>", "triage my alerts", "what alerts are firing?", "build an automated triage workflow", "score and troubleshoot my open alerts".
    bucket: Incident Response
    version: 1.1.1
    ---
    
    # Monte Carlo Automated Triage
    
    This skill helps you design, test, and deploy an automated triage agent for Monte Carlo alerts. Rather than a fixed workflow, it gives you the building blocks — a set of MCP tools, a description of each triage stage, and a working example — so you can build a process that matches how your team actually responds to alerts.
    
    > **Monte Carlo tool routing (required):** Always call Monte Carlo MCP tools through this plugin's
    > bundled server, whose fully-qualified tool names are
    > `mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__<tool>` (e.g.
    > `mcp__plugin_mc-agent-toolkit_monte-carlo-mcp__get_alerts`). Bare tool names used in this skill
    > (`get_alerts`, `search`, `get_table`, …) refer to that bundled server. If the session also has a
    > separately-configured `monte-carlo-mcp` server, do **not** route to it — it may point at a
    > different endpoint or credentials.
    
    Read the reference files before proceeding:
    
    - Triage stages and customisation: `references/triage-stages.md` (relative to this file)
    - Working example workflow: `references/triage-example.md` (relative to this file)
    
    ---
    
    ## When to activate this skill
    
    Activate when the user:
    
    - Wants to triage or investigate recent Monte Carlo alerts (interactively or automated)
    - Wants to set up automated triage for Monte Carlo alerts
    - Asks to run agentic triage or investigate recent alert activity
    - Wants to understand what triage tools are available and how to use them
    - Is building or refining a triage prompt for their environment
    - Wants to move from manual alert review to automated or semi-automated triage
    
    ## When NOT to activate this skill
    
    Do not activate when the user is:
    
    - Investigating a specific known incident (help them directly)
    - Creating or configuring monitors (use the monitoring-advisor skill)
    - Running impact analysis before a code change (use the prevent skill)
    
    ---
    
    ## Available MCP tools
    
    All tools are available via the `monte-carlo-mcp` MCP server.
    
    | Tool                             | Toolset  | Purpose                                                         |
    | -------------------------------- | -------- | --------------------------------------------------------------- |
    | `get_alerts`                          | default  | Fetch recent alerts for a time window                                                                             |
    | `alert_assessment`                    | default  | **Read-only** scoring — scores an alert by incident likelihood and potential impact (HIGH/MEDIUM/LOW each) and returns the verdict without recording anything. Steerable via `user_instructions`; safe to run in parallel across many alerts |
    | `triage_alert`                        | default  | **Persisted** triage — scores an alert and writes the verdict back onto it, exactly like the in-app Triage button (marks the alert triaged, posts a completion notification, records ML feedback). Blocks until done; reuses an existing triage if the alert was already triaged |
    | `run_troubleshooting_agent`           | default  | Run the Monte Carlo Troubleshooting Agent on a single alert; async by default — returns immediately, reuses existing results when available |
    | `get_troubleshooting_agent_results`   | default  | Poll an async troubleshooting run by `incident_id`; returns status (`not_found`/`running`/`success`/`failed`) and results when complete |
    | `update_alert`                        | default  | Update an alert's status and/or declare an incident by setting severity                                           |
    | `set_alert_owner`                     | default  | Assign an owner to an alert by email                                                                              |
    | `create_or_update_alert_comment`      | default  | Post or update a triage comment on an alert                                                                       |
    | `mark_event_as_normal`                | default  | Mark all anomaly events in an alert as normal, triggering ML threshold recalibration to prevent re-alerting on the same pattern |
    
    ### `alert_assessment` vs `triage_alert` — which to use
    
    Both score an alert on the same two dimensions; the difference is whether the result is recorded.
    
    - **`alert_assessment` — read-only scoring.** Nothing is written to the alert. Use it to score in bulk and decide what to do next, to preview a verdict without committing to it, or when you want to record the outcome your own way using the action tools below (`update_alert`, `create_or_update_alert_comment`, `mark_event_as_normal`). It accepts `user_instructions` to steer the scoring. This is the tool the workflow stages below are built around.
    - **`triage_alert` — persisted triage.** Equivalent to a user clicking **Triage** in the product: it scores the alert *and* writes the verdict back (marks it triaged, posts a notification, records ML feedback), so the triage is visible in the UI and feeds the anomaly model. Use it when the user asks to triage a specific alert and have that recorded — not for bulk scoring where you don't want every alert marked triaged. It's idempotent: if the alert is already triaged it returns the existing verdict without re-running. It requires the `mcp/edit` scope (it's a write); read-only integrations won't see it.
    
    ---
    
    ## How to approach automated triage
    
    Read `references/triage-stages.md` for a full description of each stage and how to customise it. The high-level flow is:
    
    1. **Fetch alerts** — decide which alerts to triage and over what time window
    2. **Initial investigation** — score every alert by incident likelihood and potential impact using `alert_assessment`
    3. **Deep troubleshooting** — run `run_troubleshooting_agent` on high-signal alerts to get root cause analysis
    4. **Classify** — use the troubleshooting output to classify each alert
    5. **Take actions** — post comments, update statuses, message Slack, create tickets
    
    The triage process is not fixed. Read the stages reference to understand the options and tradeoffs at each step, then design a workflow that fits your team's needs.
    
    ## The longer-term direction
    
    Most teams move through roughly the same arc, though the pace and path vary:
    
    - **Start with recommendations.** Run manually and have the agent post comments describing what it found and what it would do — no actual status changes or external actions. Use this to tune the workflow until the output matches how your team would respond manually.
    - **Automate, still in recommendation mode.** Once the output looks right, put it on a schedule. Keep it in recommendation mode while you validate it's behaving well on real traffic.
    - **Replace recommendations with actions.** When you're confident, swap the comment recommendations for real actions — status updates, Slack messages, ticket creation.
    
    Don't force this progression — it's a direction, not a checklist. The path will depend on how your environment behaves and how much trust you want to build before each step.
    
    ---
    
    ## Activation flow
    
    When this skill is activated, follow this sequence in order.
    
    ### Step 1: Check MCP tools
    
    Verify that `get_alerts`, `alert_assessment`, and `run_troubleshooting_agent` are accessible. If any are missing, check that the Monte Carlo MCP server is configured and authenticated, then stop.
    
    ### Step 2: Determine intent
    
    Ask:
    
    > "Are you looking to **triage some alerts right now** (I'll investigate them with you using the triage tools), or **set up / refine an automated triage workflow** (I'll help you design a process that can run on a schedule)?"
    
    If the user's request already makes the intent clear — e.g. "triage my freshness alerts from today" vs. "help me build a triage workflow" — skip the question and proceed directly.
    
    ---
    
    #### Branch A: Interactive triage
    
    The user wants to look at specific alerts now. Use the triage tools directly to investigate and report findings. Do not frame this as workflow-building.
    
    1. Clarify the scope (Ask about the time window and whether the user is interested in a specific domain, audience or alert type).
    2. Fetch alerts with `get_alerts` (applying any domain or audience filter from step 1), run `alert_assessment` in parallel on all of them, and report the results clearly.
    3. For any alert where both incident likelihood and potential impact are MEDIUM or higher, offer to run `run_troubleshooting_agent` for a deeper root cause analysis. Wait for confirmation before running it.
    4. Summarise findings. Do not prompt to save a workflow file or set up automation unless the user brings it up.
    
    **When the user wants the triage recorded:** if the ask is to triage a specific alert *and have it show up in the product* (e.g. "triage alert X" rather than "score my alerts"), use `triage_alert` — it scores and persists in one step, just like the in-app Triage button. Ask first, since it writes to the alert. For scoring many alerts to decide what to do, stay on `alert_assessment` (read-only) and record outcomes with the action tools below.
    
    **Write tools in interactive triage:** After findings are clear, proactively offer relevant actions — running `triage_alert` to record the triage, updating status, declaring a severity, assigning an owner, posting a comment, or marking events as normal (for alerts that are natural data variation). Ask before executing.
    
    ---
    
    #### Branch B: Automated workflow
    
    The user wants to build, test, or refine a triage workflow that can run on a schedule.
    
    Ask how they'd like to get started:
    
    > "How would you like to approach this?
    > - **Use the built-in example** — start from a working triage workflow ready to run as-is and adapt it as you go.
    > - **Adapt an existing workflow** — point me to a file you already have and we'll review and run it.
    > - **Build from scratch** — describe what you want your triage to do and I'll help design a workflow tailored to it."
    
    **Using the built-in example:**
    
    1. Read `references/triage-example.md` (relative to this skill file). Give a brief description: it fetches alerts from the last 3 hours, scores every alert, runs deep troubleshooting on high-signal ones, and shows what actions it would take — no writes on a first run.
    2. Run in recommendation mode, step by step (see Step 3). No need to ask.
    
    **Adapting an existing file:**
    
    1. Read the file and confirm the key settings: time window, filter threshold, and whether it includes a mode-selection step.
    2. Summarise what it will do, then ask: **"Run straight through, or step through each stage one at a time? And recommendation or action mode?"**
    
    **Building from scratch:**
    
    1. Ask the user to describe what they want: which alerts to triage, what actions they want to take, how much they want to automate, and any constraints (e.g. specific domains, teams, or tables).
    2. Draw on `references/triage-stages.md` to propose a workflow structure that fits their goals. Present it for review — not as a finished document, but as a proposed approach — and iterate until they're happy.
    3. Run it step by step in recommendation mode (see Step 3) so they can validate each stage before committing to the design. Expect to refine as you go.
    
    ### Step 3: Run the workflow (Branch B only)
    
    Execute the workflow from the file, following its instructions exactly. Do not improvise steps or add actions not described in the file.
    
    **Action guard — workflow mode:** Never call write tools (`triage_alert`, `update_alert`, `set_alert_owner`, `create_or_update_alert_comment`) while building or testing a workflow, regardless of what the workflow document says. Only describe what would be done. In workflow mode, score with `alert_assessment` (read-only) rather than `triage_alert`, which would mark every alert triaged. This guard exists to prevent accidental writes on real alerts during development; lift it only when the user explicitly switches to action mode for a production run.
    
    **For first runs (starting fresh):** always run step by step — after each stage completes, summarise what it produced, proactively suggest alternatives or adjustments based on what you observed, and wait for confirmation before continuing.
    
    At each stage, draw on the options in `references/triage-stages.md` to make concrete suggestions:
    
    - **After fetching alerts** — suggest filter adjustments if the set looks too broad or narrow: `NOT_ACKNOWLEDGED` to skip already-triaged alerts, domain/audience filters if alerts span multiple teams, a slightly longer time window for the initial testing if we need more examples to work with.
    - **After scoring** — Suggest whether to adjust the troubleshooting filter (e.g. run when either score is HIGH, not just both MEDIUM+) or tune `alert_assessment` via `user_instructions`.
    - **After troubleshooting** — if the TSA found a clear root cause, suggest whether to declare an incident severity, assign an owner.
    - **After actions** — note cases where the default action mapping may not fit, e.g. a verified incident that warrants a Slack message or ticket rather than just a status update.
    
    **For existing-file runs:** use whichever mode the user chose in Step 2.
    
    ### Step 4: Wrap up
    
    After the workflow completes:
    
    1. Ask: **"Want me to save a copy of our workflow to your project (e.g. `triage.md`) so you can customise it?"** If yes, write it to the path they choose.
    
    2. Then present next steps based on what just happened and what you were asked to do in the first place.  For example:
    
       > "What would you like to do next?
       > - **Refine the workflow** — walk through the stages and tune what's not working (filter, scoring weights, troubleshooting threshold, action mapping)
       > - **Test on a different alert set** — re-run on a different time window or day to see how it handles a different set of alerts
       > - **Set up a schedule** — automate this to run on a fixed cadence using the `/schedule` skill
       > - **Something else** — just tell me"
    
       Adapt the options to context — if the run had many LOW-scoring alerts with no troubleshooting, lean towards refinement; if results looked solid, lean towards scheduling.
    
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related