{"id":"2bac6869-e773-43ff-8a4a-2d3e0bf3e855","shortId":"e87WVc","kind":"skill","title":"pilot-alert","tagline":"Configurable alerting on event patterns with webhook and message delivery.  Use this skill when: 1. You need to trigger alerts based on event patterns or thresholds 2. You need to notify external services (Slack, Discord, PagerDuty) of events 3. You need to escalate critical even","description":"# Pilot Alert\n\nSubscribe to events and trigger configurable alerts based on patterns, thresholds, or conditions. Supports webhook delivery and direct agent messaging.\n\n## Essential Commands\n\n### Subscribe to events\n```bash\npilotctl --json subscribe <source-hostname> <topic> [--timeout <seconds>]\n```\n\n### Send alert message\n```bash\npilotctl --json send-message <target-hostname> --data <alert-payload>\n```\n\n### Webhook delivery\n```bash\ncurl -X POST \"$WEBHOOK_URL\" -H \"Content-Type: application/json\" -d \"$payload\"\n```\n\n## Workflow: Critical Error Alerting\n\n```bash\n#!/bin/bash\nSOURCE=\"production-app\"\nTOPIC=\"alerts.error.*\"\nWEBHOOK_URL=\"https://hooks.slack.com/services/YOUR/WEBHOOK\"\n\npilotctl --json subscribe \"$SOURCE\" \"$TOPIC\" --timeout 600 | \\\n  jq -c '.data.events[]' | \\\n  while IFS= read -r event; do\n    severity=$(echo \"$event\" | jq -r '.data | fromjson | .severity // \"unknown\"')\n\n    if [ \"$severity\" = \"critical\" ]; then\n      message=$(echo \"$event\" | jq -r '.data | fromjson | .message')\n\n      # Alert via Slack\n      slack_payload=$(jq -n --arg msg \"$message\" '{text: \"CRITICAL\", attachments: [{color: \"danger\", text: $msg}]}')\n      curl -X POST \"$WEBHOOK_URL\" -H \"Content-Type: application/json\" -d \"$slack_payload\" --silent\n\n      # Alert via Pilot\n      pilotctl --json send-message oncall-agent --data \"{\\\"type\\\":\\\"critical_alert\\\",\\\"message\\\":\\\"$message\\\"}\"\n    fi\n  done\n```\n\n## Workflow: Threshold Alerting\n\n```bash\n#!/bin/bash\nTHRESHOLD=80\nCONSECUTIVE_LIMIT=3\nconsecutive_count=0\n\npilotctl --json subscribe worker-node metrics.cpu --timeout 300 | \\\n  jq -c '.data.events[]' | \\\n  while IFS= read -r event; do\n    usage=$(echo \"$event\" | jq -r '.data | fromjson | .usage // 0')\n\n    if [ \"$(echo \"$usage > $THRESHOLD\" | bc)\" = \"1\" ]; then\n      consecutive_count=$((consecutive_count + 1))\n\n      if [ \"$consecutive_count\" -ge \"$CONSECUTIVE_LIMIT\" ]; then\n        echo \"ALERT: CPU sustained above $THRESHOLD%\"\n        # Send alert...\n        consecutive_count=0\n      fi\n    else\n      consecutive_count=0\n    fi\n  done\n```\n\n## Workflow: Alert Deduplication\n\n```bash\n#!/bin/bash\nDEDUP_WINDOW=300\nALERT_FILE=\"/tmp/alert-cache.txt\"\n\npilotctl --json subscribe app-cluster \"alerts.*\" --timeout 600 | \\\n  jq -c '.data.events[]' | \\\n  while IFS= read -r event; do\n    alert_key=\"$(echo \"$event\" | jq -r '.topic'):$(echo \"$event\" | jq -r '.data' | md5sum | cut -d' ' -f1)\"\n    now=$(date +%s)\n\n    last_sent=$(grep \"^$alert_key \" \"$ALERT_FILE\" 2>/dev/null | cut -d' ' -f2)\n\n    if [ -n \"$last_sent\" ] && [ $((now - last_sent)) -lt $DEDUP_WINDOW ]; then\n      echo \"Suppressed duplicate\"\n      continue\n    fi\n\n    # Send alert\n    pilotctl --json send-message oncall-agent --data \"$(echo \"$event\" | jq -r '.data')\"\n\n    # Update cache\n    grep -v \"^$alert_key \" \"$ALERT_FILE\" > \"${ALERT_FILE}.tmp\" 2>/dev/null || true\n    echo \"$alert_key $now\" >> \"${ALERT_FILE}.tmp\"\n    mv \"${ALERT_FILE}.tmp\" \"$ALERT_FILE\"\n  done\n```\n\n## Dependencies\n\nRequires `pilot-protocol` skill, `jq`, `curl`, `pilotctl` binary, running daemon, and trust with source agents.","tags":["pilot","alert","skills","teoslayer","agent-skills","ai-agents","clawhub","networking","openclaw","overlay-network","p2p","pilot-protocol"],"capabilities":["skill","source-teoslayer","skill-pilot-alert","topic-agent-skills","topic-ai-agents","topic-clawhub","topic-networking","topic-openclaw","topic-overlay-network","topic-p2p","topic-pilot-protocol"],"categories":["pilot-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/TeoSlayer/pilot-skills/pilot-alert","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add TeoSlayer/pilot-skills","source_repo":"https://github.com/TeoSlayer/pilot-skills","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (3,067 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:50.886Z","embedding":null,"createdAt":"2026-05-18T13:22:33.522Z","updatedAt":"2026-05-18T19:14:50.886Z","lastSeenAt":"2026-05-18T19:14:50.886Z","tsv":"'/bin/bash':111,214,291 '/dev/null':343,391 '/services/your/webhook':122 '/tmp/alert-cache.txt':297 '0':222,249,279,284 '1':18,255,261 '2':30,342,390 '3':42,219 '300':231,294 '600':129,306 '80':216 'agent':69,201,372,423 'alert':3,5,23,50,57,82,109,160,191,205,212,270,276,288,295,304,316,338,340,364,383,385,387,394,397,401,404 'alerts.error':117 'app':115,302 'app-clust':301 'application/json':103,186 'arg':167 'attach':172 'base':24,58 'bash':76,84,93,110,213,290 'bc':254 'binari':416 'c':131,233,308 'cach':380 'cluster':303 'color':173 'command':72 'condit':63 'configur':4,56 'consecut':217,220,257,259,263,266,277,282 'content':101,184 'content-typ':100,183 'continu':361 'count':221,258,260,264,278,283 'cpu':271 'critic':47,107,150,171,204 'curl':94,177,414 'cut':329,344 'd':104,187,330,345 'daemon':418 'danger':174 'data':90,144,157,202,246,327,373,378 'data.events':132,234,309 'date':333 'dedup':292,355 'dedupl':289 'deliveri':13,66,92 'depend':407 'direct':68 'discord':38 'done':209,286,406 'duplic':360 'echo':140,153,242,251,269,318,323,358,374,393 'els':281 'error':108 'escal':46 'essenti':71 'even':48 'event':7,26,41,53,75,137,141,154,239,243,314,319,324,375 'extern':35 'f1':331 'f2':346 'fi':208,280,285,362 'file':296,341,386,388,398,402,405 'fromjson':145,158,247 'ge':265 'grep':337,381 'h':99,182 'hooks.slack.com':121 'hooks.slack.com/services/your/webhook':120 'if':134,236,311 'jq':130,142,155,165,232,244,307,320,325,376,413 'json':78,86,124,195,224,299,366 'key':317,339,384,395 'last':335,349,352 'limit':218,267 'lt':354 'md5sum':328 'messag':12,70,83,89,152,159,169,198,206,207,369 'metrics.cpu':229 'msg':168,176 'mv':400 'n':166,348 'need':20,32,44 'node':228 'notifi':34 'oncal':200,371 'oncall-ag':199,370 'pagerduti':39 'pattern':8,27,60 'payload':105,164,189 'pilot':2,49,193,410 'pilot-alert':1 'pilot-protocol':409 'pilotctl':77,85,123,194,223,298,365,415 'post':96,179 'product':114 'production-app':113 'protocol':411 'r':136,143,156,238,245,313,321,326,377 'read':135,237,312 'requir':408 'run':417 'send':81,88,197,275,363,368 'send-messag':87,196,367 'sent':336,350,353 'servic':36 'sever':139,146,149 'silent':190 'skill':16,412 'skill-pilot-alert' 'slack':37,162,163,188 'sourc':112,126,422 'source-teoslayer' 'subscrib':51,73,79,125,225,300 'support':64 'suppress':359 'sustain':272 'text':170,175 'threshold':29,61,211,215,253,274 'timeout':80,128,230,305 'tmp':389,399,403 'topic':116,127,322 'topic-agent-skills' 'topic-ai-agents' 'topic-clawhub' 'topic-networking' 'topic-openclaw' 'topic-overlay-network' 'topic-p2p' 'topic-pilot-protocol' 'trigger':22,55 'true':392 'trust':420 'type':102,185,203 'unknown':147 'updat':379 'url':98,119,181 'usag':241,248,252 'use':14 'v':382 'via':161,192 'webhook':10,65,91,97,118,180 'window':293,356 'worker':227 'worker-nod':226 'workflow':106,210,287 'x':95,178","prices":[{"id":"78fd7d3c-d1b9-4940-808a-d6134a1727e1","listingId":"2bac6869-e773-43ff-8a4a-2d3e0bf3e855","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"TeoSlayer","category":"pilot-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:33.522Z"}],"sources":[{"listingId":"2bac6869-e773-43ff-8a4a-2d3e0bf3e855","source":"github","sourceId":"TeoSlayer/pilot-skills/pilot-alert","sourceUrl":"https://github.com/TeoSlayer/pilot-skills/tree/main/skills/pilot-alert","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:33.522Z","lastSeenAt":"2026-05-18T19:14:50.886Z"}],"details":{"listingId":"2bac6869-e773-43ff-8a4a-2d3e0bf3e855","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"TeoSlayer","slug":"pilot-alert","github":{"repo":"TeoSlayer/pilot-skills","stars":6,"topics":["agent-skills","ai-agents","clawhub","networking","openclaw","overlay-network","p2p","pilot-protocol"],"license":"agpl-3.0","html_url":"https://github.com/TeoSlayer/pilot-skills","pushed_at":"2026-05-13T06:08:49Z","description":"80+ agent skills for Pilot Protocol — communication, file transfer, trust, task routing, swarm coordination, and more","skill_md_sha":"98617278cf58893c512037e6f9337b7a4040764f","skill_md_path":"skills/pilot-alert/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/TeoSlayer/pilot-skills/tree/main/skills/pilot-alert"},"layout":"multi","source":"github","category":"pilot-skills","frontmatter":{"name":"pilot-alert","license":"AGPL-3.0","description":"Configurable alerting on event patterns with webhook and message delivery.  Use this skill when: 1. You need to trigger alerts based on event patterns or thresholds 2. You need to notify external services (Slack, Discord, PagerDuty) of events 3. You need to escalate critical events to on-call agents 4. You need to aggregate and deduplicate alerts  Do NOT use this skill when: - You need simple event forwarding (use pilot-event-bus instead) - You need persistent logging (use pilot-event-log instead) - You need all events without filtering (subscribe directly)","compatibility":"Requires pilot-protocol skill and pilotctl binary on PATH. The daemon must be running (pilotctl daemon start). Requires jq and curl for webhook delivery."},"skills_sh_url":"https://skills.sh/TeoSlayer/pilot-skills/pilot-alert"},"updatedAt":"2026-05-18T19:14:50.886Z"}}