
Sigma Backends
- 4 installs
- 1 repo stars
- Updated March 4, 2026
- timescale/sigma-backends
Helps with backend & apis tasks.
About
sigma-backends is a Claude Code skill for backend & apis. It helps solo builders move faster with AI-assisted development.
- sigma-backends
- Backend & APIs
- AI-coding skill
Sigma Backends by the numbers
- 4 all-time installs (skills.sh)
- Ranked #3,711 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/timescale/sigma-backends --skill sigma-backendsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4 |
|---|---|
| repo stars | ★ 1 |
| Last updated | March 4, 2026 |
| Repository | timescale/sigma-backends ↗ |
What it does
Helps with backend & apis tasks.
Files
Sigma Backends
Two tools for working with Sigma rules after authoring:
- sigma-cli (Python/pySigma): converts rules into backend-specific queries (SPL, Lucene, KQL, etc.) for import into a SIEM
- rsigma (Rust): evaluates rules directly against JSON log events in real time -- no SIEM required
Both support processing pipelines for field name mapping between generic Sigma fields and backend-specific schemas.
---
sigma-cli Quick Start
Install
pip install sigma-cliInstall a Backend Plugin
sigma plugin install splunkConvert Rules
sigma convert -t splunk -p sysmon rules/windows/process_creation/
sigma convert -t elasticsearch -p ecs_windows -f kibana_ndjson rules/
sigma convert -t kusto -p sentinel_asim rules/List Available Backends, Formats, and Pipelines
sigma plugin list -t backend # all available backend plugins
sigma list targets # locally installed backends
sigma list formats splunk # output formats for a backend
sigma list pipelines # available processing pipelinesCheck Rules
sigma check rules/ # validate rule syntaxFor the full sigma-cli command reference, see references/sigma-cli.md.
---
rsigma Quick Start
Install
cargo install rsigmaEvaluate Events
# Single event (inline JSON)
rsigma eval -r rules/ -e '{"CommandLine": "cmd /c whoami"}'
# Stream NDJSON from stdin
cat events.ndjson | rsigma eval -r rules/
# With a processing pipeline
rsigma eval -r rules/ -p ecs.yml -e '{"process.command_line": "whoami"}'
# Read events from a file
rsigma eval -r rules/ -e @events.ndjsonLint Rules
rsigma lint rules/ # 65 built-in lint rules
rsigma lint rules/ --fix # auto-fix 13 safe rules
rsigma lint rules/ --schema default # + JSON schema validation
rsigma lint rules/ --disable missing_description,missing_authorValidate Rules
rsigma validate rules/ -v # verbose validation
rsigma validate rules/ -p ecs.yml # validate with pipelineRun Detection Daemon
# Long-running daemon with hot-reload, health checks, and Prometheus metrics
hel run | rsigma daemon -r rules/ -p ecs.yml --api-addr 0.0.0.0:9090
# With correlation state persistence
hel run | rsigma daemon -r rules/ -p ecs.yml --state-db ./state.db
# With suppression and correlation event inclusion
rsigma daemon -r rules/ --suppress 5m --correlation-event-mode fullFor the full rsigma CLI reference, see references/rsigma.md.
---
Backend Selection Guide
| SIEM / Tool | Backend ID | Pipeline | Query Language | State |
|---|---|---|---|---|
| Splunk | splunk | splunk_cim_dm / splunk_windows | SPL | Stable |
| Elasticsearch | elasticsearch | ecs_windows | Lucene / ES\ | QL / EQL |
| OpenSearch | opensearch | ecs_windows | Lucene | Stable |
| Microsoft Sentinel | kusto | sentinel_asim | KQL | Stable |
| CrowdStrike Falcon | crowdstrike | (built-in) | CrowdStrike query | Stable |
| IBM QRadar | qradar / ibm-qradar-aql | (built-in) | AQL | Stable |
| Rapid7 InsightIDR | insightidr | (built-in) | LEQL | Stable |
| Grafana Loki | loki | (built-in) | LogQL | Stable |
| Carbon Black | carbonblack | (built-in) | CB query | Stable |
| Cortex XDR | cortexxdr | (built-in) | XQL | Stable |
| SentinelOne | sentinelone | (built-in) | Deep Visibility | Stable |
| Logpoint | logpoint | (built-in) | Logpoint query | Stable |
| Google SecOps | secops | (built-in) | UDM / YARA-L 2.0 | Development |
| rsigma (direct eval) | N/A | any pipeline YAML | JSON match output | Stable |
For the full list of 25+ backends with install commands, see references/backends.md.
Choosing Between sigma-cli and rsigma
| Use Case | Tool |
|---|---|
| Import rules into an existing SIEM | sigma-cli (converts to native query language) |
| Evaluate rules against JSON events in real time | rsigma eval |
| Run a detection daemon alongside a log collector | rsigma daemon |
| Lint and validate rule syntax | rsigma lint (65 rules, auto-fix) |
| CI/CD rule validation | rsigma lint + rsigma validate |
| Batch convert rules for multiple SIEMs | sigma-cli with different -t targets |
---
End-to-End Workflows
Convert a Rule to Splunk SPL
# Install the Splunk backend
sigma plugin install splunk
# Convert with Sysmon pipeline
sigma convert -t splunk -p sysmon rules/windows/process_creation/shadow_copy_deletion.yml
# Convert as saved search config
sigma convert -t splunk -p sysmon -f savedsearches -o saved.conf rules/
# With backend options
sigma convert -t splunk -p sysmon -O index=main rules/Convert a Rule to Elasticsearch
sigma plugin install elasticsearch
# Lucene query (default)
sigma convert -t elasticsearch -p ecs_windows rules/
# ES|QL format
sigma convert -t elasticsearch -p ecs_windows -f esql rules/
# Kibana NDJSON (importable)
sigma convert -t elasticsearch -p ecs_windows -f kibana_ndjson -o export.ndjson rules/Convert a Rule to Microsoft Sentinel KQL
sigma plugin install kusto
# ASIM pipeline
sigma convert -t kusto -p sentinel_asim rules/Evaluate a Rule Against Live Events (rsigma)
# Single event test
rsigma eval -r rules/ -p ecs.yml -e '{"process.command_line": "vssadmin delete shadows /all"}'
# Stream from file with full event in output
rsigma eval -r rules/ -p ecs.yml --include-event -e @events.ndjson
# With jq extraction from wrapped events
rsigma eval -r rules/ --jq '.event' -e '{"ts":"...","event":{"CommandLine":"whoami"}}'Lint and Fix a Rule Directory (rsigma)
# Lint all rules
rsigma lint rules/
# Auto-fix safe issues (lowercase keys, remove duplicates, etc.)
rsigma lint rules/ --fix
# Lint with JSON schema validation
rsigma lint rules/ --schema default
# Lint with custom config
rsigma lint rules/ --config .rsigma-lint.ymlRun a Detection Daemon with Correlation (rsigma)
# Basic daemon -- reads NDJSON from stdin, outputs matches to stdout
hel run | rsigma daemon -r rules/ -p ecs.yml
# With correlation state persistence (survives restarts)
hel run | rsigma daemon \
-r rules/ \
-p ecs.yml \
--state-db /var/lib/rsigma/state.db \
--suppress 5m \
--action reset \
--api-addr 0.0.0.0:9090
# Health and metrics
curl http://localhost:9090/healthz # {"status": "ok"}
curl http://localhost:9090/metrics # Prometheus format
curl http://localhost:9090/api/v1/status # full daemon status
curl -X POST http://localhost:9090/api/v1/reload # hot-reload rules---
Pipeline Selection
Pipelines transform Sigma rule fields to match your backend's data model. Stack multiple pipelines with repeated -p flags.
Common Patterns
| Data Model | Pipeline | Use With |
|---|---|---|
| Elastic Common Schema (ECS) | ecs_windows | elasticsearch, opensearch, rsigma |
| Splunk Common Information Model | splunk_cim_dm | splunk |
| Splunk Windows TA | splunk_windows | splunk |
| Sysmon field names | sysmon | any backend |
| Microsoft Sentinel ASIM | sentinel_asim | kusto |
Stacking Pipelines
Pipelines run in priority order (lower priority number = runs first):
# Log source pipeline (priority 10) + backend pipeline (priority 50)
sigma convert -t splunk -p sysmon -p splunk_cim_dm rules/
# rsigma: same stacking with -p
rsigma eval -r rules/ -p sysmon.yml -p ecs.yml -e '...'Custom Pipelines
Write your own pipeline YAML for organization-specific field mappings:
name: My Organization ECS
priority: 20
transformations:
- type: field_name_mapping
mapping:
CommandLine: process.command_line
Image: process.executable
User: user.name
rule_conditions:
- type: logsource
product: windowsFor detailed pipeline-to-SIEM mapping and field mapping tables, see references/pipeline-mapping.md.
---
Additional References
- sigma-cli command reference -- all commands, flags, and output formats
- rsigma CLI reference -- eval, lint, validate, daemon, parse
- All backends -- 25+ pySigma backends with install commands
- Pipeline-to-backend mapping -- field mapping tables for ECS, CIM, Sysmon
Sigma Backends Skill
An Agent Skill for converting, evaluating, and deploying Sigma detection rules across SIEM backends.
What This Skill Does
This skill teaches AI agents how to work with Sigma rules across backends:
- sigma-cli (pySigma): convert rules to Splunk SPL, Elasticsearch Lucene/ES|QL, Microsoft Sentinel KQL, QRadar AQL, and 20+ other query languages
- rsigma: evaluate rules directly against JSON events in real time, lint rules (65 checks with auto-fix), validate, and run a detection daemon with correlation, hot-reload, and Prometheus metrics
- Pipeline mapping: which pipeline to use for which SIEM, field mapping tables for ECS, Splunk CIM, and Sysmon
Complements the sigma-rules skill for rule authoring.
Install
npx skills add timescale/sigma-backends -g -yOr install for a specific agent:
npx skills add timescale/sigma-backends -g -a cursor -y
npx skills add timescale/sigma-backends -g -a claude-code -yStructure
sigma-backends/
├── SKILL.md # Main skill — quick starts, backend guide, workflows
└── references/
├── sigma-cli.md # Full sigma-cli command reference
├── rsigma.md # Full rsigma CLI reference
├── backends.md # All 25+ pySigma backends
└── pipeline-mapping.md # SIEM-to-pipeline mapping and field tablesCoverage
- sigma-cli: convert, list, plugin management, output formats
- rsigma: eval, lint (65 rules, --fix), validate, daemon (hot-reload, Prometheus, state persistence)
- 25+ backends: Splunk, Elasticsearch, OpenSearch, Microsoft Sentinel, CrowdStrike, QRadar, InsightIDR, Loki, Carbon Black, Cortex XDR, SentinelOne, Google SecOps, and more
- Pipeline mapping: ECS, Splunk CIM, Sysmon field tables, pipeline stacking, priority conventions
References
License
MIT
pySigma Backends Reference
All available pySigma backends for converting Sigma rules to SIEM-specific queries. Install with sigma plugin install <identifier>.
For rsigma (direct evaluation against JSON events), no backend plugin is needed -- see rsigma.md.
---
Major SIEMs
Splunk -- splunk
State: Stable Query Language: SPL, tstats data model queries Output Formats: default (plain SPL), savedsearches (savedsearches.conf), data_model (tstats) Pipelines: splunk_windows, splunk_cim_dm, sysmon
sigma plugin install splunk
sigma convert -t splunk -p splunk_cim_dm rules/Elasticsearch -- elasticsearch
State: Stable Query Language: Lucene, ES|QL (with correlations), EQL Output Formats: default (Lucene), kibana_ndjson, esql, eql, dsl_lucene Pipelines: ecs_windows, ecs_windows_old, sysmon
sigma plugin install elasticsearch
sigma convert -t elasticsearch -p ecs_windows rules/
sigma convert -t elasticsearch -p ecs_windows -f esql rules/OpenSearch -- opensearch
State: Stable Query Language: Lucene Output Formats: default (Lucene), alerting rules Pipelines: ecs_windows
sigma plugin install opensearch
sigma convert -t opensearch -p ecs_windows rules/Microsoft Sentinel / Azure -- kusto
State: Stable Query Language: KQL (Kusto Query Language) Supports: Microsoft XDR Advanced Hunting, Sentinel ASIM, Azure Monitor Pipelines: sentinel_asim, Microsoft 365 Defender tables
sigma plugin install kusto
sigma convert -t kusto -p sentinel_asim rules/IBM QRadar -- qradar / ibm-qradar-aql
State: Stable Query Language: AQL Two implementations:
qradar-- community backend with AQL and extension packagesibm-qradar-aql-- IBM-maintained backend
sigma plugin install qradar
sigma convert -t qradar rules/
# Or IBM's version
sigma plugin install ibm-qradar-aql
sigma convert -t ibm-qradar-aql rules/Rapid7 InsightIDR -- insightidr
State: Stable Query Language: LEQL
sigma plugin install insightidr
sigma convert -t insightidr rules/Grafana Loki -- loki
State: Stable Query Language: LogQL Output Formats: default (LogQL), ruler (Loki ruler YAML for alerting) Pipelines: Built-in mappings for Grafana and promtail Sysmon data
sigma plugin install loki
sigma convert -t loki rules/
sigma convert -t loki -f ruler rules/ # alerting rules---
EDR Platforms
Carbon Black -- carbonblack
State: Stable Supports: Enterprise EDR (Threat Hunter) and EDR (Response)
sigma plugin install carbonblack
sigma convert -t carbonblack rules/Cortex XDR -- cortexxdr
State: Stable Query Language: XQL
sigma plugin install cortexxdr
sigma convert -t cortexxdr rules/CrowdStrike Falcon -- crowdstrike
State: Stable Includes: Pipelines for CrowdStrike Falcon platform and Falcon Data Replicator (FDR) logs
sigma plugin install crowdstrike
sigma convert -t crowdstrike rules/SentinelOne -- sentinelone
State: Stable Query Language: Deep Visibility queries
sigma plugin install sentinelone
sigma convert -t sentinelone rules/SentinelOne PowerQuery -- sentinelone-pq
State: Stable Query Language: PowerQuery
sigma plugin install sentinelone-pq
sigma convert -t sentinelone-pq rules/---
Cloud and Other
Google SecOps (Chronicle) -- secops
State: Development Query Language: UDM searches and YARA-L 2.0 detection rules
sigma plugin install secops
sigma convert -t secops rules/Logpoint -- logpoint
State: Stable
sigma plugin install logpoint
sigma convert -t logpoint rules/Panther -- panther
State: Stable
sigma plugin install panther
sigma convert -t panther rules/Datadog Cloud SIEM -- datadog
State: Testing Query Language: Datadog Query Syntax
sigma plugin install datadog
sigma convert -t datadog rules/uberAgent -- uberagent
State: Stable
sigma plugin install uberagent
sigma convert -t uberagent rules/---
Specialized / Niche
| Backend | State | Query Language | Install |
|---|---|---|---|
dictquery | Stable | DictQuery strings | sigma plugin install dictquery |
sqlite | Testing | SQL (SQLite/Zircolite) | sigma plugin install sqlite |
stix | Development | STIX 2.0 / STIX Shifter | sigma plugin install stix |
golangexpr | Testing | Golang Expr | sigma plugin install golangexpr |
surrealql | Testing | SurrealQL | sigma plugin install surrealql |
powershell | Testing | PowerShell queries | sigma plugin install powershell |
hawk | Testing | HAWK.io BETree queries | sigma plugin install hawk |
netwitness | Testing | NetWitness application rules | sigma plugin install netwitness |
trellix_helix | Development | Trellix Helix queries | sigma plugin install trellix_helix |
quickwit | Development | Quickwit queries | sigma plugin install quickwit |
ala-socprime | Development | Azure Log Analytics (SOC Prime) | sigma plugin install ala-socprime |
---
Plugin States
| State | Meaning |
|---|---|
| Stable | Production-ready, actively maintained |
| Testing | Functional but may have gaps, community-maintained |
| Development | Experimental, expect breaking changes |
Use sigma plugin list -t backend for the current definitive list with states.
Pipeline-to-Backend Mapping
Reference for which processing pipelines to use with which SIEM backends, and the field mappings they provide.
Pipeline Selection by SIEM
| SIEM | Backend | Recommended Pipeline(s) | Data Model |
|---|---|---|---|
| Splunk (CIM) | splunk | splunk_cim_dm | Splunk Common Information Model |
| Splunk (Windows TA) | splunk | splunk_windows | Windows TA field names |
| Elasticsearch | elasticsearch | ecs_windows | Elastic Common Schema (ECS) |
| OpenSearch | opensearch | ecs_windows | Elastic Common Schema (ECS) |
| Microsoft Sentinel | kusto | sentinel_asim | Advanced Security Information Model |
| Grafana Loki | loki | (built-in) | Promtail / Grafana labels |
| CrowdStrike | crowdstrike | (built-in) | Falcon event model |
| QRadar | qradar | (built-in) | QRadar field model |
| rsigma (direct eval) | N/A | any custom YAML | User-defined |
Log Source Pipelines
These map Sigma's generic logsource to specific data sources:
| Pipeline | Purpose | Priority |
|---|---|---|
sysmon | Map Sysmon event fields | 10 |
windows_audit | Map Windows Security/Audit events | 10 |
windows_logsource | Map generic Windows logsource categories | 10 |
---
Pipeline Priority Conventions
Pipelines run in ascending priority order. Standard convention:
| Priority | Layer | Purpose | Example |
|---|---|---|---|
| 10 | Log source | Map event source field names | sysmon |
| 20 | Custom / Organization | Organization-specific mappings | my-org-ecs.yml |
| 50 | Backend (built-in) | Backend auto-applies these | (automatic) |
| 60 | Output format | Format-specific transforms | (automatic) |
Stack multiple layers:
# Log source (10) + custom (20) → backend auto-applies its own (50)
sigma convert -t splunk -p sysmon -p splunk_cim_dm rules/
rsigma eval -r rules/ -p sysmon.yml -p ecs.yml -e '...'---
ECS Field Mapping (Elastic Common Schema)
Common field mappings for Windows process creation events:
| Sigma Field | ECS Field |
|---|---|
CommandLine | process.command_line |
Image | process.executable |
OriginalFileName | process.pe.original_file_name |
ParentImage | process.parent.executable |
ParentCommandLine | process.parent.command_line |
User | user.name |
Hashes | process.hash.* |
IntegrityLevel | winlog.event_data.IntegrityLevel |
LogonId | winlog.logon.id |
CurrentDirectory | process.working_directory |
ProcessId | process.pid |
ParentProcessId | process.parent.pid |
Network connection events:
| Sigma Field | ECS Field |
|---|---|
SourceIP | source.ip |
DestinationIP | destination.ip |
SourcePort | source.port |
DestinationPort | destination.port |
Protocol | network.transport |
DestinationHostname | destination.domain |
Authentication events:
| Sigma Field | ECS Field |
|---|---|
TargetUserName | user.name |
TargetDomainName | user.domain |
SourceAddress | source.ip |
LogonType | winlog.event_data.LogonType |
WorkstationName | source.domain |
---
Splunk CIM Field Mapping
Common field mappings for Splunk Common Information Model:
| Sigma Field | Splunk CIM Field |
|---|---|
CommandLine | process or Processes.process |
Image | process_name or Processes.process_name |
ParentImage | parent_process_name or Processes.parent_process_name |
User | user or Processes.user |
SourceIP | src_ip or src |
DestinationIP | dest_ip or dest |
DestinationPort | dest_port |
Protocol | transport |
---
Sysmon Field Names
Sysmon events use specific field names that differ from generic Sigma:
| Event ID | Category | Key Fields |
|---|---|---|
| 1 | Process Creation | Image, CommandLine, ParentImage, User, Hashes |
| 3 | Network Connection | SourceIp, DestinationIp, DestinationPort, Protocol |
| 7 | Image Loaded | ImageLoaded, Hashes, Signed, SignatureStatus |
| 8 | CreateRemoteThread | SourceImage, TargetImage, StartAddress |
| 10 | ProcessAccess | SourceImage, TargetImage, GrantedAccess |
| 11 | FileCreate | TargetFilename, Image |
| 12/13/14 | Registry | TargetObject, Details, EventType |
| 22 | DNS Query | QueryName, QueryResults, Image |
The sysmon pipeline maps these Sysmon-specific field names to generic Sigma field names.
---
Writing Custom Pipelines
For organization-specific field mappings:
name: My Org Windows ECS
priority: 20
transformations:
- type: field_name_mapping
mapping:
CommandLine: process.command_line
Image: process.executable
ParentImage: process.parent.executable
User: user.name
SourceIP: source.ip
DestinationIP: destination.ip
rule_conditions:
- type: logsource
product: windows
- type: change_logsource
product: my_product
rule_conditions:
- type: logsource
product: windowsConditional Transforms by Category
name: Category-Specific Mapping
priority: 20
transformations:
- type: field_name_mapping
mapping:
Image: process.executable
CommandLine: process.command_line
rule_conditions:
- type: logsource
category: process_creation
- type: field_name_mapping
mapping:
TargetFilename: file.path
Image: process.executable
rule_conditions:
- type: logsource
category: file_eventFor the full list of 26 transformation types and all condition types, see the sigma-rules skill's pipeline reference.
rsigma CLI Reference
Full reference for rsigma, a Rust CLI for parsing, validating, linting, evaluating, and running Sigma detection rules.
Installation
cargo install rsigma---
rsigma eval
Evaluate JSON events against Sigma detection and correlation rules.
rsigma eval -r <rules> [-p <pipeline>]... [-e <event>] [options]| Flag | Default | Description |
|---|---|---|
-r, --rules | required | Path to rule file or directory |
-e, --event | stdin | Inline JSON, @path for NDJSON file, or omit for stdin |
-p, --pipeline | [] | Pipeline YAML file (repeatable, priority-ordered) |
--jq | none | jq filter for event extraction (conflicts with --jsonpath) |
--jsonpath | none | JSONPath (RFC 9535) query (conflicts with --jq) |
--include-event | false | Include full event JSON in match output |
--pretty | false | Pretty-print JSON output |
--suppress | none | Suppression window for correlation alerts (e.g. 5m) |
--action | none | alert or reset after correlation fires |
--no-detections | false | Suppress detection output (only correlation alerts) |
--correlation-event-mode | none | none, full, or refs |
--max-correlation-events | 10 | Max events stored per correlation window |
--timestamp-field | [] | Event field(s) for timestamp extraction (repeatable) |
Event Input Modes
| Mode | Format | Behavior |
|---|---|---|
-e '{"key":"val"}' | Inline JSON | Single event |
-e @path.ndjson | NDJSON file | Streams line-by-line |
(no -e) | stdin | NDJSON from stdin, exits at EOF |
Examples
# Single event
rsigma eval -r rules/ -e '{"CommandLine": "whoami"}'
# NDJSON file
rsigma eval -r rules/ -e @events.ndjson
# Stream from stdin with pipeline
cat events.ndjson | rsigma eval -r rules/ -p ecs.yml
# Extract nested event with jq
rsigma eval -r rules/ --jq '.event' -e '{"wrapper":true,"event":{"CommandLine":"whoami"}}'
# Array unwrap
rsigma eval -r rules/ --jq '.records[]' -e '{"records":[{"EventID":1},{"EventID":2}]}'
# Full event in output
rsigma eval -r rules/ --include-event -e @events.ndjson
# Correlation with suppression
rsigma eval -r rules/ --suppress 5m --action reset < events.ndjson
# Only correlation alerts (no per-event detections)
rsigma eval -r rules/ --no-detections --correlation-event-mode full < events.ndjsonDetection Match Output
{
"rule_title": "Detect Whoami",
"rule_id": "abc-123-...",
"level": "medium",
"tags": ["attack.execution"],
"matched_selections": ["selection"],
"matched_fields": [
{ "field": "CommandLine", "value": "cmd /c whoami" }
],
"event": null
}Correlation Match Output
{
"rule_title": "Brute Force",
"rule_id": null,
"level": "high",
"tags": [],
"correlation_type": "event_count",
"group_key": [["User", "admin"]],
"aggregated_value": 3.0,
"timespan_secs": 300,
"events": null,
"event_refs": null
}---
rsigma lint
Run 65 built-in lint rules with optional JSON schema validation.
rsigma lint <path> [options]| Flag | Default | Description |
|---|---|---|
<path> | required | Rule file or directory |
--schema, -s | none | "default" for official schema (cached 7 days) or path to local schema |
--verbose, -v | false | Show all files including passing |
--color | auto | auto, always, or never |
--disable | "" | Comma-separated rule IDs to suppress |
--config | none | Explicit path to .rsigma-lint.yml |
--fix | false | Auto-fix 13 safe rules |
Lint Categories
| Category | Rules | Examples |
|---|---|---|
| Infrastructure | 4 | yaml_parse_error, not_a_mapping |
| Shared metadata | 16 | missing_title, invalid_id, invalid_status, invalid_date |
| Detection rules | 17 | missing_logsource, missing_detection, condition_references_unknown |
| Correlation rules | 13 | missing_correlation_type, invalid_timespan_format |
| Filter rules | 8 | missing_filter, filter_has_level |
| Detection logic | 7 | incompatible_modifiers, wildcard_only_value |
Auto-Fixable Rules (13)
Invalid status, invalid level, non-lowercase keys, duplicate tags, duplicate references, duplicate fields, single value |all, |all with |re, wildcard-only value, logsource value not lowercase, filter has level, filter has status, unknown key (typo correction).
Suppression
Three-tier system:
- CLI:
--disable rule1,rule2 - Config file:
.rsigma-lint.ymlwithdisabled_rulesandseverity_overrides - Inline comments:
# rsigma-disable,# rsigma-disable-next-line
# .rsigma-lint.yml
disabled_rules:
- missing_description
- missing_author
severity_overrides:
title_too_long: infoExamples
rsigma lint rules/ # lint all
rsigma lint rules/ -v # verbose
rsigma lint rules/ --fix # auto-fix safe issues
rsigma lint rules/ --schema default # + JSON schema
rsigma lint rule.yml --schema my-schema.json # local schema
rsigma lint rules/ --disable missing_description # suppress rules
rsigma lint rules/ --config my-lint.yml # explicit config---
rsigma validate
Parse and compile all rules in a directory, reporting errors.
rsigma validate <path> [-v] [-p <pipeline>]| Flag | Default | Description |
|---|---|---|
<path> | required | Directory of Sigma YAML files |
-v, --verbose | false | Show per-file details |
-p, --pipeline | [] | Pipeline YAML file(s) to apply before compilation |
rsigma validate rules/ -v
rsigma validate rules/ -p ecs.yml---
rsigma daemon
Run as a long-running detection service with hot-reload and HTTP APIs.
rsigma daemon -r <rules> [-p <pipeline>]... [options]| Flag | Default | Description |
|---|---|---|
-r, --rules | required | Path to rule file or directory |
-p, --pipeline | [] | Pipeline YAML file(s) |
--jq | none | jq filter for event extraction |
--jsonpath | none | JSONPath (RFC 9535) query |
--include-event | false | Include full event in matches |
--pretty | false | Pretty-print output |
--api-addr | 0.0.0.0:9090 | HTTP API bind address |
--suppress | none | Correlation alert suppression window |
--action | none | alert or reset after correlation fires |
--no-detections | false | Only show correlation alerts |
--correlation-event-mode | none | none, full, or refs |
--max-correlation-events | 10 | Max events per correlation window |
--timestamp-field | [] | Event field(s) for timestamps |
--state-db | none | SQLite path for correlation state persistence |
--state-save-interval | 30 | Seconds between state snapshots |
HTTP Endpoints
| Endpoint | Method | Description |
|---|---|---|
/healthz | GET | {"status": "ok"} |
/readyz | GET | 200 when rules loaded, 503 otherwise |
/metrics | GET | Prometheus metrics |
/api/v1/status | GET | Full daemon status |
/api/v1/rules | GET | Rule counts and path |
/api/v1/reload | POST | Trigger rule reload |
Prometheus Metrics
| Metric | Type | Description |
|---|---|---|
rsigma_events_processed_total | counter | Total events processed |
rsigma_detection_matches_total | counter | Detection matches |
rsigma_correlation_matches_total | counter | Correlation matches |
rsigma_events_parse_errors_total | counter | JSON parse errors |
rsigma_detection_rules_loaded | gauge | Detection rules loaded |
rsigma_correlation_rules_loaded | gauge | Correlation rules loaded |
rsigma_correlation_state_entries | gauge | Active correlation entries |
rsigma_reloads_total | counter | Reload attempts |
rsigma_reloads_failed_total | counter | Failed reloads |
rsigma_event_processing_seconds | histogram | Per-event latency |
rsigma_uptime_seconds | gauge | Daemon uptime |
Hot-Reload Triggers
- File system changes to
.yml/.yamlfiles (debounced 500ms) SIGHUPsignal (Unix)POST /api/v1/reload
State Persistence
With --state-db, correlation state (window entries, suppression timestamps, event buffers) is persisted to SQLite. State survives restarts -- a correlation that saw 2 of 3 required events before restart resumes from 2. Uses WAL journal mode; entries are keyed by stable rule identifiers.
---
rsigma parse
Parse a Sigma YAML file and output the AST as JSON.
rsigma parse rule.ymlrsigma condition
Parse a condition expression and output the AST as JSON.
rsigma condition 'selection and not filter'rsigma stdin
Read a Sigma YAML document from stdin and output the AST as JSON.
cat rule.yml | rsigma stdin---
Environment Variables
| Variable | Scope | Effect |
|---|---|---|
NO_COLOR | lint | Disables color output |
RUST_LOG | daemon | Log level filter (default: info) |
Exit Codes
| Code | Meaning |
|---|---|
0 | Success |
1 | Error (parse failure, lint errors, missing arguments) |
sigma-cli Command Reference
Full reference for the official sigma-cli tool (v2.x), which wraps pySigma for command-line Sigma rule conversion.
Installation
pip install sigma-cli---
sigma convert
Convert Sigma rules into backend-specific queries.
sigma convert -t <backend> [-p <pipeline>]... [-f <format>] [-o <output>] [-O <key=value>]... <input>| Flag | Description |
|---|---|
-t, --target | Backend identifier (required). E.g. splunk, elasticsearch, kusto |
-p, --pipeline | Processing pipeline name or YAML file (repeatable, applied in order) |
-f, --format | Output format (default: default). Use sigma list formats <backend> to see options |
-o, --output | Output file path (default: stdout) |
-O, --backend-option | Backend-specific key=value option (repeatable) |
<input> | Path to a Sigma rule file or directory |
Examples
# Convert to Splunk SPL with Sysmon pipeline
sigma convert -t splunk -p sysmon rules/windows/
# Convert to Elasticsearch Lucene with ECS pipeline
sigma convert -t elasticsearch -p ecs_windows rules/
# Convert to Kibana NDJSON format for import
sigma convert -t elasticsearch -p ecs_windows -f kibana_ndjson -o export.ndjson rules/
# Convert to Splunk saved searches config
sigma convert -t splunk -p sysmon -f savedsearches -o saved.conf rules/
# Convert to KQL for Microsoft Sentinel with ASIM
sigma convert -t kusto -p sentinel_asim rules/
# With backend options
sigma convert -t splunk -p sysmon -O index=main -O source=WinEventLog rules/
# Multiple pipelines (applied in order)
sigma convert -t splunk -p sysmon -p splunk_cim_dm rules/---
sigma list
List available backends, output formats, pipelines, and validators.
sigma list targets
Show locally installed backends:
sigma list targetssigma list formats
Show output formats for a specific backend:
sigma list formats <backend>Example output:
+----------------+----------------------------------------+
| Format | Description |
+----------------+----------------------------------------+
| default | Plain SPL queries |
| savedsearches | Splunk savedsearches.conf format |
| data_model | Splunk data model queries |
+----------------+----------------------------------------+sigma list pipelines
Show available processing pipelines:
sigma list pipelinessigma list validators
Show available rule validators:
sigma list validators---
sigma plugin
Manage backend plugins.
sigma plugin list
Show all available plugins (backends, pipelines, validators):
sigma plugin list # all plugins
sigma plugin list -t backend # only backends
sigma plugin list -t pipeline # only pipelinesOutput columns: Identifier, Type, State (stable/testing/development), Description.
sigma plugin install
Install a plugin:
sigma plugin install <identifier>sigma plugin uninstall
Remove a plugin:
sigma plugin uninstall <identifier>---
sigma check
Validate Sigma rule syntax:
sigma check <input>Checks rule structure against the Sigma specification without converting.
---
Output Formats by Backend
Each backend provides its own set of output formats. Common patterns:
| Backend | Format | Description |
|---|---|---|
splunk | default | Plain SPL queries |
splunk | savedsearches | savedsearches.conf format |
splunk | data_model | Data model / tstats queries |
elasticsearch | default | Lucene queries |
elasticsearch | kibana_ndjson | Kibana importable NDJSON |
elasticsearch | esql | ES\ |
elasticsearch | eql | EQL queries |
elasticsearch | dsl_lucene | Full DSL with Lucene query |
kusto | default | KQL queries |
loki | default | LogQL queries |
loki | ruler | Loki ruler YAML for alerting |
Use sigma list formats <backend> for the definitive list after installing a plugin.
---
Pipeline Specification
Pipelines can be specified by name (for built-in pipelines bundled with a backend plugin) or by file path (for custom YAML pipelines):
# By name (built-in)
sigma convert -t splunk -p sysmon rules/
# By file path (custom)
sigma convert -t splunk -p ./my-pipeline.yml rules/
# Multiple (stacked in order)
sigma convert -t elasticsearch -p sysmon -p ecs_windows -p ./custom.yml rules/---
Exit Codes
| Code | Meaning |
|---|---|
0 | Success |
1 | Error (parse failure, conversion error, missing plugin) |