Skip to content

The moment it happens

Triage new GitHub issues with AI and flag urgent ones

Every new GitHub issue is labelled by type and priority, possible duplicates are noted, and urgent ones are posted to Slack.

Runs
The moment it happens
Apps
GitHub, Slack
AI
Yes, uses the built-in AI allowance
Access
issues:write; chat:write

Send this to your assistant

Create a ClickRuntime automation: when a new issue is opened in acme/app, have AI label it bug, feature or question with a priority, comment if it looks like a duplicate of an open issue, and post high-priority ones to #eng.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

An open-source project with a small maintainer team gets several new issues a day. Half are questions, a quarter are duplicates, and the occasional serious bug waits days for someone to notice it among the rest.

Labelling each issue the moment it arrives, pointing out likely duplicates and flagging the urgent ones in Slack means the serious bugs reach a maintainer within minutes. The backlog stays sorted without anyone spending their morning on it.

What you get out of it

  • Serious bugs are seen first

    High-priority issues are posted in Slack straight away. A data-loss bug does not sit unnoticed behind feature requests.

  • Duplicates are linked early

    A comment points to the open issue that looks the same. Reporters find the existing discussion and maintainers avoid fixing the same thing twice.

  • A labelled backlog

    Every issue arrives with a type and priority label. Filtering and planning get easier without a weekly triage session.

  • Faster response for reporters

    People who report issues see a label or comment within minutes. That simple acknowledgement keeps contributors engaged.

How it works

What happens, step by step

  1. When an issue is opened, GitHub notifies ClickRuntime straight away.

  2. ClickRuntime gathers the titles of recent open issues for comparison.

  3. AI reads the new issue and chooses a type, a priority and any likely duplicate.

  4. The labels are added to the issue, and a comment links the possible duplicate.

  5. High-priority issues are posted to your #eng Slack channel.

Before it runs live

  • Connect GitHub
  • Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
  • Paste your automation's link into the other app's webhook settings

What you get

RunsThe moment it happens
Triage new GitHub issues with AI and flag urgent onesjust nowSucceeded
Slack · #engHigh-priority bug: Saving a draft deletes attachments on Safari

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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 Google Sheets
  • Combine it with other GitHub and Slack steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
new_issues_triaged_by_ai_with_slack_alert.pyexample
from clickruntime import on_event, credentials, http, notify, verify, ai

def gh(method, path, **kw):
    resp = http.request(method, f"https://api.github.com{path}", headers={
        "Authorization": f"Bearer {credentials.connection('github', 'work')}", "Accept": "application/vnd.github+json"}, **kw)
    return resp.raise_for_status() or (resp.json() if resp.content else None)

SCHEMA = {"type": "object", "properties": {"type": {"type": "string", "enum": ["bug", "feature", "question"]},
          "priority": {"type": "string", "enum": ["high", "medium", "low"]}, "duplicate_of": {"type": "integer"}}}

@on_event
def handle(event):
    if not verify.github(event.body, event.header("X-Hub-Signature-256"), credentials.secret("GITHUB_WEBHOOK_SECRET")):
        return {"ignored": "bad signature"}
    body = event.json
    if event.header("X-GitHub-Event") != "issues" or body["action"] != "opened":
        return {"ignored": True}
    issue, repo = body["issue"], body["repository"]["full_name"]
    open_issues = gh("GET", f"/repos/{repo}/issues", params={"state": "open", "per_page": 50})
    others = "\n".join(f"#{i['number']} {i['title']}" for i in open_issues if i["number"] != issue["number"])
    t = ai.generate(f"New issue: {issue['title']}\n{(issue.get('body') or '')[:3000]}\n\nOpen issues:\n{others}", json_schema=SCHEMA, max_output_tokens=80,
                    system="Classify the new issue. Set duplicate_of only if it is clearly the same as an open issue, else 0.").json
    gh("POST", f"/repos/{repo}/issues/{issue['number']}/labels", json={"labels": [t["type"], f"priority: {t['priority']}"]})
    if t.get("duplicate_of"):
        gh("POST", f"/repos/{repo}/issues/{issue['number']}/comments", json={"body": f"This looks like it may be the same as #{t['duplicate_of']}."})
    if t["priority"] == "high":
        notify.slack(f"High-priority {t['type']}: <{issue['html_url']}|{issue['title']}>", channel="#eng")
    return t

FAQ

Common questions

Can maintainers change the labels?
Yes. Labels are ordinary GitHub labels. Change them as you like; the automation does not touch an issue again after its first pass.
How does it spot duplicates?
It compares the new issue's title and description with the titles of recent open issues and names the closest match if it is clearly the same problem.
Which labels does it use?
The ones you define, such as bug, feature, question and priority: high. It only uses labels that exist in your repository.
What permissions does it need?
issues:write; chat:write. Nothing else in your accounts is used.
Does it need AI?
Yes. It uses ClickRuntime's built-in AI, so you don't need an OpenAI or Anthropic key. Every plan includes a monthly AI allowance.
How many runs does it use?
One run for each event the app sends.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Triage new GitHub issues with AI and flag urgent ones” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.