How do you automate backlog triage with AI agents?
product persona pass across an unrefined column at parallelism 4. The agent reads each card, splits parent issues into subtasks, applies labels, and writes an effort estimate into the card body. A 200-ticket backlog becomes ~600 scoped subtasks overnight.Backlog triage is the highest-leverage thing an AI agent does on a kanban board, because the work is bounded (read a card, return a structured verdict) and the output is reviewable in seconds (you read the subtasks, not the patches). KanBots runs this as a Feature-Dev autopilot session with a single persona enabled — the product author — pointed at an unrefined column.
The morning-after view is a column of cards where the parents have been demoted to epics, child cards now sit underneath with explicit acceptance criteria, and each leaf carries a label like effort:s or area:auth. You skim it the way you'd skim a teammate's PM review, not the way you'd code-review a diff.
Why a triage pass works as an agent job
Three properties make ticket refinement well-suited to autonomous agents:
- The input fits in context. A backlog card plus the repo README plus a glance at the relevant module is well under 200k tokens. The agent doesn't have to make plausibility calls based on partial reads.
- The output is structured. Subtask titles, body markdown, labels, effort. The agent isn't writing prose for humans to admire; it's filling in a form.
- Mistakes are cheap. A wrong subtask gets edited in 10 seconds. A wrong commit needs a revert. Bad triage just means you re-read the card before dispatching the engineering pass.
The KanBots setup
Open the autopilot modal on the workspace, switch the flavor to Feature-Dev, and uncheck every persona except product. Set parallelism to 4 (any modern laptop handles this; an M2 Mac stays cool, a 16-core EC2 box doesn't notice). Set the cost cap to a number you'd be unhappy losing — $20 is a reasonable ceiling for a 200-card sweep with Sonnet.
Point it at a column. By default Feature-Dev autopilot consumes from backlog; if your unrefined cards live elsewhere (an inbox filtered by a label), drag them into Backlog first. The orchestrator round-robins through the cards, spawning one agent per slot. Each slot gets its own worktree off the default branch — the worktree is wasted here (no code changes), but it costs you nothing and keeps the dispatcher path identical to feature work.
The product persona is configured to do four things on each card: rewrite the title as an outcome statement, expand the body with acceptance criteria, split into subtasks if the scope exceeds half a day, and apply labels. The split happens via the dispatcher's subtask API; new cards land in the same column with a parent link. You can watch the column lengthen live.
Walkthrough — first run
- Open KanBots desktop, pick the repo whose backlog you want triaged. The workspace appears with five columns plus Inbox.
- Click the autopilot button in the toolbar. Pick Feature-Dev in the flavor selector. The modal expands to show persona checkboxes.
- Uncheck
engineer,reviewer, andtester. Leave onlyproductchecked. - Set parallelism to 4. Set effort to Light (the default Sonnet budget per card is plenty for triage; Heavy burns money for no gain on this task). Set session cost cap to $20.
- Pick a target column (typically
backlog) and click Start. The autopilot session row appears in the bottom drawer with a live cycle counter. - Within seconds the first 4 cards flip to
running. The board updates as subtasks land — you'll see card counts climb in the same column. - Walk away. The session halts on completion or when the cost cap hits, whichever comes first. Both states drop a summary into the autopilot drawer with a per-card cost rollup.
Failure modes and fixes
The agent invents subtasks that aren't real work
Symptom: a parent card "Add dark mode" gets split into "Research dark mode design patterns," "Document the dark mode rollout plan," and "Define dark mode acceptance criteria" — three subtasks that are about the parent task instead of being the parent task. Fix: tighten the product persona prompt to require each subtask be independently shippable. The OSS desktop ships a default persona at .kanbots/personas/product.md; edit it to add "A subtask must produce a code change or a user-visible artifact. Reject planning subtasks."
Labels get applied inconsistently
Symptom: half your cards get area:billing and the other half get team:billing for the same module. Fix: pre-create the label set you want the agent to use. The product persona prompt defaults to "use existing labels where possible"; if there are zero billing labels on the workspace, it'll invent one. Run kanbots labels seed with your taxonomy before triage, or hand-create labels in the sidebar.
The session burns budget on one giant ticket
Symptom: card 7 in the column is a 4000-word epic and the agent's per-card cost comes out 8x the average. Fix: the autopilot session cap is your safety net; it halts the run. For the giant card, dispatch a single agent on it manually with Heavy effort, then resume the session on what's left.
When triage is the wrong tool
AI triage works when the agent can answer "what's this card about?" from the repo itself. It fails when business context lives outside the repo — when half the decision is "does this match what Acme Corp asked for in last week's call?" or "is this in scope for Q3?" The agent will produce plausible-sounding splits that look right but encode the wrong business priorities. If your tickets routinely require out-of-repo context, do the human triage pass first and use the agent for tech-debt cleanup or background work on the refined cards instead.
Same goes for compliance-sensitive product work: when a misworded subtask becomes a legal problem, you want a human author with their name on the ticket.
For the contrast with continuous-dispatch agent loops, see how multi-persona orchestration cycles handle code-producing work — triage is the trivial case where only one persona is needed.
Try it on your own folder
Drop a folder, get a board, dispatch parallel agents. The desktop runs locally on macOS, Linux, and Windows.
Related questions
- Can you use an AI agent to triage Sentry issues?Auto-import Sentry error groups onto a kanban board, hand each to an agent for root-cause analysis, and promote the fix as a PR. End-to-end walkthrough.
- How do you build an AI agent PR review workflow?A reviewer persona reads the diff, runs the tests in its own worktree, and posts a structured verdict. How to wire it into your existing GitHub flow.
- Can AI agents handle tech debt cleanup?A pattern for dispatching dozens of small refactor agents in parallel, each scoped to one file or module, with QA autopilot guarding the merge.
- How do you run AI agents in the background on GitHub issues?Hand a folder of issues to autopilot and walk away. How sub-issue splitting, slot parallelism, and self-checking keep the work moving without your eyes.