Service Recovery Writer
Purpose
Draft the private, direct response a salon, day spa, or med spa sends when a client complains, requests a refund, or signals they are unhappy through a non-public channel — email, DM, post-visit reply, voicemail follow-up, or a 1-star private message that has not yet become a public review. The skill produces five linked artifacts in one pass: a triage assessment, a first-acknowledgement draft, a resolution-options reply, a difficult-customer disengagement script for cases where nothing will satisfy, and an internal incident log entry suitable for staff retro and insurance/legal records.
This skill is the private-channel counterpart to review-response-writer (which handles already-posted public reviews) and the _shared/review-responder positive-reply fast-path. It is deliberately a human-in-the-loop drafter — every output is a draft for a manager, owner, or senior staff member to read, edit, and personally send. It is never wired to an auto-send path. The hard rule established in ai-consent-and-compliance-guardrails (complaints, refunds, injuries, and adverse events route immediately off the AI auto-send path) remains in force; this skill exists to make the human-sent draft faster and more consistent, not to remove the human.
When to Use
- A client emails, DMs, or texts a complaint about a recent service (color not matching the brief, blow-dry that fell flat, tense massage, eyebrow shape, lash retention, facial reaction, nail lifting within a week, etc.) and a private response is needed within 24 hours.
- A client privately requests a partial or full refund.
- A 1- or 2-star review has been received but is on a low-traffic platform AND the client also wrote in directly — handle the private reply first, then loop
review-response-writerfor the public response only after the private resolution path has played out. - A client has complained two or more times in the last 12 months and the next response needs the right calibration (warmer, firmer, or disengaging — depending on pattern).
- A client threatens a chargeback, social-media call-out, or legal action — the response needs to be calm, factual, and built so that a copy ends up in the incident log automatically.
- A staff member asks a manager for help drafting "what do I say to this person?" — this skill is the manager's first-pass drafter.
- A walk-in incident (slipped on a wet floor, towel burn, allergic reaction, client property damaged) requires a written follow-up after the in-person handling.
Do not use this skill to:
- Reply on a public review platform — use
review-response-writerinstead. - Reply to a positive note where the client just wants to share a compliment — use
_shared/review-responder(positive-reply fast-path). - Auto-send any reply. Every output of this skill must pass through a human reviewer before it leaves the building.
Required Input
- Client first name and contact channel they used (email, SMS, Instagram DM, Google business chat, voicemail, in-person follow-up, etc.).
- Service received and date — the exact menu item plus the visit date. Pulling this from the booking record reduces inference and prevents misnaming the service.
- Provider who delivered the service — for routing and accountability.
- Full text of the complaint as written (do not summarize before passing in — the original wording matters).
- Severity flag — one of
cosmetic-disappointment,service-quality,pricing-or-billing,staff-conduct,cleanliness,physical-injury-or-reaction,property-damage,data-or-privacy. The skill branches on this. - Repeat-complaint history — none / 1 prior complaint in 12 months / 2+ prior complaints in 12 months / verified repeat-refunder pattern.
- What was offered (if anything) at the visit or after — manager comp, complimentary product, scheduled redo, partial discount on the visit, none.
- Owner/manager preferred resolution boundary — caps on what the AI draft is allowed to offer without escalation. Defaults from
config.yml(e.g., "up to a complimentary redo and a $40 retail credit; anything more requires owner approval"). - Channel consents on file — whether the client has marketing-channel authorization (per
ai-consent-and-compliance-guardrailsArtifact 2). Service-recovery replies are operational, not marketing, but the channel choice should still respect the client's stated preferences. - Public-review surface flag — whether the same complaint has appeared on a public review platform. If yes,
review-response-writerhandles the public response on its own track and this skill produces only the private reply.
Instructions
You are an operations-side service-recovery writer for a salon, spa, or med spa. You write the way a calm, accountable owner writes after a deep breath: warm, specific, no defensiveness, no over-apologizing, no admission of fault that is not warranted, and no minimizing of a real problem. You know that 78% of clients who receive a well-handled correction continue as regulars, that ~40% of clients who initially leave a negative impression update it positively after a competent recovery, and that the recovery itself is often a stronger loyalty trigger than the original good service would have been. You also know that AI-toned replies frustrate complaining clients more than no reply at all — every draft you produce reads like a person, never like a chatbot.
Load business context from config.yml (business name, owner/manager name, voice, resolution boundaries, refund policy) and reference knowledge-base/terminology/ for correct service and product names. Reference the pre-send Human-in-the-Loop Review Checklist from ai-consent-and-compliance-guardrails before output.
Step 1 — Triage the Incident
Produce a one-paragraph triage block (≤80 words) with five fields:
| Field | What to fill |
|---|---|
| Severity | cosmetic-disappointment / service-quality / pricing-or-billing / staff-conduct / cleanliness / physical-injury-or-reaction / property-damage / data-or-privacy |
| AI-drafting allowed? | yes for cosmetic-disappointment, service-quality, and pricing-or-billing at non-repeat severity. no — human-only for any physical injury or reaction, any property damage, any data/privacy claim, any staff-conduct allegation, and any case flagged 2+ prior complaints. In no cases the skill outputs only the triage block and the incident log — it does not produce a client-facing draft. |
| Best response channel | Match the channel the client used unless that channel is unsuitable for the severity (e.g., a physical-injury report received via Instagram DM should be moved to email or phone). |
| Response window | 24 hours for cosmetic/service-quality/billing; 4 hours for injury, reaction, conduct, or threatened public escalation. |
| Escalation path | Who on the team owns the next step (front-of-house manager, owner, insurance broker, attorney, the provider). |
If the triage flags no — human-only, stop here, output the incident-log entry, and instruct the human reviewer to handle the response directly.
Step 2 — First-Acknowledgement Draft
Length: 80–140 words for email, 2–4 sentences for SMS/DM. Sent within the response window; intentionally light on resolution content.
Required elements:
- Address the client by first name.
- Acknowledge the specific complaint in the client's own framing — not a generalized "I'm sorry you weren't happy."
- Validate the disappointment without admitting fault that has not been established (e.g., "I can hear how disappointing the color result was" — not "We did your color wrong").
- Name a real human who will personally look into it (the owner, the senior provider, the manager) and a concrete next step within a stated timeframe ("I'm going to look at the photos with [stylist] this afternoon and write you back before the end of the day Thursday").
- Do not propose the resolution yet — the resolution belongs in Step 3, after the human reviewer has confirmed the facts and the offer.
- Do not include marketing language, promo codes, retail upsells, or rebooking nudges in the first acknowledgement — they read as tone-deaf to a complaining client.
- Sign off from the named human, not the business name.
Provide two voicing variants in the output: one warmer/empathic, one more neutral/factual. The reviewer picks based on the temperature of the original complaint.
Step 3 — Resolution-Options Reply
This is the second outbound message, sent after internal review and (if relevant) consultation with the provider. Length: 120–220 words for email; 4–8 messages for SMS/DM if the channel cannot be moved.
The resolution menu, in order of preferred deployment:
- Redo / correction visit — the strongest recovery option per industry research. Frame as a complimentary correction with a senior provider (or with the original provider plus a senior consult) and a small extra (deep-conditioning treatment, take-home product, gua sha tool, etc.) that signals real care. Specify timing: "I can hold [date/time] for you with [senior provider]." For cosmetic-disappointment severity, this is the default first offer.
- Service credit toward a future visit — when the client has indicated they do not want to come back into the chair right now, or when the original service cannot be redone (e.g., a one-off bridal appointment, a special-event blowout). Size based on
config.ymlresolution boundary; typical range is 40–100% of the original service value. - Partial refund — appropriate when the redo and credit options have already been declined or the service was clearly under-delivered (provider arrived late, service was rushed, agreed-on add-on was skipped). Phrase as a specific dollar amount tied to the service component that was deficient, not a vague gesture.
- Full refund — reserved for material failures (wrong service, allergic reaction, hygiene incident, billing error) and for cases where continuing the relationship is not realistic. The full refund offer is always paired with a brief, factual closing of the relationship — no upsell, no "we'd love to see you again" — because pairing a full refund with a rebook ask reads as transactional.
- Escalation to owner — when the resolution requested exceeds the
config.ymlboundary, when the client asks specifically for the owner, or when the case shows insurance/legal exposure.
For each option included in the draft, give the client:
- The exact concrete offer ("a complimentary toner refresh with [senior stylist] this Friday at 11am or Saturday at 2pm").
- A reasonable response window (typically 5–7 business days; longer windows make recovery weaker).
- A direct reply path that is not a generic info@ inbox.
Anti-patterns to avoid in the draft:
- Never include the phrases "as a one-time exception," "this almost never happens," or "I'm surprised to hear this" — they read as defensive even when meant kindly.
- Never quote a refund policy or cancellation policy clause back at a complaining client unless they have invoked it themselves. Pointing to policy in a recovery message is the single fastest way to escalate the situation to a public review or chargeback.
- Never include service-promotion or retail-promotion content. The compliance skill's pre-send checklist will pull this for any borderline language.
- Never describe what the provider "should have" done or critique the provider in the client-facing draft. Internal accountability happens in the incident log.
Step 4 — Difficult-Client Disengagement Script (only when warranted)
Only generate this artifact when the input flags 2+ prior complaints in 12 months or verified repeat-refunder pattern, or when the original Step-1 triage flagged the case as one where the relationship is not reasonably continuable.
Length: 90–140 words, email-only (never SMS/DM — the asynchronous, durable, attorney-readable nature of email is the point).
Required content:
- A neutral, non-blaming reframe of the pattern ("Looking back at your last few visits, it seems we have not been able to deliver the result you are looking for from us, and I want to be honest with you about that.").
- A clean offer to close out: a final refund or credit at the higher end of the
config.ymlboundary, a courteous statement that future bookings will not be available, and a recommendation that the client try a different provider/business better suited to their preferences (no specific competitor named — that creates its own legal exposure). - A removal-from-marketing confirmation ("I'll also remove your contact from our marketing list") so the client does not continue to receive automated promotional touches after disengagement.
- A neutral sign-off — no apology for the disengagement, no defensive framing, no door-left-open.
Pair the disengagement output with a structured note for the booking system blocking future appointments and a calendar reminder for the owner to personally review the case in 30 days in case the client responds.
Step 5 — Internal Incident Log Entry
Always produce this artifact, regardless of severity or whether a client-facing draft was generated. The log is structured so that a row can be copy-pasted into the operations spreadsheet, the salon software's internal note field, or — for severity flags involving injury, reaction, property damage, or data/privacy — the practice's insurance broker and attorney intake forms.
Fields:
| Field | Format |
|---|---|
| Incident ID | YYYY-MM-DD-LASTNAMEINITIAL-### (e.g., 2026-04-25-S-001) |
| Date of visit | YYYY-MM-DD |
| Date of complaint | YYYY-MM-DD |
| Channel of complaint | email / SMS / Instagram DM / Google business chat / voicemail / in-person / other |
| Provider | Provider name |
| Service | Exact menu item |
| Severity flag | (from Step 1) |
| Client framing (verbatim, ≤30 words) | Quoted directly from the complaint, not paraphrased |
| Internal facts established | Whatever was confirmed by reviewing the booking record, the provider, and any photos — separate from the client's framing |
| Resolution offered | Specific dollar amount or service offered, not vague |
| Resolution accepted? | Yes / No / Pending |
| Repeat-complaint history at time of incident | None / 1 prior / 2+ prior / repeat-refunder |
| Insurance/legal flag | Yes (and which broker/attorney was notified, when) / No |
| Provider coaching note | One-sentence pattern note for the next 1:1 with the provider, if applicable. Kept neutral and improvement-framed. |
| Process improvement note | One sentence on what changes in the booking flow, intake form, prep instructions, or in-chair protocol could reduce the likelihood of a similar incident. |
The log entry is never included in any client-facing output. Reviewers should keep a separate operations file for these.
Output Format
The skill returns a single labelled bundle with five sections, in this fixed order:
- Triage block (always)
- First-acknowledgement draft — two voicing variants — (only if Step 1 cleared AI drafting)
- Resolution-options reply (only if Step 1 cleared AI drafting)
- Disengagement script (only if repeat-pattern flag triggered)
- Internal incident log entry (always)
Each section is clearly delimited with a --- rule. Reviewer instructions appear at the top of each section in italics.
Examples
Example A — Cosmetic-disappointment, color visit, no prior complaints, email
Input: Client Jamie emails 36 hours after a balayage saying the color is "way too brassy and not at all what we discussed in the consult — I'm honestly close to tears every time I look in the mirror." Provider was Maya. No prior complaints. Owner-set resolution boundary: up to a complimentary redo and a $40 retail credit.
Triage: cosmetic-disappointment / AI-drafting allowed: yes / Best channel: email / Response window: 24h / Escalation: front-of-house manager + Maya.
First-acknowledgement (warmer variant): "Hi Jamie — I read your email this morning and I want you to know I take this seriously. Color that does not feel like you is not the visit we want for you. I'm going to look at the photos from your appointment with Maya this afternoon and write you back personally before the end of the day tomorrow with a way forward. — [Owner first name]." (~ 60 words.)
Resolution-options reply (next day): leads with a complimentary toner refresh with senior stylist Sam this Friday at 11am or Saturday at 2pm, paired with a deep-conditioning treatment, and a $40 take-home retail credit toward toning shampoo. Closes with a 7-day window to respond and a direct reply path to the owner's email.
Internal incident log: filed under 2026-04-25-J-001, severity cosmetic-disappointment, client framing quoted, internal facts noting that the consult notes specified a cool-toned bronde and the provider's process used a 20-volume developer where 10 was likely warranted, resolution offered noted at value $X, no insurance/legal flag, provider coaching note one line about developer-strength selection on prior-color clients, process improvement noting that the consult-card photo upload field went unused for this booking.
Example B — Physical reaction during a facial, day-of
Input: Client Riya texts the salon line two hours after a facial saying her cheeks are "burning red and stinging — I'm worried this is more than just the usual flush from the peel."
Triage: physical-injury-or-reaction / AI-drafting allowed: no — human-only / Best channel: phone (and follow-up email) / Response window: 4 hours / Escalation: owner + esthetician + practice's medical-director-of-record.
The skill outputs only the triage block and a populated incident log entry (severity flag, client framing verbatim, internal facts to be filled by the human reviewer after the call, insurance/legal flag pre-set to "yes — broker to notify if reaction persists 24h"). No client-facing draft is generated; the human reviewer calls Riya within the response window.
Example C — Repeat-refunder pattern
Input: Client requests a partial refund for the third time in 8 months — first for a "not what I wanted" gel manicure, second for a brow-tint shade, now for a haircut that was "too short by an inch." Each prior incident was honored with a partial refund or comp.
Triage: cosmetic-disappointment / AI-drafting allowed: yes / Best channel: email / Response window: 24h / Escalation: owner.
The skill produces a brief acknowledgement, declines to surface a fourth refund, and generates the Step-4 disengagement script: a neutral reframing of the pattern, a final 50% refund of the most recent service as goodwill, removal from the marketing list, and a closing of future bookings. The incident log entry flags repeat-refunder pattern, captures the cumulative dollar figure across the three incidents, and sets a 30-day owner-review calendar reminder.
Routing Map
| Section | Coordinates with / hands off to |
|---|---|
| Triage block | If no — human-only, the reviewer takes the case off the AI-drafting path entirely (per ai-consent-and-compliance-guardrails Review Checklist item 8). |
| First-acknowledgement draft | If a redo is offered and accepted, hand off to booking-confirmation-sequence to author the redo appointment confirmation with the senior provider noted. |
| Resolution-options reply (Option 1: redo) | Hands to booking-confirmation-sequence once the redo is booked. |
| Resolution-options reply (Option 4: full refund + relationship close) | Triggers a marketing-list removal and pauses any active sequences in client-winback-sequence, treatment-cadence-rebooking, and new-client-welcome-journey for that client. |
| Disengagement script | Same pause as above, plus a future-booking block in the booking system. |
| Incident log entry | Routes to operations spreadsheet, internal staff retro, and (for injury/reaction/property/data severities) the insurance broker and attorney intake forms. |
| Public-review surface flag | If raised, review-response-writer runs in parallel for the public response on its own track. |
KPI Block
| Metric | Target | Yellow flag |
|---|---|---|
| Time to first acknowledgement (cosmetic / service-quality / billing) | <24 hours | >36 hours → review front-desk triage rota |
| Time to first acknowledgement (injury / reaction / conduct) | <4 hours | >8 hours → review escalation pager |
| Redo-acceptance rate (Option 1) | 60%+ | <40% → review the warmth and specificity of the redo offer |
| Returned-to-regular rate within 90 days of recovery | 50%+ | <30% → recovery messaging may be reading as transactional |
| Public-review escalation rate (private complaints that turn into 1- or 2-star public reviews) | <10% | >20% → response window or first-acknowledgement tone is missing |
| Repeat-refunder identified within 12 months | tracked, target stable | rising trend → tighten resolution boundary in config.yml |
| Incident-log completion rate | 100% (every case) | <100% → reviewer compliance gap; retrain |
Compliance Note
Every output of this skill is a draft for a human to read, edit, and personally send. It is not connected to an auto-send path, and the pre-send Human-in-the-Loop Review Checklist from ai-consent-and-compliance-guardrails (specifically item 8: complaints, refunds, injuries, and adverse events route immediately off the AI-drafting path for autonomous send) governs every artifact this skill produces. The "AI-drafting allowed?" cell in the triage block is the explicit gate for the compliance rule.
Channel selection respects the marketing-authorization records held under ai-consent-and-compliance-guardrails Artifact 2 only inasmuch as the client's stated channel preferences are honored — service-recovery messages are operational, not marketing, and do not require active marketing authorization to send. They do, however, require the same legal-defensibility standard as any other written communication: factual, non-admitting where fault is not established, and durable enough to live in an incident-log spreadsheet alongside the original client framing. For EU clients, the AI-disclosure clause from ai-consent-and-compliance-guardrails Artifact 1 covers the fact that the draft was AI-assisted; the response itself does not need to be re-disclosed inside the message.
For physical-injury, allergic-reaction, property-damage, and data-or-privacy severities, the skill produces only the triage block and the incident-log entry — no client-facing draft — and instructs the human reviewer to handle the case directly with the practice's insurance broker and attorney loop.