Browse documentation
Docs
Triage Bot
The triage bot classifies incoming signals with AI and routes them to the right reviewers. Configure policies to decide which signals get triaged, how they are categorised, and who sees them.
How triage works
Every incoming signal is evaluated against your triage policies. A matching policy queues an AI classification job. The result - category, confidence, and summary - lands in the triage queue for human review.
Triage workflow
- 01Signal arrives - When feedback arrives through POST /api/v1/signals or the GitHub integration, FeatureFactory checks it against every active triage policy.
- 02Policy match - If a policy matches, a triage record is created in the pending state. The AI classification job is queued immediately.
- 03AI classification - The classification job reads the signal context and runs it through the configured LLM provider. It outputs a category, a confidence score between 0 and 1, and a plain-English summary.
- 04Human review - The triage appears in the Triage queue in the app. Assignees receive an in-app notification. A reviewer can approve or dismiss the triage from the queue or via the API.
- 05Action or close - Approved triages link back to the original signal record and appear in reporting. Dismissed triages are soft-deleted from the queue and do not affect metrics.
Triage states
| State | Meaning |
|---|---|
| pending | The triage record has been created but the AI classification has not completed yet. |
| classified | The AI has produced a classification with a category, confidence score, and summary. Awaiting human review. |
| approved | A team member approved the classification. The signal is marked as actioned and removed from the active queue. |
| dismissed | A team member dismissed the triage. The signal is closed without action and will not re-enter the queue. |
Triage policies
Policies define the rules that determine which signals enter the triage queue. Create and manage policies via the API or from the Triage section of the app.
Policy fields
match_typeSignal type to match: pr_opened, pr_merged, signal_received, or any.
conditionsArray of field-level matchers. Each matcher specifies a signal field, an operator (eq, contains, gte, lte), and a value.
actionWhat to do on match: create_triage (queue an AI triage record), notify (send a team notification), or both.
priorityInteger priority used to sort matched triages in the queue. Higher values surface first.
assignee_idsOptional array of team member IDs. Matched triages are routed to these assignees. If empty, the triage is unassigned.
Example policy
{
"match_type": "pr_merged",
"conditions": [
{ "field": "quality_score", "op": "lte", "value": 49 }
],
"action": "create_triage",
"priority": 10,
"assignee_ids": [42, 87]
}This policy triages every merged PR that scores below 50. Triages are routed to team members 42 and 87.
API reference
Triage policies and triage records are fully manageable via the REST API. See the API Reference for GET /triage-policies, POST /triage-policies, PUT /triage-policies/{id}, POST /triages/{id}/approve, and POST /triages/{id}/dismiss.
Was this article helpful?
Your response enters the same customer insight queue used by product feedback.