Install any skill in seconds. Free to start, no credit card required.
Get Started Free →OpenSearch SIEM detection: SIGMA, query DSL, MITRE ATT&CK mapping, anomaly/correlation rules, alert validation, SOC escalation.
.claude/skills/notque-opensearch-detection-engineer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 129% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -24% | 0% |
Methodology for authoring and validating SIEM detections on OpenSearch Security Analytics: SIGMA rules, query DSL translation, MITRE ATT&CK mapping, anomaly detection, correlation, and SOC incident escalation. Vendor-neutral framework with OpenSearch-specific API patterns.
| Trigger | Action | |---------|--------| | Author a new SIGMA rule or DSL detector | Load detection-engineering.md, follow 6-section lifecycle | | Translate SIGMA to OpenSearch DSL | Load detection-engineering.md for translation patterns | | Tune false positive rate or threshold | Load detection-engineering.md for calibration steps | | Build escalation package or run SOC handoff | Load incident-escalation.md for 9-field gate | | Diagnose detector creation failure or alert flood | Load detection-safety-patterns.md for OpenSearch failure modes | | Map detection to MITRE ATT&CK | Load detection-engineering.md for tactic/technique catalog |
T1110.003), tactic name (e.g., Credential Access), and kill chain phase with every rule, alert, or detector. Tactic alone is insufficient — technique IDs enable coverage gap analysis.GET {index}/_mapping and confirm every field referenced in the rule exists in the target index mapping before submitting the detector. Absent fields cause silent failure or misleading errors.PUT _mapping, POST _aliases, POST /_plugins/_security_analytics/... — not abstract advice.incident-escalation.md.incident-escalation.md.Before creating or modifying a detector, check for these. If found, STOP and resolve before continuing.
| Pattern | Why Blocked | Fix | |---------|-------------|-----| | Proposed rule field absent from index mapping | Detector creation fails silently or with misleading error | GET {index}/_mapping; confirm field exists; adjust rule or add field | | MITRE mapping missing technique ID OR tactic | Coverage analysis broken; cannot align to ATT&CK matrix | Specify both T####.### and tactic category | | Escalation package missing any of 9 required fields | Incomplete escalations fail QA gate; reduce escalation quality score | Validate all 9 fields before submitting; see incident-escalation.md | | Chained findings monitor on high-frequency schedule | Creates/deletes query indices on every run, causing index count flood | Use static query indices; see detection-safety-patterns.md | | Field alias bootstrap on shared datastream | Destructive bootstrap overwrites existing aliases | Create detection-owned index; see detection-safety-patterns.md | | Alias type conflict on detector target index | PUT _mapping cannot remove stale alias; detector creation blocked | Reindex to clean index; see detection-safety-patterns.md |
After authoring a detection rule, STOP and confirm: "Have I verified every field name exists in the target index mapping via GET {index}/_mapping? Assumption is the failure mode."
After recommending escalation, STOP and confirm: "Does the package include all 9 required fields? Missing fields fail the QA gate."
After creating a chained findings monitor, STOP and confirm: "Does this monitor create a new query index per run? Index flood is a confirmed production failure mode."
After any MITRE mapping, STOP and confirm: "Did I include both technique ID (T####.###) and tactic category?"
| Rationalization Attempt | Why It's Wrong | Required Action | |------------------------|----------------|-----------------| | "The field probably exists in the index" | Absent fields cause silent detector failures | Run GET {index}/_mapping before proposing any rule | | "Chained findings monitors are fine on default settings" | Index flood is a confirmed production failure mode | Check monitor type and schedule; flag and remediate | | "The escalation looks complete enough" | Incomplete packages reduce escalation quality score | Validate all 9 fields explicitly | | "MITRE tactic is enough without technique ID" | Technique IDs enable precise coverage gap analysis | Include both (e.g., T1110.003 + Credential Access) | | "Auto-mapping is fine for a detection index" | Alias bootstrap is destructive on shared indices | Use detection-owned index with explicit mapping | | "SLAs are guidelines" | Response times are KPI-tracked organizational commitments | Reference exact tier times; treat as binding |
STOP and ask the user when:
| Situation | Why Stop | Ask This | |-----------|----------|----------| | Index mapping unknown before detector creation | Cannot validate field existence | "Can you run GET {index}/_mapping and share the output?" | | Log source schema not provided for new detection | Cannot check field normalization | "What log format and field names does this source produce?" | | Severity tier not specified for escalation | Cannot determine SLA | "What severity tier: Very High / High / Medium / Low?" | | Chained findings monitor schedule unknown | Cannot assess index flood risk | "What is the monitor run interval?" |
| Signal | Reference | What it adds | |--------|-----------|--------------| | SIGMA authoring, DSL translation, MITRE mapping, detector creation, field normalization, FP suppression | references/detection-engineering.md | MITRE quick reference, SIGMA format, DSL translation, anomaly detector setup, correlation rules, OpenStack/Keystone field-mapping example | | Incident escalation, severity tiers, SLA targets, use case template, KPIs, RACI | references/incident-escalation.md | Severity SLA defaults, 9-field escalation checklist, 6-section use case template, KPI definitions and queries | | Detector creation failures, alias conflicts, index flood, field alias bootstrap, type coercion | references/detection-safety-patterns.md | Chained findings index flood fix, field alias bootstrap remediation, alias-vs-text conflict diagnosis, error-fix mapping table |
Gate: MITRE technique ID + tactic recorded; log source schema available.
GET {index}/_mapping for each field referenced in the proposed ruleterms aggregationsGate: Every field in the rule exists in the target mapping. Cardinality is bounded.
detection-engineering.mdGate: SIGMA + DSL both produced; FP suppressions documented.
detection-safety-patterns.md for full safety checklistGate: No hard-gate patterns triggered.
Gate: All 6 sections populated; runbook linked.
Gate: FP rate measured against target; tuning logged.
incident-escalation.mdGate: 9-field package complete; SLA window identified; recipient confirmed.
opensearch-elasticsearch-engineerWhen asked to perform unavailable actions, explain the limitation and suggest the appropriate agent.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 20,676 | 22,607 | +9% | 1 | 1 | 0% | 3,822 | 6,723 | +76% | 0 | 0 | — |
case-02 | fail→pass | 18,249 | 23,161 | +27% | 1 | 1 | 0% | 2,946 | 6,738 | +129% | 0 | 0 | — |
case-03 | fail→pass | 18,228 | 15,825 | -13% | 1 | 1 | 0% | 3,290 | 5,255 | +60% | 0 | 0 | — |
case-04 | fail→pass | 18,043 | 8,576 | -52% | 1 | 1 | 0% | 2,828 | 3,825 | +35% | 0 | 0 | — |
case-05 | fail→pass | 18,263 | 6,849 | -62% | 1 | 1 | 0% | 2,668 | 3,519 | +32% | 0 | 0 | — |
case-06 | fail→pass | 21,306 | 6,484 | -70% | 1 | 1 | 0% | 4,534 | 3,424 | -24% | 0 | 0 | — |
case-07 | pass→pass | 11,696 | 9,426 | -19% | 1 | 1 | 0% | 1,756 | 4,134 | +135% | 0 | 0 | — |
case-08 | fail→pass | 12,370 | 9,185 | -26% | 1 | 1 | 0% | 1,926 | 3,928 | +104% | 0 | 0 | — |
case-09 | fail→fail | 6,562 | 12,507 | +91% | 1 | 1 | 0% | 1,429 | 4,887 | +242% | 0 | 0 | — |
case-10 | fail→pass | 12,501 | 6,119 | -51% | 1 | 1 | 0% | 1,774 | 3,588 | +102% | 0 | 0 | — |
case-11 | fail→pass | 12,809 | 11,895 | -7% | 1 | 1 | 0% | 2,002 | 4,421 | +121% | 0 | 0 | — |
case-12 | fail→pass | 6,970 | 11,807 | +69% | 1 | 1 | 0% | 1,076 | 4,327 | +302% | 0 | 0 | — |
case-13 | fail→pass | 17,069 | 21,836 | +28% | 1 | 1 | 0% | 2,503 | 6,268 | +150% | 0 | 0 | — |
case-14 | fail→fail | 14,302 | 9,691 | -32% | 1 | 1 | 0% | 2,199 | 4,143 | +88% | 0 | 0 | — |
case-15 | pass→pass | 15,573 | 9,344 | -40% | 1 | 1 | 0% | 2,174 | 3,864 | +78% | 0 | 0 | — |
case-16 | pass→pass | 15,521 | 12,006 | -23% | 1 | 1 | 0% | 2,361 | 4,120 | +75% | 0 | 0 | — |
case-17 | pass→pass | 11,774 | 10,524 | -11% | 1 | 1 | 0% | 1,992 | 4,233 | +113% | 0 | 0 | — |
case-18 | fail→pass | 11,522 | 6,607 | -43% | 1 | 1 | 0% | 1,799 | 3,524 | +96% | 0 | 0 | — |
case-19 | pass→fail | 18,262 | 22,736 | +24% | 1 | 1 | 0% | 3,135 | 6,741 | +115% | 0 | 0 | — |
case-20 | fail→pass | 10,276 | 9,338 | -9% | 1 | 1 | 0% | 1,816 | 4,180 | +130% | 0 | 0 | — |
case-21 | fail→pass | 17,306 | 14,345 | -17% | 1 | 1 | 0% | 2,497 | 4,688 | +88% | 0 | 0 | — |
case-22 | fail→pass | 14,987 | 14,367 | -4% | 1 | 1 | 0% | 2,233 | 4,876 | +118% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +59 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.