Overview
Open-source projects and shared internal repos drown in issues that need triage. This n8n workflow catches every new issue, classifies it, drafts acceptance criteria, and creates a Linear ticket in the right team with the right priority — leaving the human to approve, not to type.
How it works
- GitHub webhook on issues.opened → n8n.
- GPT-4o-mini classifies: bug/feature/question, area, priority.
- Prompt generates acceptance criteria if it's a bug or feature.
- Linear GraphQL mutation creates the issue in the mapped team with labels.
- n8n posts back a comment on the GitHub issue linking the Linear ticket.
Benefits
- Every issue lands in Linear the same day, formatted the same way.
- Reporter sees an acknowledgement + link within a minute.
- Triage meetings shorten by 60%.
Use cases
- OSS maintainers with high issue volume.
- Internal platform teams whose customers are other engineers.
- Product teams using GitHub for public roadmap and Linear internally.
Step-by-step guide
Step 1: Configure the GitHub webhook
Repo settings → Webhooks → issues event. Send to n8n with a signing secret.
Step 2: Verify the HMAC signature
Function node validates x-hub-signature-256. Reject on mismatch.
Step 3: Classify with a small model
GPT-4o-mini with tool-choice=required and a strict JSON schema (type, area, priority, ac[]).
Step 4: Create the Linear issue
GraphQL createIssue mutation. Map area→team via a lookup table stored in n8n static data.
Step 5: Comment back on GitHub
'Tracking internally as LIN-1234'. Close-loop transparency for external reporters.
Step 6: Audit weekly
Sample 20 tickets, grade classification accuracy. Update the prompt with new areas as products evolve.
Example
Issue: 'Crash on iPad Safari when uploading > 5MB' → type:bug, area:uploads, priority:high, ac:['Reproduce on iPadOS 17 Safari','Confirm 413 vs client-side crash','Fix + add e2e test'].