3 min read

A classification prompt a support team can trust

The five-part prompt shape I use to classify customer messages with Claude: role, labels, examples, output format and what to do when unsure.

Classification is the first job I give Claude in any support workflow. Read the message, say what it is about, how urgent it is, and which team owns it. It sounds simple. It only works when the brief is written like a spec.

The five parts

01Rolewho is reading and for which team
02Labelsa closed list of intents and priorities
03Examplesa few real messages with the right label
04Formata fixed JSON shape, nothing else
05Unsurea confidence score and a "needs review" flag

Free text vs a closed list

Free-text answer
  • "Seems like a delivery issue, maybe urgent?"
  • Different wording every time
  • Hard to route or report on
  • No way to know how sure it is
Closed label list
  • intent: delivery.not_collected
  • priority: high
  • team: ops-delivery
  • confidence: 0.94

The line that makes it safe

If the message does not clearly fit one label, set needs_review to true and explain why in one sentence. Do not guess.

That one instruction is what lets the rest of the workflow trust the output. Anything flagged goes to the human review queue instead of being routed on a guess.

Checklist before it goes live

Labels match the team's real queuesnot the ones in an old report
Examples come from last month's inboxreal wording, typos included
The output is parsed, never read by eyea parse failure counts as "unsure"
A daily sample is checked by a personthe labels drift as the business changes

Have a team losing hours to manual work?

Send me the problem in two lines. I'll reply with what I'd build and what it would change.