Add markdown output, CSS-verbatim, and GitHub sharing#4
Conversation
Three improvements to the deep-dive skill: 1. **Dual output format** — infers HTML vs markdown from the user's prompt. "Post on the PR" → markdown. "Reference doc" → HTML. No signal → HTML default with markdown offered at Step 5. No unnecessary questions asked. 2. **CSS-verbatim instruction** — explicitly tells the LLM to copy the <style> block from template.html unchanged. Prevents CSS drift, reduces token waste, and keeps output consistent across generations. 3. **GitHub-native sharing** — markdown output renders natively in PRs, issues, and repo files. Step 5 offers to post via `gh pr comment` or commit to the branch. Always offers cross-format conversion. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This is a test for the new .md abilities in this skill - Info not applicable to this PRAutomated Alert-to-Investigation Pipeline — Deep Dive
Table of Contents
OverviewThe Automated Alert-to-Investigation Pipeline is an epic (#16339) that connects Elastic Security's three most powerful but currently disconnected features — Alerts, Cases, and Attack Discovery — into a single automated workflow. Instead of analysts manually triaging each alert, searching for related cases, and running Attack Discovery from scratch, the pipeline deduplicates alerts, extracts entities, matches them to open cases, and triggers incremental Attack Discovery automatically. The initiative is owned by the Security AI team (PM: @davethegut, Eng: @patrykkopycinski) and targets the EASE (Elastic AI SOC Engine) subscription tier. The ProblemSOCs running Elastic Security at scale face a compounding triage burden:
ArchitectureThe pipeline is composed of four subsystems that flow into each other: graph TD
subgraph dedup ["1. Alert Deduplication"]
Vectorize["Vectorization Engine<br/>608-dim feature vectors"]
Cluster["Hybrid Clustering<br/>Vector + LLM comparison"]
LeaderState["Leader State Persistence<br/>Cross-run incremental"]
DedupTags["Dedup Tagging<br/>kibana.alert.dedup.*"]
Vectorize -->|vectors| Cluster
Cluster -->|leaders| LeaderState
Cluster -->|tags| DedupTags
end
subgraph grouping ["2. Alert Grouping Pipeline"]
EntityExtract["Entity Extraction<br/>13 observable types from ECS"]
CaseMatch["Case Matching Engine<br/>4 strategies with scoring"]
GroupWorkflow["Scheduled Grouping Workflow<br/>12-step Task Manager pipeline"]
EntityExtract -->|entities| CaseMatch
CaseMatch -->|scores| GroupWorkflow
end
subgraph ad ["3. Attack Discovery Evolution"]
BatchedAD["Batched AD<br/>Removes 100-alert ceiling"]
IncrementalAD["Incremental AD<br/>Delta-only processing"]
CaseScopedAD["Case-Scoped AD<br/>Filtered to case alerts"]
AutoTrigger["Auto Trigger<br/>On alert attachment"]
BatchedAD -->|batch + merge| IncrementalAD
IncrementalAD -->|delta| CaseScopedAD
CaseScopedAD --> AutoTrigger
end
subgraph enrichment ["4. Case Enrichment"]
AutoObs["Observable Auto-Extraction"]
EventTriggers["Event Trigger System"]
EntitySearch["Entity-Based Case Search"]
end
RawAlerts["Raw Alerts"] --> dedup
DedupTags -->|leader alerts only| grouping
GroupWorkflow -->|attach to cases| AutoTrigger
GroupWorkflow -->|new observables| AutoObs
AutoTrigger -->|AD results| CaseComment["Case Comments"]
AutoObs -->|enriched observables| CaseMatch
EventTriggers -->|triggers| IncrementalAD
EntitySearch -->|find related| CaseMatch
Pipeline StagesStage 1: Alert Deduplication (60-80% noise reduction)A hybrid vector + LLM pipeline identifies duplicate alerts before they enter the triage queue.
Stage 2: Entity Extraction & Case MatchingExtracted entities become the scoring currency for matching alerts to investigations.
Stage 3: Automated Grouping & ADThe orchestration layer that turns building blocks into a hands-off pipeline.
Stage 4: Case Enrichment
Work Streams & DependenciesFour work streams with clear sequencing: graph LR
WS1["WS1: Foundation<br/>Entity Extraction + Case-Scoped AD"]
WS2["WS2: Intelligence<br/>Case Matching + Batched AD"]
WS3["WS3: Automation<br/>Incremental AD + Grouping Workflow + Auto Trigger"]
WS4["WS4: Enrichment & Dedup<br/>(parallel track)"]
WS1 --> WS2
WS2 --> WS3
WS4 -.->|cleaner input| WS2
WS4 -.->|enriched observables| WS2
style WS1 fill:#0B64DD22,stroke:#0B64DD
style WS2 fill:#00BFB322,stroke:#00BFB3
style WS3 fill:#731DCF22,stroke:#731DCF
style WS4 fill:#F04E9822,stroke:#F04E98
Key Components & TypesEntity Extraction — 13 Observable TypesExtracted from standard ECS fields with configurable mappings:
Case Matching — 4 Scoring Strategies
Incremental AD — Delta ProcessingThe merge step uses the LLM to intelligently combine new findings with the existing attack narrative — updating, extending, or creating new attack chains as warranted. Engineering MomentumActive PRs (in development)
Recently Merged (foundation in place)
Success Criteria
Related Epics & Cross-Team ImpactDirect Child Epics
Cross-Team AccelerationThis pipeline provides shared primitives that benefit 8+ in-flight epics:
graph TD
Pipeline["Alert-to-Investigation Pipeline<br/>#16339"]
Pipeline --> Triage["Alert Triage Workflow<br/>#15370"]
Pipeline --> EASE["EASE Agent Builder<br/>#14620"]
Pipeline --> AD2["AD 2.0 + Workflows<br/>#14619"]
Pipeline --> Skills["Agent Skills Ecosystem<br/>#15972"]
Pipeline --> Tools["Security Tools for AB<br/>#15695"]
Pipeline --> Templates["Workflow Templates<br/>#15748"]
Pipeline --> Hunting["NL Threat Hunting<br/>#12672"]
Pipeline --> Telemetry["Attacks/Alerts Telemetry<br/>#256200 ✅"]
style Pipeline fill:#0B64DD,stroke:#0B64DD,color:#fff
style Telemetry fill:#00BFB322,stroke:#00BFB3
Further Reading
Deep-dive reference for Automated Alert-to-Investigation Pipeline in elastic/security-team — Generated 2026-03-19 |
Summary
<style>block unchanged fromtemplate.html— prevents CSS drift, reduces token waste, and keeps output consistent across generations.gh pr comment --body-fileor commit-to-branch. Always offers cross-format conversion.Test plan
/deep-divewith no sharing signal → should default to HTML🤖 Generated with Claude Code