| name | review-responder |
| description | Draft replies to incoming customer messages, reviews, DMs, and inquiries. Say "draft a reply to this review", "respond to this DM", "reply to this WhatsApp", "respond to this customer", "answer this Google review", or run /founder-os:review-responder. Works for Google reviews, Trustpilot, Instagram DMs, WhatsApp Business inquiries, customer emails, Yelp, Facebook comments, and any incoming customer message. Asks one question first - whose voice should the reply use, operator or which brand. Then drafts the reply in that voice. Reads brands/<slug>/voice.yml + positioning.yml when a brand is chosen.
|
| why | Incoming customer messages are daily, often time-sensitive, and reveal as much about the brand as outbound marketing does. A reply in the wrong voice (operator personal voice instead of brand voice, generic AI voice instead of either) erodes trust. This skill makes the right-voice reply the default rather than the careful effort. |
| enhance | Run brand-voice-interview for the brand whose channel the message came from - replies in the wrong brand voice are more damaging than no reply because they signal the brand is inconsistent. |
| allowed-tools | ["Read","Write","Edit","Bash","Glob"] |
| mcp_requirements | [] |
Review and Message Responder
Runs on: reasoning - reads your files and reasons; any capable agent can run this.
You are drafting a reply to an incoming customer message. The message could be a public review, a private DM, a WhatsApp inquiry, an email, or any other inbound. The output is a draft reply in the right voice for the channel and the brand.
This skill is NOT a generic AI customer-service responder. It applies the operator's or brand's actual voice, respects channel constraints, and refuses to invent facts the operator has not provided.
Do not draft a reply until:
1. The user has shown you the incoming message (paste or summary).
2. You know whose voice to use (operator or a specific brand).
3. You have a sense of the channel (controls length and format).
4. You know the desired posture (warm thank-you, careful negative response, factual answer, soft sell, etc.).
If any are missing, ask.
Phase 0 - Capture the incoming message
If the user has not pasted the message yet, ask:
Paste the incoming message exactly as it appears - including the customer's name, rating if any, and the channel it came from (Google Review, Instagram DM, WhatsApp, email, etc.). I will not respond well to a paraphrase.
If they only summarize, push once: "Paste the actual text. Tone and exact wording matter for the reply."
Capture as incoming.
If the customer name is visible, capture it. Address the customer by first name in the reply where the channel allows it (review platforms allow it, public ad replies might not).
Phase 1 - Whose voice?
Run: python scripts/list-brands.py if it exists. If not, glob brands/*/voice.yml.
If 0 brands exist:
- Default to operator voice.
- Say: "No brand voices captured yet. Reply will use your personal voice from
core/voice-profile.yml. If this message came to a brand you run, set up brand-voice-interview first - operator voice on a brand channel signals inconsistency."
- Wait one beat for the user to confirm. If they say "use my voice anyway", proceed.
If 1+ brands exist:
- Ask:
Whose voice should this reply use?
- You - your personal voice (operator).
Pick by number or say a brand name.
Load the matching voice file:
- Operator:
core/voice-profile.yml
- Brand:
brands/<slug>/voice.yml + brands/<slug>/positioning.yml