Skip to content

Automation  ·  IT and security

How to build security alert triage

Four thousand alerts a week and the one that mattered was closed as noise by somebody on their fourth hour. This is the design behind triage that reduces the queue, the prompts that build it, and what production adds.

Built with Tray Headless

  1. System Datadog
  2. Step Enrich
  3. Step Suppress known-benign
  4. Step Score on asset
  5. System Jira
Also PagerDuty

Enrichment happens before a human sees the alert, and suppression is time-boxed so a rule cannot silently hide a real detection forever.

The short answer

What is security alert triage automation?

Security alert triage is four parts: enrichment that answers the obvious questions before a human opens the alert, suppression of known-benign patterns with an expiry so nothing hides forever, scoring on the value of the asset instead of the severity the tool assigned, and measuring what was closed instead of what fired. Teams usually come unstuck on suppression without expiry. A rule written during one noisy week silently hides a real detection two years later and nobody remembers it exists.

What matters here

  • Enrich before a human sees it. Most triage time is spent answering questions a machine could have answered already.
  • Every suppression rule gets an expiry. A rule with no end date is a permanent blind spot nobody revisits.
  • Score on the asset, not the tool severity. A medium on a production database outranks a critical on a test box.
  • Measure alerts closed and time to triage, not alerts generated. Volume rises with instrumentation and means nothing.
  • Track false negatives found later. That is the only honest measure of whether suppression went too far.

Who this is for

You run security operations. The queue is thousands of alerts a week, most are noise, and the concern is that the real one gets closed by somebody tired.

How it works in practice

From a detection firing to somebody deciding it matters, in order.

  1. 1

    The alert is enriched before anybody opens it

    Asset owner, environment, exposure, recent changes, and whether this fired before.

  2. 2

    Known-benign patterns are suppressed with an expiry

    Every rule ends, so a blind spot cannot be permanent by accident.

  3. 3

    Scoring uses the asset, not the tool severity

    A medium on a production database outranks a critical on a test instance.

  4. 4

    Related alerts are grouped into one case

    Forty alerts from one misconfiguration is one investigation, not forty.

  5. 5

    Only what survives reaches a human

    With the context already attached, so triage starts at the decision rather than the research.

  6. 6

    Outcomes are recorded on every alert

    True positive, benign, or a duplicate, which is what makes the suppression rules improvable.

What triage is made of

Four parts, and the second is the one that becomes a liability if it is done carelessly.

Enrichment first

Asset, owner, environment, exposure and change history attached automatically. Most triage time is research a machine can do.

Expiring suppression

Every rule has an end date and an owner. A permanent suppression is a blind spot that outlives the person who created it.

Asset-based scoring

The tool knows the detection and you know the asset. Severity that ignores what the asset is will always be wrong.

Outcome measurement

Closed, time to triage and false negatives found later. Alerts generated is a measure of instrumentation, not of security.

The Tray Headless prompts

Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.

Once per project, run /tray-workflows:set-workspace to pick the workspace these build in. Point it at a sandbox first.

  1. 1

    Set up, then get the asset context

    Scoring depends on knowing what the asset is worth.

    Headless skills build-workflow

    Use build-workflow. The systems in play are Datadog, Okta, Jira,
    PagerDuty, Slack and Snowflake, or whatever we run in those seats.
    Before you plan anything, tell me which of them are already
    authenticated in the workspace, because I do not want a connector
    stubbed that I have not authenticated.
    
    The detail that matters most is the detection sources and our asset
    inventory. I need: alerts with their raw detail, the asset register
    with owner, environment and data classification, and recent change
    events.
    
    The asset register is the constraint. If we cannot resolve an alert to a
    known asset with an owner and an environment, everything downstream is
    guessing, and that is worth knowing before we build scoring on top of
    it.
  2. 2

    Enrich before a human ever sees it

    Most triage time is research a machine could have done.

    Headless skills build-workflow

    Use build-workflow. On every alert, before it reaches a queue, attach:
    
      The asset, its owner, environment and data classification
      Whether it is internet-facing
      Deploys and configuration changes on that asset in the last 24 hours
      How many times this detection fired on this asset in 30 days, and what
      the outcome was each time
      Any related alert within a short window
      For an identity alert, the user, their department and whether they are
      a leaver
    
    An analyst opening an alert should be deciding, not researching. Every
    one of those lookups is something they would have done by hand, and doing
    them beforehand is most of the value here.
  3. 3

    Suppress with an expiry, always

    A rule with no end date is a permanent blind spot.

    Build suppression, and give every rule an expiry and a named owner.
    
      Known-benign patterns: a scanner we run, a backup job, a health check
      Expected noise from a specific asset during a known change window
      Duplicate detections of the same thing from two tools
    
    Maximum 90 days. When a rule expires it stops suppressing and asks the
    owner whether to renew, rather than lapsing silently in either direction.
    
    Never allow a permanent rule. A suppression written during one noisy week
    in 2024 hides a real detection in 2026, and by then nobody remembers it
    exists or why.
    
    Report what each rule suppressed. A rule silently eating thousands of
    alerts a month deserves a look, because it is either doing great work or
    hiding something.

    The expiry is the whole control. Suppression is necessary and it is also how detections quietly disappear, and only an expiry keeps both true.

  4. 4

    Score on the asset, and group the related

    Forty alerts from one misconfiguration is one investigation.

    Headless skills tray-gotchas

    Use tray-gotchas, then score using the asset rather than the tool
    severity:
    
      Detection severity as the starting point
      Multiplied by data classification and whether the asset is
      internet-facing
      Raised if the asset is in production
      Raised if the same detection is firing across several assets, which
      suggests something systemic
      Lowered if it fired and was benign repeatedly on this asset
    
    Group related alerts into one case: same asset within a window, same
    detection across assets, or the same identity across systems. Forty
    alerts from one misconfiguration is one investigation, and presenting it
    as forty is how the queue becomes unmanageable.
  5. 5

    Measure outcomes, including the ones you missed

    Alerts generated rises with instrumentation and says nothing.

    Record an outcome on every alert: true positive, benign, duplicate, or
    suppressed by rule.
    
    Then report: alerts closed and time to triage, not alerts generated;
    suppression coverage, meaning the share never seen by a human; precision
    per detection source; and false negatives found later, where an incident
    turned out to have a suppressed or closed alert in its history.
    
    That last number is the only honest check on whether suppression has gone
    too far, and it is the one almost nobody produces because it requires
    looking back.
  6. 6

    Validate it, then hand the rules to security ops

    Because suppression is a security decision with an owner.

    Run the per-step schema checks and the whole-workflow audit before this
    touches production. Run it shadow for a fortnight: enrich and score
    everything, suppress nothing, and compare what it would have hidden
    against what analysts actually closed.
    
    Then open the same workflow in Tray Build so security operations can
    manage suppression rules, expiries and scoring weights in the visual
    canvas.

What it connects to

Detections come from several tools and have to meet asset context before a human sees them.

Datadog

Read security detections with their raw context, and read deploys on the affected asset.

Reads

Okta

Resolve identity alerts to a person, their department, and whether they are a leaver.

Reads

Jira

Create one case per grouped incident where the team already works, with enrichment attached.

Writes

PagerDuty

Page only for what survives scoring, so an out-of-hours page still means something.

Writes

Slack

Ask an asset owner whether activity was expected, which resolves a large share of alerts in one message.

Writes

Snowflake

Land alerts and their outcomes, so precision per source and false negatives are measurable.

Writes

Same build, other stacks

The design does not change if you run something else in one of these seats. The same prompts build it against Google BigQuery, Microsoft Teams, Azure Active Directory, ServiceNow, Databricks or Google Chat.

Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.

Running it in production

This decides what a human sees. Suppressing wrongly is the failure that matters.

It runs where production runs, not on a laptop

Enrichment and scoring run on every detection at whatever volume an incident produces, with a record of each decision.

Every suppression is attributable and temporary

Which rule, whose, when it expires, and what it hid. A suppression nobody can explain is a blind spot.

Managed credentials, not secrets in a config file

Reading security telemetry and the asset register is privileged. Both are authentications in your workspace, read-only and scoped.

Security ops own the rules

Suppression, expiries and scoring weights open in Tray Build, owned by the team accountable for what gets missed.

Run it shadow first

A fortnight enriching and scoring while suppressing nothing, compared against what analysts actually closed. That comparison sets the rules honestly.

Questions people ask

Why must suppression rules expire?

Because a rule written during one noisy week becomes a permanent blind spot. Two years later it hides a real detection and nobody remembers it exists or why it was created.

Why score on the asset rather than the tool severity?

Because the tool knows the detection and you know the asset. A medium severity on a production database holding customer data outranks a critical on a test instance every time.

Why group alerts?

Because forty alerts from one misconfiguration is one investigation. Presenting it as forty separate items is how a queue becomes unmanageable and how the real one gets closed by somebody tired.

What should alert triage measure?

Alerts closed, time to triage, precision per source, and false negatives found later. Alerts generated rises with instrumentation and tells you nothing about security.

How do you roll this out safely?

Shadow mode for a fortnight: enrich and score everything, suppress nothing, then compare what it would have hidden against what analysts actually closed as noise.

Vibe-coding app guides

Vibe-code an entire app with Helix

This moves the data between systems. It does not give anybody a screen to work in. Build that app in Claude Code, Codex or Cursor, then deploy and run it governed on Tray Helix. Same kind of guide, same kind of prompts.

How to build an incident and postmortem tracker (opens helix.tray.ai in a new tab)

Last reviewed September 2026.