sentinel-one/ai-siem/sdl-solutions

Claude Code and agent skill by sentinel-one/ai-siem

Trust tier 3
  • community
  • ext:[{"type":"hook","description":"Pre/post lifecycle hooks"}]
Source check pending

Checking that the SKILL.md file is still in the repository.

Deploy packaged, repeatable SentinelOne Singularity Data Lake (SDL) solutions into a site from one prompt. Catalog: (1) data source onboarding (raw to OCSF, enrichment, dashboard, MITRE detections, threat response); (2) asset enrichment; (3) UEBA anomaly detection; (4) per-device ingest health; (5) detection exclusions; (6) Risk-Based Alerting; (7) Detection as Code (rules as TOML in Git, synced by CI); (8) alert noise reduction; (9) custom detections with MITRE mapping (watchdog alert carrying…

Install

npx vskill@latest install sentinel-one/ai-siem/sdl-solutions

Semi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard

SKILL.md

SentinelOne SDL Solutions

<!-- CONFIG-FILE-ADDRESSING v1 -->

SDL config files: address by `udoId`, and do not trust a REST listing.
REST listFiles / getFile cannot see udoId-addressed /dashboards/ files, so getFile
returns 404 on a dashboard the console is displaying and the listing under-reports (measured on
one tenant: REST 8, GraphQL 17, console 48 files). **If a listing disagrees with what the UI
shows, the listing is wrong until proven otherwise**, change read path before concluding the
object is missing or the token lacks scope. Use the GraphQL configFiles / configFile surface.
A name-addressed addConfigFile to /dashboards/ creates a duplicate instead of updating;
address dashboards by udoId with expectedVersion. content is HJSON, not JSON. S1-Scope
changes which files exist as far as the caller can tell.

This skill packages repeatable SDL solutions and deploys them into a specific customer environment from a short set of prompts. It is an orchestration layer: it does not reimplement PowerQuery, parser, SDL API, or Hyperautomation mechanics. Instead it collects the customer parameters, renders the solution's templates, previews the result, deploys through the primitive skills, and validates.

Use this skill when the user wants to deploy or tailor a whole solution. For a single query, parser, dashboard, or workflow, use the matching primitive skill directly.

Solution catalog

SolutionWhat it doesPlaybook
Data source onboardingTake a raw log stream already reaching the tenant and operationalise it end to end from one short prompt: locate the source, normalise it to OCSF, enrich it with device/user context, then build a dashboard, MITRE-mapped detections, and a Hyperautomation flowreferences/data-source-onboarding.md
Asset enrichmentEnrich ingested raw logs with device and user context (OS, IP, agent UUID, AD groups, SID, criticality, risk factors) from the Asset Inventory, at ingest or at query timereferences/asset-enrichment.md
UEBA behavioural anomaly detectionBaseline ANY security or non-security signal per (action, principal) over a chosen window and detect deviations. Ten behavioural detections: core SPIKE, DROP, SILENT, NEW-BEHAVIOR plus advanced OFF-HOURS, FAN-OUT, RATIO, VELOCITY, PEER-GROUP, DORMANT; plus two location detections GEO-NEW and IMPOSSIBLE-TRAVEL when a Location field is set; plus Risk-Based Alerting (RBA) that consolidates alerts into one cumulative per-entity risk score. The source is matched by dataSource.name or serverHost, and the action can be a composite of 2-3 fields. A Sensitivity knob switches volume scoring between Standard (z-score) and Robust (percentile p95/p05, default); a use-case selector (account takeover, account takeover geo, brute force, insider / data exfil, lateral movement, privilege abuse, service/feed health, all, custom) presets detections and method. One-click production deploy: baseline lookups + scheduled PowerQuery rules + Hyperautomation watchdogs + staggered per-baseline nightly refresh + a daily failure-notifier + a review dashboard. The s1-ueba-deployer is the source of truthreferences/ueba-anomaly-detection.md
Ingest health monitoring (per device)Per-device ingest health: anomaly detection on a 7-day hour-of-day seasonal baseline refreshed daily, detecting when a specific firewall, endpoint, or server spikes, drops, lags (p95), or goes silent, plus parser drift. Deploys per-device baseline lookups, scheduled PowerQuery detections, an ingest-loss watchdog flow, a 5-tab dashboard, an email-notification flow for every failure, and an editable source-exclusions lookup and a device-level config lookup (source level by default, per-device opt-in), with unified Spike/Drop/Lag rules that tag each alert source or device; Parser Drift is optional and tuned per environmentreferences/ingest-health-monitoring.md
Detection exclusions (single-event, correlation, or scheduled)Suppress known-good noise in a STAR Custom Detection rule over a third-party or EDR SDL source. Ask the user the rule type first (Step 0): a single-event rule (queryType: events) or a correlation rule (queryType: correlation) hardcodes the exclusion as an inline AND NOT (<field> in:anycase (...)) negative list in a boolean S1QL body (correlation appends it to each sub-query in correlationParams), fires per event / on multi-event thresholds, and supports mitigation; or a scheduled PowerQuery detection (queryType: scheduled) loads a CSV exclusion list as an SDL lookup table and omits matching rows via an anti-join (`\lookup ... \filter <col> = null`), aggregates, and ships an effectiveness dashboard. Single-event and correlation deploy just the rule; scheduled deploys the lookup table, the rule, an optional source-of-truth refresh flow, and the dashboardreferences/custom-detection-exclusions.md
Risk-Based Alerting (RBA)Noisy-but-interesting observations are published as low-noise risk events into a risk index instead of alerting individually; risk accumulates per object (user / host), amplified by asset-derived risk factors; one high-fidelity alert fires only when a 24h cumulative score or 7d distinct-MITRE-tactic threshold is crossed, giving a contextualised story instead of disconnected alerts. Deploys contributors, a risk-factor table, a scheduled collector flow (publish as Shared Draft, then prompt the user to bind the "SentinelOne SDL" connection, then activate, the connection cannot be bound via API), four incident rules (user/host x score/tactics), and a dashboard. This is the heavyweight risk-index model (a dedicated risk index + collector + contributors + risk factors). For a lightweight alternative that scores the existing SentinelOne alert stream in place against an editable RiskWeights + AssetWatchlist table and fires one watchdog per entity, use the RBA built into the UEBA solution (the s1-ueba-deployer), see references/ueba-anomaly-detection.mdreferences/risk-based-alerting.md
Detection as Code (DaC)Stand up a Git + CI pipeline where detection engineers author rules as TOML files, a pull request triggers validation and four-eyes review, and a merge syncs the changed rules to the SentinelOne Custom Detection Rule API. Scaffolds a starter repo (per-target-system folders, CODEOWNERS, branch-protection guidance), seeds working examples of all three rule types (single-event events, correlation, scheduled PowerQuery), and ships a zero-dependency TOML-to-API sync engine with idempotent create-or-update plus lint-on-PR and sync-on-merge CI for GitHub Actions, GitLab CI, and Azure Pipelines. Unlike the other solutions, DaC sets up a workflow OUTSIDE the tenant that pushes rules inreferences/detection-as-code.md
Custom detections with MITRE mappingSolution for custom detections to carry MITRE mapping. A Custom Detection (STAR) rule has no MITRE field (the API rejects mitre with 400 Unknown field) and its alerts reach UAM with mitreTactics empty. This solution renders a small JSON rule spec (name, severity, PowerQuery, lookback, interval, MITRE tactic/technique list) into a scheduled Hyperautomation watchdog that runs the query through the LRQ API and posts the UAM alert with attacks[] on each finding_info.related_events[] entry, so the alert carries mitreTactics / mitreTechniques like a library-rule alert. Converts an existing scheduled STAR rule with --from-rule. Ships a renderer with validation and example specsreferences/custom-detection-mitre-mapping.md
Query slicingRun a long-window PowerQuery fast: split the time range into slices, run them in parallel through the LRQ API (25 calls/s per token, 15 in flight, launch-429 backoff, every query cancelled, slow slices split in two) and merge the results client-side with explicit sum / min / max rules that refuse non-additive columns. Measured: a 30-day aggregate in about 5 s as 15 two-day slices versus 21 to 40 s as one query, identical totals. Primary path: the powerquery_run MCP tool with slices and merge; scripts/lrq_sliced.py is the zero-dependency host-only runner that deployers and scripts vendor as isreferences/query-slicing.md
Alert noise reductionFind the (source, signature) pairs flooding the alert queue, separate ingested and already-actioned noise (block/drop/sinkhole/reset) from real S1 detections, then recommend an ingestion-severity filter (a console setting on the connector), deploy an auto-resolve Hyperautomation flow that closes already-mitigated alerts with a note, optionally preserve signal-worthy categories (e.g. C2/DGA) as one correlation rule, and ship a noise-vs-signal dashboard. All product/source/signature/action values are discovered live; nothing is hardcodedreferences/alert-noise-reduction.md

More solutions are added under references/<solution>.md plus templates under assets/. See "Adding a new solution" below.

How a deployment runs (always follow this loop)

  1. Pick the solution. If the user named it, use it. Otherwise show the catalog and ask which one.
  2. Collect parameters with simple prompts. Ask only what the playbook needs, one compact question set, with sensible defaults pre-filled. Never start deploying before parameters are confirmed. Each playbook lists its parameters and defaults.
  3. Confirm the environment. Resolve the target site name to a siteId (fuzzy match, console site names can contain spaces). Confirm the console/tenant. Read existing config versions before any overwrite.
  4. Render and preview. Fill the templates in assets/ with the parameters and show the user the final config (queries, parser, workflow) and the projected enriched record BEFORE deploying. This is a dry run.
  5. Deploy in dependency order through the primitive skills (see each playbook for the exact order). Typical order: build lookup tables, then parser or lookup guidance, then refresh flow.
  6. Validate with a real ingest and query, and report what populated. Use metadata.version as the propagation canary for parser changes.
  7. Test end to end with run-now, then prompt the user. For any solution with HA flows, trigger each flow immediately with POST /web/api/v2.1/hyper-automate/api/public/workflow-execution/manual/{id}/{version}?accountIds=<acct> (works on scheduled-trigger flows once active), poll GET .../workflow-execution/{exec_id} until state is Completed with error_actions: [] and executed_actions == the action count, and confirm the downstream effect (tables written, dashboard renders, a detection alert present). An import is NOT complete until the flow is published to a Shared Draft: treat ha_import_workflow and publish as ONE atomic step, publish in the SAME step as the import, never as a follow-up. Imported flows land as PRIVATE DRAFTS owned by the API token's user (invisible in the console to the person who asked), so IMMEDIATELY after each ha_import_workflow publish it to a Shared Draft: POST /web/api/v2.1/hyper-automate/api/v1/workflows/{id}/publish?siteIds=<id> (bodyless {}, returns 204; use accountIds=<acct> for account-scoped flows). A published flow stays inactive until its connection is bound and it is activated, so always end a deployment by prompting the user to bind/activate and run this E2E check (offer to run it for them once active).
  8. Summarize the deployed artifacts (paths, IDs, site) and hand off the rendered config files.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
87
Repository forks
38
7-day trend score
0

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Extension points

  • hookPre/post lifecycle hooks

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/sentinel-one/ai-siem/sdl-solutions/badge)](https://verified-skill.com/skills/sentinel-one/ai-siem/sdl-solutions)

Something wrong with this skill or its page? Tell us.