Skill draft: support-thread-summarizer
I haven't run any of this. There's no file access here, so the skill-creator's workspace, subagent runs and eval viewer steps are all still to do.
1. Intent capture
You didn't answer these questions, so I assumed the answers. Correct anything that's wrong.
| Question | Assumption |
|---|---|
| What should the skill do? | Turn a pasted, messy customer-support email thread into a short summary and a prioritized list of next steps. |
| When should it trigger? | You paste a thread with quoted replies, signatures, forwards or disclaimers. You say things like "summarize this", "what's going on here", "what do I need to do", or "next steps". It should trigger even if you only paste the thread with no instructions. |
| Who are you in the thread? | Usually the support or account person who has to act next, not the customer. The skill assumes this unless the thread says otherwise. |
| Output format | Fixed, scannable sections: one-line status, a summary, a timeline, open questions, next steps (with owner and urgency), and a draft reply only if asked. |
| Edge cases | Duplicate quoted text, out-of-order messages, multiple people on the customer side, internal notes mixed with customer-facing text, missing context, angry tone, and legal or refund commitments made by someone else. |
| Should it have tests? | Yes. The output has a checkable structure and a checkable correctness core (who owes what, and by when), so 3 prompts with assertions are worth writing. |
| Dependencies | None. It works on pasted text only. |
2. SKILL.md
---
name: support-thread-summarizer
description: Summarize a messy customer-support email thread and produce prioritized next steps. Use this whenever the user pastes an email chain, forwarded thread, ticket export, or a block of back-and-forth messages with a customer and wants a summary, status, "what's going on", "what do I need to do", action items, or a reply plan. Trigger even if the user only pastes the thread with no instructions, or says things like "catch me up on this", "TL;DR this", or "what's the next move". Also use for escalation handoffs and account-review prep built from support emails.
---
# Support Thread Summarizer
Support threads are hard to read. They carry the same quoted text five times, signatures and legal disclaimers, forwarded chains, replies out of order, and several people on each side. The reader needs to know three things fast: what happened, where things stand, and what to do next. Your job is to dig that out accurately so they don't have to reread the thread.
## Working assumptions
- The reader is on the support or account side and owns the next move. If the thread or the user says otherwise, adapt.
- The reader may not have seen the thread. Don't assume context beyond what's pasted.
- Accuracy matters more than polish. A wrong date, a missed commitment, or an invented fact causes real problems with a customer. Only report what the thread supports.
## Process
1. **Reconstruct the thread.** Ignore repeated quoted text, signatures, disclaimers, and "Sent from my iPhone" noise. Put the messages in chronological order using their timestamps, not the paste order. Forwarded threads often arrive newest-first or scrambled.
2. **Identify people and roles.** Note who is the customer, who is internal, and who is a third party. Use names and roles, not "the sender".
3. **Extract the facts.** Collect the core problem, what has been tried, what has been promised, by whom, and by when. Commitments and deadlines are the highest-value details. Missing one is the costliest mistake.
4. **Judge the current state.** Work out whose court the ball is in, how long it has been waiting, and the customer's tone (calm, frustrated, threatening to leave, or legal or press language).
5. **Derive next steps.** Each step needs an owner, a concrete action, and an urgency level. Order them by urgency and by the risk of not doing them.
## Output format
Use this structure so the output scans the same way every time. Skip a section only if it is truly empty, and say so in a few words rather than inventing content.
```
**Status:** <one line: issue, current state, whose move it is>
**Summary**
<3-5 sentences: what the customer wants, what went wrong, what has been done>
**Timeline**
- <date/time>: <who> — <what happened> (only the events that matter)
**Commitments & deadlines**
- <who promised what, to whom, by when>
**Open questions**
- <things unanswered or unclear in the thread>
**Next steps**
1. [Urgent|Soon|Later] <owner>: <specific action> — <why, if not obvious>
**Risks / flags**
- <churn risk, legal or refund language, SLA breach, conflicting info, anything sensitive>
```
Order the next steps by urgency, then by customer impact. Start each step with a verb. "Reply to Dana confirming the Thursday refund" is useful. "Follow up" isn't.
## Judgment calls
- **Missing or ambiguous information:** Say what's unknown and how it affects the next steps. Don't guess. For example, write "The thread doesn't say whether the refund was processed. Check billing before replying."
- **Conflicting statements:** Report both and name who said each. Make resolving the conflict a next step.
- **Dates:** Convert relative dates ("tomorrow", "end of week") to absolute dates using the email's timestamp when you can. If the timestamp is missing, keep the original wording and say so.
- **Internal and customer-facing text mixed together:** Label which parts are internal notes. Warn before suggesting anything that would expose internal comments to the customer.
- **Sensitive content:** Put legal threats, chargeback or cancellation talk, security or privacy incidents, and executive escalations in Risks / flags and make them the first next step. State the facts neutrally and don't speculate about intent.
- **Very long threads:** Keep the summary short regardless of thread length. Detail belongs in the timeline, and only for events that change what happens next.
- **Draft replies:** Write one only when asked, or when the user's message clearly implies it ("what should I say?"). Otherwise end with an offer in one line. A reply that makes new promises can create commitments the user didn't choose.
## Tone
Be plain and neutral. Don't add commentary on how the customer or colleagues behaved beyond what is needed to judge risk. Keep the whole output short enough to read in under a minute for typical threads.
3. Test prompts
These are written the way you'd actually paste them. I'd save them to evals/evals.json once files are available.
{
"skill_name": "support-thread-summarizer",
"evals": [
{
"id": 1,
"eval_name": "scrambled-billing-thread-with-deadline",
"prompt": "can you summarize this and tell me what i need to do. i just got put on this account\n\n---------- Forwarded message ---------\nFrom: Marcus Lee <[email protected]>\nDate: Thu, Mar 13, 2025 at 4:12 PM\nSubject: Re: Re: Double charged for Feb??\nTo: Support <[email protected]>\n\nStill nothing?? It's been a week. I was told it'd be fixed by Monday. If I don't see the $249 back by Friday I'm disputing it with my bank.\n\nMarcus\n\n> On Mon, Mar 10, 2025 at 9:03 AM Priya (Support) wrote:\n> Hi Marcus, I've escalated to billing and they said the duplicate will be reversed within 3 business days. Sorry again!\n>\n> > On Fri, Mar 7, 2025 at 2:44 PM Marcus Lee wrote:\n> > I was charged twice for February, $249 each, invoice INV-20931 and INV-20977. Please fix.\n\n--\nPriya's note (internal): billing says the reversal needs a manager approval and nobody has approved it yet\n\nCONFIDENTIALITY NOTICE: This email is intended only for the addressee...",
"expected_output": "Chronological summary. Flags the Friday bank-dispute deadline, the missed 'by Monday' promise, the $249 amount and both invoice numbers. Notes that the reversal is stuck waiting on manager approval, labels that as internal, and makes getting approval the first urgent step. Does not draft a reply unprompted.",
"files": []
},
{
"id": 2,
"eval_name": "multi-party-bug-thread-conflicting-info",
"prompt": "Catch me up on this before my 2pm call with them.\n\nFrom: Aisha Rahman (Northwind Logistics)\nSent: Tuesday, June 3, 2025 10:15 AM\nSubject: RE: CSV export failing\nWe're on the Enterprise plan and the export has been failing since the update. Our ops lead Tom is cc'd. This is blocking our month-end reports.\n\nFrom: Dev Patel (Support)\nSent: Tuesday, June 3, 2025 11:02 AM\nHi Aisha, sorry about this. Engineering says the export bug was fixed in v4.2.1, which went out last Thursday. Can you confirm you're on that version?\n\nFrom: Tom Becker (Northwind Logistics)\nSent: Tuesday, June 3, 2025 11:40 AM\nWe're on 4.2.1. Still broken. Aisha was told by someone on your side last week that it'd be fixed by now and that we'd get a credit for the downtime. Nobody ever followed up on the credit.\n\nFrom: Dev Patel (Support)\nSent: Tuesday, June 3, 2025 12:30 PM\nTom, I don't see any record of a credit being promised. Looking into the 4.2.1 issue with eng now.\n\nFrom: Aisha Rahman\nSent: Tuesday, June 3, 2025 1:05 PM\nThis is the third time we've had to chase. Please have your manager join the call.",
"expected_output": "Identifies Aisha and Tom as customer-side and Dev as internal. Surfaces the conflict: Dev says 4.2.1 fixes it, Tom says it's still broken on 4.2.1. Flags the disputed credit promise as unverified (no record) and as a risk. Notes the manager request and the 2pm call as time-sensitive. Next steps include checking with eng, checking the credit history, and arranging for a manager to join.",
"files": []
},
{
"id": 3,
"eval_name": "long-vague-thread-missing-info-legal-language",
"prompt": "tldr this thread pls, and tell me whats next. no idea who half these people are\n\nRe: Re: Fwd: Fwd: contract renewal / data issue\n\n[Jan 20] Chen Wei (Halvorsen & Co): Our team found that some of our records from 2023 appear to be missing from the portal. We need them for an audit.\n[Jan 21] Sam (our CSM): Thanks Chen, looping in the data team.\n[Jan 27] Chen Wei: Any update? Our renewal is coming up and my director is asking questions.\n[Jan 28] Rohan (Data team, internal only): fwiw I think the 2023 records got archived in the October migration. Not sure if they can be restored, need to check with infra. Don't tell the customer this yet.\n[Feb 3] Chen Wei: I've now been told by our legal counsel that if we can't get these records by Feb 14 we will have to treat this as a breach of our data retention agreement and reconsider the renewal.\n[Feb 4] Sam: Chen, we're working on it, will update you shortly.\n\nSent from my iPhone",
"expected_output": "Short summary with a timeline in order. Flags the Feb 14 deadline and the legal/breach and renewal-at-risk language as the top risk and first next step. Clearly marks Rohan's note as internal and instructs not to share it with the customer as written. States that restorability is unknown, with the infra check as an explicit next step. Notes the gap since Jan 28 and that the customer has had no substantive answer. Does not invent a resolution.",
"files": []
}
]
}
4. What I'd check on the outputs
I'd draft these assertions once outputs exist:
- Eval 1 should include Friday, the manager approval blocker, and the internal label.
- Eval 2 should name the version conflict and mark the credit as unverified.
- Eval 3 should include Feb 14, the "don't tell the customer" handling, and no invented claim that the records can be restored.
5. Next steps in the skill-creator loop
- Save this as
support-thread-summarizer/SKILL.mdand the JSON asevals/evals.json. - Run each prompt with and without the skill.
- Review the results in the viewer.
- Revise the skill and rerun.
- Run description optimization for triggering.
If you'd like, I can start step 1 once I have a file-capable session.
Real run recorded with claude-code / claude-sonnet-5-5. Output is shown verbatim, unmodified.
What it does
A meta-skill for writing other skills. It walks through capturing intent, drafting SKILL.md (name, a "pushy" trigger description, progressive-disclosure structure), writing realistic test prompts, and then an optional evaluate-and-improve loop with a review viewer and benchmark scripts.
How it works
- Capture intent: what the skill should do, when it should trigger, the output format, and whether it needs tests.
- Draft
SKILL.mdfollowing its writing guide: imperative instructions, explain the why instead of shouting MUSTs, keep the body lean and push detail intoreferences/. - Write 2-3 test prompts into
evals/evals.json. - Optional, in environments with subagents and a shell: run with-skill and baseline runs, grade them, aggregate a benchmark, review results in a local viewer, then iterate.
- Optional: optimise the trigger description with a train/test loop built on
claude -p, and package the result as a.skillfile.
Good for
- Turning a workflow you keep repeating into a reusable skill
- Improving a skill that triggers too rarely or too often
- Teams that want a repeatable way to test their skills
Contains scripts that are not harmless to run. The eval and description-tuning scripts start many `claude -p` subprocesses (up to 10 in parallel, 3 runs per query by default), which uses your model quota, and `run_eval.py` temporarily writes files into the project's `.claude/commands/`. `generate_review.py` starts a local server (default port 3117) and first kills any process listening on that port. `run_loop.py` opens a browser; the review page loads SheetJS from cdn.sheetjs.com and Google Fonts. Packaging needs Python with PyYAML. The scripts only use the local `claude` CLI and the folders you point them at, and we found no code that uploads data. In our trial the skill was only used for drafting (intent, SKILL.md, test prompts); no script or viewer was run.