# Daily Mentions Summary

> End-of-day recap of <BRAND>'s social mentions using Octolens. Produces a Slack-ready summary with sentiment score, highlights, and lowlights. Use when the user asks for a daily mentions recap, EOD summary, or "what happened today in mentions".

- Skill: `warpdotdev/daily-mentions-summary` (Agent Skill)
- Install (CLI): `npx skillmds@latest add warpdotdev/daily-mentions-summary`
- Raw SKILL.md: https://api.skillmd.com/api/skills/warpdotdev/daily-mentions-summary/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: warpdotdev (https://skillmd.com/u/warpdotdev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/warpdotdev/daily-mentions-summary

---


# Daily Mentions Summary

End-of-day recap for Slack. This is NOT for triaging replies (that happens throughout the day via Slack notifications) — this is a quick internal recap of what stood out.

Uses the **Octolens** MCP server.

## Workflow

### Step 1: Fetch today's mentions

1. Call `list_mentions_context` to get available keyword IDs and filter syntax.
2. Identify the brand-related keywords (your brand name, your domain, and your GitHub org).
3. Query `list_mentions` with those keyword IDs, `relevance=[0]`, and today's date range. Use `startDate` = today and `endDate` = tomorrow to ensure full coverage (single-day queries with identical start/end dates can return empty).
4. Set `includeAll: false` and `limit: 100`.
5. Paginate with `cursor` until exhausted or 500 mentions reached.

### Step 2: Aggregate

Count totals by sentiment:
- `pos` = number of positive mentions
- `neu` = number of neutral mentions
- `neg` = number of negative mentions
- `total = pos + neu + neg`

### Step 3: Compute sentiment score

```
daily_score = ((pos - neg) / total) * 100
```

Range: -100 (all negative) to +100 (all positive). Round to nearest integer.

### Step 4: Identify patterns by sentiment

Before analyzing, filter out:
- **<BRAND> employee posts** (replies from <BRAND> team members to users — these are support, not organic mentions)
- **Spam / reseller posts** (e.g. discounted subscription sellers, engagement bait)
- **Cross-post duplicates** (same content posted to both Twitter and Bluesky — count once, prefer higher-reach version)

For each sentiment category (Positive, Neutral, Negative), identify **3-5 key themes or patterns**. Focus on:
- What are users saying? What themes emerge?
- Are there patterns across multiple mentions?
- What's strategically meaningful vs. noise?

**What to look for:**
- **Ecosystem signals**: Third-party tools, integrations, content, partnerships
- **Product feedback**: Specific features, workflows, pricing, performance
- **Competitive dynamics**: Comparisons, switching behavior, positioning
- **Market signals**: New personas, geographies, use cases
- **Sentiment drivers**: What's causing the positive/negative reactions?

**What to skip:**
- One-off generic praise/complaints without insight
- Basic confirmations ("X works")
- Unclear context or vague posts

### Step 5: Write pattern summaries

For each sentiment category, write 3-5 summary points that capture the key themes. Each point should:
- **Be specific and concrete**: What actually happened? Who said what?
- **Be clear and direct**: Skip corporate jargon, write like you're telling a teammate
- **Give context**: Include numbers (follower count, how many users) when they matter
- **Show impact**: Why does this pattern matter?
- Include **1-2 representative links** as examples using markdown: `[link](url)`, `[link](url)`

**For Positive section only**: After pattern summaries, include 1-3 direct quotes that work as testimonials. Pick the most specific, enthusiastic quotes that show clear value. Format as:
```
_"[exact quote]"_ — <url|@username on platform>
```
Where `platform` is the source (e.g. "X", "Reddit", "Bluesky", "Hacker News"). This makes it clear the link goes to the post, not the user's profile.

**Tone guidelines:**
- Write conversationally, not formally
- Use specific details over abstract categories
- Lead with what happened, not a label
- Make it scannable and easy to understand quickly

Good examples:
- `Developer built an open-source agent monitoring dashboard with native <BRAND> support — getting traction in a niche community — [link](url)`
- `Reddit thread: 3+ paying users burned hundreds of credits on login loops, saying they're close to switching to a competitor — [link](url), [link](url)`
- `5 mentions of people evaluating tools — <BRAND> coming up alongside other tools, comparing features — [link](url), [link](url)`
- `A dev platform added <BRAND> block embeds as a platform feature (alongside other tools) — [link](url)`

Bad examples:
- `Ecosystem growth: Third-party integrations` (too abstract)
- `Credit burn concerns: Multiple users reporting issues` (not specific enough)
- `Positive sentiment observed` (meaningless)

### Step 6: Format output

Produce a single Slack message using Slack's mrkdwn format, ~300 words max:

```
*Daily Mentions Summary — <date>*
<total> mentions | 🟢 <pos> · ⚪ <neu> · 🔴 <neg> | score <daily_score>

*Positive*
• <pattern summary with count> — <url|link>, <url|link>
• <pattern summary with count> — <url|link>
...

_Testimonials:_
_"<exact quote>"_ — <url|@username on platform>
_"<exact quote>"_ — <url|@username on platform>

*Neutral*
• <pattern summary with count> — <url|link>, <url|link>
• <pattern summary with count> — <url|link>
...

*Negative*
• <pattern summary with count> — <url|link>, <url|link>
• <pattern summary with count> — <url|link>
...
```

Note: Use Slack's mrkdwn format: `*bold*` (single asterisks) and `<url|link>` for links.

If a sentiment category has no meaningful patterns (rare), you may omit that section.

### Step 7: Send to Slack (optional)

Only proceed with this step if the user explicitly asks to "send the report", "send to Slack", "post to Slack", or similar. Do NOT send automatically.

1. Check if `BUZZ_SLACK_TOKEN` environment variable exists: `echo $BUZZ_SLACK_TOKEN`
2. If the token exists, send the formatted summary to the channel in `$MENTIONS_SUMMARY_CHANNEL_ID` using:

```bash
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $BUZZ_SLACK_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"channel\": \"$MENTIONS_SUMMARY_CHANNEL_ID\", \"text\": \"<formatted_summary_here>\", \"unfurl_links\": false, \"unfurl_media\": false}"
```

3. If `BUZZ_SLACK_TOKEN` is not set, let the user know they need to set it to send Slack notifications

### Step 8: Send testimonials to #testimonials (optional)

Only proceed with this step when Step 7 is triggered (i.e. the user asked to send to Slack). If there are no testimonials (no positive quotes identified in Step 5), skip this step.

1. Format a separate message using only the testimonial quotes from Step 5:

```
*Daily Social Mention Testimonials — <date>*

_"<exact quote>"_ — <url|@username on platform>

_"<exact quote>"_ — <url|@username on platform>

_"<exact quote>"_ — <url|@username on platform>
```

2. Send to the testimonials channel in `$TESTIMONIALS_CHANNEL_ID` using:

```bash
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $BUZZ_SLACK_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"channel\": \"$TESTIMONIALS_CHANNEL_ID\", \"text\": \"<formatted_testimonials_here>\", \"unfurl_links\": false, \"unfurl_media\": false}"
```

## Edge Cases

- **Very few mentions** (<10): Still produce the summary but note the low volume. Don't force 5 highlights.
- **No negative mentions**: Skip the Lowlights section.
- **Non-English mentions**: Include them if noteworthy — note the language/region context in the takeaway (e.g. "Growing traction in the Chinese dev community").

