SKILL.md12.6 KBView on GitHub
---
name: product-updates
description: Generate customer-facing product update messages from a Cedar changelog. Writes a Slack announcement and optionally extracts sequence-worthy features with ready-to-paste Loops copy. Use when a new changelog is ready and product updates need to be drafted and sent.
---

# Product Update Writer

Given a Cedar changelog (output from the changelog skill or raw git commit list), generate:
1. A customer-facing Slack product update message
2. Optionally, a ready-to-paste feature highlight for the Loops email sequence

Then send the Slack message to the product updates channel.

---

## Cedar product context

Cedar is an AI-powered email client for B2B sales teams. It helps salespeople manage their pipeline, draft follow-up emails, track deals, and automate CRM updates — all from their inbox.

Key customer-facing concepts:
- **Agent / Cedar agent** — the AI that reads emails, drafts follow-ups, and updates the CRM
- **AOPs (Agent Operating Procedures)** — the rules/playbooks that govern how the agent behaves per deal type
- **Deals view / pipeline** — where users track their sales conversations and deal stages
- **Working memory / conversation fields** — the structured data Cedar tracks per deal (status, next steps, priority, etc.)
- **Sequences** — outbound email sequences (via Loops) sent to Cedar users
- **Canvas** — AI-generated dashboards and views inside Cedar

---

## Automation prompt (run every 2 days, weekdays only)

```
You are running Cedar's bi-daily product update automation. Follow these steps in order:

1. Determine the commit window, then gather commits and PR descriptions:

   a. Find the date of the last merged CHANGELOG PR:
        gh pr list --state merged --search "CHANGELOG in:title" --json title,mergedAt --limit 1

      - If found: use its mergedAt timestamp as --since
      - If not found: fall back to --since="3 days ago"
      - Either way, cap at "3 days ago" — never go further back even if the last CHANGELOG is older

   b. Run: git log --since="<resolved date>" --pretty=format:"%H %s" --no-merges

   c. For each commit hash, find its associated GitHub PR and extract the description:
        gh api repos/isabelleilyia/cedar-mail/commits/<hash>/pulls
      Extract the PR title and body (Greptile-generated description) for each.
      If a commit has no associated PR, fall back to the commit message alone.

   c. Build a combined input document:
      - PR title / commit message
      - PR body / Greptile description (if available)
      - Commit hash
      One block per change.

2. Use the changelog skill to transform the combined input into a structured changelog.
   Identify all customer-facing changes. Note background changes separately but do NOT
   include them in the product update.

   Then commit the changelog file and open a PR titled "CHANGELOG [Month Day, YYYY]"
   (e.g. "CHANGELOG Mar 21, 2026"). The PR body should only contain the structured
   changelog (New features / Improvements / Fixes / Behind the scenes) — nothing else.
   The product update copy and sequence copy are NOT included in the PR.

   Opening the PR is required for every automation run that generates a changelog.
   Do not substitute a branch link, file link, or pushed commit link for the changelog PR URL.
   If the current environment cannot create PRs, stop before sending the Slack product update
   and report: "Changelog committed and pushed, but no product update was sent because PR
   creation is unavailable in this environment."

     git checkout -b changelog/YYYY-MM-DD
     git add docs/changelogs/
     git commit -m "changelog: YYYY-MM-DD"
     gh pr create --title "CHANGELOG Mar 21, 2026" --body "<structured changelog content>" --base staging

   Note the PR URL — include it in the Slack message in step 3.

3. Use the product-updates skill to:
   a. Write a customer-facing Slack message (include the PR link from step 2 at the bottom)
   b. Determine if any feature warrants a Loops sequence step
   c. If yes, write the sequence copy

4. Send the Slack message to channel C0AMT953B4K using sendAdminSlackToChannel
   (admin user: Isabelle). If sequence copy was written, append to the Slack message:
   📧 Sequence step ready → https://app.loops.so/loops/cmm49ltth0c7a0ix4n21d5ckn?stepName=Builder

5. If there are NO customer-facing changes worth announcing, skip sending and report:
   "No customer-facing changes in the last 2 days — no update sent."

Report back: what was sent, the full Slack message text, and any sequence copy generated.
```

---

## Step 1: Filter for customer-facing changes only

From the changelog, identify only items that:
- Are **visible or directly felt by the user** in Cedar's UI or behavior
- Change something about how the agent works, what it surfaces, or how the user interacts with their pipeline
- Fix something the user could actually notice (a broken button, wrong data, missing feature)

**EXCLUDE from the product update** (send only to Slack as a quick note if at all):
- Infrastructure, database migrations, server config
- Internal tooling, admin-only playground changes
- Authentication, logging, monitoring
- Performance improvements that are purely backend (unless user-visible e.g. "loads 3x faster")
- Refactors with no visible behavior change

---

## Step 2: Determine if any feature warrants a Loops sequence step

A feature is **sequence-worthy** if it meets ALL of:
1. It's a **new capability** users didn't have before (not an improvement to something existing)
2. It has a clear, specific **user benefit** that's easy to explain in 1 sentence
3. It would be genuinely useful to **remind or teach** a customer about via email
4. It's significant enough that a customer who missed it would want to know

If a feature qualifies, note it as sequence-worthy and proceed to Step 4.

---

## Step 3: Write the Slack product update

**Channel:** `C0AMT953B4K`

### Tone and style

These are real examples of Cedar product update messages sent to customers. Match this voice exactly — warm, direct, founder-level casual. Never formal. Always explains what it means for the user, not just what changed.

**Example 1 — feature config update (what the agent will/won't edit):**
```
Made some updates based on feedback:

Our agent will update and write to Next Step & Next Step Date automatically (as already configured).
For Stage, Amount, # of seats, Forecast Category, Close Date: our agent will NOT edit these fields, but if you change them yourself from Cedar, Salesforce will be updated. This means you can just work out of Cedar and don't have to go into Salesforce except to create an opp!
```

**Example 2 — sync completion / data integrity update:**
```
Hey @[user], happy Monday! Hope you had a great weekend 🙂
Wanted to update you that your Salesforce sync is complete! What this means:

All Cedar data is now reset to match Salesforce. What you see today in Salesforce will match what you see in Cedar, and from here on we'll continue updating as before. Any change you make in Salesforce will be synced to Cedar every hour.

This should fix the data integrity issues we were chatting about. I'll be continuously monitoring your account to make sure everything stays clean so you can work out of Cedar as your source-of-truth to-do list each day.
```

**Example 3 — Friday multi-feature update:**
```
Good morning! Happy Friday 🙂 Wanted to share some updates:

• Slack notifications after post-meeting follow-ups are ready — you can connect here: https://mail.cedarcopilot.com/settings/notifications
• We added citations in chat. Questions you ask about deals will now give you precise, quoted answers
```

### Key tone characteristics to match

- Warm opener if it's a standalone message ("Good morning!", "Happy Monday!", "Hope you had a great weekend")
- Lead with what it *means for the user*, not what we built — "This means you can just work out of Cedar" not "We updated the field sync logic"
- Use "you" and "your" heavily — this is personal, not broadcast
- Bullet points for multi-item updates, flowing prose for single-topic updates
- Links are always inline, never "click here" — just the URL or a short label + URL
- No marketing language, no superlatives, no "excited to announce"
- Match Cedar product terminology: agent, AOP, deals view, Cedar, Salesforce/SFDC, next steps, sequences
- Keep it short — the examples above are the right length ceiling

### Message structure

For a single significant change — use prose, not bullets:
```
[warm opener if standalone message]

[what changed, explained as user benefit in 1-2 sentences]

[what it means / what they can do now — 1-2 sentences]

[optional: link or CTA inline]
```

For multiple changes — use bullets:
```
[optional warm opener]

• [most impactful change — phrased as benefit]
• [second change — phrased as benefit, link inline if relevant]
• [third change if significant]
```

Skip minor fixes and background changes entirely. If there's only one thing worth mentioning, lead with it directly — no "Wanted to share some updates:" framing needed.

---

## Step 4: Write the Loops sequence copy (only if sequence-worthy)

If a feature qualifies from Step 2, write a sequence step in the format below.

Loops sequence dashboard: https://app.loops.so/loops/cmm49ltth0c7a0ix4n21d5ckn?stepName=Builder

### Sequence copy format

**Sequence example 1 — inbox overview / shortcut:**
```
Hey {firstName},

Switching tabs between your CRM, calendar, email, and ChatGPT?

In Cedar, press 1 to filter your inbox down to just your Deals. Gmail in the middle, your CRM on crack at the top right, and a ChatGPT that knows everything about your deals on the bottom right.

To learn more, see this 1 minute video: [video link]

Email power user? We have shortcuts everywhere: [shortcuts link]

Open your sales optimized inbox here: https://mail.cedarcopilot.com/mail/inbox

May your pipeline overfloweth,
Isabelle & Jesse
```

**Sequence example 2 — AI drafting / post-meeting follow-ups:**
```
Hey {firstName},

Imagine if ChatGPT or Claude knew everything about every deal and knew how you write emails. We understand how annoying it is to copy and paste 5 meeting transcripts for Chat to spit out a mediocre email.

Click one button to draft a follow up or response on any open email thread in your inbox: [demo link]

Every day, find all your post-meeting follow-ups on your tasks page: [tasks link]

Wishing you an overflowing pipeline,
Isabelle & Jesse
```

### Key tone characteristics for sequence copy

- **Open with the pain point** — "Switching tabs between...?" or "Imagine if..." — never lead with what Cedar does, lead with what's annoying about the world without it
- **Short paragraphs** — 1-2 sentences each, lots of white space
- **Empathetic** — "We understand how annoying it is to..."
- **Conversational brand voice** — not SaaS marketing, more like a note from a friend who happens to know a lot about sales tools
- **Playful sign-off** — always "Wishing you an overflowing pipeline" or "May your pipeline overfloweth" (alternate these)
- **Sign as** "Isabelle & Jesse"
- **One CTA** — a specific link to exactly where to go, not a generic homepage
- **Reference videos/demos** if available — "[1 minute video]" is a common pattern; mark with a placeholder if no link yet
- **No bullet lists** — this email format uses prose and line breaks, not bullets
- **Length** — 5-8 sentences total, never longer

---

## Step 5: Send the Slack message

Use the Notifications playground (`/playground` → Notifications tab → Sequences → Send Feature Text via Slack) OR directly call the `sendAdminSlackToChannel` Slack helper with:
- Channel: the product updates channel ID (fill in above)
- Text: the message from Step 3

Always include at the bottom of the Slack message, a link to the changelog PR opened this run:

```
🔗 [CHANGELOG Mar 21, 2026](https://github.com/isabelleilyia/cedar-mail/pull/NNN)
```

If there is also sequence-worthy copy, add this line after the PR link:
```
📧 Sequence step ready — add it here: https://app.loops.so/loops/cmm49ltth0c7a0ix4n21d5ckn?stepName=Builder
```

---

## Output format

Return all of the following to the user:

### 1. Slack message (ready to send or already sent)
```
[the message]
```

### 2. Sequence step (if applicable)
**Subject:** [subject line]

[body copy]

**Add to sequence:** https://app.loops.so/loops/cmm49ltth0c7a0ix4n21d5ckn?stepName=Builder

### 3. What was excluded
A brief note on what customer-facing items (if any) were left out of the update and why.

---

## Self-improvement

If the user corrects the tone, rewrites a message, or gives feedback — update the examples in this SKILL.md immediately to reflect the correction. This keeps the skill calibrated over time.