How do you automate backlog triage with AI agents?

Run a single 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

  1. Open KanBots desktop, pick the repo whose backlog you want triaged. The workspace appears with five columns plus Inbox.
  2. Click the autopilot button in the toolbar. Pick Feature-Dev in the flavor selector. The modal expands to show persona checkboxes.
  3. Uncheck engineer, reviewer, and tester. Leave only product checked.
  4. 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.
  5. Pick a target column (typically backlog) and click Start. The autopilot session row appears in the bottom drawer with a live cycle counter.
  6. 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.
  7. 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.