workspace/skills/claroty-risk-triage/SKILL.md
Triage Claroty xDome alerts and vulnerabilities, compute blast radius, correlate with NVD CVE data, and drive ITSM-gated workflow actions (acknowledge, label, assign, set relevance).
npx skillsauth add automateyournetwork/netclaw claroty-risk-triageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Unified alert + vulnerability triage for OT / IoT / IoMT environments via Claroty xDome. Alerts and vulnerabilities are bundled into one skill because real incident response crosses the boundary constantly — operators investigate an alert, pivot to the affected device's CVE list, and back to the alert label.
ise-incident-response for endpoint quarantine or to servicenow-change-workflow for a remediation CRclaroty-mcppython3 -u mcp-servers/claroty-mcp/claroty_mcp_server.py (stdio transport)CLAROTY_API_TOKENCHG\d+ CR; bypassed in NETCLAW_LAB_MODE=true| Tool | Parameters | What It Does |
|------|------------|--------------|
| list_alerts | severity?, status?, site_id?, assignee?, limit?, offset?, max_items? | List security alerts with filters |
| get_alert_with_devices | alert_id, device_limit? | Alert + affected devices in one call |
| list_vulnerabilities | severity?, cvss_min?, cve_contains?, limit?, offset?, max_items? | List CVE-aligned findings |
| get_vulnerable_devices | vulnerability_id, limit?, offset? | Devices affected by one CVE (blast radius) |
| acknowledge_alert | alert_id, resolution, cr_number, note? | Write (ITSM-gated) — set resolution state |
| set_vulnerability_relevance | device_id, vulnerability_id, relevant, cr_number, note? | Write (ITSM-gated) — suppress / re-enable CVE on a device |
| label_alerts | alert_ids, labels, cr_number, replace? | Write (ITSM-gated) — apply / replace labels |
| assign_alerts | alert_ids, assignee, cr_number, note? | Write (ITSM-gated) — assign alerts to a user / queue |
Compose with:
nvd_get_cve from the nvd-cve skill for full CVSS vector decompositionise-incident-response skill for endpoint quarantineservicenow-change-workflow skill to open a remediation CR if the alert demands a config change"List all open high-severity alerts at site warehouse-east"
Calls list_alerts(severity="high", status="open", site_id="warehouse-east"). Returns severity-sorted alert table.
"Show me alert a1b2c3 and every device it touches"
Calls get_alert_with_devices(alert_id="a1b2c3") and renders the alert metadata plus affected devices. From there, pivot to list_vulnerabilities filtered by site to understand combined risk.
"What devices are vulnerable to CVE-2024-12345? Correlate with NVD for full context."
list_vulnerabilities(cve_contains="2024-12345") → xDome finding ID.get_vulnerable_devices(vulnerability_id="<id>") → affected device list.nvd_get_cve(cve_id="CVE-2024-12345") (nvd-cve skill) → CVSS vector, references, fix availability.list_devices with cross-reference to Nautobot to confirm criticality."Mark CVE-2024-12345 as not-relevant for device 7a2c (mitigated by network ACL) under CHG0013001"
Calls set_vulnerability_relevance(device_id="7a2c...", vulnerability_id="<id>", relevant=False, cr_number="CHG0013001", note="mitigated by network ACL").
"Label alerts [a1, a2, a3] as 'ransomware-candidate' and assign to alice under CHG0013002"
label_alerts(alert_ids=[...], labels=["ransomware-candidate"], cr_number="CHG0013002").assign_alerts(alert_ids=[...], assignee="alice", cr_number="CHG0013002")."Acknowledge alert a1b2c3 as resolved with a note pointing at CHG0013001's evidence"
Calls acknowledge_alert(alert_id="a1b2c3", resolution="resolved", cr_number="CHG0013001", note="...").
Identical to other Claroty write tools: CHG\d+ format, ServiceNow "Implement" state check (skipped in lab mode). Rejected gate returns {"itsm_gate": {...}, "applied": false} and the xDome write is not made.
If a Claroty alert resolves to "compromised endpoint", do NOT call ISE quarantine from inside this skill. Hand off to ise-incident-response per Principle XIV (human-in-the-loop for external actions). That skill enforces the human decision point before any quarantine action.
If a write tool returns applied: false and an error object with status_code: 403, the ITSM gate passed and the body was correctly built — xDome rejected at RBAC. The token in CLAROTY_API_TOKEN lacks write scope on the relevant resource (alerts for acknowledge_alert/label_alerts/assign_alerts; vulnerabilities for set_vulnerability_relevance). Don't retry — escalate to whoever provisions xDome API tokens. The wrapper surfaces xDome's response body verbatim so you can see exactly which scope is missing.
tools
Federate your NetClaw with other NetClaw operators over the BGP mesh — exchange capability inventories and ask your claw what a peer can do. (US1; remote invocation and chat land in later phases.)
tools
3D network topology visualization and interactive digital twin in Unreal Engine 5.8 via the built-in UE5 MCP server.
testing
Human-in-the-loop escalation via HumanRail — route low-confidence agent decisions, pre-destructive operation approvals, and ambiguous incident tickets to real human engineers. Human answers are verified and returned as structured output. Workers are paid via Lightning Network. Use when the agent is uncertain, when a destructive change needs explicit human sign-off beyond a ServiceNow CR, or when an ambiguous ticket requires human triage before automated handling.
testing
IPv4 and IPv6 subnet calculator - CIDR breakdown, usable hosts, previous/next subnets, address classification, VLSM planning, and dual-stack analysis. Use when calculating subnets, figuring out how many hosts fit in a prefix, planning IP addressing, getting wildcard masks for ACLs, or checking if two IPs are in the same subnet.