Platform · 02 Author
A source with no detections is a source you cannot see with. Qvasir drafts detections against the schema a source actually has, validates them against that schema, and backtests them on your own history — so a new log source becomes coverage in an afternoon, not a content-pack release cycle.
Most detection content fails quietly: rules written for fields your telemetry doesn't populate. Qvasir grounds every rule in measured reality.
Where detections come from
A detection rarely begins with someone opening a blank editor. It begins with a source you just connected, a gap on a coverage matrix, a hunch after an incident, or a CVE that landed on a Friday. Qvasir can start from any of them, and each one produces rules written against the fields your sources actually carry.
It reads the source's actual telemetry and proposes concrete detection ideas — each naming the technique, the specific fields that make it feasible here, and the events it would target.
Start from an ATT&CK technique and it builds toward that coverage, using the sources in your estate that could witness it.
Describe it in your own words. Your guidance is binding on the generation, not a hint it can quietly ignore.
A CVE, a scanner export, or a purple-team result becomes candidate detections — the worked example below.
The first one is the one that matters most, and it is the least discussed. For Windows and Sysmon there is a decade of community content to borrow from. For a Proxmox cluster, a UniFi firewall, a building-management system or an application your own team wrote, there is nothing — no rule pack, no blog post, no Sigma rule to adapt. Writing detections for those sources means learning the data first, and that is exactly the work Qvasir does before it proposes anything. The less common your estate, the more this is worth.
What "generated" means here
Most AI rule generation ends at plausible text. This one ends at a rule that has been checked against your schema and fired against the real engine — or at an honest refusal.
Where a source carries dozens of event shapes, the relevant ones are chosen before generation begins — by inspecting the catalogue rather than taking the highest-volume ones, because the low-volume tail is where most attack telemetry lives. It also checks what you already have, so it is not rewriting a rule you wrote last month.
Every candidate goes through the same validation an authored rule does — against that rule's own cluster schema. What fails goes back for correction with the field catalogue attached, so "use fields that exist" is actionable rather than an instruction. A separate pass then audits each survivor cold, and any fix it makes is reverted if re-validation finds a new error.
A rule that matches nothing is the most common failure in detection content, and it is invisible on inspection. So the platform constructs an event the rule should match — solved from the rule's own logic, not invented — and runs it through the same engine that will evaluate it in production. A rule that does not fire gets one more attempt, then is discarded with the failing selections named.
Firing on a purpose-built event is a low bar: a condition that could never match your actual data still passes it. So each branch of the detection is replayed separately against real events from that rule's own cluster. Branches that cannot match the value shapes your source produces are reported — the rule still ships, because hunting for what history lacks is legitimate, but you are told which half of it is currently unreachable.
"No rule" is a valid outcome with a stated reason, not an error and not an empty result dressed up as success. If your telemetry cannot support the detection you asked for, that is the finding.
Detection conditions, ATT&CK tags, false-positive notes and triage guidance are never invented to make a rule look complete — and any allowlist value the model tries to add is stripped outright, because a generated exception is a blind spot nobody asked for.
The dependency, stated here too. Generation needs a reachable model provider — OpenAI, Gemini or Claude. Everything around it does not: writing and editing a rule by hand needs nothing but you, and the validation, calibration and deployment path those rules travel is deterministic either way.
A worked example
A CVE lands on a Friday. The traditional path is to wait for your SIEM vendor to ship content for it, or to write the rule yourself against documentation and hope your telemetry carries the fields it assumes. Qvasir does neither.
A CVE, a scanner export, or a purple-team result — whatever put the weakness on your radar.
What the weakness is, how it is exploited, and what that exploitation would look like in telemetry.
Which of your onboarded log sources could actually witness exploitation — and says so plainly when none of them can.
Candidate rules written against your real fields and validated against their schema — ready to calibrate against your history before you deploy them.
Step 03 is the one that matters most, and it is the one a content pack can never do: a detection is only as real as the telemetry underneath it. If nothing you collect could see the exploitation, the honest answer is a visibility gap — and Qvasir tells you that instead of shipping a rule that will never fire.
Every detection is human-readable FDL in git — reviewable in a pull request, diffable, and versioned per rule with its own history. No opaque rule store between you and your own logic.
See the grammar, with real rules →Correlation, aggregation and low-and-slow detections are expressed in the same grammar as a simple match — so the hard rules are as reviewable as the easy ones.
Drafting is AI-assisted end to end and every generated rule is yours to accept, edit or reject. The model proposes; the validator checks it against your schema; you decide what ships.