Skip to content
Back to skills

Pagerduty Incident Alert

ASecurity

Use when performing pagerduty incident alert — create a PagerDuty incident from an RCA finding, monitoring alert, or escalation. Automatically formats incident details, selects the appropriate service and escalation policy, and posts an incident via the PagerDuty API. Use after an incident is identified and needs to be formally declared in PagerDuty.

  • 6 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 8, 2026
toolsgobashrailsapi

Works with

  • api

Security analysis

A100/100

Scanned September 8, 2026

npx -y skills add cloudthinker-ai/CloudSkills --skill pagerduty-incident-alert --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pagerduty Incident Alert?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pagerduty Incident Alert
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/cloudthinker-ai-pagerduty-incident-alert/badge)](https://www.skillsdirectory.com/skills/cloudthinker-ai-pagerduty-incident-alert)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pagerduty-incident-alert
enabled: true
description: |
  Use when performing pagerduty incident alert — create a PagerDuty incident
  from an RCA finding, monitoring alert, or escalation. Automatically formats
  incident details, selects the appropriate service and escalation policy, and
  posts an incident via the PagerDuty API. Use after an incident is identified
  and needs to be formally declared in PagerDuty.
required_connections:
  - prefix: pagerduty
    label: "PagerDuty"
config_fields:
  - key: service_name
    label: "Affected Service Name"
    required: true
    placeholder: "e.g., payment-api"
  - key: urgency
    label: "Urgency (high / low)"
    required: true
    placeholder: "e.g., high"
  - key: escalation_policy
    label: "Escalation Policy Name (optional)"
    required: false
    placeholder: "e.g., Engineering On-Call"
features:
  - RCA
  - INCIDENT
---

# PagerDuty Incident Alert Skill

Create a PagerDuty incident for **{{ service_name }}** with urgency **{{ urgency }}**.

## Workflow

### Step 1 — Validate PagerDuty Configuration

Before creating the incident, verify the target service and escalation policy exist:

```bash
#!/bin/bash

pd_api() {
    curl -s -X "$1" \
        -H "Authorization: Token token=$PAGERDUTY_API_KEY" \
        -H "Accept: application/vnd.pagerduty+json;version=2" \
        -H "Content-Type: application/json" \
        "https://api.pagerduty.com${2}" \
        ${3:+-d "$3"}
}

echo "=== Finding Service: {{ service_name }} ==="
SERVICE=$(pd_api GET "/services?query={{ service_name | urlencode }}&limit=10" \
    | jq -r '.services[] | "\(.id)\t\(.name)\t\(.status)"')

if [ -z "$SERVICE" ]; then
    echo "ERROR: No PagerDuty service found matching '{{ service_name }}'"
    echo "Available services:"
    pd_api GET "/services?limit=25" | jq -r '.services[] | "  \(.id)\t\(.name)"'
    exit 1
fi

echo "$SERVICE" | column -t

echo ""
echo "=== Finding Escalation Policy ==="
{% if escalation_policy %}
EP=$(pd_api GET "/escalation_policies?query={{ escalation_policy | urlencode }}&limit=5" \
    | jq -r '.escalation_policies[] | "\(.id)\t\(.name)"')
echo "$EP" | column -t
{% else %}
echo "Using service default escalation policy"
{% endif %}
```

### Step 2 — Extract Incident Details

Gather the following information from the current conversation context (RCA, alert, or description):

1. **Incident title** — concise, actionable description (max 100 chars)
2. **Incident body** — detailed description including:
   - What is broken (symptoms)
   - When it started
   - Who/what is impacted
   - Current hypothesis
   - What has been tried
3. **Urgency** — `{{ urgency }}` (high = immediate page, low = next business hours)
4. **Assignee** (if specific person should be paged, not escalation policy)

### Step 3 — Create PagerDuty Incident

```bash
#!/bin/bash

# Get service ID
SERVICE_ID=$(pd_api GET "/services?query={{ service_name | urlencode }}&limit=5" \
    | jq -r '.services[0].id')

if [ -z "$SERVICE_ID" ] || [ "$SERVICE_ID" = "null" ]; then
    echo "ERROR: Could not find service '{{ service_name }}' in PagerDuty"
    exit 1
fi

# Prepare incident payload
TITLE="[extracted from context]"
DETAILS="[extracted from context — structured description]"

echo "=== Creating PagerDuty Incident ==="
RESULT=$(pd_api POST "/incidents" "{
    \"incident\": {
        \"type\": \"incident\",
        \"title\": \"$TITLE\",
        \"urgency\": \"{{ urgency }}\",
        \"service\": {
            \"id\": \"$SERVICE_ID\",
            \"type\": \"service_reference\"
        },
        \"body\": {
            \"type\": \"incident_body\",
            \"details\": \"$DETAILS\"
        }
    }
}")

INCIDENT_ID=$(echo "$RESULT" | jq -r '.incident.id')
INCIDENT_NUM=$(echo "$RESULT" | jq -r '.incident.incident_number')
INCIDENT_URL=$(echo "$RESULT" | jq -r '.incident.html_url')

if [ -z "$INCIDENT_ID" ] || [ "$INCIDENT_ID" = "null" ]; then
    echo "ERROR: Failed to create incident"
    echo "$RESULT" | jq '.error'
    exit 1
fi

echo "Incident created:"
echo "  Number: #$INCIDENT_NUM"
echo "  ID: $INCIDENT_ID"
echo "  URL: $INCIDENT_URL"
echo "  Urgency: {{ urgency }}"
echo "  Service: {{ service_name }}"
```

### Step 4 — Add Incident Note

Add initial context as a note so responders have full information immediately:

```bash
#!/bin/bash

INITIAL_NOTE="[Full context extracted from conversation: incident details, timeline, hypothesis, steps taken]"

pd_api POST "/incidents/${INCIDENT_ID}/notes" "{
    \"note\": {
        \"content\": \"$INITIAL_NOTE\"
    }
}"

echo "Initial note added to incident #$INCIDENT_NUM"
```

### Step 5 — Post Summary

After creating the incident, produce a summary:

```
PAGERDUTY INCIDENT CREATED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Incident: #[number]
Title: [title]
Service: {{ service_name }}
Urgency: {{ urgency }}
Status: triggered
URL: [incident URL]

The on-call engineer for {{ service_name }} has been paged.
Escalation policy: [policy name]
Expected response time: [based on urgency — high=5min, low=30min]

Next steps:
1. Join the incident bridge channel
2. Acknowledge the PagerDuty alert
3. Follow the incident response runbook
```

## Counter-Rationalizations

| Shortcut | Counter | Why |
|----------|---------|-----|
| "We can skip some steps for this case" | Adapt the workflow steps, don't skip them | Skipped steps are where incidents and oversights originate |
| "The user seems to already know what to do" | Complete all workflow phases with the user | The workflow catches blind spots that experience alone misses |
| "This is a minor case, full process is overkill" | Scale the process down, don't turn it off | Minor cases become major when unstructured; the process scales, not disappears |
| "I'll fill in the details later" | Complete each section before moving on | Deferred details are forgotten; real-time capture is more accurate |
| "The template output isn't necessary" | Always produce the structured output format | Structured output enables comparison, audit trails, and handoff to other teams |

## Output Format

Produce:
1. **Validation results** (service found, policy found)
2. **Incident creation confirmation** with ID, number, and URL
3. **On-call responder** who was paged
4. **Next steps** for the incident commander

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in tools →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.