Examples / Linear issue triage

Linear issue triage

When an issue is created in the ENG team in Linear, your model reads it and decides how urgent it is and which part of the product it touches. Murmurator sets the priority, leaves a triage comment, and pages Slack when it's urgent.

LinearYour AI modelsSlack

What you tell the assistant

When someone opens an issue in our ENG team in Linear, triage it: set its priority, leave a comment saying which area it touches and why, and alert #incidents in Slack if it's urgent.

Why it works

  • The trigger fires on new issues in one team only, and never on the connection's own updates, so setting the priority can't start another run.
  • Structured output gives the priority as one of Linear's own values, so it goes straight into update_issue.
  • Only urgent issues reach Slack; everything else stays in Linear.
Build this workflow

What it builds

Trigger
Linear
llm
Triage the issue
smart · structured
tool
Set the priority
linear.update_issue
tool
Leave a triage note
linear.create_comment
tool
Alert #incidents
slack.post_message
if triage.output.data.priority equals urgent
View the definition
trigger:
  kind: linear
  connection: linear
  events: [Issue]
  actions: [create]
  teams: [ENG]
steps:
  - key: triage
    name: Triage the issue
    kind: llm
    model: smart
    system: You triage incoming engineering issues for a B2B billing product. Be decisive and brief.
    prompt: |
      Triage this new issue. Urgent means customers can't pay, get charged wrongly, or lose data right now.
      Title: {{ trigger.data.title }}
      Description: {{ trigger.data.description }}
    schema:
      type: object
      properties:
        priority: { type: string, enum: [urgent, high, medium, low] }
        area: { type: string, enum: [billing, checkout, api, dashboard, infrastructure, other] }
        reasoning: { type: string }
      required: [priority, area, reasoning]
  - key: prioritize
    name: Set the priority
    kind: tool
    tool: linear.update_issue
    args:
      issue: "{{ trigger.data.identifier }}"
      priority: "{{ steps.triage.output.data.priority }}"
  - key: comment
    name: Leave a triage note
    kind: tool
    tool: linear.create_comment
    args:
      issue: "{{ trigger.data.identifier }}"
      body: "**Automated triage — {{ steps.triage.output.data.priority }}, {{ steps.triage.output.data.area }}**\n\n{{ steps.triage.output.data.reasoning }}"
  - key: page
    name: "Alert #incidents"
    kind: tool
    if: { path: steps.triage.output.data.priority, equals: urgent }
    tool: slack.post_message
    args:
      channel: C03INCIDENTS
      text: ":rotating_light: Urgent in Linear: {{ trigger.data.identifier }} {{ trigger.data.title }} {{ trigger.url }}"

A sample run

What each step produces

Triage the issue llm

succeeded
Using model smart (Claude Sonnet 5, Murmurator AI)
{
  "text": "",
  "data": {
    "priority": "urgent",
    "area": "checkout",
    "reasoning": "EUR card payments are failing at checkout since this morning's deploy, with 14 failures in the last hour. Customers can't pay, so this is urgent. Start with the currency passed to Stripe when the payment intent is created."
  }
}

Set the priority tool

succeeded
Calling linear.update_issue
{
  "id": "7d3e9b2a-1c4f-4e8a-9b6d-2f5a8c1e0d47",
  "identifier": "ENG-482",
  "title": "Card payments fail with currency mismatch for EUR accounts",
  "priorityLabel": "Urgent",
  "state": "Triage",
  "team": "ENG",
  "url": "https://linear.app/northwind/issue/ENG-482/card-payments-fail-with-currency-mismatch"
}

Leave a triage note tool

succeeded
Calling linear.create_comment
{
  "id": "c9b1e4d7-3a2f-4b6c-8e5d-1f7a2c9e4b03",
  "url": "https://linear.app/northwind/issue/ENG-482#comment-c9b1e4d7",
  "issue": "ENG-482"
}

Alert #incidents tool

succeeded
Calling slack.post_message
{
  "channel": "C03INCIDENTS",
  "ts": "1758710520.000400"
}

Trigger payload

{
  "type": "Issue",
  "action": "create",
  "url": "https://linear.app/northwind/issue/ENG-482/card-payments-fail-with-currency-mismatch",
  "actor": {
    "id": "a1f0c3e2",
    "name": "Priya Raman",
    "type": "user"
  },
  "data": {
    "id": "7d3e9b2a-1c4f-4e8a-9b6d-2f5a8c1e0d47",
    "identifier": "ENG-482",
    "title": "Card payments fail with currency mismatch for EUR accounts",
    "description": "Since this morning's deploy, EUR customers paying by card get \"currency mismatch\" at checkout. Stripe shows the charge attempted in USD. At least 14 failed payments in the last hour.",
    "team": {
      "key": "ENG",
      "name": "Engineering"
    },
    "state": {
      "name": "Triage",
      "type": "triage"
    }
  }
}

Your next automation is one sentence away.

14-day free trial with $5 of built-in AI included. Cancel anytime.