A real-world customer support ticket triage environment for training and evaluating AI agents. Agents learn to prioritize, categorize, route, respond to, and resolve support tickets — a genuine daily workflow at any software company.
Why This Environment?
Support ticket triage is a high-stakes, real-world task that:
Has clear objective signals (SLA compliance, classification accuracy, response quality)
Tests language understanding (detecting urgency, product area, and customer tier)
Scales naturally to harder tasks (easy prioritization → full workflow management)
Is used by real teams every day — frontier model performance here has direct commercial value
Environment Description
The environment simulates a support operations team receiving a mixed queue of incoming tickets. Each ticket includes a subject, body, customer tier (free/pro/enterprise), and an SLA deadline.
The agent takes structured actions on tickets across a full triage workflow. Shaped rewards guide the agent toward correct behavior at each sub-step, not just at episode end.
Action Space
All actions are JSON objects:
json
1{2"action_type":"<type>",3"ticket_id":"<ticket_id>",4"value":"<value or null>"5}
All tickets with current triage state (no ground truth)
resolved
list[str]
IDs of closed tickets
current_ticket_id
str | null
First open ticket (suggested focus)
time_step
int
Step counter within episode
sla_breaches
int
Cumulative SLA violations
budget_remaining
int
Steps remaining before episode ends
episode_done
bool
Whether episode has ended
info
dict
Valid enum values for actions
Each ticket in the queue exposes: id, subject, body, customer_tier, created_at, sla_deadline, status, priority, category, assigned_team, response_sent, escalated.
Reward Function
Rewards are shaped across the full trajectory — not sparse end-of-episode signals.
Action
Correct
Wrong / Partial
prioritize
+0.15
+0.06 (1-level off), −0.10 (far off)
categorize
+0.15
−0.08
assign
+0.15
−0.08
respond
0–+0.25
Proportional to quality heuristic
escalate (correct)
+0.10
−0.10 if not needed
close + SLA met
+0.13
+0.05 if SLA breached
skip
—
−0.05
SLA breach (passive)
—
−0.15 per ticket
Over budget
—
−0.20
Response quality is scored heuristically on: length, professional tone, urgency matching, subject acknowledgement, escalation mentions, and structural elements (salutation, sign-off).
Tasks
Task 1 — Priority Sorting (task_easy) 🟢
10 tickets covering all priority levels and domains
Objective: Assign the correct priority to each ticket