brand-monitor
npx machina-cli add skill PHY041/claude-agent-skills/brand-monitor --openclawBrand Monitor — Reddit Brand & Market Intelligence Engine
AI-powered brand monitoring system. Give it a brand name and it auto-generates a complete monitoring strategy — subreddit tiers, keywords, competitors, urgency rules. Then it runs on cron, scanning Reddit, analyzing sentiment, and pushing alerts + daily digests.
Architecture
Phase 1: Brand Onboarding (one-time per brand)
User says "monitor DJI" → Agent analyzes website → generates monitoring plan → user confirms → saved to config
Phase 2: Continuous Monitoring (cron-driven, every 4h)
Read config → curl Reddit JSON → deduplicate → AI analysis → alert or archive
Phase 3: Reporting (cron-driven, daily/weekly)
Aggregate results → generate digest → send via Telegram
Phase 1: Brand Onboarding
When user says "monitor [brand]" or "help me monitor [brand]":
Step 1 — Analyze the Brand
- Ask user for the brand website URL if not provided (or search for it)
- Use
web_fetchto visit the brand's website - Extract:
- Brand name (English + local name if applicable)
- Product lines and sub-brands
- Main product categories
- Target market / use cases
- Infer competitors based on industry knowledge + web context
- Infer common user pain points based on product category
Step 2 — Generate Tiered Monitoring Plan
Build a three-tier subreddit + keyword strategy:
Tier A — Core (brand-specific communities)
- Search for
r/{brand}and related subreddits - Keywords: pain points + opportunity words (no brand name needed since the community IS about the brand)
- Scan interval: every 4 hours
- Example for DJI: r/dji, r/djimini → keywords: flyaway, gimbal issue, firmware bug...
Tier B — Category (industry communities)
- Search for subreddits matching the product category
- Keywords: brand name + product names
- Scan interval: every 8 hours
- Example for DJI: r/drones, r/DronePhotography → keywords: DJI, Mavic, Avata...
Tier C — Interest (broad interest communities)
- Subreddits based on product application scenarios
- Keywords: brand name only (cast wide net)
- Scan interval: every 24 hours
- Example for DJI: r/travel, r/Filmmakers → keywords: DJI, Mavic, Osmo...
Step 3 — Present Plan to User
Send the monitoring plan for confirmation:
Brand Monitor Plan — [Brand Name]
A. Core Communities (scan every 4h):
- r/xxx — keywords: pain1, pain2, pain3...
B. Category Communities (scan every 8h):
- r/aaa — keywords: brand1, product1, product2...
C. Interest Communities (scan every 24h):
- r/ccc — keywords: brand1, product1
Competitors: Competitor1, Competitor2
Critical keywords: recall, injury, lawsuit, class action, fire, explode
Reply "OK" to start monitoring, or tell me what to change.
Step 4 — Save Config
On user confirmation, write the brand profile to memory/brand-monitor-config.json.
Profile structure:
{
"brand_name": "DJI",
"display_name": "DJI",
"website": "https://www.dji.com",
"enabled": true,
"created_at": "2026-01-01T12:00:00+08:00",
"tiers": {
"A": {
"subreddits": ["dji", "djimini"],
"keywords": {
"pain": ["flyaway", "gimbal issue", "firmware bug"],
"opportunity": ["love my", "best purchase", "recommend"]
},
"scan_interval_hours": 4
},
"B": {
"subreddits": ["drones", "DronePhotography"],
"keywords": {
"brand": ["DJI", "Mavic", "Avata", "Air 3"]
},
"scan_interval_hours": 8
},
"C": {
"subreddits": ["travel", "Filmmakers"],
"keywords": {
"brand": ["DJI", "Mavic", "Osmo"]
},
"scan_interval_hours": 24
}
},
"competitors": ["Autel", "Skydio", "Parrot"],
"urgency_rules": {
"critical_keywords": ["recall", "injury", "lawsuit", "class action", "fire", "explode", "dangerous", "safety hazard"],
"high_score_threshold": 50,
"high_comment_threshold": 20
}
}
After saving, immediately run a first scan and report a summary to the user.
Phase 2: Continuous Monitoring (Cron-Driven)
Data Collection
On each cron wake:
- Read
memory/brand-monitor-config.json— if no profiles exist, replyHEARTBEAT_OK - Read
memory/brand-monitor-state.jsonfor last scan timestamps - For each enabled brand, check which tiers are due based on
scan_interval_hours - For due tiers, fetch posts from Reddit JSON API:
# Tier A: search pain/opportunity keywords within brand community
curl -s -H "User-Agent: BrandMonitor/1.0" \
"https://www.reddit.com/r/{subreddit}/search.json?q={keywords_OR_joined}&restrict_sr=1&sort=new&t=day&limit=25"
# Tier B/C: search brand keywords within category/interest community
curl -s -H "User-Agent: BrandMonitor/1.0" \
"https://www.reddit.com/r/{subreddit}/search.json?q={brand_keywords_OR_joined}&restrict_sr=1&sort=new&t=day&limit=25"
Rate limiting: 3 seconds between requests, max 15 requests per cron run.
Deduplication
Compare each post's id against seen_posts in state file. Window: 72 hours.
AI Analysis
For each new post, analyze and produce:
{
"post_id": "t3_xxxxx",
"subreddit": "dji",
"tier": "A",
"title": "Post title",
"score": 42,
"num_comments": 23,
"url": "https://reddit.com/r/dji/comments/xxxxx",
"created_utc": 1708300000,
"sentiment": "negative",
"intent": "bug_report",
"urgency": "high",
"summary": "One-line summary",
"affected_product": "Mini 4 Pro",
"competitor_mentioned": null,
"recommended_action": "Suggested action"
}
Sentiment values: negative, positive, neutral, mixed
Intent values: bug_report, cs_issue, feature_request, positive_showcase, newbie_question, competitor_comparison, buyer_signal, market_insight, general_discussion
Urgency values: critical, high, medium, low
Alert Routing
| Urgency | Action |
|---|---|
| critical | IMMEDIATELY send alert |
| high | IMMEDIATELY send alert |
| medium | Archive to daily results, include in digest |
| low | Archive to daily results only |
Alert Format (critical/high)
Brand Alert — [Brand Name]
Severity: [CRITICAL/HIGH]
Post: [Title] (score: X, comments: Y)
Intent: [Bug Report / CS Issue / etc.]
Summary: [one-line summary]
Product: [affected product or "General"]
Action: [recommended action]
Link: https://reddit.com/r/xxx/comments/xxx
Reply "dig deeper" to analyze comments, or "draft reply" to generate a brand response.
Phase 3: Reporting
Daily Digest
For each enabled brand with results:
[Brand Name] Daily Digest — YYYY-MM-DD
Negative (N):
1. [intent] Title — score/comments
Positive (N):
1. [intent] Title — score/comments
Buyer Signals (N):
- [summary]
Trends:
- Top discussed topics
- Sentiment shift vs last 7 days
- Competitor mentions
Insights:
- Agent's analysis and recommendations
Weekly Report
[Brand Name] Weekly Report
Overview:
- Total posts scanned: X
- Alerts triggered: Y (Z critical)
- Sentiment distribution: +N% / -N% / ~N%
Trends, Competitor Watch, Product Line Breakdown, Recommendations...
Interactive Commands
| User Says | Agent Does |
|---|---|
| "monitor [brand]" | Start onboarding flow |
| "check [brand]" | Run immediate full scan |
| "dig deeper [post_url]" | Fetch all comments, deep sentiment analysis |
| "draft reply [post_url]" | Generate brand-appropriate response draft |
| "daily digest" | Generate and send today's digest immediately |
| "weekly report" | Generate and send weekly report immediately |
| "pause [brand]" | Set brand.enabled = false |
| "resume [brand]" | Set brand.enabled = true |
| "monitor list" | List all brand profiles with status |
File Locations
| File | Purpose |
|---|---|
memory/brand-monitor-config.json | Brand profiles, subreddits, keywords, settings |
memory/brand-monitor-state.json | Scan timestamps, seen posts, daily results, stats |
memory/brand-monitor-assets.json | Saved UGC candidates, positive showcases |
Cron Schedule
| Job | Schedule | Purpose |
|---|---|---|
| Reddit Scan | Every 4h | Fetch new posts, analyze, alert |
| Daily Digest | Daily 09:00 (your TZ) | Aggregate and send results |
Edge Cases
Reddit API Rate Limited
Stop scanning, save progress, retry on next cron cycle.
Multiple Brands
Each brand is an independent profile. Cron processes them sequentially. Prioritize Tier A across all brands if approaching request limits.
Overlapping Subreddits
If two brands monitor the same subreddit, scan it once and apply results to both based on keyword matching.
Source
git clone https://github.com/PHY041/claude-agent-skills/blob/main/skills/brand-monitor/SKILL.mdView on GitHub Overview
Brand Monitor is an AI-powered Reddit brand monitoring system. Give it a brand name and it auto-generates a complete, multi-tier monitoring plan (Core, Category, and Interest subreddits) and then runs on a cron to surface real-time alerts and a daily digest.
How This Skill Works
Onboarding analyzes the brand (website, products, competitors) and builds Tier A/B/C subreddit plans with keywords. Then a cron-driven loop reads config, fetches Reddit data, deduplicates results, applies AI analysis, and emits alerts for high-urgency mentions or archives dull noise, plus a daily digest via Telegram.
When to Use It
- Launch a new product or campaign and track sentiment in brand communities.
- Monitor competitors and niche subreddits for early signals.
- Regular brand health checks across core, category, and interest subs.
- Crisis monitoring to catch recalls, injuries, or lawsuits early.
- Ongoing market intelligence with daily digests for leadership updates.
Quick Start
- Step 1: Trigger the skill with /brand-monitor or by saying monitor [Brand Name].
- Step 2: Confirm the generated Brand Monitor Plan and save to memory; include core/category/interest subreddits and keywords.
- Step 3: Let the cron-driven monitoring run; watch for real-time alerts and the daily digest in Telegram.
Best Practices
- Provide an accurate brand website URL during onboarding to help analytics and competitor inference.
- Define clear Tier A/B/C keywords to control signal noise and scan frequency.
- Review generated plan and adjust competitors and subs before saving to memory/brand-monitor-config.json.
- Set appropriate scan intervals (4h core, 8h category, 24h interest) to balance coverage and cost.
- Regularly review alerts and digests to refine critical keywords (recall, injury, lawsuit, fire, explode).
Example Use Cases
- DJI monitored to surface gimbal issues in r/dji and drone-related subs; flags firmware bugs and recalls.
- Nike competitors and category keywords tracked across sports and fashion subs to catch launches or PR issues.
- Apple product sentiment in r/apple and related tech subs to detect shifts before press cycles.
- Nikon or Canon brands tracked in photography subs for product feedback and accessory trends.
- Peloton monitored in fitness and wellness subs for workout trends and service complaints.