PageSourceSearch

https://kilo.ai/docs/_next/static/chunks/pages/automate/auto-triage/overview-256d6116f6c82d84.js

js kilo.ai collected 2026-10-01 10:29:52 UTC 10,753 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2001],{48059:(e,t,i)=>{"use strict";i.r(t),i.d(t,{includes:()=>n,upper:()=>r});let n={transform(e){let[t,i]=Object.values(e);return!!Array.isArray(t)&&t.includes(i)}},r={transform(e){let t=e[0];return"string"==typeof t?t.toUpperCase():t}}},66177:(e,t,i)=>{"use strict";i.r(t),i.d(t,{__N_SSG:()=>f,default:()=>b,markdoc:()=>y});var n=i(11872),r=i(34904),o=i(92130),a=i(9760),s=i(90102),l=i(89966),d=i(48059);let c={tags:(0,a.X)(s),nodes:(0,a.X)(l),functions:(0,a.X)(d),...(0,a.X)({})},u=new o.Ay.Tokenizer({allowComments:!0}).tokenize("---\ntitle: \"Auto Triage\"\ndescription: \"Automate GitHub issue triage with AI assistance\"\n---\n\n# Auto-Triage\n\nKilo's **Auto-Triage** automatically analyses every new GitHub issue the moment it is opened. Within minutes of a reporter submitting an issue, Auto-Triage reads the title and body, checks whether the issue is a duplicate of something already reported, classifies it as a **bug**, **feature request**, **question**, or **unclear**, and applies the appropriate labels — all without any manual effort from your team.\n\n---\n\n## What it does\n\n### 1. Duplicate detection\n\nWhen an issue arrives, Auto-Triage compares it against every previously-triaged issue in your repository using vector-similarity search. If it finds a match, it:\n\n- Posts a comment on the new issue linking to the original, including its title and similarity score.\n- Labels the issue `kilo-triaged` and `kilo-duplicate`.\n- Marks the triage ticket as actioned.\n\n### 2. Classification\n\nAn AI model of your choice reads the full title and body and assigns one of four classifications:\n\n| Classification | Meaning |\n|---|---|\n| **bug** | Existing, documented functionality is broken. Includes issues with stack traces, error messages, or clear reproduction steps. |\n| **feature** | A request for new functionality or an enhancement to existing behaviour. |\n| **question** | The reporter is asking for help, clarification, or pointing to a gap in documentation. |\n| **unclear** | The issue does not contain enough information to determine intent. |\n\nAlong with the classification, the model produces a confidence score (0–1), a short summary of what the reporter wants, and its reasoning.\n\n### 3. Automatic labelling\n\nAfter classification, Auto-Triage applies labels to the issue on GitHub:\n\n- `kilo-triaged` is always applied to every issue that completes triage.\n- The AI selects zero or more **additional labels** from your repository's existing label set — it will only ever choose labels that already exist in your repo, never invent new ones.\n- Labels you have configured as **skip labels** or **required labels** (see [Configuration](#configuration-reference) below) are excluded from the AI's choices so they remain under your control.\n\n### 4. Ticket history\n\nEvery triage run is recorded as a ticket in the Kilo dashboard. You can:\n\n- Filter tickets by status, classification, or repository.\n- View the AI's classification, confidence score, intent summary, and reasoning.\n- **Retry** a failed ticket to reprocess it from scratch.\n\n---\n\n## How to enable it\n\n### Prerequisites\n\n- A GitHub integration connected to your Kilo account or organisation.\n- The repositories you want to triage must be accessible via that integration.\n\n### Steps\n\n1. Go to **Auto-Triage -> Config** in the Kilo dashboard.\n2. Toggle **Enable AI Auto-Triage** on.\n3. Choose which repositories to triage:\n   - **All repositories** — every repository accessible via your GitHub integration.\n   - **Selected repositories** — only the repositories you explicitly choose.\n4. Click **Save**.\n\nFrom this point, any new issue opened (or reopened) in a configured repository will be automatically queued for triage.\n\n---\n\n## Configuration reference\n\nAll settings are found under **Auto-Triage -> Config**.\n\n### Repository scope\n\n| Setting | Description |\n|---|---|\n| **Repository selection mode** | `all` — triage every accessible repository. `selected` — triage only the repositories you pick from the list. |\n\n### Label filters\n\nThese settings let you control which issues Auto-Triage processes, using labels already on the issue at the time it is opened.\n\n| Setting | Description |\n|---|---|\n| **Skip labels** | If an issue carries **any** of these labels when it is o
1pened, Auto-Triage will ignore it entirely. Useful for issues you handle manually, e.g. `wontfix` or `on-hold`. |\n| **Required labels** | If set, Auto-Triage will only process issues that carry **all** of these labels. Useful for opt-in triage flows, e.g. requiring a `needs-triage` label before Auto-Triage runs. |\n\n> **Note:** Skip labels and required labels are also excluded from the set of labels the AI can apply. This keeps gating labels strictly under your control.\n\n### AI model\n\nThe model used for classification.\n\n---\n\n## Ticket statuses\n\n| Status | Meaning |\n|---|---|\n| **pending** | Queued and waiting for a processing slot. |\n| **analyzing** | The AI is actively processing the issue. |\n| **actioned** | Triage completed. Labels applied, duplicate comment posted if applicable. |\n| **failed** | Something went wrong. The error is shown in the ticket. You can retry. |\n| **skipped** | The issue did not meet the configured requirements (wrong repo, skip label present, etc.). |\n\n---\n\n## Labels applied by Auto-Triage\n\nAuto-Triage uses two reserved labels for tracking. You should create these in your GitHub repositories before enabling the feature:\n\n| Label | Meaning |\n|---|---|\n| `kilo-triaged` | Applied to every issue that completes triage successfully. |\n| `kilo-duplicate` | Applied alongside `kilo-triaged` when the issue is identified as a duplicate. |\n\nThese labels are managed by Kilo and should not be added to your **skip labels** list.\n"),p=o.Ay.parse(u,{slots:!1}),g=p.attributes.frontmatter?r.Ay.load(p.attributes.frontmatter):{},{components:h}=(0,a._)(c);var f=!0;let y={frontmatter:g};function b(e){let t=e.markdoc;return o.ZR.react(t.content,n,{components:{...h,...e.components}})}},89384:(e,t,i)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/automate/auto-triage/overview",function(){return i(66177)}])},89966:(e,t,i)=>{"use strict";i.r(t),i.d(t,{fence:()=>o,heading:()=>s,table:()=>d,tbody:()=>u,td:()=>h,th:()=>g,thead:()=>c,tr:()=>p});var n=i(92130),r=i(62968);let o={render:r.NG,attributes:n.a9.fence.attributes};function a(e){return"string"==typeof e?e:n.vw.isTag(e)?e.children.map(a).join(" "):""}let s={render:r.DZ,children:["inline"],attributes:{id:{type:String},level:{type:Number,required:!0,default:1},className:{type:String}},transform(e,t){let i=e.transformAttributes(t),r=e.transformChildren(t),o=i.id&&"string"==typeof i.id?i.id:r.map(a).join(" ").replace(/[?/]/g,"").replace(/\s+/g,"-").toLowerCase();return new n.vw(this.render,{...i,id:o},r)}};var l=i(17499);let d={...n.a9.table,render:l.XI},c={...n.a9.thead,render:l.D1},u={...n.a9.tbody,render:l.vc},p={...n.a9.tr,render:l.Tr},g={...n.a9.th,render:l.Th,attributes:{...n.a9.th.attributes,width:{type:String}}},h={...n.a9.td,render:l.Td,attributes:{...n.a9.td.attributes,colspan:{type:Number},rowspan:{type:Number}}}},90102:(e,t,i)=>{"use strict";i.r(t),i.d(t,{browserFrame:()=>y,callout:()=>r,codicon:()=>o,copyLine:()=>a,flowDiagram:()=>f,icon:()=>d,image:()=>c,imageGallery:()=>u,kiloCodeIcon:()=>p,linebreak:()=>b,tab:()=>l,tabs:()=>s,video:()=>g,youtube:()=>h});var n=i(62968);let r={render:n.Pq,children:["paragraph","tag","list"],attributes:{title:{type:String,description:"Optional custom title for the callout"},type:{type:String,default:"note",matches:["generic","note","tip","info","warning","danger"],description:"The type of callout: generic (no icon/title), note, tip, info, warning, or danger"},collapsed:{type:Boolean,default:!1,description:"When true, the callout starts collapsed and can be expanded by clicking the header"}}},o={render:n.W6,selfClosing:!0,attributes:{name:{type:String,required:!0,description:"The name of the VS Code codicon (e.g., 'send', 'check', 'warning')"},size:{type:String,default:"1em",description:"The size of the icon (CSS font-size value)"},className:{type:String,default:"",description:"Additional CSS classes to apply to the icon"}}},a={render:n.a7,selfClosing:!0,attributes:{text:{type:String,required:!0,description:"The exact one-line text to display and copy"}}},s={render:n.tU,children:["tab"],attributes:{}},l={render:n.oz,children:["paragraph","tag","list","fence","heading"],attributes:{label:{type:String,required:!0,description:"The label shown on the tab button"}}},d={render:n.In,selfClosing:!0,attributes:{src:{type:String,required:!0},srcDark:{type:String,description:"Optional image source for dark mode. Falls back to src if not provided."},alt:{type:String,default:"icon"},size:{type:String,default:"1.2em"}}},c={render:n._V,selfClosing:!0,attributes:{src:{type:String,required:!0,description:"The image source URL"},alt:{type:String,required:!0,description:"Alternative text for the image"},width:{type:String,description:"Width of the image (e.g., '500px', '80%')"},height:{type:String,description:"Height of the image (e.g., '300px', 'auto')"},caption:{type:String,description:"Optional caption displayed below the image"}}},u={render:n.i_,children:["tag"],attributes:{columns:{type:String,description:"Preferred number of image columns on wide screens"},width:{type:String,description:"Preferred width of each gallery image"}}},p={render:n.kz,selfClosing:!0,attributes:{size:{type:String,default:"1.2em",description:"Size of the icon (CSS height value)"}}},g={render:n.n5,selfClosing:!0,attributes:{url:{type:String,required:!0,description:"The YouTube video URL"},title:{type:String,description:"Accessible title for the video iframe"},caption:{type:String,description:"Optional caption to display below the video"}}},h={render:n.Yu,selfClosing:!0,attributes:{url:{type:String,required:!0,description:"The YouTube video URL"},title:{type:String,description:"Accessible title for the video iframe"},caption:{type:String,description:"Optional caption to display below the video"}}},f={render:n.Cb,selfClosing:!0,attributes:{name:{type:String,required:!0,description:"Name of the diagram to render (must match a key in diagrams/index.ts)"},height:{type:String,default:"400px",description:"Height of the diagram container"}}},y={render:n.AR,children:["paragraph","tag","list"],attributes:{url:{type:String,description:"Optional URL to display in the address bar"},caption:{type:String,description:"Optional caption below the frame"}}},b={render:"br",selfClosing:!0}}},e=>{e.O(0,[8228,2775,636,6593,8792],()=>e(e.s=89384)),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.