Complete reference for all configuration keys in seerflow.yaml.
All settings are optional — sensible defaults apply when omitted.
Seerflow loads configuration from seerflow.yaml in the current working directory. If no file is found, sensible defaults are used.
All string values support ${VAR} and ${VAR:-default} interpolation:
postgresql_url : ${DATABASE_URL:-postgresql://localhost/seerflow}
- auth_token : ${GITHUB_WEBHOOK_SECRET}
Key Type Default Description dashboard_portint 8080HTTP port for the Seerflow dashboard UI, REST API, and WebSocket. health_bind_addressstring "127.0.0.1"Bind address for the health endpoint. Set 0.0.0.0 for container access. log_levelstring "INFO"Application log verbosity. One of DEBUG, INFO, WARNING, ERROR, CRITICAL.
Key Type Default Description backendstring "sqlite"Storage engine. sqlite (zero-config) or postgresql (production scale). data_dirstring ~/.local/share/seerflowRoot data directory. Respects $XDG_DATA_HOME and $SEERFLOW_DATA_DIR. sqlite_pathstring <data_dir>/seerflow.dbAbsolute path to the SQLite database file. Derived from data_dir when omitted. postgresql_urlstring ""PostgreSQL DSN, e.g. postgresql://user:pass@host/db. Required when backend=postgresql. Supports ${ENV_VAR} interpolation. postgresql_pool_min_sizeint 2asyncpg pool floor (>= 1). Only used when backend=postgresql. postgresql_pool_max_sizeint 10asyncpg pool ceiling (>= pool_min_size). postgresql_command_timeout_sfloat 30.0Per-query timeout in seconds (must be > 0). graph_backendstring "igraph"Entity-graph backend. One of igraph, falkordb, postgres_age. falkordb_urlstring ""FalkorDB connection URL, e.g. falkor://host:6379. Required when graph_backend=falkordb. Install with uv sync --extra graph-falkordb.
postgres_age reuses postgresql_url and requires the AGE extension to be installed on the server (CREATE EXTENSION age). Install with uv sync --extra graph-postgres-age. To move a graph between backends use seerflow graph migrate --from <a> --to <b>.
Key Type Default Description bind_addrstring "0.0.0.0"IP address all receivers bind to. Set to 127.0.0.1 to restrict to localhost. queue_maxsizeint 10000Maximum events in the internal receiver queue before back-pressure is applied.
Key Type Default Description syslog_enabledbool trueEnable the syslog listener (both UDP and TCP when their respective flags are set). syslog_udp_portint 514UDP port for syslog (RFC 3164 / RFC 5424). syslog_tcp_portint 601TCP port for syslog (RFC 6587). syslog_tcp_enabledbool trueEnable TCP syslog. Set false to accept UDP only while syslog_enabled=true.
Key Type Default Description otlp_grpc_enabledbool trueEnable the OTLP/gRPC receiver. otlp_grpc_portint 4317gRPC port (standard OTLP port). otlp_grpc_max_workersint 4Thread-pool size for the gRPC server.
Key Type Default Description otlp_http_enabledbool trueEnable the OTLP/HTTP receiver. otlp_http_portint 4318HTTP port (standard OTLP/HTTP port). otlp_http_max_request_bytesint 4194304Maximum allowed request body size in bytes (default 4 MiB). Raise for high-volume batches.
Key Type Default Description file_pathslist[string] []Glob patterns for log files to tail, e.g. /var/log/*.log. file_checkpoint_dirstring ""Directory to persist tail offsets across restarts. Empty string disables checkpointing. file_debounce_msint 1600Milliseconds to wait after the last write event before re-reading a file. allowed_log_rootslist[string] []Security allowlist: file_paths must fall under one of these directory prefixes.
Key Type Default Description webhook_enabledbool falseEnable the inbound HTTP webhook listener. webhook_portint 8081Port for the webhook HTTP server. Must be 1-65535. webhookslist[mapping] []Per-endpoint webhook configurations (see sub-table below).
Key Type Default Description pathstring "/ingest/webhook"URL path that this endpoint listens on. auth_headerstring ""HTTP header name used for token authentication. Must be paired with auth_token. auth_tokenstring ""Expected token value. Supports ${ENV_VAR} interpolation. Must be paired with auth_header. field_mappingmapping {}Maps Seerflow field names to JSON path keys in the incoming payload. source_idstring "webhook"Identifier applied to events received on this endpoint.
Key Type Default Description sigma_rules_dirslist[string] []Additional directories containing custom Sigma rule YAML files. Loaded alongside the 63 bundled rules. sigma_custom_upload_dirstring nullDirectory the dashboard upload UI persists Sigma rules into. Always discovered at startup. attack_mappingslist[mapping] []Per-rule overrides for MITRE ATT&CK tags.
Key Type Default Description hst_window_sizeint 1000Sliding window size. hst_n_treesint 25Number of trees in the ensemble.
Key Type Default Description dspot.calibration_windowint 1000Minimum events required before DSPOT activates. dspot.risk_levelfloat 0.0001Target false-positive rate (1 alert per 10,000 normal events). dspot.initial_percentileint 98Percentile used to seed the initial threshold. dspot_threshold_cap_multiplierfloat 5.0Hard cap on threshold growth (× the initial value). Stops runaway drift.
Key Type Default Description hw_seasonal_periodint 1440Bucket count for one season (minutes in a day). hw_alphafloat 0.3Level smoothing factor. hw_betafloat 0.1Trend smoothing factor. hw_gammafloat 0.1Seasonal smoothing factor. hw_n_stdfloat 3.0Standard-deviation multiplier for the anomaly band.
Key Type Default Description cusum_driftfloat 0.5Allowable drift before accumulating a deviation. cusum_thresholdfloat 5.0Cumulative-sum threshold that flags a change. cusum_ema_alphafloat 0.1EMA smoothing factor for the baseline. cusum_warmup_bucketsint 30Buckets observed before CUSUM is allowed to fire.
Key Type Default Description markov_smoothingfloat 1e-6Laplace smoothing applied to transition probabilities. markov_min_eventsint 100Minimum events per entity before scoring is enabled. markov_max_entitiesint 1000Per-source cap on entities held in memory.
DetectionEnsemble blends the four ML scores. Weights do NOT need to sum to 1.0 — the blender divides by their sum.
Key Type Default Purpose weights_contentfloat 0.30Half-Space Trees. weights_volumefloat 0.25Holt-Winters. weights_sequencefloat 0.25Markov chain. weights_patternfloat 0.20CUSUM. weights_template_volumefloat 0.15Holt-Winters keyed on Drain3 template. weights_entity_volumefloat 0.15Holt-Winters keyed on entity.
Key Type Default Description risk_half_life_hoursint 4Exponential decay half-life on accumulated entity risk. risk_thresholdfloat 50.0Risk score at which an alert fires. risk_max_entitiesint 10000Cap on entities held in the risk register. graph_algo_intervalint 500Re-run graph algorithms (PageRank, Louvain, etc.) every N events.
Key Type Default Description max_sourcesint 256Max distinct sources tracked by detectors. score_intervalint 1Score every Nth event per source. 1 = every event. min_events_for_scoringint 50Events observed per source before scoring engages. max_template_hwint 500Max Drain3 templates tracked by per-template volume detector. max_entity_hwint 500Max entities tracked by per-entity volume detector. model_save_interval_secondsint 300Period between ML model state checkpoints.
Cross-source correlation engine — sliding window + risk register + graph-structural scoring.
Key Type Default Description window_duration_secondsint 1800Per-entity sliding-window duration (30 minutes). max_events_per_entityint 1000Cap on events retained per entity inside the window. max_entitiesint 10000Cap on entities held in memory by the correlation engine. late_tolerance_secondsint 30Watermark tolerance for out-of-order / late-arriving events. rule_dirslist[string] []Extra directories containing custom correlation rule YAMLs.
Key Type Default Description community_crossing_enabledbool trueFlag edges that cross detected igraph communities. betweenness_thresholdfloat 0.3Minimum normalized betweenness centrality to flag a bridge entity. fan_out_sigmafloat 3.0Standard-deviation multiplier above per-entity fan-out history to flag. fan_out_min_floorint 5Minimum fan-out value before fan-out scoring engages. fan_out_history_sizeint 20Rolling history length used for fan-out statistics.
Key Type Default Description enabledbool trueEnable MITRE ATT&CK tactic-progression detection. tactic_thresholdint 3Distinct tactics within window_seconds required to fire. window_secondsint 86400Time window for tactic progression (24h). max_entitiesint 10000Memory cap.
User and Entity Behaviour Analytics — per-entity baselines.
Key Type Default Description enabledbool trueMaster switch for the UEBA engine. warmup_daysint 7Days of observation before scoring kicks in for a new entity. warmup_min_eventsint 50Minimum events observed before scoring kicks in. max_entitiesint 100000Entity cap for UEBA state. ema_alphafloat 0.05Exponential-moving-average smoothing factor. source_ip_capint 64Max distinct source IPs tracked per entity. template_top_kint 32Top-K Drain3 templates retained per entity. score_thresholdfloat 0.75Alert threshold for the blended UEBA score. alert_cooldown_secondsint 900Cooldown between UEBA alerts for the same entity.
TAXII 2.1 feeds matched against ingested events via a Bloom-filter IoC matcher.
Key Type Default Description enabledbool falseMaster switch. feedslist[mapping] []TAXII feeds to poll (see sub-table below). default_poll_interval_sint 3600Default poll cadence per feed (1h). request_timeout_sfloat 30.0HTTP request timeout. max_indicators_per_feedint 1000000Hard cap to bound memory. expired_grace_daysint 30Days to retain indicators after their expiry date. startup_jitter_sint 30Random delay before first poll to spread load.
Key Type Default Description idstring required Stable identifier for the feed. urlstring required TAXII server root URL. collection_idstring required TAXII collection ID to poll. poll_interval_sint inherits Override default_poll_interval_s for this feed. confidence_floorint 0Drop indicators below this confidence score. enabledbool truePer-feed switch. allow_insecurebool falseAllow http:// (non-TLS) URLs. Use only in lab environments. allow_private_addressesbool falseAllow feed URLs that resolve to private IP ranges (lab only). auth.kindstring — One of api_key or basic. auth.api_key_envstring — Env var name holding the API key. auth.api_key_headerstring "Authorization"Header name for the key. auth.username_env / auth.password_envstring — Env vars for basic-auth credentials.
Key Type Default Description enabledbool falseEnable the Bloom-filter matcher. fprfloat 0.001Target false-positive rate (0.1%). min_capacityint 100000Initial filter capacity (indicators). capacity_growth_factorfloat 1.25Multiplier when the filter is rebuilt with more indicators. confidence_floorint 0Drop indicators below this confidence score from the filter. rebuild_debounce_msint 200Coalesce rebuilds within this window after feed updates. enabled_typeslist[string] [ipv4, ipv6, domain, url, md5, sha1, sha256]IoC types loaded into the filter.
See the Alerting page for narrative + examples. Every channel below is opt-in — nothing fires until you list a target.
Key Type Default Description dedup_window_secondsint 900Default dedup window (15 min). dedup_window_overrideslist[(string, int)] []Per alert_type override, e.g. [["correlation", 300]]. dashboard_urlstring ""Base URL injected into message renderers for deep-links back to the dashboard.
Key Type Default Description urlstring required Webhook URL. Supports ${ENV_VAR}. formatstring "json"One of slack, teams, json. min_severityint 0Minimum OCSF severity ID (0–6) to dispatch.
Key Type Default Description pagerduty_routing_keystring ""Events API v2 routing key. Supports ${ENV_VAR}. Hidden from repr.
Key Type Default Description namestring required Identifier referenced from routing_rules. smtp_host / smtp_portstring / int required SMTP server. use_starttlsbool required Enable STARTTLS. from_address / to_addressesstring / list[string] required Envelope. smtp_user / smtp_passwordstring ""Hidden from repr. Read at startup; rotate via restart. min_severityint 0OCSF severity gate. max_per_minuteint? nullToken-bucket cap; omit for unlimited.
Key Type Default Description namestring required account_sidstring required Twilio account SID. auth_tokenstring ""Hidden from repr. from_number / to_numbersstring / list[string] required E.164. min_severityint 0rate_per_second / burstfloat / int 1.0 / 3Token-bucket limit.
Key Type Default Description namestring required bot_tokenstring ""Hidden from repr. chat_idstring required User ID or group ID (negative for groups). min_severityint 0rate_per_second / burstfloat / int 30.0 / 30Telegram’s documented limit.
Key Type Default Description namestring required phone_number_idstring required WhatsApp Cloud phone ID. template_name / language_codestring required Pre-approved template + language. access_tokenstring ""Hidden from repr. to_numberslist[string] required E.164. min_severityint 0rate_per_second / burstfloat / int 10.0 / 20Token-bucket + internal circuit breaker.
Key Type Default Description routing_rules[].match.alert_typestring or list — sigma, ml, correlation, ueba, ioc.routing_rules[].match.rule_namestring — fnmatch.fnmatchcase glob.routing_rules[].match.entity_typestring or list — ipv4, user, host, etc.routing_rules[].match.min_severity / max_severityint — Inclusive range. routing_rules[].notify[].channelstring required Reference to a target’s name. routing_rules[].notify[].modestring "immediate"immediate or digest.routing_rules[].notify[].digest_window_minutesint 15Only used with digest. default_routing.actionstring "drop"drop or notify.default_routing.notifylist[mapping] []Same shape as routing_rules[].notify.
Key Type Default Description quiet_hours_by_channellist[(string, mapping)] []Pair [channel_name, { start, end, min_severity }]. Times UTC. Severities >= min_severity still break through.
Key Type Default Description otlp_endpointstring ""OTel collector endpoint (host:port). Empty disables export. otlp_protocolstring "grpc"grpc or http.otlp_export_interval_secondsint 5Batch flush cadence. otlp_tlsbool? nullOverride the scheme-derived TLS default. otlp_tls_ca_filestring ""Custom CA PEM. otlp_mtls_cert_file / otlp_mtls_key_filestring ""Client cert PEMs for mTLS.
See the LLM Overview for narrative.
Key Type Default Description backendstring ""llama_cpp, ollama, cloud, or "" to disable.
Key Type Default Description model_pathstring ""Path to a GGUF model. n_ctxint 4096Context window in tokens. n_threadsint? nullCPU threads; null uses the default. n_gpu_layersint 0Layers to offload to GPU (0 = CPU-only). max_tokens_defaultint 256Per-request token cap. temperature_defaultfloat 0.2Sampling temperature. seedint 42Deterministic sampling seed.
Key Type Default Description ollama_urlstring "http://localhost:11434"Ollama server URL. ollama_modelstring "phi4-mini"Pulled model name. ollama_timeout_sfloat 30.0Per-request wall-clock timeout.
Key Type Default Description cloud_providerstring ""anthropic or openai.cloud_api_keystring ""API key. Hidden from repr. cloud_modelstring ""Model ID, e.g. claude-sonnet-4-6. cloud_timeout_sfloat 30.0Per-request wall-clock timeout. cloud_base_urlstring ""Override provider base URL (proxies, gateways).
Key Type Default Description explanation_cache_sizeint 256LRU size for AlertExplanationService.
/api/v1/ws is the dashboard’s live feed. These knobs sit at the top level of seerflow.yaml.
Key Type Default Description ws_max_connectionsint 20Max concurrent client connections. ws_queue_maxlenint 1000Per-connection outbound queue (drops oldest on overflow). ws_tick_interval_sfloat 0.01Internal flush cadence. ws_batch_max_eventsint 10Max events grouped into one frame. ws_status_interval_sfloat 5.0Cadence of pipeline status frames. ws_allowed_originslist[string] []Explicit Origin allowlist. Empty = localhost defaults derived from dashboard_port. ws_filter_min_interval_msint 100Debounce window for filter-change re-subscriptions.
Top-level keys controlling REST API rate limits + CORS + reverse-proxy trust.
Key Type Default Description api_rate_limit_enabledbool trueMaster switch for endpoint rate limits. api_rate_limit_redis_urlstring? nullRedis URL for multi-process limit sharing. Hidden from repr. Falls back to per-process in-memory. api_allowed_originslist[string] []CORS allowlist. Empty = no CORS (same-origin only). api_list_rate_limitstring "60/minute"Limit for list endpoints (/alerts, /events, /entities/search). api_detail_rate_limitstring "300/minute"Limit for detail endpoints. api_coverage_rate_limitstring "10/minute"Limit for the expensive /attack/coverage endpoint. api_trust_proxy_headersbool falseWhen true, honour X-Forwarded-For for rate-limit client identity. Enable only behind a trusted reverse proxy.
# - /etc/seerflow/sigma-rules
window_duration_seconds : 1800
dedup_window_seconds : 900
postgresql_url : ${SEERFLOW_PG_URL}
postgresql_pool_min_size : 4
postgresql_pool_max_size : 20
graph_backend : postgres_age
dedup_window_seconds : 900
pagerduty_routing_key : ${SEERFLOW_PD_KEY}
- url : ${SLACK_WEBHOOK_URL}
url : https://otx.alienvault.com/taxii2/