$npx -y skills add AgriciDaniel/claude-blog --skill blog-discourseResearch what people are actually saying about a topic in the last 30 days across Reddit, X / Twitter, YouTube, Hacker News, dev.to, Medium, and other public discourse platforms. API-free; uses WebSearch with platform-targeted site operators plus recency filters. Produces DISCOUR
| 1 | # Blog Discourse: Real Discourse Research, API-Free |
| 2 | |
| 3 | `blog-discourse` is the recency + engagement lens that `blog-researcher` (authority-first) lacks. It asks: in the last 30 days, what are practitioners and customers actually saying about this topic on the public web? |
| 4 | |
| 5 | Adapted from the methodology of `last30days-skill` (Matt Van Horn, MIT, https://github.com/mvanhorn/last30days-skill). The upstream uses platform APIs; this sub-skill uses WebSearch with platform-targeted site operators. No API keys required. |
| 6 | |
| 7 | ## Commands |
| 8 | |
| 9 | | Command | Purpose | |
| 10 | |---|---| |
| 11 | | `/blog discourse <topic>` | Produce a discourse brief at project-root `DISCOURSE.md` | |
| 12 | | `/blog discourse <topic> --days 90` | Widen the freshness window from 30 to 90 days | |
| 13 | | `/blog discourse <topic> --feed-into brief` | Run the brief, then immediately invoke `/blog brief <topic>` with DISCOURSE.md auto-loaded | |
| 14 | | `/blog discourse <topic> --feed-into write` | Run the brief, then invoke `/blog write <topic>` | |
| 15 | | `/blog discourse <topic> --feed-into strategy` | Run the brief, then invoke `/blog strategy <topic>` | |
| 16 | | `/blog discourse <topic> --input results.json` | Skip search; build the brief from a pre-gathered results file. The flag name matches `scripts/discourse_research.py --input` directly. | |
| 17 | |
| 18 | ## Workflow |
| 19 | |
| 20 | ### Phase 0: Topic Pre-Flight (mandatory) |
| 21 | |
| 22 | Before any search, run the four keyword-trap checks from `skills/blog/references/research-quality.md` (Class 1 demographic shopping, Class 2 numeric trap, Class 3 overly-literal phrase, Class 4 generic single-noun). If the topic matches a class: |
| 23 | |
| 24 | 1. Emit a single one-line note: `Pre-Flight: matched Class N. Action: <reframe or clarifying question>.` |
| 25 | 2. If the action is a clarifying question, STOP and wait for the user. |
| 26 | 3. If the action is a reframe, proceed with the reframed query and document the reframe in the brief. |
| 27 | |
| 28 | Running discourse research on a trap topic wastes WebSearch calls and produces noise. |
| 29 | |
| 30 | ### Phase 1: Topic Decomposition (Step 0.55) |
| 31 | |
| 32 | For named-entity topics, decompose into discrete searchable queries. Use the checklist from `research-quality.md`: |
| 33 | |
| 34 | - [ ] Primary entity (official statements, vendor site) |
| 35 | - [ ] Counter-perspective (critics, competitors, contrarians) |
| 36 | - [ ] Practitioner discourse (subreddits, forums, dev.to, Medium) |
| 37 | - [ ] Tangential entities (founder, parent org, related products) |
| 38 | - [ ] Time anchor (last 30 or 90 days) |
| 39 | |
| 40 | Emit the decomposition at the top of the eventual brief so reviewers can see the search plan. |
| 41 | |
| 42 | ### Phase 2: Platform-Targeted WebSearch |
| 43 | |
| 44 | For each decomposed query, run WebSearch with platform-targeted site operators. Compose 4 to 8 searches total per topic. Use these operators (the agent picks the relevant subset for the topic class): |
| 45 | |
| 46 | | Platform | Operator | When to use | |
| 47 | |---|---|---| |
| 48 | | Reddit | `site:reddit.com/r/<sub>` or `site:reddit.com` | Always (when a relevant sub is known or discoverable) | |
| 49 | | Hacker News | `site:news.ycombinator.com` | Tech, dev tools, startup topics | |
| 50 | | X / Twitter | `site:x.com` or `site:twitter.com` | Public discourse, influencer takes | |
| 51 | | YouTube | `site:youtube.com` | Walkthroughs, reactions, demos | |
| 52 | | dev.to | `site:dev.to` | Developer practitioner content | |
| 53 | | Medium | `site:medium.com` | Long-form practitioner commentary | |
| 54 | | GitHub | `site:github.com` (for issues / discussions) | Open-source projects | |
| 55 | | StackOverflow | `site:stackoverflow.com` | Concrete how-to problems | |
| 56 | | Substack | `site:substack.com` | Newsletter-form essays | |
| 57 | |
| 58 | Always include a recency filter when the platform supports it (Google's `after:YYYY-MM-DD` and `before:YYYY-MM-DD`). For `--days 30`, set `after:` to today minus 30 days. For `--days 90`, today minus 90 days. |
| 59 | |
| 60 | ### Phase 3: Result Collection |
| 61 | |
| 62 | For each WebSearch result, capture (into a temporary results JSON file the script can consume): |
| 63 | |
| 64 | ```json |
| 65 | { |
| 66 | "platform": "reddit", |
| 67 | "url": "https://reddit.com/r/xxx/comments/yyy", |
| 68 | "title": "Original post title as visible in SERP", |
| 69 | "snippet": "SERP snippet text", |
| 70 | "date": "YYYY-MM-DD or null", |
| 71 | "engagement_proxy": "upvote/comment |