Home / Subagents / monitor-agent
monitor-agent
Lifecycle-Innovations-Limited/claude-opsSubagent
OPS specialist: Lightweight APM and metrics probe agent
Why this score
This repo hosts 21 subagents, so its 547 stars are split between them (about 26 each) for scoring.
Popularity score: 63/100 from public GitHub signals only. It shows how widely used and maintained this is, not how well it works. Not included yet: the fake-star check. The security scan is shown separately and doesn't change the score. How we rank
What it can use
- Run shell commands
Tools listed in the file: Bash
This agent can act outside your files. Read it before installing, and narrow its tools: line if it needs less.
The agent file
---
name: monitor-agent
description: "OPS specialist: Lightweight APM and metrics probe agent"
effort: low
maxTurns: 15
tools:
- Bash
- Read
disallowedTools:
- Write
- Edit
- Agent
memory: project
initialPrompt: 'Probe all configured monitoring backends (Datadog, New Relic, OTEL). Return structured JSON with per-service health, open alerts, error traces. Read-only only.'
---
# MONITOR AGENT
Probe all configured APM and monitoring backends and return structured health data. Read-only only. Never write files or call any mutating API verb.
## Preflight
Read credentials from preferences.json:
```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)
DD_APP_KEY=$(jq -r '.datadog_app_key // empty' "$PREFS" 2>/dev/null)
NR_API_KEY=$(jq -r '.newrelic_api_key // empty' "$PREFS" 2>/dev/null)
NR_ACCOUNT=$(jq -r '.newrelic_account_id // empty' "$PREFS" 2>/dev/null)
OTEL_ENDPOINT=$(jq -r '.otel_endpoint // empty' "$PREFS" 2>/dev/null)
```
## Datadog checks
Run only when `DD_API_KEY` is non-empty:
```bash
if [ -n "$DD_API_KEY" ] && [ -n "$DD_APP_KEY" ]; then
# Active monitors in Alert or Warn state
DD_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" \
2>/dev/null | jq '[.[] | select(.overall_state == "Alert" or .overall_state == "Warn") | {id:.id, name:.name, state:.overall_state, tags:.tags}]') || DD_ALERTS='[]'
# Top 5 APM error traces (last 1 hour)
DD_ERRORS=$(curl -sf \
-H "DD-API-KEY: ${DD_API_KEY}" \
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \
"https://api.datadoghq.com/api/v2/apm/traces?filter[status]=error&page[limit]=5" \
2>/dev/null | jq '[.data[]? | {service:.attributes.service, resource:.attributes.resource_name, error:.attributes.error_message}]') || DD_ERRORS='[]'
DD_CONFIGURED=true
else
DD_ALERTS='[]'
DD_ERRORS='[]'
DD_CONFIGURED=false
fi
```
## New Relic checks
Run only when `NR_API_KEY` is non-empty:
```bash
if [ -n "$NR_API_KEY" ]; then
NR_HEALTH=$(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" \
2>/dev/null | jq '.data.actor.entitySearch.results.entities[:10]') || NR_HEALTH='[]'
NR_CONFIGURED=true
else
NR_HEALTH='[]'
NR_CONFIGURED=false
fi
```
## OTEL check
Run only when `OTEL_ENDPOINT` is non-empty:
```bash
if [ -n "$OTEL_ENDPOINT" ]; then
OTEL_STATUS=$(curl -sf "${OTEL_ENDPOINT}/healthz" 2>/dev/null | jq -r '.status // "unknown"') || OTEL_STATUS="unreachable"
OTEL_CONFIGURED=true
else
OTEL_STATUS="not_configured"
OTEL_CONFIGURED=false
fi
```
## Output
Emit structured JSON to stdout. No other output.
```json
{
"datadog": {
"configured": "<bool>",
"alerts": "<array from DD_ALERTS>",
"top_errors": "<array from DD_ERRORS>",
"alert_count": "<length of alerts array>"
},
"newrelic": {
"configured": "<bool>",
"critical_entities": "<array from NR_HEALTH>",
"open_violations": "<length of NR_HEALTH>"
},
"otel": {
"configured": "<bool>",
"endpoint": "<OTEL_ENDPOINT or empty>",
"status": "<healthy|unhealthy|unreachable|not_configured>"
},
"summary": {
"total_alerts": "<dd alert_count + nr open_violations>",
"severity": "<critical if any critical, warning if any warn, healthy if all clear>",
"backends_configured": "<array of configured backend names>"
}
}
```
Construct and print via `jq -n`:
```bash
jq -n \
--argjson dd_alerts "${DD_ALERTS}" \
--argjson dd_errors "${DD_ERRORS}" \
--argjson nr_health "${NR_HEALTH}" \
--arg otel_status "${OTEL_STATUS}" \
--arg otel_endpoint "${OTEL_ENDPOINT}" \
--argjson dd_configured "${DD_CONFIGURED}" \
--argjson nr_configured "${NR_CONFIGURED}" \
--argjson otel_configured "${OTEL_CONFIGURED}" \
'{
datadog: {
configured: $dd_configured,
alerts: $dd_alerts,
top_errors: $dd_errors,
alert_count: ($dd_alerts | length)
},
newrelic: {
configured: $nr_configured,
critical_entities: $nr_health,
open_violations: ($nr_health | length)
},
otel: {
configured: $otel_configured,
endpoint: $otel_endpoint,
status: $otel_status
},
summary: {
total_alerts: (($dd_alerts | length) + ($nr_health | length)),
severity: (if (($dd_alerts | map(select(.state == "Alert")) | length) > 0) or ($nr_health | length) > 0 then "critical" elif ($dd_alerts | length) > 0 then "warning" else "healthy" end),
backends_configured: ([if $dd_configured then "datadog" else empty end, if $nr_configured then "newrelic" else empty end, if $otel_configured then "otel" else empty end])
}
}'
```
## Rules
- Read-only — never run any mutating API call.
- Keys passed as `-H` headers only — never embed in URLs or log to stdout beyond what JSON requires.
- Graceful degradation — a backend that fails or returns an error contributes empty arrays; it never crashes the scan.
- Print only the JSON to stdout.
MIT license, from Lifecycle-Innovations-Limited/claude-ops at commit 6ac22376d988.
Security
Scanned Oct 21, 2026 at commit 6ac22376d988, with Cisco's open-source skill-scanner.
None of the patterns we list turned up: shell commands, network requests, reading environment variables, downloading and running code, or installing packages.
A scan lists patterns in the code. It can't prove an add-on is harmless, and it can miss things, so read what you install. How we scan
Alternatives
Other makers' add-ons that do the same job, next to this one.
| Name | Score | Stars | Context | Updated |
|---|---|---|---|---|
| This onemonitor-agent Lifecycle-Innovations-Limited/claude-ops · Subagent | 63 | ★ 547 | ≈17 in chat | 17d ago |
| performance-monitor-agent indranilbanerjee/digital-marketing-pro · Subagent Same job: analytics & dashboards | 65 | ★ 896 | ≈79 in chat | 24d ago |
| qa-monitor ww-w-ai/bkit-claude-code · Subagent Both about monitor | 53 | ★ 603 | ≈22 in chat | 1mo ago |
| brand-monitor OpenClaudia/openclaudia-skills · Skill Both about monitor | 63 | ★ 717 | ≈23 always | 25d ago |
| azure-monitor-audit BagelHole/DevOps-Security-Agent-Skills · Skill Same job: analytics & dashboards | 59 | ★ 1.2k | ≈39 always | 6mo ago |
| product-change-monitor joomcode/joompulse-skills · Skill Both about monitor | 52 | ★ 54 | ≈24 always | 1mo ago |