The moment it happens
Spot frustrated comments on customer issues
When a comment on a customer issue sounds frustrated, you hear about it before it escalates.
- Runs
- The moment it happens
- Apps
- Linear
- AI
- Yes, uses the built-in AI allowance
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: watch new comments on Linear issues labelled customer, and Slack me the comment and issue link when it sounds negative or frustrated.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Support teams that track customer issues in Linear see frustration build in the comments. A customer who has waited a week for a fix writes something sharper each time, and an engineer who works the ticket sees only the most recent message. By the time a manager notices the tone in a comment thread, the customer is already thinking about canceling.
When a comment is added to an issue with the support label, ClickRuntime sends the text to its built-in AI, which judges whether the writer sounds frustrated or upset. Neutral and positive comments are ignored; negative ones are posted to Slack with the issue link and an excerpt, so a manager can step in while it is still recoverable.
It helps customer success leads and support managers who watch many issues at once.
What you get out of it
Unhappy customers are caught early
A manager who sees a frustrated comment on day three can call the customer and reset expectations. The same comment found on day ten is usually the last straw before a cancellation.
Escalation depends on tone, not guesswork
Priorities on tickets rarely capture how a customer feels. A signal from the actual words shows who is getting angry, even when the issue was labeled low priority. That is the difference between a calm customer and a lost one.
Engineers get context about the person
Knowing that the customer behind an issue is losing patience changes how an engineer handles it. A quick workaround or an honest update may be all that is needed. Small gestures of care often change the outcome of a hard ticket.
Support leads cover more tickets
One manager cannot read every comment on every issue. An alert for only the negative ones directs attention to the small portion that needs it. Attention goes where it makes the most difference.
Recurring pain points surface
If frustration keeps appearing on issues about the same feature, you have evidence for prioritizing a fix. The Slack history becomes a record of where customers hurt most. That evidence is hard to ignore in planning.
How it works
What happens, step by step
When someone comments on a Linear issue, ClickRuntime checks whether the issue carries your customer label.
AI reads the comment and decides whether the tone is frustrated or negative.
Neutral and positive comments are ignored.
Frustrated comments are posted to your #customers Slack channel with the issue ID and a quote, so someone can step in quickly.
Before it runs live
- Connect Linear
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Linear steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, http, credentials, ai, notify
def linear(query, variables=None):
r = http.post(
"https://api.linear.app/graphql",
headers={"Authorization": credentials.secret("LINEAR_API_KEY")},
json={"query": query, "variables": variables or {}},
)
r.raise_for_status()
return r.json()["data"]
@on_event
def handle(event):
body = event.json or {}
c = body.get("data", {})
if body.get("type") != "Comment" or body.get("action") != "create":
return {"alerted": False}
issue = linear("query($id: String!) { issue(id: $id) { identifier url labels { nodes { name } } } }",
{"id": c.get("issueId")})["issue"]
if "customer" not in [l["name"].lower() for l in issue["labels"]["nodes"]]:
return {"alerted": False}
mood = ai.generate(f"Is this comment negative or frustrated? Answer yes or no.\n{c.get('body', '')[:1500]}",
max_output_tokens=5).text.strip().lower()
if not mood.startswith("yes"):
return {"alerted": False}
notify.slack(f"Frustrated comment on {issue['identifier']}:\n> {c.get('body', '')[:500]}\n{issue['url']}", channel="#customers")
return {"alerted": True}FAQ
Common questions
How does it judge sentiment?
Does it read comments on every Linear issue?
Will it flag a comment written by my own teammate?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Route new bugs to the right team
New issues in Triage get a team, label and priority, and you get a note explaining each choice.
See how it worksGet a Slack message for every new Linear issue
Each new issue in your team shows up in Slack with its title, priority, assignee and link.
See how it worksGet alerted when an issue becomes Urgent
You hear straight away when an issue is created as Urgent or raised to Urgent.
See how it worksKeep exploring
Set up “Spot frustrated comments on customer issues” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.