$npx -y skills add PHY041/claude-agent-skills --skill brand-monitorReddit brand & market intelligence engine. AI-powered onboarding — give it a brand name and it auto-generates the monitoring strategy. Supports multi-brand, layered subreddit monitoring, real-time alerts, and daily digests. Triggers on "/brand-monitor", "monitor [brand]", "check
| 1 | # Brand Monitor — Reddit Brand & Market Intelligence Engine |
| 2 | |
| 3 | 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. |
| 4 | |
| 5 | --- |
| 6 | |
| 7 | ## Architecture |
| 8 | |
| 9 | ``` |
| 10 | Phase 1: Brand Onboarding (one-time per brand) |
| 11 | User says "monitor DJI" → Agent analyzes website → generates monitoring plan → user confirms → saved to config |
| 12 | |
| 13 | Phase 2: Continuous Monitoring (cron-driven, every 4h) |
| 14 | Read config → curl Reddit JSON → deduplicate → AI analysis → alert or archive |
| 15 | |
| 16 | Phase 3: Reporting (cron-driven, daily/weekly) |
| 17 | Aggregate results → generate digest → send via Telegram |
| 18 | ``` |
| 19 | |
| 20 | --- |
| 21 | |
| 22 | ## Phase 1: Brand Onboarding |
| 23 | |
| 24 | When user says "monitor [brand]" or "help me monitor [brand]": |
| 25 | |
| 26 | ### Step 1 — Analyze the Brand |
| 27 | |
| 28 | 1. Ask user for the brand website URL if not provided (or search for it) |
| 29 | 2. Use `web_fetch` to visit the brand's website |
| 30 | 3. Extract: |
| 31 | - Brand name (English + local name if applicable) |
| 32 | - Product lines and sub-brands |
| 33 | - Main product categories |
| 34 | - Target market / use cases |
| 35 | 4. Infer competitors based on industry knowledge + web context |
| 36 | 5. Infer common user pain points based on product category |
| 37 | |
| 38 | ### Step 2 — Generate Tiered Monitoring Plan |
| 39 | |
| 40 | Build a three-tier subreddit + keyword strategy: |
| 41 | |
| 42 | **Tier A — Core (brand-specific communities)** |
| 43 | - Search for `r/{brand}` and related subreddits |
| 44 | - Keywords: pain points + opportunity words (no brand name needed since the community IS about the brand) |
| 45 | - Scan interval: every 4 hours |
| 46 | - Example for DJI: r/dji, r/djimini → keywords: flyaway, gimbal issue, firmware bug... |
| 47 | |
| 48 | **Tier B — Category (industry communities)** |
| 49 | - Search for subreddits matching the product category |
| 50 | - Keywords: brand name + product names |
| 51 | - Scan interval: every 8 hours |
| 52 | - Example for DJI: r/drones, r/DronePhotography → keywords: DJI, Mavic, Avata... |
| 53 | |
| 54 | **Tier C — Interest (broad interest communities)** |
| 55 | - Subreddits based on product application scenarios |
| 56 | - Keywords: brand name only (cast wide net) |
| 57 | - Scan interval: every 24 hours |
| 58 | - Example for DJI: r/travel, r/Filmmakers → keywords: DJI, Mavic, Osmo... |
| 59 | |
| 60 | ### Step 3 — Present Plan to User |
| 61 | |
| 62 | Send the monitoring plan for confirmation: |
| 63 | |
| 64 | ``` |
| 65 | Brand Monitor Plan — [Brand Name] |
| 66 | |
| 67 | A. Core Communities (scan every 4h): |
| 68 | - r/xxx — keywords: pain1, pain2, pain3... |
| 69 | |
| 70 | B. Category Communities (scan every 8h): |
| 71 | - r/aaa — keywords: brand1, product1, product2... |
| 72 | |
| 73 | C. Interest Communities (scan every 24h): |
| 74 | - r/ccc — keywords: brand1, product1 |
| 75 | |
| 76 | Competitors: Competitor1, Competitor2 |
| 77 | Critical keywords: recall, injury, lawsuit, class action, fire, explode |
| 78 | |
| 79 | Reply "OK" to start monitoring, or tell me what to change. |
| 80 | ``` |
| 81 | |
| 82 | ### Step 4 — Save Config |
| 83 | |
| 84 | On user confirmation, write the brand profile to `memory/brand-monitor-config.json`. |
| 85 | |
| 86 | Profile structure: |
| 87 | ```json |
| 88 | { |
| 89 | "brand_name": "DJI", |
| 90 | "display_name": "DJI", |
| 91 | "website": "https://www.dji.com", |
| 92 | "enabled": true, |
| 93 | "created_at": "2026-01-01T12:00:00+08:00", |
| 94 | "tiers": { |
| 95 | "A": { |
| 96 | "subreddits": ["dji", "djimini"], |
| 97 | "keywords": { |
| 98 | "pain": ["flyaway", "gimbal issue", "firmware bug"], |
| 99 | "opportunity": ["love my", "best purchase", "recommend"] |
| 100 | }, |
| 101 | "scan_interval_hours": 4 |
| 102 | }, |
| 103 | "B": { |
| 104 | "subreddits": ["drones", "DronePhotography"], |
| 105 | "keywords": { |
| 106 | "brand": ["DJI", "Mavic", "Avata", "Air 3"] |
| 107 | }, |
| 108 | "scan_interval_hours": 8 |
| 109 | }, |
| 110 | "C": { |
| 111 | "subreddits": ["travel", "Filmmakers"], |
| 112 | "keywords": { |
| 113 | "brand": ["DJI", "Mavic", "Osmo"] |
| 114 | }, |
| 115 | "scan_interval_hours": 24 |
| 116 | } |
| 117 | }, |
| 118 | "competitors": ["Autel", "Skydio", "Parrot"], |
| 119 | "urgency_rules": { |
| 120 | "critical_keywords": ["recall", "injury", "lawsuit", "class action", "fire", "explode", "dangerous", "safety hazard"], |
| 121 | "high_score_threshold": 50, |
| 122 | "high_comment_threshold": 20 |
| 123 | } |
| 124 | } |
| 125 | ``` |
| 126 | |
| 127 | After saving, immediately run a first scan and |