[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M788KS2F95SC386XMFN7ZXA7":3,"skill-same:01M788KS2F95SC386XMFN7ZXA7":107},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":14,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":34,"ownerDescription":35,"updatedAt":36,"install":37,"resources":50},"01M788KS2F95SC386XMFN7ZXA7","vss-manage-alerts",null,"Use for VSS alert workflows — real-time monitoring, Alert-Bridge subscriptions, Slack notifications, incident queries, camera onboarding. Not for non-alert analytics.","Solizardking\u002Ftrain2earn","Solizardking","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F108096810?v=4","01M786KDB10AYV042N0F9BD5B5","Clawd","01M786KDC5C3NPE4W44C5641EZ",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: vss-manage-alerts\ndescription: Use for VSS alert workflows — real-time monitoring, Alert-Bridge subscriptions, Slack notifications, incident queries, camera onboarding. Not for non-alert analytics.\nlicense: Apache-2.0\nmetadata:\n  version: \"3.2.0\"\n  author: \"NVIDIA Video Search and Summarization Team \u003Cvss-team@nvidia.com>\"\n  github-url: \"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization\"\n  tags: \"nvidia blueprint operational\"\n---\n## Purpose\n\nOperate the VSS alert pipeline (mode detection, Alert-Bridge subscriptions, Slack notifications, queries, camera onboarding, verifier-prompt customization).\n\n## Prerequisites\n\n- Active VSS deployment reachable on `$HOST_IP` (see `vss-deploy-profile` and `references\u002F`).\n- NGC credentials in `$NGC_CLI_API_KEY` and `$NVIDIA_API_KEY` for any image pulls.\n- `curl`, `jq`, and Docker available on the caller.\n\n## Instructions\n\nFollow the routing tables and step-by-step workflows below. Each section that ends in *workflow*, *quick start*, or *flow* is intended to be executed top-to-bottom. Detailed reference material lives in `references\u002F` and helper scripts live in `scripts\u002F` — call them via `run_script` when the skill points to a script by name.\n\n## Examples\n\nRunnable end-to-end scenarios live under `evals\u002F` (each `*.json` manifest); inline `curl` blocks appear in each workflow below. Replay with `nv-base validate \u003Cthis-skill-dir> --agent-eval`.\n\n## Limitations\n\nRequires the matching VSS profile\u002Fmicroservice deployed and reachable. NGC-hosted models\u002FNIMs are subject to rate-limits, GPU-memory needs, and license terms; concurrency and storage limits depend on host hardware and the profile's compose file.\n\n## Troubleshooting\n\n- **Connection refused** → microservice not running: probe `\u002Fdocs` or `\u002Fhealth`, redeploy via `vss-deploy-profile`.\n- **HTTP 401\u002F403 on NGC pulls** → missing\u002Fexpired `NGC_CLI_API_KEY`: `docker login nvcr.io` and re-export the key.\n- **OOM \u002F model load failure** → insufficient GPU memory: use a smaller variant or `docker compose down` to free GPUs.\n\n# VSS Alert Management\n\nThe alerts profile runs in one of two modes (chosen at `\u002Fvss-deploy-profile -p alerts -m {verification,real-time}`) — see **The Two Modes** table below. This skill routes by **deployed mode + user intent** (monitoring vs subscription CRUD vs Slack webhook).\n\n## When to Use\n\n- Start\u002Fstop a real-time alert on a sensor (\"Start real-time alert for boxes dropped on warehouse_sample\")\n- Create\u002Flist\u002Fstop realtime subscription rules on Alert Bridge\n- Set up or manage Slack incident notifications\n- List or query detected incidents \u002F alerts; check verdicts (confirmed\u002Frejected\u002Funverified)\n- Add a new camera to the alerts pipeline; customize VLM-verifier prompts (CV mode)\n\n---\n\n## Deployment prerequisite\n\nRequires the VSS **alerts** profile on `$HOST_IP` in either `verification` (CV) or `real-time` (VLM) mode.\n\n```bash\n# Either vss-rtvi-cv (CV mode) OR vss-rtvi-vlm (VLM mode) must be present.\ncurl -sf --max-time 5 \"http:\u002F\u002F${HOST_IP}:8000\u002Fdocs\" >\u002Fdev\u002Fnull \\\n  && docker ps --format '{{.Names}}' \\\n     | grep -qE '^(vss-rtvi-cv|vss-rtvi-vlm)$'\n```\n\nIf the probe fails, ask which mode to deploy and hand off to `\u002Fvss-deploy-profile -p alerts -m \u003Cmode>` (decline → stop; pre-authorized autonomous deploy → run directly with `verification` by default). If it passes, detect the mode per Step 1.\n\n---\n\n## The Two Modes (Deploy-Time Choice)\n\n| Mode | Deploy flag | Env (`.env`) | What runs | What is available |\n|---|---|---|---|---|\n| **CV (verification)** | `-m verification` | `MODE=2d_cv` | RT-CV (Grounding DINO) + Behavior Analytics + `alert-bridge` VLM verifier + **`rtvi-vlm`** | **Both** static CV pipeline (Workflow A) **and** dynamic VLM real-time alerts (Workflows B\u002FD) |\n| **VLM (real-time)** | `-m real-time` | `MODE=2d_vlm` | `alert-bridge` + `rtvi-vlm` | **Only** dynamic VLM real-time alerts (Workflows B\u002FD) and `alert-bridge` backend. No static CV pipeline. |\n\n**Switching modes** uses the `vss-deploy-profile` teardown + deploy flow with the other `-m` flag (VLM → CV adds the CV pipeline; CV → VLM tears it down). `rtvi-vlm` runs in both modes.\n\n---\n\n## Step 1 — Detect the Currently Deployed Mode\n\nBefore running any alert workflow, check which mode is live. Use **CV-only** containers as the signal — `vss-rtvi-vlm` is **not** a reliable mode signal because it runs in both modes.\n\n```bash\n# CV verification mode (vss-behavior-analytics + vss-rtvi-cv are CV-only)\ndocker ps --format '{{.Names}}' | grep -qx vss-behavior-analytics && echo \"mode=CV\"\n\n# VLM real-time mode (no CV pipeline; vss-rtvi-vlm still runs)\ndocker ps --format '{{.Names}}' | grep -qx vss-behavior-analytics || \\\n  docker ps --format '{{.Names}}' | grep -qx vss-rtvi-vlm && echo \"mode=VLM\"\n```\n\nIf `vss-behavior-analytics` is present → **CV mode** (which also has `vss-rtvi-vlm`).\nIf only `vss-rtvi-vlm` is present (and no CV pipeline) → **VLM mode**.\nIf neither matches, the alerts profile is not deployed — direct the user to the `vss-deploy-profile` skill.\n\nAlternative signal (preferred when `docker ps` isn't accessible): check the profile's `generated.env`:\n\n```bash\ngrep -E '^MODE=' deploy\u002Fdocker\u002Fdeveloper-profiles\u002Fdev-profile-alerts\u002Fgenerated.env\n# MODE=2d_cv   → CV mode (full superset)\n# MODE=2d_vlm  → VLM real-time mode (vss-rtvi-vlm only; no vss-rtvi-cv)\n```\n\n---\n\n## Step 2 — Route by Deployed Mode\n\n| Deployed mode | User asks about… | Action |\n|---|---|---|\n| **VLM real-time** | Slack webhook setup\u002Fstatus\u002Ftest\u002Fstop | **Workflow E** — `references\u002Falert-notify.md` |\n| **VLM real-time** | rule CRUD, or a realtime alert on a sensor with a detection condition, or stop\u002Fdelete a named alert (by `alert_type`\u002Fcondition or rule ID) | **Workflow D** — `references\u002Falert-subscriptions.md` (incl. two-step stop\u002Fconfirm) |\n| **CV verification** | subscription\u002Frule CRUD or Slack\u002Fnotification setup | Refuse — see canonical refusal text below |\n| **CV or VLM** | generic start\u002Fstop monitoring **without** a detection condition | **Workflow B (VLM)** — call the VSS Agent; `rtvi-vlm` runs in both modes |\n| **CV or VLM** | incident lookup \u002F *what happened* (recent alerts, time-range, casual \"any alerts today?\") | **Workflow C (Query)** — works on both; **always run the query, never answer from memory** |\n| **CV** | static CV alert onboarding \u002F verdict-prompt customization | **Workflow A (CV)** — onboard RTSP via `vss-manage-video-io-storage`; pipeline auto-picks it up |\n| **VLM** | a CV \u002F behavior-analytics \u002F PPE-rule alert needing the static CV pipeline | **Redeployment required** — confirm first, then `vss-deploy-profile -m verification` |\n\n**Always confirm before triggering a redeploy.** A mode switch stops all currently-running monitoring and restarts services.\n\n### Intent precedence (first match wins)\n\n1. **Workflow E (Slack)** — Slack-specific keywords (`slack`, `webhook` + `slack`, `bot token`, `slack channel`). `notify` alone is **not** sufficient.\n2. **Workflow D (Subscriptions)** — sensor **plus** a detection condition, rule CRUD keywords (`rule`, `subscription`, rule ID), **or stopping\u002Fdeleting a named alert by type\u002Fcondition** (\"stop the PPE alert\", \"delete the collision rule\"). A named `alert_type`\u002Fcondition = an existing **rule** → D's two-step stop protocol (`GET \u002Fapi\u002Fv1\u002Frealtime` → yes\u002Fno confirm → delete), never Workflow B.\n3. **Workflow B (VLM monitoring)** — generic start\u002Fstop on a sensor with **no** detection condition and **no** alert-type qualifier (\"start\u002Fstop real-time alert for sensor X\"). A stop that names a type (\"stop the **PPE** alert\") is a rule stop → Workflow D.\n4. **Workflow C (Query)** — incident lookup \u002F *what happened* (`show\u002Flist incidents`, `recent alerts`, time-range queries, **and casual \"any alerts…?\" \u002F \"any alerts so far today?\" \u002F \"what's been triggered?\" phrasings**). Bare `alerts` (without `rule`\u002F`subscription`\u002F`active rules`) means **incidents** → Workflow C, never Workflow D.\n5. **Workflow A (CV)** — CV deployment handling for anything not matched above.\n\n> **`alerts` vs `alert rules` (C vs D) — pick exactly one, never both:**\n> *what happened \u002F has been triggered* (incidents) → **Workflow C**\n> (`POST \u002Fgenerate`). *What\n> rules\u002Fsubscriptions are configured or active* → **Workflow D** (the\n> **bare** `GET \u002Fapi\u002Fv1\u002Frealtime`, no `\u002Fincidents`). Bare `alerts` =\n> incidents (C); `alert rules` \u002F `subscriptions` \u002F `active rules` =\n> inventory (D). Never answer from memory; run the one correct call —\n> full endpoint detail in Workflow C below.\n\n**Disambiguation (B vs D):** if a sensor is named with start\u002Fmonitor language but the detection condition is unclear, ask:\n> *\"Do you want me to (a) create a persistent alert rule on Alert Bridge that keeps running until you delete it, or (b) start a one-time monitoring session via the VSS Agent?\"*\n\n**Stop routing (B vs D):** \"Stop the **&lt;type&gt;** alert\" (names an `alert_type`\u002Fcondition like PPE, collision, fire) = stop a **subscription rule** → **Workflow D** (find via `GET \u002Fapi\u002Fv1\u002Frealtime`, then the two-step stop\u002Fconfirm protocol in `references\u002Falert-subscriptions.md`; do **not** call `POST \u002Fgenerate`). A bare \"stop real-time alert \u002F stop monitoring on &lt;sensor&gt;\" with **no** type qualifier = Workflow B.\n\nIf a prompt mixes workflows (\"start monitoring and send to Slack\"), ask one clarifying question to split execution order.\n\n### CV-mode refusal text for D and E intents\n\nWhen the deployed mode is CV verification and the user asks for an alert-subscription or Slack\u002Fnotification intent, refuse with this message verbatim:\n\n> \"Alert subscriptions and Slack notifications are only supported in VLM real-time mode. Your current deployment is `\u003CCV verification | not deployed>`. To use these features, redeploy with `\u002Fvss-deploy-profile -p alerts -m real-time` (note: switching tears down current CV monitoring).\"\n\nNo auto-redeploy. The user decides whether to switch modes.\n\n---\n\n## Prereq for Either Mode: Sensor Must Be in VIOS\n\nBoth modes require the camera registered in VIOS first (via the `vss-manage-video-io-storage` skill):\n\n- RTSP URL \u002F IP camera → add it with `POST \u002Fsensor\u002Fadd` (that skill's Section 6); record the `sensorId` \u002F name.\n- Named existing sensor → confirm it appears in `GET \u002Fsensor\u002Flist` before proceeding.\n\nOn **CV**, adding the RTSP is the *entire* onboarding step (pipeline auto-picks it up). On **VLM**, it is a prerequisite to Workflow B.\n\n---\n\n## The Agent `\u002Fgenerate` Endpoint\n\nAll VLM-flow actions and all query actions go through the VSS Agent's natural-language endpoint:\n\n```bash\nAGENT=\"http:\u002F\u002F\u003CAGENT_ENDPOINT>\"   # default http:\u002F\u002Flocalhost:8000 on the alerts profile\n\ncurl -s -X POST \"$AGENT\u002Fgenerate\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"input_message\": \"\u003Cnatural-language request>\"}' | jq .\n```\n\n**Endpoint resolution:** use the agent endpoint from the active VSS deployment context. If unavailable, ask the user. Do not discover via filesystem.\n\n**Availability check:** `curl -sf --connect-timeout 5 \"$AGENT\u002Fdocs\"`.\n\nDo not call the `rtvi-vlm` microservice endpoints directly — always go through the agent. The agent internally dispatches to `rtvi_vlm_alert`, `rtvi_prompt_gen`, and `video_analytics_mcp.get_incidents`.\n\n---\n\n## Workflow A — CV Mode (`-m verification` \u002F `MODE=2d_cv`)\n\nCV alerts are **deployment-driven, not request-driven** — there is no agent\ncall to \"create\" one.\n\n1. Check if the sensor is in VIOS via `vss-manage-video-io-storage`'s `GET \u002Fsensor\u002Flist` (idempotent — don't blindly `POST \u002Fsensor\u002Fadd`).\n2. If missing, onboard via that skill's `POST \u002Fsensor\u002Fadd`. The CV pipeline auto-picks up the stream once registered and online.\n3. Confirm online: `curl -s \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F\u003CsensorId>\u002Fstatus\" | jq .`\n4. Alerts land in Elasticsearch (Behavior Analytics → `alert-bridge` verification per `alert_type_config.json`). Query with **Workflow C**.\n\nA static-CV-pipeline alert on a VLM-only deployment is a mode mismatch — see the routing table above.\n\n---\n\n## Workflow B — VLM Real-time Monitoring (CV or VLM mode)\n\nGeneric start \u002F stop intents through the VSS Agent for a named sensor\nwithout a detection condition (if a condition is present, route to\nWorkflow D). `rtvi-vlm` runs in both modes.\n\n```bash\n# start: input_message = \"Start real-time alert for sensor \u003Cid>\"\n# stop:  input_message = \"Stop real-time alert for sensor \u003Cid>\"\ncurl -s -X POST \"$AGENT\u002Fgenerate\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"input_message\": \"\u003Cstart|stop> real-time alert for sensor \u003Cid>\"}' | jq .\n```\n\nUnder the hood: `rtvi_prompt_gen` → `rtvi_vlm_alert action=\"start\"`.\nEvery chunk is captioned; a chunk whose VLM response contains `yes`\u002F`true`\n(case-insensitive) publishes an incident to `mdx-vlm-incidents`. Prompts\nmust force a Yes\u002FNo answer. A static-CV-pipeline request on a VLM-only\ndeployment is a mode mismatch — see the routing table.\n\n---\n\n## Workflow D — Alert Subscriptions (VLM real-time mode only)\n\nCreate \u002F list \u002F delete persistent realtime alert rules on Alert Bridge.\nRoute here when the prompt has rule keywords (`rule`, `subscription`, a rule\nID) **or** when it pairs a specific sensor with a specific detection\ncondition (e.g. \"Set up a realtime alert on warehouse-dock-1 for PPE\nviolations\", \"Watch sensor entrance-1 for tailgating\", \"Stop rule\n496aebd1-…\").\n\n**Not here:** generic start\u002Fstop without a condition (→ Workflow B) or Slack\noperations (→ Workflow E).\n\nLoad and follow `references\u002Falert-subscriptions.md` as the authoritative\nplaybook for subscription CRUD. VLM real-time mode only; refuse with the\ncanonical refusal text on CV.\n\n---\n\n## Workflow E — Slack Notifications (VLM real-time mode only)\n\nUse when the user **explicitly mentions Slack or the webhook relay** (start\u002Fstop webhook server, check status\u002Fhealth, send a test message, set Slack channel\u002Ftoken). The word `notify` alone is **not** enough.\n\n> **`alert-notify` (port 9090) ≠ `vss-alert-bridge` (`\u002Fapi\u002Fv1\u002Frealtime`).**\n> Do NOT touch `vss-alert-bridge` for Slack ops.\n\nRoutes here: \"Set up Slack notifications\", \"Check if alert-notify is running\", \"Send a test alert to Slack\". Does **not** route here: \"Notify me when someone enters the zone\" (→ D\u002FB), \"Alert and notify on my phone\" (ambiguous — ask).\n\nLoad and follow `references\u002Falert-notify.md`. Code lives in `scripts\u002Falert-notify\u002F`. VLM real-time mode only.\n\n---\n\n## Workflow C — Query \u002F List Alerts (works on either mode)\n\nBoth CV- and VLM-generated alerts land in Elasticsearch and are\nqueryable via the agent's `video_analytics_mcp.get_incidents` tool. POST\nnatural-language requests to `$AGENT\u002Fgenerate` — \"Show me recent alerts\nfor sensor X\", \"List confirmed alerts from the last hour\", \"Show\ncollision incidents from Camera_02 between `\u003CISO>` and `\u003CISO>`\".\n\n**Casual phrasings route here too.** Questions like \"Any alerts so far\ntoday?\", \"Any alerts today?\", \"What's been triggered?\", or \"Anything\ndetected lately?\" are incident queries — issue a `POST \u002Fgenerate` (e.g.\n`{\"input_message\": \"List alerts from today\"}`) and summarize the result.\n**Never answer these from memory and never reply \"no alerts\" without\nrunning the query.** A bare \"alerts\" question is *always* an incident\nlookup (Workflow C), not a subscription-rule listing (Workflow D).\n\n> **Do NOT list subscription rules for an incident query.** The **bare**\n> `GET \u002Fapi\u002Fv1\u002Frealtime` (no `\u002Fincidents`) lists *rules* (Workflow D) and\n> is wrong for \"what happened\" — never call\u002Fprobe it or load the Workflow\n> D playbook for an incident query.\n>\n> **Empty result is a valid answer.** If no incidents match (e.g. a\n> freshly deployed system with no activity yet), report that **none were\n> found \u002F the count is 0** for the requested period and STOP — do not fall\n> back to listing rules or hunting other endpoints.\n\nFor\nricher \u002F non-natural-language filtering (sensor-level, time-series,\ncounts) use the **`vss-query-analytics` skill** (VA-MCP on port 9901).\n\n### Verdict interpretation & CV verifier prompts (CV mode only)\n\nCV alerts carry a VLM verification verdict (`confirmed` \u002F `rejected` \u002F\n`unverified`); VLM real-time incidents have no separate verdict (the\ntrigger is itself a Yes\u002FNo VLM answer). CV-path verifier prompts are\ncustomizable via `alert_type_config.json` (restart `alert-bridge` to\napply). See `references\u002Fcv-verifier-prompts.md` for the verdict table,\nfield meanings, and the prompt-customization rules.\n\n---\n\n## Cross-Skill Links\n\n| Task | Skill |\n|---|---|\n| Deploy, redeploy, or switch alert mode | **`vss-deploy-profile`** — `-p alerts -m {verification,real-time}` |\n| Add an RTSP\u002FIP camera, list sensors, snapshots, clips | **`vss-manage-video-io-storage`** (Section 6 for Add Sensor) |\n| Time-range incident \u002F occupancy \u002F PPE metrics from Elasticsearch | **`vss-query-analytics`** (VA-MCP :9901) |\n| Detailed incident report from an alert | **`vss-generate-video-report`** |\n| Subscriptions \u002F Slack sub-workflows | `references\u002Falert-subscriptions.md`, `references\u002Falert-notify.md` (code in `scripts\u002Falert-notify\u002F`) |\n\n---\n\n## Gotchas\n\n- **`alert-notify` (port 9090) ≠ `vss-alert-bridge`.** Slack ops → Workflow E (`alert-notify`); never route Slack to `vss-alert-bridge`'s `\u002Fapi\u002Fv1\u002Frealtime`.\n- **Workflow scope by mode:** A is CV-only; B and C work on either mode; D and E are VLM real-time only (refuse on CV with the canonical text).\n- **Don't use `vss-rtvi-vlm` as a mode signal** — it runs in both modes. Use `vss-behavior-analytics` (CV-only) or the `MODE` env var.\n- **A mode switch tears down the current deployment** — running VLM streams and un-persisted CV alert state are lost.\n- **Always go through `$AGENT\u002Fgenerate`** — never call `rtvi-vlm` directly. The VLM trigger is a `\"yes\"`\u002F`\"true\"` token match (case-insensitive); `rtvi_prompt_gen` enforces the Yes\u002FNo pattern, so don't hand-craft prompts that break it.\n- **Sensor must already be in VIOS** for either mode (use `vss-manage-video-io-storage` for RTSP-only inputs).\n\nbump:1\n","## Purpose\n\nOperate the VSS alert pipeline (mode detection, Alert-Bridge subscriptions, Slack notifications, queries, camera onboarding, verifier-prompt customization).\n\n## Prerequisites\n\n- Active VSS deployment reachable on `$HOST_IP` (see `vss-deploy-profile` and `references\u002F`).\n- NGC credentials in `$NGC_CLI_API_KEY` and `$NVIDIA_API_KEY` for any image pulls.\n- `curl`, `jq`, and Docker available on the caller.\n\n## Instructions\n\nFollow the routing tables and step-by-step workflows below. Each section that ends in *workflow*, *quick start*, or *flow* is intended to be executed top-to-bottom. Detailed reference material lives in `references\u002F` and helper scripts live in `scripts\u002F` — call them via `run_script` when the skill points to a script by name.\n\n## Examples\n\nRunnable end-to-end scenarios live under `evals\u002F` (each `*.json` manifest); inline `curl` blocks appear in each workflow below. Replay with `nv-base validate \u003Cthis-skill-dir> --agent-eval`.\n\n## Limitations\n\nRequires the matching VSS profile\u002Fmicroservice deployed and reachable. NGC-hosted models\u002FNIMs are subject to rate-limits, GPU-memory needs, and license terms; concurrency and storage limits depend on host hardware and the profile's compose file.\n\n## Troubleshooting\n\n- **Connection refused** → microservice not running: probe `\u002Fdocs` or `\u002Fhealth`, redeploy via `vss-deploy-profile`.\n- **HTTP 401\u002F403 on NGC pulls** → missing\u002Fexpired `NGC_CLI_API_KEY`: `docker login nvcr.io` and re-export the key.\n- **OOM \u002F model load failure** → insufficient GPU memory: use a smaller variant or `docker compose down` to free GPUs.\n\n# VSS Alert Management\n\nThe alerts profile runs in one of two modes (chosen at `\u002Fvss-deploy-profile -p alerts -m {verification,real-time}`) — see **The Two Modes** table below. This skill routes by **deployed mode + user intent** (monitoring vs subscription CRUD vs Slack webhook).\n\n## When to Use\n\n- Start\u002Fstop a real-time alert on a sensor (\"Start real-time alert for boxes dropped on warehouse_sample\")\n- Create\u002Flist\u002Fstop realtime subscription rules on Alert Bridge\n- Set up or manage Slack incident notifications\n- List or query detected incidents \u002F alerts; check verdicts (confirmed\u002Frejected\u002Funverified)\n- Add a new camera to the alerts pipeline; customize VLM-verifier prompts (CV mode)\n\n---\n\n## Deployment prerequisite\n\nRequires the VSS **alerts** profile on `$HOST_IP` in either `verification` (CV) or `real-time` (VLM) mode.\n\n```bash\n# Either vss-rtvi-cv (CV mode) OR vss-rtvi-vlm (VLM mode) must be present.\ncurl -sf --max-time 5 \"http:\u002F\u002F${HOST_IP}:8000\u002Fdocs\" >\u002Fdev\u002Fnull \\\n  && docker ps --format '{{.Names}}' \\\n     | grep -qE '^(vss-rtvi-cv|vss-rtvi-vlm)$'\n```\n\nIf the probe fails, ask which mode to deploy and hand off to `\u002Fvss-deploy-profile -p alerts -m \u003Cmode>` (decline → stop; pre-authorized autonomous deploy → run directly with `verification` by default). If it passes, detect the mode per Step 1.\n\n---\n\n## The Two Modes (Deploy-Time Choice)\n\n| Mode | Deploy flag | Env (`.env`) | What runs | What is available |\n|---|---|---|---|---|\n| **CV (verification)** | `-m verification` | `MODE=2d_cv` | RT-CV (Grounding DINO) + Behavior Analytics + `alert-bridge` VLM verifier + **`rtvi-vlm`** | **Both** static CV pipeline (Workflow A) **and** dynamic VLM real-time alerts (Workflows B\u002FD) |\n| **VLM (real-time)** | `-m real-time` | `MODE=2d_vlm` | `alert-bridge` + `rtvi-vlm` | **Only** dynamic VLM real-time alerts (Workflows B\u002FD) and `alert-bridge` backend. No static CV pipeline. |\n\n**Switching modes** uses the `vss-deploy-profile` teardown + deploy flow with the other `-m` flag (VLM → CV adds the CV pipeline; CV → VLM tears it down). `rtvi-vlm` runs in both modes.\n\n---\n\n## Step 1 — Detect the Currently Deployed Mode\n\nBefore running any alert workflow, check which mode is live. Use **CV-only** containers as the signal — `vss-rtvi-vlm` is **not** a reliable mode signal because it runs in both modes.\n\n```bash\n# CV verification mode (vss-behavior-analytics + vss-rtvi-cv are CV-only)\ndocker ps --format '{{.Names}}' | grep -qx vss-behavior-analytics && echo \"mode=CV\"\n\n# VLM real-time mode (no CV pipeline; vss-rtvi-vlm still runs)\ndocker ps --format '{{.Names}}' | grep -qx vss-behavior-analytics || \\\n  docker ps --format '{{.Names}}' | grep -qx vss-rtvi-vlm && echo \"mode=VLM\"\n```\n\nIf `vss-behavior-analytics` is present → **CV mode** (which also has `vss-rtvi-vlm`).\nIf only `vss-rtvi-vlm` is present (and no CV pipeline) → **VLM mode**.\nIf neither matches, the alerts profile is not deployed — direct the user to the `vss-deploy-profile` skill.\n\nAlternative signal (preferred when `docker ps` isn't accessible): check the profile's `generated.env`:\n\n```bash\ngrep -E '^MODE=' deploy\u002Fdocker\u002Fdeveloper-profiles\u002Fdev-profile-alerts\u002Fgenerated.env\n# MODE=2d_cv   → CV mode (full superset)\n# MODE=2d_vlm  → VLM real-time mode (vss-rtvi-vlm only; no vss-rtvi-cv)\n```\n\n---\n\n## Step 2 — Route by Deployed Mode\n\n| Deployed mode | User asks about… | Action |\n|---|---|---|\n| **VLM real-time** | Slack webhook setup\u002Fstatus\u002Ftest\u002Fstop | **Workflow E** — `references\u002Falert-notify.md` |\n| **VLM real-time** | rule CRUD, or a realtime alert on a sensor with a detection condition, or stop\u002Fdelete a named alert (by `alert_type`\u002Fcondition or rule ID) | **Workflow D** — `references\u002Falert-subscriptions.md` (incl. two-step stop\u002Fconfirm) |\n| **CV verification** | subscription\u002Frule CRUD or Slack\u002Fnotification setup | Refuse — see canonical refusal text below |\n| **CV or VLM** | generic start\u002Fstop monitoring **without** a detection condition | **Workflow B (VLM)** — call the VSS Agent; `rtvi-vlm` runs in both modes |\n| **CV or VLM** | incident lookup \u002F *what happened* (recent alerts, time-range, casual \"any alerts today?\") | **Workflow C (Query)** — works on both; **always run the query, never answer from memory** |\n| **CV** | static CV alert onboarding \u002F verdict-prompt customization | **Workflow A (CV)** — onboard RTSP via `vss-manage-video-io-storage`; pipeline auto-picks it up |\n| **VLM** | a CV \u002F behavior-analytics \u002F PPE-rule alert needing the static CV pipeline | **Redeployment required** — confirm first, then `vss-deploy-profile -m verification` |\n\n**Always confirm before triggering a redeploy.** A mode switch stops all currently-running monitoring and restarts services.\n\n### Intent precedence (first match wins)\n\n1. **Workflow E (Slack)** — Slack-specific keywords (`slack`, `webhook` + `slack`, `bot token`, `slack channel`). `notify` alone is **not** sufficient.\n2. **Workflow D (Subscriptions)** — sensor **plus** a detection condition, rule CRUD keywords (`rule`, `subscription`, rule ID), **or stopping\u002Fdeleting a named alert by type\u002Fcondition** (\"stop the PPE alert\", \"delete the collision rule\"). A named `alert_type`\u002Fcondition = an existing **rule** → D's two-step stop protocol (`GET \u002Fapi\u002Fv1\u002Frealtime` → yes\u002Fno confirm → delete), never Workflow B.\n3. **Workflow B (VLM monitoring)** — generic start\u002Fstop on a sensor with **no** detection condition and **no** alert-type qualifier (\"start\u002Fstop real-time alert for sensor X\"). A stop that names a type (\"stop the **PPE** alert\") is a rule stop → Workflow D.\n4. **Workflow C (Query)** — incident lookup \u002F *what happened* (`show\u002Flist incidents`, `recent alerts`, time-range queries, **and casual \"any alerts…?\" \u002F \"any alerts so far today?\" \u002F \"what's been triggered?\" phrasings**). Bare `alerts` (without `rule`\u002F`subscription`\u002F`active rules`) means **incidents** → Workflow C, never Workflow D.\n5. **Workflow A (CV)** — CV deployment handling for anything not matched above.\n\n> **`alerts` vs `alert rules` (C vs D) — pick exactly one, never both:**\n> *what happened \u002F has been triggered* (incidents) → **Workflow C**\n> (`POST \u002Fgenerate`). *What\n> rules\u002Fsubscriptions are configured or active* → **Workflow D** (the\n> **bare** `GET \u002Fapi\u002Fv1\u002Frealtime`, no `\u002Fincidents`). Bare `alerts` =\n> incidents (C); `alert rules` \u002F `subscriptions` \u002F `active rules` =\n> inventory (D). Never answer from memory; run the one correct call —\n> full endpoint detail in Workflow C below.\n\n**Disambiguation (B vs D):** if a sensor is named with start\u002Fmonitor language but the detection condition is unclear, ask:\n> *\"Do you want me to (a) create a persistent alert rule on Alert Bridge that keeps running until you delete it, or (b) start a one-time monitoring session via the VSS Agent?\"*\n\n**Stop routing (B vs D):** \"Stop the **&lt;type&gt;** alert\" (names an `alert_type`\u002Fcondition like PPE, collision, fire) = stop a **subscription rule** → **Workflow D** (find via `GET \u002Fapi\u002Fv1\u002Frealtime`, then the two-step stop\u002Fconfirm protocol in `references\u002Falert-subscriptions.md`; do **not** call `POST \u002Fgenerate`). A bare \"stop real-time alert \u002F stop monitoring on &lt;sensor&gt;\" with **no** type qualifier = Workflow B.\n\nIf a prompt mixes workflows (\"start monitoring and send to Slack\"), ask one clarifying question to split execution order.\n\n### CV-mode refusal text for D and E intents\n\nWhen the deployed mode is CV verification and the user asks for an alert-subscription or Slack\u002Fnotification intent, refuse with this message verbatim:\n\n> \"Alert subscriptions and Slack notifications are only supported in VLM real-time mode. Your current deployment is `\u003CCV verification | not deployed>`. To use these features, redeploy with `\u002Fvss-deploy-profile -p alerts -m real-time` (note: switching tears down current CV monitoring).\"\n\nNo auto-redeploy. The user decides whether to switch modes.\n\n---\n\n## Prereq for Either Mode: Sensor Must Be in VIOS\n\nBoth modes require the camera registered in VIOS first (via the `vss-manage-video-io-storage` skill):\n\n- RTSP URL \u002F IP camera → add it with `POST \u002Fsensor\u002Fadd` (that skill's Section 6); record the `sensorId` \u002F name.\n- Named existing sensor → confirm it appears in `GET \u002Fsensor\u002Flist` before proceeding.\n\nOn **CV**, adding the RTSP is the *entire* onboarding step (pipeline auto-picks it up). On **VLM**, it is a prerequisite to Workflow B.\n\n---\n\n## The Agent `\u002Fgenerate` Endpoint\n\nAll VLM-flow actions and all query actions go through the VSS Agent's natural-language endpoint:\n\n```bash\nAGENT=\"http:\u002F\u002F\u003CAGENT_ENDPOINT>\"   # default http:\u002F\u002Flocalhost:8000 on the alerts profile\n\ncurl -s -X POST \"$AGENT\u002Fgenerate\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"input_message\": \"\u003Cnatural-language request>\"}' | jq .\n```\n\n**Endpoint resolution:** use the agent endpoint from the active VSS deployment context. If unavailable, ask the user. Do not discover via filesystem.\n\n**Availability check:** `curl -sf --connect-timeout 5 \"$AGENT\u002Fdocs\"`.\n\nDo not call the `rtvi-vlm` microservice endpoints directly — always go through the agent. The agent internally dispatches to `rtvi_vlm_alert`, `rtvi_prompt_gen`, and `video_analytics_mcp.get_incidents`.\n\n---\n\n## Workflow A — CV Mode (`-m verification` \u002F `MODE=2d_cv`)\n\nCV alerts are **deployment-driven, not request-driven** — there is no agent\ncall to \"create\" one.\n\n1. Check if the sensor is in VIOS via `vss-manage-video-io-storage`'s `GET \u002Fsensor\u002Flist` (idempotent — don't blindly `POST \u002Fsensor\u002Fadd`).\n2. If missing, onboard via that skill's `POST \u002Fsensor\u002Fadd`. The CV pipeline auto-picks up the stream once registered and online.\n3. Confirm online: `curl -s \"http:\u002F\u002F\u003CVST_ENDPOINT>\u002Fvst\u002Fapi\u002Fv1\u002Fsensor\u002F\u003CsensorId>\u002Fstatus\" | jq .`\n4. Alerts land in Elasticsearch (Behavior Analytics → `alert-bridge` verification per `alert_type_config.json`). Query with **Workflow C**.\n\nA static-CV-pipeline alert on a VLM-only deployment is a mode mismatch — see the routing table above.\n\n---\n\n## Workflow B — VLM Real-time Monitoring (CV or VLM mode)\n\nGeneric start \u002F stop intents through the VSS Agent for a named sensor\nwithout a detection condition (if a condition is present, route to\nWorkflow D). `rtvi-vlm` runs in both modes.\n\n```bash\n# start: input_message = \"Start real-time alert for sensor \u003Cid>\"\n# stop:  input_message = \"Stop real-time alert for sensor \u003Cid>\"\ncurl -s -X POST \"$AGENT\u002Fgenerate\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"input_message\": \"\u003Cstart|stop> real-time alert for sensor \u003Cid>\"}' | jq .\n```\n\nUnder the hood: `rtvi_prompt_gen` → `rtvi_vlm_alert action=\"start\"`.\nEvery chunk is captioned; a chunk whose VLM response contains `yes`\u002F`true`\n(case-insensitive) publishes an incident to `mdx-vlm-incidents`. Prompts\nmust force a Yes\u002FNo answer. A static-CV-pipeline request on a VLM-only\ndeployment is a mode mismatch — see the routing table.\n\n---\n\n## Workflow D — Alert Subscriptions (VLM real-time mode only)\n\nCreate \u002F list \u002F delete persistent realtime alert rules on Alert Bridge.\nRoute here when the prompt has rule keywords (`rule`, `subscription`, a rule\nID) **or** when it pairs a specific sensor with a specific detection\ncondition (e.g. \"Set up a realtime alert on warehouse-dock-1 for PPE\nviolations\", \"Watch sensor entrance-1 for tailgating\", \"Stop rule\n496aebd1-…\").\n\n**Not here:** generic start\u002Fstop without a condition (→ Workflow B) or Slack\noperations (→ Workflow E).\n\nLoad and follow `references\u002Falert-subscriptions.md` as the authoritative\nplaybook for subscription CRUD. VLM real-time mode only; refuse with the\ncanonical refusal text on CV.\n\n---\n\n## Workflow E — Slack Notifications (VLM real-time mode only)\n\nUse when the user **explicitly mentions Slack or the webhook relay** (start\u002Fstop webhook server, check status\u002Fhealth, send a test message, set Slack channel\u002Ftoken). The word `notify` alone is **not** enough.\n\n> **`alert-notify` (port 9090) ≠ `vss-alert-bridge` (`\u002Fapi\u002Fv1\u002Frealtime`).**\n> Do NOT touch `vss-alert-bridge` for Slack ops.\n\nRoutes here: \"Set up Slack notifications\", \"Check if alert-notify is running\", \"Send a test alert to Slack\". Does **not** route here: \"Notify me when someone enters the zone\" (→ D\u002FB), \"Alert and notify on my phone\" (ambiguous — ask).\n\nLoad and follow `references\u002Falert-notify.md`. Code lives in `scripts\u002Falert-notify\u002F`. VLM real-time mode only.\n\n---\n\n## Workflow C — Query \u002F List Alerts (works on either mode)\n\nBoth CV- and VLM-generated alerts land in Elasticsearch and are\nqueryable via the agent's `video_analytics_mcp.get_incidents` tool. POST\nnatural-language requests to `$AGENT\u002Fgenerate` — \"Show me recent alerts\nfor sensor X\", \"List confirmed alerts from the last hour\", \"Show\ncollision incidents from Camera_02 between `\u003CISO>` and `\u003CISO>`\".\n\n**Casual phrasings route here too.** Questions like \"Any alerts so far\ntoday?\", \"Any alerts today?\", \"What's been triggered?\", or \"Anything\ndetected lately?\" are incident queries — issue a `POST \u002Fgenerate` (e.g.\n`{\"input_message\": \"List alerts from today\"}`) and summarize the result.\n**Never answer these from memory and never reply \"no alerts\" without\nrunning the query.** A bare \"alerts\" question is *always* an incident\nlookup (Workflow C), not a subscription-rule listing (Workflow D).\n\n> **Do NOT list subscription rules for an incident query.** The **bare**\n> `GET \u002Fapi\u002Fv1\u002Frealtime` (no `\u002Fincidents`) lists *rules* (Workflow D) and\n> is wrong for \"what happened\" — never call\u002Fprobe it or load the Workflow\n> D playbook for an incident query.\n>\n> **Empty result is a valid answer.** If no incidents match (e.g. a\n> freshly deployed system with no activity yet), report that **none were\n> found \u002F the count is 0** for the requested period and STOP — do not fall\n> back to listing rules or hunting other endpoints.\n\nFor\nricher \u002F non-natural-language filtering (sensor-level, time-series,\ncounts) use the **`vss-query-analytics` skill** (VA-MCP on port 9901).\n\n### Verdict interpretation & CV verifier prompts (CV mode only)\n\nCV alerts carry a VLM verification verdict (`confirmed` \u002F `rejected` \u002F\n`unverified`); VLM real-time incidents have no separate verdict (the\ntrigger is itself a Yes\u002FNo VLM answer). CV-path verifier prompts are\ncustomizable via `alert_type_config.json` (restart `alert-bridge` to\napply). See `references\u002Fcv-verifier-prompts.md` for the verdict table,\nfield meanings, and the prompt-customization rules.\n\n---\n\n## Cross-Skill Links\n\n| Task | Skill |\n|---|---|\n| Deploy, redeploy, or switch alert mode | **`vss-deploy-profile`** — `-p alerts -m {verification,real-time}` |\n| Add an RTSP\u002FIP camera, list sensors, snapshots, clips | **`vss-manage-video-io-storage`** (Section 6 for Add Sensor) |\n| Time-range incident \u002F occupancy \u002F PPE metrics from Elasticsearch | **`vss-query-analytics`** (VA-MCP :9901) |\n| Detailed incident report from an alert | **`vss-generate-video-report`** |\n| Subscriptions \u002F Slack sub-workflows | `references\u002Falert-subscriptions.md`, `references\u002Falert-notify.md` (code in `scripts\u002Falert-notify\u002F`) |\n\n---\n\n## Gotchas\n\n- **`alert-notify` (port 9090) ≠ `vss-alert-bridge`.** Slack ops → Workflow E (`alert-notify`); never route Slack to `vss-alert-bridge`'s `\u002Fapi\u002Fv1\u002Frealtime`.\n- **Workflow scope by mode:** A is CV-only; B and C work on either mode; D and E are VLM real-time only (refuse on CV with the canonical text).\n- **Don't use `vss-rtvi-vlm` as a mode signal** — it runs in both modes. Use `vss-behavior-analytics` (CV-only) or the `MODE` env var.\n- **A mode switch tears down the current deployment** — running VLM streams and un-persisted CV alert state are lost.\n- **Always go through `$AGENT\u002Fgenerate`** — never call `rtvi-vlm` directly. The VLM trigger is a `\"yes\"`\u002F`\"true\"` token match (case-insensitive); `rtvi_prompt_gen` enforces the Yes\u002FNo pattern, so don't hand-craft prompts that break it.\n- **Sensor must already be in VIOS** for either mode (use `vss-manage-video-io-storage` for RTSP-only inputs).\n\nbump:1\n",{"name":5,"license":15,"metadata":24,"description":7},{"tags":25,"author":26,"version":27,"github-url":28},"nvidia blueprint operational","NVIDIA Video Search and Summarization Team \u003Cvss-team@nvidia.com>","3.2.0","https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization","main","86cc27ffd16af6cb85948f1155578e6f3f61cc4c","skillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn","https:\u002F\u002Fgithub.com\u002FSolizardking","https:\u002F\u002Fmusebook.trade","Got a mile high and never came down","2026-10-08 11:52:53",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":49},[39,42,45],{"tool":40,"command":41},"npx","npx skills add Solizardking\u002Ftrain2earn --skill vss-manage-alerts",{"tool":43,"command":44},"bunx","bunx skills add Solizardking\u002Ftrain2earn --skill vss-manage-alerts",{"tool":46,"command":47},"pnpm","pnpm dlx skills add Solizardking\u002Ftrain2earn --skill vss-manage-alerts","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002FSKILL.md",true,[51,57,61,65,69,73,79,83,87,91,95,99,103],{"path":52,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":55,"sourceHtmlUrl":56},"BENCHMARK.md","REFERENCE","参考文档",3479,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002FBENCHMARK.md",{"path":58,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":59,"sourceHtmlUrl":60},"metadata.json",369,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fmetadata.json",{"path":62,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":63,"sourceHtmlUrl":64},"references\u002Falert-notify.md",16768,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Freferences\u002Falert-notify.md",{"path":66,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":67,"sourceHtmlUrl":68},"references\u002Falert-subscriptions.md",21713,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Freferences\u002Falert-subscriptions.md",{"path":70,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":71,"sourceHtmlUrl":72},"references\u002Fcv-verifier-prompts.md",1690,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Freferences\u002Fcv-verifier-prompts.md",{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"scripts\u002Falert-notify\u002Fincident_utils.py","SCRIPT","脚本",2374,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fscripts\u002Falert-notify\u002Fincident_utils.py",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"scripts\u002Falert-notify\u002Fnotifier_base.py",2413,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fscripts\u002Falert-notify\u002Fnotifier_base.py",{"path":84,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":85,"sourceHtmlUrl":86},"scripts\u002Falert-notify\u002Fopen_claw_dashboard_notifier.py",11507,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fscripts\u002Falert-notify\u002Fopen_claw_dashboard_notifier.py",{"path":88,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":89,"sourceHtmlUrl":90},"scripts\u002Falert-notify\u002Frequirements.txt",103,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fscripts\u002Falert-notify\u002Frequirements.txt",{"path":92,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":93,"sourceHtmlUrl":94},"scripts\u002Falert-notify\u002Fserver.py",15838,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fscripts\u002Falert-notify\u002Fserver.py",{"path":96,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":97,"sourceHtmlUrl":98},"scripts\u002Falert-notify\u002Fslack_notifier.py",8348,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fscripts\u002Falert-notify\u002Fslack_notifier.py",{"path":100,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":101,"sourceHtmlUrl":102},"skill-card.md",4091,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fskill-card.md",{"path":104,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":105,"sourceHtmlUrl":106},"verification.json",2960,"https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fpublic\u002Fapi\u002Fskills\u002Fnvidia\u002Fvss-manage-alerts\u002Fverification.json",[108,116,124,132,139,147],{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":112,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":19},"01M78B94RSCAKMH1QS79VE6DG9","testing","For testing with Light Protocol programs and clients on localnet, devnet, and mainnet validation.","MIT","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Ftesting\u002FSKILL.md",[],[],{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":112,"licenseFileUrl":120,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":19},"01M78B81BKY8RX12HETPG8YKWK","qedgen","Formally verify programs by writing Lean 4 proofs. Trigger this skill whenever the user wants to formally verify code, generate Lean 4 proofs, prove properties about algorithms or smart contracts, verify invariants, convert program logic into formal specifications, or anything involving Lean 4 and formal verification. Also trigger when the user mentions \"qedgen\", \"lean proof\", \"formal proof\", \"verify my code\", \"prove correctness\", \"formal verification\", or wants mathematical guarantees about their implementation.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Fsolana-formal-verification\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Fsolana-formal-verification\u002FSKILL.md",[],[],{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":112,"licenseFileUrl":128,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":19},"01M78B7Q7C5K54E01DN83A60KG","solana-dev","Use when user asks to \"build a Solana dapp\", \"write an Anchor program\", \"create a token\", \"debug Solana errors\", \"set up wallet connection\", \"test my Solana program\", \"deploy to devnet\", or \"explain Solana concepts\" (rent, accounts, PDAs, CPIs, etc.). Also use for quick on-chain lookups via public RPC + curl — \"what's the balance of \u003Cwallet>\", \"look up transaction \u003Csig>\", \"token balance for \u003Caccount>\", \"check this address on mainnet\u002Fdevnet\". End-to-end Solana development playbook covering wallet connection, Anchor\u002FPinocchio programs, Codama client generation, LiteSVM\u002FMollusk\u002FSurfpool testing, security checklists, and JSON-RPC curl lookups against public clusters. Integrates with the Solana MCP server for live documentation search. Prefers framework-kit (@solana\u002Fclient + @solana\u002Freact-hooks) for UI, wallet-standard-first connection (incl. ConnectorKit), @solana\u002Fkit for client\u002FRPC code, and @solana\u002Fweb3-compat for legacy boundaries.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Fsolana-dev\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Fsolana-dev\u002FSKILL.md",[],[],{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":112,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":19},"01M78B7HXD6N6GWKSVRQ8F6Q31","solana-common-errors","Diagnose and fix common Solana development errors — GLIBC mismatches, Anchor version conflicts, cargo build-sbf \u002F platform-tools failures, LiteSVM issues, edition2024 crate pins, RPC airdrops, and Anchor 0.29→0.32 migrations. Use when builds fail, Anchor CLI won't install, or CI breaks on Debian\u002FUbuntu.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Fsolana-common-errors\u002FSKILL.md",[],[],{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":143,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":19},"01M78B6T7YSYWQ0N4DP40QDXEZ","skill-creator","Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Fskill-creator\u002Flicense.txt","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Fskill-creator\u002FSKILL.md",[],[],{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":112,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":19},"01M78B1VFT9X5AND7AE1HZPZGF","phantom-wallet-mcp","Execute wallet operations through the Phantom MCP server. Use when the user wants to interact with their Phantom wallet directly — get addresses, transfer SOL or SPL tokens, buy\u002Fswap tokens, sign transactions, and sign messages across Solana, Ethereum, Bitcoin, and Sui. Requires the @phantom\u002Fmcp-server to be configured as an MCP server.","https:\u002F\u002Fgithub.com\u002FSolizardking\u002Ftrain2earn\u002Fblob\u002Fmain\u002Fskillhub\u002Fskills\u002Fphantom-wallet-mcp\u002FSKILL.md",[],[]]