# Blog Discourse

Research what people are actually saying about a topic in the last 30 days across...

- Repository: https://github.com/AgriciDaniel/claude-blog (2608 stars)
- Category: Writing
- License: MIT
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add AgriciDaniel/claude-blog --skill blog-discourse -g -a claude-code -y`
Codex: `npx skills add AgriciDaniel/claude-blog --skill blog-discourse -g -a codex -y`
Cursor: `npx skills add AgriciDaniel/claude-blog --skill blog-discourse -g -a cursor -y`
Gemini CLI: `npx skills add AgriciDaniel/claude-blog --skill blog-discourse -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add AgriciDaniel/claude-blog`

## Description

Research 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 DISCOURSE.md (a structured brief) and JSON output the writer can consume. Complements blog-researcher (which focuses on authority sources) with a recency-and-engagement lens. Use when user says "blog discourse", "discourse research", "what are people saying about", "research what people are saying", "voice of customer", "social listening", "30-day research", "trend research", "what's the discussion on", "real-time research", "practitioner discourse", "/blog discourse".

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Blog Discourse: Real Discourse Research, API-Free

`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?

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.

## Commands

| Command | Purpose |
|---|---|
| `/blog discourse <topic>` | Produce a discourse brief at project-root `DISCOURSE.md` |
| `/blog discourse <topic> --days 90` | Widen the freshness window from 30 to 90 days |
| `/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. |
| `/blog discourse <topic> --output path.md` | Write markdown to a chosen output path and print structured JSON without markdown to stdout. |
| `/blog discourse <topic> --format json` | Print the full JSON brief to stdout when no `--output` path is used. |
| `/blog discourse <topic> --decomposition questions.txt` | Pass newline-delimited decomposition questions into the helper. |

## Workflow

### Phase 0: Topic Pre-Flight (mandatory)

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:

1. Emit a single one-line note: `Pre-Flight: matched Class N. Action: <reframe or clarifying question>.`
2. If the action is a clarifying question, STOP and wait for the user.
3. If the action is a reframe, proceed with the reframed query and document the reframe in the brief.

Running discourse research on a trap topic wastes WebSearch calls and produces noise.

The rest: https://github.com/AgriciDaniel/claude-blog/blob/HEAD/brain/.raw/sources/claude-blog-skill/skills/blog-discourse/SKILL.md
