Auto-Triage and Assign Bugs by Severity
By the end of this recipe, every bug that lands in your tracker gets labeled by severity, tagged to the right area, assigned to an owner, put on the clock with an SLA, and — if it's Critical — escalated to your team, all within seconds and without anyone lifting a finger. Triage is the tax every engineering team pays on incoming bugs; because your reports, board, and team all live in one workspace, an Automation can read each new bug and do the routing for you.
Readiness: Available now (built as one Automation). The version where a named "Triage Lead" teammate watches the board and labels and assigns bugs under its own identity is rolling out in early access.
What it does
A single automation sits on your Bugs board and fires the moment a new bug arrives — from a form, an email, an error tracker, or a teammate typing it in by hand. For each one it:
- Classifies the severity — reads the title and description and labels it Critical, High, Medium, or Low against definitions you set.
- Identifies the area — classifies which part of the product the bug touches (Frontend, Backend, Payments, Mobile…) so it can be routed.
- Assigns the owner — branches on that area and puts the right person on the row.
- Starts the SLA — kicks off a response timer, tighter for higher severity, so nothing quietly ages out.
- Notifies and escalates — pings the assigned owner, and pages your engineering channel immediately for anything Critical.
- Marks it Triaged — flips the status so the team can see at a glance that the bug has been processed.
The result is that a raw, messy report becomes a labeled, owned, on-the-clock ticket before a human ever opens it — and a person can still override any of it.
Build it yourself
One-time setup
Make a board with a table for bugs. Add columns for Title, Description (rich text), Severity (single-select: Critical, High, Medium, Low), Area (single-select for your product areas or teams), Owner (people), Status (New, Triaged, In Progress, Done), Environment, and an SLA column. This board is both your triage queue and your bug archive.
However bugs reach you, land them all as rows in this table so one triage automation can cover them. Real intake paths, all built from standard triggers:
- A public bug-report form on the table (a Form submitted trigger that creates the row).
- An Email received / Gmail received trigger on your bug inbox that creates the row.
- An Inbound webhook received trigger fed by your error tracker or monitoring tool.
Because the triage automation below triggers on Row created, you build the triage logic once and every intake path inherits it.
The triage automation
Add a Row created trigger on the Bugs table. It fires for every new bug, no matter how it arrived.
Add an AI → Classify step that reads the bug's title and description and sorts it into your severity labels (Critical, High, Medium, Low). Spell out what each label means in the step so the AI matches your team's bar — for example, Critical = data loss or a full outage.
Add a second AI → Classify step to label the affected Area (Frontend, Backend, Payments…). This is the field you'll route on. Want more structure? Add an AI → Extract step to pull the environment, app version, and steps to reproduce out of the free-text report into their own columns.
Add Set field actions to write Severity and Area (and any extracted details) back onto the triggering row, so the labels are visible in every view and usable by later steps.
Add a Compare condition on Area and, on each branch, an Assign user(s) action that adds that area's owner to the Owner column — Frontend → Alex, Backend → Sam, Payments → Jordan. Add one branch per area or team you route to.
Add an SLA timer control action to start the clock on the row. Set the actual response targets per severity on the board's SLA policy — Critical gets the tightest deadline — so the timer you start here counts down against the right target.
Add a Compare condition on Severity. On the Critical branch, add a Post channel message action that pages your engineering channel with the bug's title and link. On the other branch, add a Send notification action to the assigned owner. Everyone hears about what matters, at the volume it deserves.
Finish with a Set field action that moves Status to Triaged, so the team can see the bug has already been labeled, owned, and put on the clock.
Or just ask Copera AI
You don't have to lay out the graph by hand. Open Ask Copera AI and describe the whole thing:
"Create a Bugs board with columns for title, description, severity (Critical, High, Medium, Low), area, owner, status, environment, and an SLA. Then build an automation: when a new row is created, classify the bug's severity and its area, set both fields, assign the area's owner, start the SLA timer, notify the owner, and post any Critical bug to the #engineering channel."
Ask Copera AI can create the board and its columns, then assemble the automation — trigger, AI classification, conditions, and actions — for you. With the default Ask before acting permission mode, it shows a review card for each change before anything is created, so you approve the board and the automation before they exist. See What Copera AI Can Do for the full list of what it can build.
Make it a standing teammate
Give a named Triage Lead the Bugs board and it can read each new bug, label it by severity and area, assign the right owner, and post a heads-up in your engineering channel — on its own schedule and under its own identity, with no automation graph to maintain.
AI teammates are rolling out gradually. If you don't see them in your workspace yet, they're on the way — everything in this guide can be built today as an Automation. Learn more about AI teammates.
Tips
Trigger on Row created, not on the form. One triage automation then covers every intake path — form, email, and error-tracker webhook — because they all create a row. Build the routing once instead of duplicating it per source.
Give the classifier crisp definitions. In the Classify step, state exactly what separates Critical from High (e.g., Critical = data loss or full outage; High = major feature broken with no workaround). Sharp labels make the AI's calls match how your team actually triages.
Let humans override, and keep the loop visible. The automation sets a starting point, not a verdict — engineers can re-label severity or reassign at any time. Moving the status to Triaged makes it obvious which bugs have been processed and which are still raw.
Scale the SLA by severity, then let a watchdog chase breaches. Configure tighter targets for Critical on the board's SLA policy, and pair this recipe with the SLA-breach watchdog so nothing sits past its deadline unnoticed.
Set a spend cap. The classify and extract steps draw AI usage on every new bug, so give the automation a per-automation spend cap. A sudden flood of reports can never run past a budget you choose, and the usage dashboard shows exactly where credits went.
Frequently Asked Questions
Can Copera automatically assign incoming bugs to the right person?
Yes. The automation triggers when a new bug row is created, classifies its severity and affected area with AI, then branches on the area and runs an Assign user(s) action to put that area's owner on the row. It can start an SLA timer and notify the owner in the same run.
How does Copera decide a bug's severity?
An AI Classify step reads the bug's title and description and sorts it into the severity labels you define (for example Critical, High, Medium, Low). A Set field action writes that label onto the row. You control the labels and what each one means, so the result matches your team's definitions.
Can bugs come in from a form, email, or an error tracker?
Yes. A public bug-report form, an Email received / Gmail received trigger, or an Inbound webhook received trigger from your error tracker can each create the bug row. Because triage runs on Row created, one automation covers every intake path.
Does a human still review AI-triaged bugs?
Yes. The automation labels, routes, and assigns as a starting point, but engineers can override any field — re-label severity or reassign the owner — whenever they like. Setting the status to Triaged shows a bug has been processed, and the automation never deletes anything.
Can it escalate Critical bugs immediately?
Yes. A condition branches on severity: Critical bugs post a channel message to your engineering channel to page the on-call engineer, while lower-severity bugs simply send an in-app notification to the assigned owner.
Related
- Automations — the full trigger, condition, action, and AI-step reference
- AI in Boards — how AI classifies, extracts, and fills in your board data
- SLA Tracking — set response targets and start, pause, and stop timers from automations
- SLA-Breach Watchdog — chase bugs that blow past their deadline
- Ticket Triage & Prioritizer — the same pattern for support tickets
- What You Can Build with Copera AI — the full playbook