Claude Cursor Skill

ops-monitor

Unified APM and monitoring surface. Polls Datadog, New Relic, and OpenTelemetry backends for active alerts, error traces, and entity health. Use --watch for live polling every 60 seconds. Use --setup to configure monitoring credentials.

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

Full trust report

Download davepoon-buildwithclaude-plugins_claude-ops_skills_ops-monitor-a6c484b.zip · 2 KB
Part of davepoon/buildwithclaude — 187 skills

Install

skills CLI npx skills add https://github.com/davepoon/buildwithclaude/tree/main/plugins/claude-ops/skills/ops-monitor
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install davepoon-buildwithclaude@llmmart
Git git clone https://github.com/davepoon/buildwithclaude.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole davepoon/buildwithclaude collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Runtime Context

PREFS="${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json"
DD_API_KEY=$(jq -r '.datadog_api_key // empty' "$PREFS" 2>/dev/null)
NR_API_KEY=$(jq -r '.newrelic_api_key // empty' "$PREFS" 2>/dev/null)
OTEL_ENDPOINT=$(jq -r '.otel_endpoint // empty' "$PREFS" 2>/dev/null)

Determine $ARGUMENTS mode:

  • Contains --setup → run Setup flow
  • Contains --watch → run Watch mode
  • Otherwise → run Default health check

OPS ► MONITOR

Setup flow (--setup)

Ask which backends to configure:

Which monitoring backends would you like to configure?
[Datadog]  [New Relic]  [OpenTelemetry]  [All three]

For each selected backend, collect credentials via AskUserQuestion free-text input (one at a time, ≤4 options per call):

Datadog:

  1. datadog_api_key — API Key from app.datadoghq.com/organization-settings/api-keys
  2. datadog_app_key — Application Key from app.datadoghq.com/organization-settings/application-keys

New Relic:

  1. newrelic_api_key — User API Key from one.newrelic.com/api-keys
  2. newrelic_account_id — Numeric Account ID from New Relic admin portal

OpenTelemetry:

  1. otel_endpoint — Base URL of your OTEL-compatible backend (e.g., https://otlp.grafana.net)

Write each credential to preferences.json using atomic tmpfile swap:

tmp=$(mktemp)
jq --arg k "$KEY" --arg v "$VALUE" '.[$k] = $v' "$PREFS" > "$tmp" && mv "$tmp" "$PREFS"

Run smoke test after saving:

  • Datadog: curl -sf -H "DD-API-KEY: $DD_API_KEY" -H "DD-APPLICATION-KEY: $DD_APP_KEY" "https://api.datadoghq.com/api/v1/validate" → expect {"valid": true}
  • New Relic: curl -sf -H "Api-Key: $NR_API_KEY" "https://api.newrelic.com/graphql" -d '{"query":"{ actor { user { name } } }"}' → expect data.actor.user
  • OTEL: curl -sf "$OTEL_ENDPOINT/healthz" → expect HTTP 200

Report ✅ or ❌ with status for each backend.

Agent Teams support

If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, use Agent Teams when querying multiple backends simultaneously. This enables:

  • Backend probes run in parallel with shared context (e.g., Datadog agent detects latency spike → OTEL agent can correlate with traces)
  • You can steer: "focus on Datadog alerts first, then cross-reference with New Relic"
  • Real-time progress: agents report per-backend as results arrive

Team setup (only when flag is enabled, multiple backends configured):

TeamCreate("monitor-probes")
Agent(team_name="monitor-probes", name="datadog-probe", subagent_type="ops:monitor-agent", ...)
Agent(team_name="monitor-probes", name="newrelic-probe", subagent_type="ops:monitor-agent", ...)
Agent(team_name="monitor-probes", name="otel-probe", subagent_type="ops:monitor-agent", ...)

If the flag is NOT set or only one backend is configured, use a single monitor-agent subagent.

Default health check (no flags)

Spawn monitor-agent via the Agent tool. Display the result as a formatted dashboard:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 OPS ► MONITOR                       [<timestamp>]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 DATADOG      ✅ healthy (0 alerts)
 NEW RELIC    🔴 2 critical entities
 OTEL         ✅ healthy
──────────────────────────────────────────────────────
 Total alerts: 2   Severity: CRITICAL

Status icons:

  • ✅ — healthy (0 alerts / configured and reachable)
  • ⚠️ — warning (warn-level alerts present)
  • 🔴 — critical (critical alerts or unreachable)
  • ⬜ — not configured

For each alert or critical entity, display: service name, alert name, and link to the relevant dashboard.

If no backends are configured, show a setup prompt:

No monitoring backends configured. Run /ops:monitor --setup to add Datadog, New Relic, or OTEL.

Watch mode (--watch)

Poll every 60 seconds. On each tick:

while true; do
  RESULT=$(# spawn monitor-agent and capture JSON output)
  # Diff against previous tick
  # Print: timestamp, changed items only
  # 🆕 new alert: <name>
  # ✅ resolved: <name>
  sleep 60
done

Exit on Ctrl-C.

--backend filter

If --backend datadog|newrelic|otel is specified, query and display only that backend.

CLI/API Reference

Backend Auth header Base URL Health endpoint
Datadog DD-API-KEY: $key + DD-APPLICATION-KEY: $app_key https://api.datadoghq.com /api/v1/validate
New Relic Api-Key: $key https://api.newrelic.com/graphql POST GraphQL query
OTEL varies by backend $OTEL_ENDPOINT /healthz
# Datadog — active alerts
curl -sf \
  -H "DD-API-KEY: ${DD_API_KEY}" \
  -H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \
  "https://api.datadoghq.com/api/v1/monitor?monitor_tags=*&with_downtimes=false" \
  | jq '[.[] | select(.overall_state == "Alert" or .overall_state == "Warn")]'

# New Relic — critical entities (GraphQL)
curl -sf \
  -H "Api-Key: ${NR_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"query":"{ actor { entitySearch(queryBuilder: {alertSeverity: CRITICAL}) { results { entities { name alertSeverity entityType } } } } }"}' \
  "https://api.newrelic.com/graphql"

# OTEL — health check
curl -sf "${OTEL_ENDPOINT}/healthz"
Files (buildwithclaude)
  • SKILL.md 6.2 KB
    ---
    name: ops-monitor
    description: Unified APM and monitoring surface. Polls Datadog, New Relic, and OpenTelemetry backends for active alerts, error traces, and entity health. Use --watch for live polling every 60 seconds. Use --setup to configure monitoring credentials.
    argument-hint: "[--watch] [--setup] [--backend datadog|newrelic|otel]"
    allowed-tools:
      - Bash
      - Read
      - Agent
      - AskUserQuestion
      - TeamCreate
      - SendMessage
    effort: low
    maxTurns: 20
    ---
    
    ## Runtime Context
    
    ```bash
    PREFS="${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json"
    DD_API_KEY=$(jq -r '.datadog_api_key // empty' "$PREFS" 2>/dev/null)
    NR_API_KEY=$(jq -r '.newrelic_api_key // empty' "$PREFS" 2>/dev/null)
    OTEL_ENDPOINT=$(jq -r '.otel_endpoint // empty' "$PREFS" 2>/dev/null)
    ```
    
    Determine `$ARGUMENTS` mode:
    - Contains `--setup` → run **Setup flow**
    - Contains `--watch` → run **Watch mode**
    - Otherwise → run **Default health check**
    
    # OPS ► MONITOR
    
    ## Setup flow (`--setup`)
    
    Ask which backends to configure:
    
    ```
    Which monitoring backends would you like to configure?
    [Datadog]  [New Relic]  [OpenTelemetry]  [All three]
    ```
    
    For each selected backend, collect credentials via `AskUserQuestion` free-text input (one at a time, ≤4 options per call):
    
    **Datadog:**
    1. `datadog_api_key` — API Key from app.datadoghq.com/organization-settings/api-keys
    2. `datadog_app_key` — Application Key from app.datadoghq.com/organization-settings/application-keys
    
    **New Relic:**
    1. `newrelic_api_key` — User API Key from one.newrelic.com/api-keys
    2. `newrelic_account_id` — Numeric Account ID from New Relic admin portal
    
    **OpenTelemetry:**
    1. `otel_endpoint` — Base URL of your OTEL-compatible backend (e.g., https://otlp.grafana.net)
    
    Write each credential to preferences.json using atomic tmpfile swap:
    
    ```bash
    tmp=$(mktemp)
    jq --arg k "$KEY" --arg v "$VALUE" '.[$k] = $v' "$PREFS" > "$tmp" && mv "$tmp" "$PREFS"
    ```
    
    Run smoke test after saving:
    - **Datadog**: `curl -sf -H "DD-API-KEY: $DD_API_KEY" -H "DD-APPLICATION-KEY: $DD_APP_KEY" "https://api.datadoghq.com/api/v1/validate"` → expect `{"valid": true}`
    - **New Relic**: `curl -sf -H "Api-Key: $NR_API_KEY" "https://api.newrelic.com/graphql" -d '{"query":"{ actor { user { name } } }"}'` → expect `data.actor.user`
    - **OTEL**: `curl -sf "$OTEL_ENDPOINT/healthz"` → expect HTTP 200
    
    Report ✅ or ❌ with status for each backend.
    
    ## Agent Teams support
    
    If `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` is set, use **Agent Teams** when querying multiple backends simultaneously. This enables:
    - Backend probes run in parallel with shared context (e.g., Datadog agent detects latency spike → OTEL agent can correlate with traces)
    - You can steer: "focus on Datadog alerts first, then cross-reference with New Relic"
    - Real-time progress: agents report per-backend as results arrive
    
    **Team setup** (only when flag is enabled, multiple backends configured):
    ```
    TeamCreate("monitor-probes")
    Agent(team_name="monitor-probes", name="datadog-probe", subagent_type="ops:monitor-agent", ...)
    Agent(team_name="monitor-probes", name="newrelic-probe", subagent_type="ops:monitor-agent", ...)
    Agent(team_name="monitor-probes", name="otel-probe", subagent_type="ops:monitor-agent", ...)
    ```
    
    If the flag is NOT set or only one backend is configured, use a single `monitor-agent` subagent.
    
    ## Default health check (no flags)
    
    Spawn `monitor-agent` via the Agent tool. Display the result as a formatted dashboard:
    
    ```
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     OPS ► MONITOR                       [<timestamp>]
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     DATADOG      ✅ healthy (0 alerts)
     NEW RELIC    🔴 2 critical entities
     OTEL         ✅ healthy
    ──────────────────────────────────────────────────────
     Total alerts: 2   Severity: CRITICAL
    ```
    
    Status icons:
    - `✅` — healthy (0 alerts / configured and reachable)
    - `⚠️` — warning (warn-level alerts present)
    - `🔴` — critical (critical alerts or unreachable)
    - `⬜` — not configured
    
    For each alert or critical entity, display: service name, alert name, and link to the relevant dashboard.
    
    If no backends are configured, show a setup prompt:
    ```
    No monitoring backends configured. Run /ops:monitor --setup to add Datadog, New Relic, or OTEL.
    ```
    
    ## Watch mode (`--watch`)
    
    Poll every 60 seconds. On each tick:
    
    ```bash
    while true; do
      RESULT=$(# spawn monitor-agent and capture JSON output)
      # Diff against previous tick
      # Print: timestamp, changed items only
      # 🆕 new alert: <name>
      # ✅ resolved: <name>
      sleep 60
    done
    ```
    
    Exit on Ctrl-C.
    
    ## `--backend` filter
    
    If `--backend datadog|newrelic|otel` is specified, query and display only that backend.
    
    ## CLI/API Reference
    
    | Backend     | Auth header                                    | Base URL                        | Health endpoint        |
    |-------------|------------------------------------------------|---------------------------------|------------------------|
    | Datadog     | `DD-API-KEY: $key` + `DD-APPLICATION-KEY: $app_key` | https://api.datadoghq.com  | /api/v1/validate       |
    | New Relic   | `Api-Key: $key`                                | https://api.newrelic.com/graphql | POST GraphQL query    |
    | OTEL        | varies by backend                              | `$OTEL_ENDPOINT`                | /healthz               |
    
    ```bash
    # Datadog — active alerts
    curl -sf \
      -H "DD-API-KEY: ${DD_API_KEY}" \
      -H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \
      "https://api.datadoghq.com/api/v1/monitor?monitor_tags=*&with_downtimes=false" \
      | jq '[.[] | select(.overall_state == "Alert" or .overall_state == "Warn")]'
    
    # New Relic — critical entities (GraphQL)
    curl -sf \
      -H "Api-Key: ${NR_API_KEY}" \
      -H "Content-Type: application/json" \
      -d '{"query":"{ actor { entitySearch(queryBuilder: {alertSeverity: CRITICAL}) { results { entities { name alertSeverity entityType } } } } }"}' \
      "https://api.newrelic.com/graphql"
    
    # OTEL — health check
    curl -sf "${OTEL_ENDPOINT}/healthz"
    ```
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related