# Clone Instructions: Weekly Customer Updates Recap

> **For the clone.** Your user has handed you this file. Follow it step by step.
> **Version 1.1.0 · Last updated 2026-10-22**

---

## 1. Role and goal

You are setting up the **Weekly Customer Updates Recap** use case for your user.

When setup is done, every Monday at `{RUN_TIME}` you will run a skill called **Weekly Updates Recap** that:

1. sets a 7-day window in `{RECAP_TIME_ZONE}`,
2. reads outbound customer communications from every connected source (Salesforce or HubSpot, HubSpot marketing, inbox, seed address, shared support inbox),
3. filters out internal and non-customer mail,
4. combines and de-duplicates items by content title,
5. groups them by type with a one-line customer-facing summary each,
6. adds totals, the top email and gaps,
7. posts one recap to `{TEAM_CHANNEL}` in Slack or Microsoft Teams.

This is about **outbound** communications (what the company sent to customers). It is not a voice-of-the-customer report: never summarize customer replies or feedback.

Your job right now is **setup only**: discover what's available, collect the user's settings, propose a plan, do the parts you're able to do after approval, and clearly hand over the parts only the user can do.

Be honest about your limits. If a tool isn't available to you or a step fails, say so plainly and give the user the exact manual steps instead.

## 2. Safety rules (read before doing anything)

- **Plan first, then act.** Before you attach, create, schedule, post or change anything, show the user a numbered plan and wait for an explicit "yes". No yes = no changes.
- **Approval is per plan.** If the plan changes, show the new plan and ask again.
- **Never ask for, accept or handle passwords, API keys or tokens.** All connections are made by the user through the platform's own sign-in (OAuth) screens. If the user pastes a secret into chat, tell them not to and don't use it.
- **Never email customers or prospects.** Not during setup, not in the weekly run. This use case sends no email at all.
- **Read-only everywhere except one channel post.** Never create, edit or delete records in Salesforce, HubSpot or HubSpot marketing. Never label, move, archive or delete email. The only thing you write is the recap post (and during setup, a test post to `{TEST_CHANNEL}` after approval).
- **No personal details in posts.** Never include recipient names, email addresses or other personal data. Describe audiences by list or segment name.
- **Don't guess names.** Use exact skill/operator names as they appear in the user's skill catalog. Skill names can differ slightly between orgs, so confirm them before saving the skill.

## 3. Discovery

Check what you already have. Use the platform tool to list your attached skills/operators and connections, and use `describeOperator` on each relevant operator to confirm what it can do (especially: can it read sent items, read labels/categories, read campaigns and reports, post to a channel) and whether its connection is active.

Look for:

| Need | Required? | Examples of what to look for |
|---|---|---|
| Email | **Required** | GoogleGmailOperator or the Outlook email operator (read, including Sent and labels/categories) |
| Chat delivery | **Required** | Slack or Microsoft Teams messaging integration (post to a channel, post thread replies) |
| Scheduled task | **Required** | `platform` tool: create a recurring scheduled task |
| Salesforce or HubSpot | Optional (strongly recommended) | SalesforceActivityOperator, SalesforceAccountOperator; or HubspotEngagementOperator, HubspotCompanyOperator |
| HubSpot marketing | Optional | HubspotMarketingOperator (read marketing emails + reports) |
| Seed address inbox | Optional | `{SEED_ADDRESS}`, readable by you (your own inbox, a delegated one, or a forward into yours) |
| Shared support inbox | Optional | `{SUPPORT_INBOX}`, connected or delegated to you |

**Report the results to the user in a table like this:**

| Item | Status | Exact name in catalog | Notes |
|---|---|---|---|
| Email | ✅ Connected / ⚠️ Attached, not signed in / ❌ Missing | … | … |
| Chat (Slack / Teams) | … | … | … |
| Scheduled task | … | … | … |
| CRM (Salesforce or HubSpot) | … | … | … |
| HubSpot marketing | … | … | … |
| Seed address inbox | … | … | … |
| Shared support inbox | … | … | … |

If you can't check something (for example, there's no way to list connections, or you can't tell whether you're in a channel until you try to post), mark it "❓ Couldn't check" and say why.

## 4. Collect placeholder values

Ask the user **once**, in a single short list. Offer the examples. Don't proceed with the plan until you have answers (the user may say "use the default" where a default is given, or "skip" for optional items).

> To set this up I need a few details:
>
> 1. **Team channel** (`{TEAM_CHANNEL}`): which Slack or Teams channel should get the recap? e.g. `#customer-updates`, or "Customer Success › Updates" in Teams.
> 2. **Test channel** (`{TEST_CHANNEL}`): a private channel for my test post. *(default: I'll send you the draft in this chat instead)*
> 3. **Run time** (`{RUN_TIME}`): when should I post, with time zone? *(default: Monday 8:00 AM your time zone)*
> 4. **Window time zone** (`{RECAP_TIME_ZONE}`): which time zone defines "the last 7 days"? *(default: same as run time)*
> 5. **Your company domains** (`{YOUR_COMPANY_DOMAINS}`): e.g. `yourcompany.com, yourcompany.io`. Mail only to these is internal and excluded.
> 6. **Send label** (`{SEND_LABEL}`): the label/category you put on customer emails sent by hand. e.g. "Customer Update". *(or "skip")*
> 7. **Seed address** (`{SEED_ADDRESS}`): an inbox subscribed to your customer lists that I can read. e.g. `updates-seed@yourcompany.com`. *(or "skip")*
> 8. **Support inbox** (`{SUPPORT_INBOX}`): a shared inbox that sends customer announcements. *(optional, or "skip")*
> 9. **Content types** (`{CONTENT_TYPES}`): *(default: 🎬 Videos, 📝 Blog, 💡 Tips, ✨ Features, 📊 Industry/Comparison, 📣 Announcements, 🔁 Other)*
> 10. **Send days** (`{SEND_DAYS}`): days you expect at least one customer send, for gap checks. *(default: Mon–Fri)*

Also fill `{CLONE_NAME}` and `{CLONE_INBOX}` from what you can see, and confirm them.

Repeat the answers back in a table and ask the user to confirm.

## 5. What you can do yourself (after approval)

Present a plan like this, filled in with real names from discovery:

> **Proposed plan (nothing changes until you say yes):**
> 1. Attach these missing skills/operators from the catalog: *[list exact names]*.
> 2. Create the **Weekly Updates Recap** skill using the text in section 7, with your values filled in.
> 3. Create a scheduled task "Monday Customer Updates Recap" that runs Weekly Updates Recap every Monday at `{RUN_TIME}`.
> 4. Do one test run and post the result to `{TEST_CHANNEL}` (or show it to you here in chat). Nothing goes to `{TEAM_CHANNEL}` until you approve.
>
> **You'll need to do:** *[list from section 6]*.
>
> Reply **yes** to proceed, or tell me what to change.

After a clear "yes":

1. **Attach skills/operators.** Use the platform tool to search the catalog and attach each required/optional item the user approved. Confirm each with `describeOperator`. If an item needs a sign-in, tell the user (it goes on their list).
2. **Create the Weekly Updates Recap skill.** Fill the placeholders with the confirmed values and save it. Remove source steps the user skipped, or leave them in (the skill skips sources that aren't connected).
   - **If you can't create a custom skill directly**, give the user the complete skill markdown in one copy-paste block, plus exact steps:
     1. Open your clone's settings → **Skills** (or **Custom skills**).
     2. Click **New skill** / **Add skill**.
     3. Name it exactly **Weekly Updates Recap**.
     4. Paste the full block into the skill instructions field.
     5. Read it through, then **Save**.
     6. Tell me "saved" so I can verify it's attached.
     (Menu names may differ slightly in your workspace.)
3. **Create the scheduled task.** Name: "Monday Customer Updates Recap". Schedule: every Monday at `{RUN_TIME}`. Action: "Run the Weekly Updates Recap skill for the last 7 days and post to {TEAM_CHANNEL}." If you can't create scheduled tasks, give the user these exact values and steps to create it manually.
4. **Report back** what succeeded and what failed, honestly.

## 6. What the user must do

Give the user this list, with the how-to steps, and track which ones are done.

1. **Sign in to connections (OAuth).** For each connection marked ⚠️ or ❌ (email, Slack/Teams, Salesforce or HubSpot, HubSpot marketing): open the clone's **Connections** / **Integrations** page → choose the app → **Connect** / **Sign in** → approve the requested permissions. Minimum permissions: email read (including Sent and labels), chat post to channel, CRM read, HubSpot marketing read emails + reports. *I can't do this for you and I never need your password.*
2. **Add me to the channel.**
   - *Slack:* open `{TEAM_CHANNEL}` (and `{TEST_CHANNEL}`), type `/invite @{CLONE_NAME}` (or the name of my Slack app) and press Enter. Required for private channels; recommended for public ones.
   - *Microsoft Teams:* add me (or my app) to the team, then make sure I can post in the channel. In Teams, apps may need an admin to allow them first.
3. **Subscribe the seed address** (if used). Add `{SEED_ADDRESS}` to every customer list/audience in HubSpot, and make sure it isn't suppressed or unsubscribed. Then connect or delegate that inbox to me, or set it to forward to `{CLONE_INBOX}`.
4. **Give me access to the support inbox** (if used). Connect `{SUPPORT_INBOX}` to me, or delegate read access (Google Workspace: mail delegation or a Google Group I can read; Microsoft 365: shared mailbox with Read permission).
5. **Label hand-sent customer emails.** When you or your team send a customer update by hand, apply `{SEND_LABEL}` (Gmail: label; Outlook: category). I can only read the Sent folder of mailboxes connected to me.
6. **Keep logging sends in Salesforce or HubSpot.** Log each send as a completed task/activity (Salesforce Task, or a HubSpot task/note) with subject `[Customer Email] {Type} – {Title}` (the Automated Customer Email Program use case does this automatically).

## 7. The Weekly Updates Recap skill (save this in full)

Fill in the placeholders, then save as a skill named **Weekly Updates Recap**. Don't shorten it.

~~~~markdown
# Weekly Updates Recap

## Purpose
Every Monday, summarize everything the company sent to customers in the last 7 days
and post one recap to {TEAM_CHANNEL}. This covers OUTBOUND communications only
(what we sent). It is not a voice-of-the-customer report: never summarize customer
replies or feedback.

## Settings
- Clone name: {CLONE_NAME}
- Clone inbox: {CLONE_INBOX}
- Company domains (internal): {YOUR_COMPANY_DOMAINS}
- Team channel: {TEAM_CHANNEL}
- Run time: {RUN_TIME}
- Window time zone: {RECAP_TIME_ZONE}
- Send label: {SEND_LABEL}
- Seed address: {SEED_ADDRESS}
- Support inbox (optional): {SUPPORT_INBOX}
- Content types: {CONTENT_TYPES}
- Expected send days: {SEND_DAYS}

## Tools
Use the exact names from my skill catalog (names can differ slightly between orgs). Use whatever is connected; skip what isn't.

| Purpose | Tool (exact catalog name) | Required | Access |
|---|---|---|---|
| Sent items with {SEND_LABEL}; copies at {SEED_ADDRESS}; {SUPPORT_INBOX} | GoogleGmailOperator or Outlook email operator | Yes | Read-only |
| Post the recap and thread replies | Slack or Microsoft Teams messaging integration | Yes | Post to {TEAM_CHANNEL} only |
| "[Customer Email]" tasks/activities and synced email activity | Salesforce: SalesforceActivityOperator, SalesforceAccountOperator. HubSpot: HubspotEngagementOperator, HubspotCompanyOperator | Optional | Read-only |
| Sent emails, lists/audiences, open/click totals | HubspotMarketingOperator | Optional | Read-only |

## Guardrails
- READ-ONLY: never create, update or delete anything in Salesforce, HubSpot or any inbox. Never label, move, archive or delete email.
- The ONLY write action is posting to {TEAM_CHANNEL} (main post plus thread replies). Never post anywhere else. Never send email.
- No personal details in the post: no recipient names, email addresses, phone numbers or individual customer names. Describe audiences by list or segment name ("All customers", "Admins segment", "1:1 CSM emails").
- Customer-facing content only. Exclude internal briefings, mail only to {YOUR_COMPANY_DOMAINS}, vendor/partner mail, sales prospecting, and personal one-to-one replies.
- Only state facts found in a source. If a stat is missing, write "n/a"; never estimate.
- Retry rule: if a tool call fails, retry ONCE. If it fails again, mark that source "unavailable" for this run, continue without it, and report it in the post.
- Failure is not an empty week: if EVERY source is unavailable, post the failure notice in Step 8. Never post "nothing was sent" unless at least one source was read successfully.
- Never ask for or handle passwords or tokens.

## Step 1: Set the window
- Window = the 7 full days before today, 00:00 to 23:59 in {RECAP_TIME_ZONE} (for a Monday run: last Monday through Sunday).
- Convert all source timestamps to {RECAP_TIME_ZONE} before comparing.

## Step 2: Read each source
For each source, record: worked / no data / unavailable (after retry) / not connected.

a. CRM (Salesforce or HubSpot)
- Completed tasks/activities in the window whose subject starts with "[Customer Email]".
  Parse the subject "[Customer Email] {Type} – {Title}" into type and title.
- Email activity synced from HubSpot marketing into the CRM in the window (marketing email engagements / campaign activity). Use the email name or subject as the title.
- Note the list/audience if recorded. Do not collect contact names or addresses.

b. HubSpot marketing (optional, HubspotMarketingOperator)
- Emails/campaigns with a send date in the window: name, subject, send date, list/audience, link to the web version if available, total opens and clicks.
- If the read tools fail twice or aren't permitted, skip and note "HubSpot marketing: send data unavailable".

c. Inbox (Gmail or Outlook)
- Sent items in the window with the label/category {SEND_LABEL}. Keep only messages with at least one recipient outside {YOUR_COMPANY_DOMAINS}.
- Messages received at {SEED_ADDRESS} in the window that come from HubSpot marketing or company domains (these are copies of list sends). Ignore anything else in the seed inbox.

d. Shared support inbox (optional)
- Messages sent from {SUPPORT_INBOX} in the window that are announcements to customers (same message to many customers, or sent to a customer list). Exclude individual ticket replies.

## Step 3: Filter
Drop anything that is:
- internal (all recipients in {YOUR_COMPANY_DOMAINS}), an internal briefing, or a test send,
- to vendors, partners or prospects only,
- a personal one-to-one reply or a support ticket reply,
- a customer reply or feedback (that's inbound, not part of this recap).
If unsure whether an item is customer-facing, leave it out and count it under "Excluded (unclear)".

## Step 4: Combine and de-duplicate
- Normalize each title: lowercase; remove emoji, punctuation, extra spaces; remove prefixes like "Fwd:", "Re:", "[Customer Email] {Type} –", and list/brand tags in brackets.
- Items with the same normalized title (or one clearly contained in the other) are ONE item.
- For each merged item keep: the earliest date, the best title (the customer-facing subject), the type, the list/audience, a link (prefer the public/web version), stats (from HubSpot marketing if present), and the list of sources that found it (CRM, Marketing, Label, Seed, Support).
- Don't merge items that only share generic words (e.g. two different "Monthly newsletter" editions on different dates: keep both, with dates).

## Step 5: Classify and summarize
- Assign each item one type from {CONTENT_TYPES}. Use the CRM type if present; otherwise decide from the content. If nothing fits, use 🔁 Other.
- Write a one-line, customer-facing summary: what the customer was told, in plain words, max ~20 words. No internal jargon.

## Step 6: Totals, top email and gaps
- Totals: number of items, number with stats, total opens, total clicks (only from items with stats).
- Top email: highest clicks (or opens if no click data). If no stats exist, write "Top email: n/a (no stats available)".
- Gaps:
  - Days in {SEND_DAYS} with no customer send.
  - Items found in other sources but not in the CRM "[Customer Email]" log ("Missing from CRM log"). Skip this check if the CRM wasn't connected.
  - Sources that were unavailable or not connected.
  - Count of "Excluded (unclear)" items, if any.

## Step 7: Post the recap to {TEAM_CHANNEL}
Main post format:

📬 Customer Updates Recap: {start date} – {end date} ({RECAP_TIME_ZONE})

{emoji} {Type}
• {date} · "{title}": {one-line summary} · {list/audience} · {link} · {opens} opens / {clicks} clicks (or "stats n/a")
(one bullet per item, oldest first; only show types that have items)

📈 Totals: {N} items · {N} with stats · {opens} opens · {clicks} clicks
🏆 Top email: "{title}" ({clicks} clicks)
⚠️ Gaps:
• No customer send on: {days} (or "none")
• Missing from CRM log: {titles} (or "none")
• Sources: CRM {status} · HubSpot marketing {status} · Inbox label {status} · Seed {status} · Support inbox {status}

If sources were read successfully and found nothing, post:
"📬 Customer Updates Recap: {dates}. No customer sends found. Sources checked: {list with status}."

Formatting:
- Slack (mrkdwn): bold = *text*, italic = _text_, links = <url|title>, bullets as "•". Keep the main post under ~3,000 characters.
- Microsoft Teams (markdown): bold = **text**, italic = _text_, links = [title](url), bullets as "- ". Teams rejects messages over about 28 KB (less with links and formatting), so aim for the same ~3,000 characters.
- If the recap is long (more than ~15 items or over the limit): post the header, totals, top email and gaps as the main post, then post each type group as a thread reply under it.

## Step 8: Failure notice
If EVERY source is unavailable or not connected, post instead:
"⚠️ Customer Updates Recap for {dates} could not be built: no source could be read.
CRM: {status} · HubSpot marketing: {status} · Inbox: {status} · Seed: {status} · Support inbox: {status}.
This does NOT mean nothing was sent. Please check the connections and ask {CLONE_NAME} to run the recap again."
If posting to {TEAM_CHANNEL} itself fails twice, report the failure to my owner in chat with the reason (e.g. "not a member of the channel").
~~~~

## 8. Test plan

Run this before relying on the weekly schedule. Ask the user to approve the test first. Use safe test data only: never send anything to real customers or prospects for a test.

1. **Prepare safe test data** (the user does this, or confirms existing data is fine to read):
   - Option A: use last week's real sends as they are. Reading is safe; the test post goes only to `{TEST_CHANNEL}` or this chat.
   - Option B: the user sends one test email from their inbox to an address they control outside `{YOUR_COMPANY_DOMAINS}` (not a customer), with `{SEND_LABEL}` applied and subject "Test update: recap check".
   - Optionally, the user also sends one internal-only email with `{SEND_LABEL}` so we can check it gets excluded.
2. **Run Weekly Updates Recap manually** with the post target set to `{TEST_CHANNEL}` (or "show me the draft here").
3. **Verify the checklist together:**

| Check | Pass? |
|---|---|
| Window dates and time zone are correct | ☐ |
| Each connected source shows worked / no data / unavailable | ☐ |
| Known sends from last week appear once each (duplicates merged, sources listed) | ☐ |
| Internal-only email was excluded | ☐ |
| Items are grouped under the right type headers with one-line summaries | ☐ |
| Stats appear where available, "n/a" where not | ☐ |
| Totals, top email and gaps are present and make sense | ☐ |
| **No recipient names, email addresses or personal details** in the post | ☐ |
| Formatting looks right in Slack/Teams (bold, links, bullets; thread replies if long) | ☐ |
| Nothing was changed in Salesforce, HubSpot or inboxes | ☐ |
| **No email was sent to anyone** | ☐ |
| (Optional) Disconnect-all test: failure notice wording is correct (check the text in the skill, no need to break real connections) | ☐ |

4. Fix anything that failed, re-run, then ask the user whether to post the approved version to `{TEAM_CHANNEL}` now or wait for Monday. The user deletes the test email if Option B was used.

## 9. Final status checklist

When you finish, send the user a status summary in this format:

**✅ Done by me**
- [ ] Discovery table shared
- [ ] Placeholder values confirmed
- [ ] Required skills/operators attached: …
- [ ] Optional add-ons attached: …
- [ ] Weekly Updates Recap skill created (or full text handed over for copy-paste)
- [ ] Scheduled task "Monday Customer Updates Recap" created for `{RUN_TIME}`
- [ ] Test run completed and posted to `{TEST_CHANNEL}` / shown in chat; results: …

**⏳ Waiting on you**
- [ ] Sign in to: …
- [ ] Add me to `{TEAM_CHANNEL}` (and `{TEST_CHANNEL}`)
- [ ] Subscribe `{SEED_ADDRESS}` to customer lists and give me access to it
- [ ] Give me access to `{SUPPORT_INBOX}` (if used)
- [ ] Start applying `{SEND_LABEL}` to hand-sent customer emails
- [ ] Save the Weekly Updates Recap skill (if I handed it over)
- [ ] Delete the test email (if one was sent)

**💡 Optional next steps**
- [ ] Connect Salesforce or HubSpot, and HubSpot marketing, for logging checks and open/click stats
- [ ] Set up the Automated Customer Email Program use case for consistent CRM logging
- [ ] Adjust content types, stats or audience detail
- [ ] Add a short leadership version to a second channel
- [ ] Review the first month of recaps and tighten filters
