conversation-summary
Published
Public
in @customer-support

Summarize a support conversation into a structured agent-handoff brief, grounded only in the thread.

conversation-summary

Condense a support conversation into a structured agent-handoff briefcustomer_issue, key_points, actions_taken, pending_items, customer_sentiment, handoff_notes — so the next agent understands a thread cold in seconds. Strict JSON, not prose.

Built for shift changes, escalations, and tier-2 handoffs: the parts a colleague actually needs, separated cleanly (what's been done vs. what's still pending), and grounded only in the conversation itself.

Entrypoints

EntrypointRendersInputs
systemSummarization instructions + handoff structure + embedded output schemaoptional maxPoints
userThe delimited conversation block to summarizetext

Variables

  • text (string, required) — the conversation/thread. Turns labeled by speaker (Customer: / Agent:) summarize best.
  • maxPoints (integer, optional) — cap on the number of key_points. Omit to let the model decide.

Output

{
  "customer_issue": "Customer was double-charged for their May subscription and wants the duplicate refunded.",
  "key_points": ["Charged twice on May 3", "Verified both charges are for the same plan"],
  "actions_taken": ["Confirmed the duplicate charge", "Submitted a refund request to billing"],
  "pending_items": ["Refund confirmation from billing (3-5 business days)"],
  "customer_sentiment": "mixed",
  "handoff_notes": "Customer was frustrated at first but calmed down once the refund was started; reassure them on timing."
}
  • customer_issue is the core problem in a sentence or two — not the back-and-forth.
  • actions_taken vs. pending_items: a promise that hasn't been fulfilled is pending, not taken. The prompt enforces this split so nothing falls through a handoff.
  • customer_sentiment is positive / neutral / negative / mixed; mixed is reserved for genuinely contrasting sentiment across the thread (e.g. started angry, ended satisfied).
  • handoff_notes is the free-text "what you should know" line. Empty string when there's nothing extra.

House conventions

  • Triple-mustache input ({{{text}}}) so special characters in the thread are never HTML-escaped.
  • Grounded only in the thread — no invented actions, items, or assumptions. Unstated who/when is left out, not guessed.
  • Empty / no-content input → empty customer_issue, empty arrays, neutral sentiment, empty handoff_notes (specified, not left to chance).
  • Strict schemaadditionalProperties: false, closed enum for sentiment, complete required.

Notes

Verified by local render and a live battle-test (correctly splits a fulfilled action from a still-pending refund). Suggested default model claude-sonnet-4-6 at temperature: 0.

@sufleur/