Issue Triage (Linear / Jira)
Führen Sie Triage-Sitzungen und Bug-Sweeps über Linear oder Jira mit der Composio-CLI durch. Holen Sie das Backlog ab, clustern Sie Duplikate, wenden Sie Labels an und übergeben Sie eine bereinigte Liste an das Team.
Wann verwenden
- Wöchentliches Triage: "Was ist nicht zugewiesen, veraltet oder ohne Priorität?"
- Bug-Sweep nach einem Release: "Clustere alle P1/P2-Bugs, dedupliziere, weise Besitzer zu."
- Tool-übergreifende Synchronisation: Sentry → Linear, PagerDuty → Jira.
Voraussetzungen
curl -fsSL https://composio.dev/install | bash
composio login
composio link linear # oder: composio link jira
Tools entdecken
composio search "list issues" --toolkits linear
composio search "search issues" --toolkits jira
composio tools list linear
composio tools list jira
Häufige Slugs (mit --get-schema überprüfen):
Linear
LINEAR_LIST_ISSUESLINEAR_CREATE_ISSUELINEAR_UPDATE_ISSUELINEAR_CREATE_COMMENT
Jira
JIRA_SEARCH_FOR_ISSUES_USING_JQLJIRA_CREATE_ISSUEJIRA_EDIT_ISSUEJIRA_ADD_COMMENTJIRA_ASSIGN_ISSUE
Triage-Workflow
- Backlog-Ausschnitt abrufen:
# Linear composio execute LINEAR_LIST_ISSUES -d '{ "filter": { "state": { "type": { "eq": "unstarted" } }, "assignee": { "null": true } }, "first": 100 }' # Jira composio execute JIRA_SEARCH_FOR_ISSUES_USING_JQL -d '{ "jql": "project = APP AND statusCategory != Done AND assignee is EMPTY ORDER BY updated DESC", "maxResults": 100, "fields": ["summary","priority","labels","updated","reporter"] }' - Clustern nach Titelähnlichkeit und Labels. Der Agent gruppiert wahrscheinliche Duplikate lokal.
- Updates in einem Durchgang anwenden (Label, Priorität, Zuweisung):
composio execute LINEAR_UPDATE_ISSUE -d '{ "id":"abc-123","priority":2,"labelIds":["label-bug","label-p1"],"assigneeId":"user-42" }' composio execute JIRA_EDIT_ISSUE -d '{ "issueIdOrKey":"APP-482", "fields":{"priority":{"name":"High"},"labels":["bug","p1"]} }' - Duplikate verlinken mit Kommentaren, die auf das kanonische Issue verweisen.
- Eine Zusammenfassung der Änderungen an Slack posten, damit das Team die Sweep-Ergebnisse sieht.
Bug-Sweep (nach Release)
# Jira: alle Bugs der letzten 7 Tage, sortiert nach Schweregrad
composio execute JIRA_SEARCH_FOR_ISSUES_USING_JQL -d '{
"jql":"type = Bug AND created >= -7d ORDER BY priority DESC, created ASC",
"fields":["summary","priority","labels","reporter","components"]
}' | jq -r '.issues[] | "\(.fields.priority.name)\t\(.key)\t\(.fields.summary)"'
Workflow-Datei
scripts/triage-linear.ts, ausführbar mit composio run --file scripts/triage-linear.ts:
const { nodes: issues } = await execute("LINEAR_LIST_ISSUES", {
filter: { state: { type: { eq: "unstarted" } }, assignee: { null: true } },
first: 100
});
const stale = issues.filter(i => {
const age = (Date.now() - new Date(i.updatedAt).getTime()) / 86400000;
return age > 14;
});
for (const i of stale) {
await execute("LINEAR_CREATE_COMMENT", {
issueId: i.id,
body: "Auto-Triage: seit 14+ Tagen veraltet. Bitte zuweisen oder schließen."
});
}
await execute("SLACK_SEND_MESSAGE", {
channel: "triage",
text: `Wöchentliches Triage: ${stale.length} veraltete Issues benachrichtigt.`
});
Tool-übergreifend: Sentry → Linear
composio run '
const hot = await execute("SENTRY_LIST_A_PROJECTS_ISSUES", {
organization_slug:"acme", project_slug:"api",
query:"is:unresolved", sort:"freq", limit:5
});
for (const s of hot) {
await execute("LINEAR_CREATE_ISSUE", {
teamId: "TEAM_ID",
title: `[Sentry] ${s.title}`,
description: `${s.permalink}\nCount: ${s.count}`,
labelIds: ["label-bug","label-from-sentry"]
});
}
'
Fehlerbehebung
- Unbekannte Feldnamen →
composio execute <SLUG> --get-schemazeigt die genaue Filterstruktur (Linear verwendet verschachtelte Objekte; Jira verwendet JQL-Strings). 403bei Linear →composio link linearmit dem richtigen Workspace erneut ausführen.- Jira-Benutzerdefinierte Felder fehlen → explizit im
fields-Array anfordern. - Bulk-Edits rate-limitiert → 250ms Pause in der
composio run-Schleife einfügen; nicht--parallelverwenden.
Vollständige CLI-Referenz: docs.composio.dev/docs/cli