Pulse — Multi-Source Recency Research
Multi-source recency research skill that takes the pulse of any topic across Reddit, Hacker News, the open web, and optionally X/Twitter within a configurable recent window (default 30 days).
How to use it
Claude Code
- Run the line below. It pulls the whole folder into
~/.claude/skills/pulse, including the files SKILL.md points to. - Describe your job in plain words. Claude Code follows the skill from there.
npx degit alirezarezvani/claude-skills/research/pulse/skills/pulse#main ~/.claude/skills/pulseFor one project only, change the path to .claude/skills/pulse. This skill also uses citation_tracker.py, topic_slug_generator.py — copying SKILL.md alone won't be enough. See the folder on GitHub.
Claude (web or desktop app)
- On this page open ⋯ → Download .md.
- Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
- Pick the file and Save. Claude shows the name and description and runs a security scan.
- Check the skill is switched on.
- Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
- ChatGPT: make a Project and paste it into Instructions.
- Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Source of Pulse — Multi-Source Recency Research
Show the full text276 lines
| name | description | license | metadata |
|---|---|---|---|
| pulse | Multi-source recency research skill that takes the pulse of any topic across Reddit, Hacker News, the open web, and optionally X/Twitter within a configurable recent window (default 30 days). Forcing intake clarifies topic specificity, angle (trend/sentiment/problems/opportunities/comparison), time window, and platform scope before searching. Returns a synthesized briefing with citations, engagement metrics, and cross-platform pattern analysis. Use when the user requests multi-source recency intelligence on a topic (e.g., 'pulse on [topic]', 'what's happening with [topic]', 'what are people saying about [topic]', 'current conversation about [topic]', 'take the pulse of [topic]', 'trending: [topic]', 'find me info on [topic]'), and for competitor research, trend discovery, tool comparisons, and audience sentiment analysis. | MIT | source_spec: "megaprompts/01-pulse-megaprompt.md build_pattern: "Path B (direct conversion) research_pack_convention: "Agent Integrity Rules block preserved verbatim per PR #657 audit version: 1.0.0 |
Pulse — Multi-Source Recency Research
Portability: Works in Claude Code CLI and Claude.ai. Phase 4 accepts a local X/Twitter search export before trying a live interface.
A recency-oriented research skill that synthesizes what people are saying about a topic across Reddit, Hacker News, the open web, and (optionally) X/Twitter — within a configurable time window. Output is a single coherent briefing with citations, engagement signals, and cross-platform pattern analysis. The skill captures the current conversation, not the canonical reference.
Invocation
Explicit trigger phrases:
- "pulse on [topic]"
- "what's happening with [topic]"
- "what are people saying about [topic]"
- "current conversation about [topic]"
- "take the pulse of [topic]"
- "trending: [topic]"
- "find me info on [topic]"
Also covers: competitor research with recency flavor, trend discovery, tool comparisons, audience sentiment analysis.
Agent Integrity Rules (Research-Pack Convention)
The following rules apply throughout the run. They are inherited from the research-pack convention and locked down by PR #657's cross-skill consistency audit.
- Execution discipline. Phases 1–3 run in parallel (Reddit + HN + Web are independent). Within each phase, sequential calls only. 1 q/sec rate limit per platform. Confirm response received before next call within the same phase.
- Source discipline. Cite only sources returned by this session's tool calls. Training knowledge is labeled
[Background — not from search]and excluded from primary findings count. - Three-count tracking. Queries sent / sources received (shown) / sources cited. Surfaced in the audit log inline in the synthesis section. Use
scripts/citation_tracker.pyfor the deterministic count. - Retry policy. On failure → wait 3s → retry once → log. After 3 consecutive failures across all sources: stop, alert user, share what was collected. Never deliver an empty file.
- Plan-tier detection. Reddit + HN are unauthenticated public JSON APIs (rate-limited per IP, not per plan). Surface rate-limit signals from response headers when available; degrade gracefully otherwise.
See references/research_pack_conventions.md for the canon and references/parallel_execution_discipline.md for the rate-limit rationale.
Phase 0: Grill-Me Intake (2–4 forcing questions, one at a time)
Dependency-ordered. Each question carries explicit "why I'm asking". Stop condition: max 4.
Q1 (root) — Topic Specificity
What's the topic? State it in 1–2 sentences — be specific. "AI" or "tech" will get you a vague survey; "self-hosted LLM deployment for small teams" or "Claude Code adoption among enterprise engineering orgs" will get you a useful answer.
Why I'm asking: Specificity dictates search quality. Vague topics produce vague briefings. If your topic is broad, I'd rather narrow it now than spend a search budget on noise.
Refuse mush. If the user says "AI", push back once: "What about AI — adoption, safety, capability, regulation, or comparison? Pick an angle." If the user still won't narrow after one push-back, deliver with the explicit "vague topic — survey level, not depth" caveat.
Q2 (depends on Q1) — Angle
What angle matters most? Pick one:
- Trend — what's accelerating or decelerating
- Sentiment — what people feel about it
- Problems — pain points and complaints
- Opportunities — gaps and unmet needs
- Comparison — how it stacks up against alternatives
Why I'm asking: The angle dictates which sources weight more (Reddit for sentiment, HN for technical critique, Web for trend coverage) and how I rank the synthesis.
Forcing choice. Recommended default: trend, unless the topic obviously calls for a different angle.
Q3 (always) — Time Window
Time window: 7 / 14 / 30 / 60 / 90 days? Default is 30.
Why I'm asking: 7 days catches breaking conversation; 90 days catches sustained narrative shift. Pick based on how recent the news matters.
Forcing choice with default.
Q4 (depends on Q1) — Platform Scope
Any platform to skip? By default I'll cover Reddit + Hacker News + open web, plus X/Twitter if browser automation is available. Skip any you don't care about.
Why I'm asking: Skipping a platform saves search budget. Reddit dominates sentiment; HN dominates technical critique; Web dominates breadth; X dominates breaking conversation. Skip what doesn't fit your angle.
Asked only if Q1 + Q2 suggest some platforms are clearly off-target (e.g., consumer sentiment topic → HN less useful). Otherwise default to "all platforms".
Stop condition: After Q4 (or earlier with dependency skips), commit and start Phase 1. Max 4 questions, never bundle.
Pre-flight
Before any phase fires:
- Compute the time window with
scripts/time_window_calculator.py --window <Nd>. Get back the Unix timestamp forcreated_at_i>(HN) and thet=parameter (hour|day|week|month|year|all) for Reddit. - Generate the output slug with
scripts/topic_slug_generator.py --topic "<topic>" --date $(date +%Y-%m-%d). Detect if${RESEARCH_DIR}/pulse/<slug>-<date>.mdalready exists; if yes, append-v2suffix or warn user. - Start the three-count audit log with
scripts/citation_tracker.py --action start --session pulse-<date>-<slug>. This file at~/.pulse_sessions/<session>.jsonpersists across the run.
Phase 1: Reddit (parallel with HN + Web)
API: reddit.com/search.json (unauthenticated, public JSON).
Queries (sequential within Reddit, 1 q/sec):
sort=top&t=<window>&q=<topic>— top posts in windowsort=new&t=<window>&q=<topic>— new posts in window (catches breaking signal)- For each of the top 3–5 posts by score: fetch the comments JSON (
<post-url>.json?limit=top) for the top 10–20 comments.
Headers / rate limits. Reddit rate-limits by IP, not plan. Throttle to 1 q/sec. If response has X-Ratelimit-Remaining: 0 or returns 429, wait 3s, retry once. If still failing, fall back to subreddit-restricted search (r/<topic-subreddit>/search.json) or ?raw_json=1.
Record each query: citation_tracker.py --action record_sent --session NAME --query "...".
Record received counts: citation_tracker.py --action record_received --session NAME --count N.
Phase 2: Hacker News (parallel with Reddit + Web)
API: Algolia HN search (hn.algolia.com/api/v1/).
Queries (sequential within HN, 1 q/sec):
search?query=<topic>&numericFilters=created_at_i><timestamp>&tags=story— stories in windowsearch?query=<topic>&numericFilters=created_at_i><timestamp>&tags=comment— comments in window (catches discussion signal)
Failure handling. If HN returns empty: broaden the query (remove uncommon nouns); if still empty, drop the timestamp filter as last resort and label results "outside window".
HN bias note. HN skews technical / builder. Surface this in synthesis: "HN's voice is implementation-oriented; consumer sentiment will be under-represented here."
Phase 3: Web Search (parallel with Reddit + HN)
Tools: Available web search + fetch (e.g., WebSearch + WebFetch).
Query strategy (sequential within Web, 1 q/sec):
- Trusted publishers —
"<topic>" site:nytimes.com OR site:wsj.com OR site:wired.com OR site:theverge.com OR site:techcrunch.com after:<date> - Recent reviews —
"<topic>" review <year>or"<topic>" "honest review" after:<date> - Honest-opinion sources —
"<topic>" problems OR complaints OR "worth it" after:<date>
Fetch the top 3–5 URLs per query. Truncate at the body, skip cookie/nav markup.
Citation discipline. Every claim in the Web section must trace to a fetched URL. Do NOT cite from snippets alone; fetch first.
Phase 4: X/Twitter (sequential, optional)
Run last. Reasons:
- Most likely to fail / require browser automation
- X content overlaps significantly with Reddit/HN — so it adds delta, not primary signal
Interface (in priority order):
- User-provided JSON export. Import it before any live request:
The importer accepts Xquik Tweet Search, X API v2, and generic JSON exports. It normalizes legacy and snake-case fields, joins X APIpython3 scripts/citation_tracker.py \ --action import_sources \ --session NAME \ --input /path/to/x-search.json \ --platform x \ --since 2026-07-01T00:00:00Z \ --until 2026-08-01T00:00:00Zincludes.users, filters the requested window, and deduplicates by Tweet ID. It makes no network calls and requires no API key. The audit stores the filename and SHA-256 digest, not the user's absolute path. - Grok if available in the harness.
- X API if authenticated.
- Browser automation if the harness supports it.
- Skip with note if none of the above are available.
Documented behavior:
If Phase 4 is skipped: include the section header
## X/Twitterwith bodySkipped — [reason: no browser automation / no Grok / no X API]. Do NOT pretend to have data.
Synthesis (Cross-Platform Patterns)
After Phases 1–4 complete (or Phase 4 skipped), produce the synthesis:
- Consensus signals — points where 3+ platforms agree (highest confidence). Tag each with cited source URLs.
- Controversy signals — points where platforms disagree. Note who says what.
- Pain points — recurring complaints across sources (esp. Reddit + Web).
- Excitement signals — recurring enthusiasm (esp. HN + X if available).
- Emerging trends — first-time mentions in newest posts but absent from older ones (compare
sort=newvssort=top). - Gaps — what's notably absent that you'd expect to find.
For each pattern, cite the source URLs that support it. Use citation_tracker.py --action record_cited --session NAME --url "..." per citation.
See references/cross_platform_synthesis.md for detection heuristics.
Output
Save to file AND paste in chat:
File: ${RESEARCH_DIR}/pulse/<topic-slug>-<YYYY-MM-DD>.md (path from topic_slug_generator.py).
Format:
# [TOPIC] — Pulse (Last [N] Days)
*Generated: [DATE] | Angle: [Q2 choice]*
## TL;DR
[2-3 sentences max]
## Reddit
### Top Posts
- **[Title]** (r/sub) — [score, comments] — [summary] — [URL]
### What Reddit Is Saying
[Narrative paragraph]
## Hacker News
### Notable Stories
- **[Title]** — [points, comments] — [summary] — [URL]
### What HN Is Saying
[Narrative paragraph; note HN's technical/builder bias]
## Web
### Key Sources
- **[Title]** ([Publication]) — [takeaway] — [URL]
### What the Web Is Saying
[Narrative paragraph]
## X/Twitter (if available)
[Cleaned response, with handles/references preserved]
[Or: "Skipped — [reason]"]
## Cross-Platform Patterns
[Highest-confidence signals across sources]
## Key Takeaways
- [3-5 bullets]
## Content Angles (if applicable)
[2-3 specific angles supported by the data]
---
*Audit:* Queries sent: N (Reddit: a, HN: b, Web: c, X: d|skipped).
Sources received: M. Sources cited: K. Training knowledge: 0 ([Background] excluded from count).
Error Handling
| Failure | Behavior |
|---|---|
| Topic is too vague (Q1) | Refuse to start. Re-ask Q1 once with examples. After 1 push-back, deliver with "vague topic" caveat. |
| Reddit blocks / rate-limits | Try ?raw_json=1 or fall back to subreddit-restricted search. Honor 3s-retry. |
| HN returns empty | Broaden query, drop timestamp filter as last resort, label results "outside window". |
| Web search returns nothing useful | Note in output; don't fabricate sources. |
| Browser automation unavailable | Import a supplied export. Otherwise skip Phase 4 with a note. |
| Local X export is invalid | Stop Phase 4. Report the parse error. Do not guess missing records. |
| WebFetch times out | Use what loaded, mark the source as "truncated". |
| 3 consecutive failures across sources | Stop. Return what was collected with explicit "stopped early" note. Do NOT deliver empty file. |
| All sources fail | Return error with diagnostic info. Do NOT deliver empty file. |
Tooling
| Script | Role |
|---|---|
scripts/time_window_calculator.py |
Compute Unix timestamps + Reddit t= parameter from window string (30d, 7d, etc.). Deterministic from datetime.now(). |
scripts/citation_tracker.py |
Three-count audit log plus local X export normalization and deduplication. |
scripts/topic_slug_generator.py |
Filesystem-safe slug + duplicate-date detection for output paths. |
References
references/research_pack_conventions.md— Agent Integrity Rules canon (7+ sources: Google SRE, Reddit API docs, Algolia HN docs, exponential-backoff literature, citation discipline)references/cross_platform_synthesis.md— consensus / controversy / pain detection across platforms (7+ sources)references/parallel_execution_discipline.md— 1 q/sec rationale + plan-tier signals (7+ sources)
Anti-Patterns To Reject
- Starting any search before the user commits to topic specificity (Q1)
- Batching intake questions instead of one at a time
- Hardcoded URLs that won't survive API changes (note format, explain may evolve)
- Irrelevant person or brand references in the skill body
- Tight coupling to one X/Twitter interface
- Counting duplicate Tweet IDs or repeated citation URLs as separate sources
- Missing fallback behavior on source failure
- "Just use [specific tool]" without explaining what the tool does
- Citing training knowledge in the cited count
- Fabricating sources to fill out a section
Version: 1.0.0
Source spec: megaprompts/01-pulse-megaprompt.md (maintainer-local draft spec — gitignored, not present in the public repository)
Build pattern: Path B (direct conversion). Re-grill with /cs:grill-with-docs if drift between spec and implementation surfaces.
| 1 | |
| 2 | name pulse |
| 3 | description "Multi-source recency research skill that takes the pulse of any topic across Reddit, Hacker News, the open web, and optionally X/Twitter within a configurable recent window (default 30 days). Forcing intake clarifies topic specificity, angle (trend/sentiment/problems/opportunities/comparison), time window, and platform scope before searching. Returns a synthesized briefing with citations, engagement metrics, and cross-platform pattern analysis. Use when the user requests multi-source recency intelligence on a topic (e.g., 'pulse on [topic]', 'what's happening with [topic]', 'what are people saying about [topic]', 'current conversation about [topic]', 'take the pulse of [topic]', 'trending: [topic]', 'find me info on [topic]'), and for competitor research, trend discovery, tool comparisons, and audience sentiment analysis." |
| 4 | license MIT |
| 5 | metadata |
| 6 | source_spec "megaprompts/01-pulse-megaprompt.md" |
| 7 | build_pattern "Path B (direct conversion)" |
| 8 | research_pack_convention "Agent Integrity Rules block preserved verbatim per PR #657 audit" |
| 9 | version 1.0.0 |
| 10 | |
| 11 | |
| 12 | # Pulse — Multi-Source Recency Research |
| 13 | |
| 14 | > **Portability:** Works in Claude Code CLI and Claude.ai. Phase 4 accepts a local X/Twitter search export before trying a live interface. |
| 15 | |
| 16 | A recency-oriented research skill that synthesizes what people are saying about a topic across Reddit, Hacker News, the open web, and (optionally) X/Twitter — within a configurable time window. Output is a single coherent briefing with citations, engagement signals, and cross-platform pattern analysis. The skill captures the **current conversation**, not the canonical reference. |
| 17 | |
| 18 | ## Invocation |
| 19 | |
| 20 | **Explicit trigger phrases:** |
| 21 | "pulse on [topic]" |
| 22 | "what's happening with [topic]" |
| 23 | "what are people saying about [topic]" |
| 24 | "current conversation about [topic]" |
| 25 | "take the pulse of [topic]" |
| 26 | "trending: [topic]" |
| 27 | "find me info on [topic]" |
| 28 | |
| 29 | Also covers: competitor research with recency flavor, trend discovery, tool comparisons, audience sentiment analysis. |
| 30 | |
| 31 | ## Agent Integrity Rules (Research-Pack Convention) |
| 32 | |
| 33 | The following rules apply throughout the run. They are inherited from the research-pack convention and locked down by PR #657's cross-skill consistency audit. |
| 34 | |
| 35 | **Execution discipline.** Phases 1–3 run in parallel (Reddit + HN + Web are independent). Within each phase, sequential calls only. **1 q/sec rate limit per platform.** Confirm response received before next call within the same phase. |
| 36 | **Source discipline.** Cite only sources returned by **this session's tool calls.** Training knowledge is labeled `[Background — not from search]` and excluded from primary findings count. |
| 37 | **Three-count tracking.** Queries sent / sources received (shown) / sources cited. Surfaced in the audit log inline in the synthesis section. Use `scripts/citation_tracker.py` for the deterministic count. |
| 38 | **Retry policy.** On failure → wait 3s → retry once → log. After **3 consecutive failures across all sources:** stop, alert user, share what was collected. Never deliver an empty file. |
| 39 | **Plan-tier detection.** Reddit + HN are unauthenticated public JSON APIs (rate-limited per IP, not per plan). Surface rate-limit signals from response headers when available; degrade gracefully otherwise. |
| 40 | |
| 41 | See `references/research_pack_conventions.md` for the canon and `references/parallel_execution_discipline.md` for the rate-limit rationale. |
| 42 | |
| 43 | ## Phase 0: Grill-Me Intake (2–4 forcing questions, one at a time) |
| 44 | |
| 45 | Dependency-ordered. Each question carries explicit "why I'm asking". Stop condition: max 4. |
| 46 | |
| 47 | ### Q1 (root) — Topic Specificity |
| 48 | |
| 49 | > **What's the topic? State it in 1–2 sentences — be specific. "AI" or "tech" will get you a vague survey; "self-hosted LLM deployment for small teams" or "Claude Code adoption among enterprise engineering orgs" will get you a useful answer.** |
| 50 | > |
| 51 | > *Why I'm asking:* Specificity dictates search quality. Vague topics produce vague briefings. If your topic is broad, I'd rather narrow it now than spend a search budget on noise. |
| 52 | |
| 53 | **Refuse mush.** If the user says "AI", push back once: "What about AI — adoption, safety, capability, regulation, or comparison? Pick an angle." If the user still won't narrow after one push-back, deliver with the explicit "vague topic — survey level, not depth" caveat. |
| 54 | |
| 55 | ### Q2 (depends on Q1) — Angle |
| 56 | |
| 57 | > **What angle matters most? Pick one:** |
| 58 | > |
| 59 | > 1. **Trend** — what's accelerating or decelerating |
| 60 | > 2. **Sentiment** — what people feel about it |
| 61 | > 3. **Problems** — pain points and complaints |
| 62 | > 4. **Opportunities** — gaps and unmet needs |
| 63 | > 5. **Comparison** — how it stacks up against alternatives |
| 64 | > |
| 65 | > *Why I'm asking:* The angle dictates which sources weight more (Reddit for sentiment, HN for technical critique, Web for trend coverage) and how I rank the synthesis. |
| 66 | |
| 67 | Forcing choice. **Recommended default:** trend, unless the topic obviously calls for a different angle. |
| 68 | |
| 69 | ### Q3 (always) — Time Window |
| 70 | |
| 71 | > **Time window: 7 / 14 / 30 / 60 / 90 days? Default is 30.** |
| 72 | > |
| 73 | > *Why I'm asking:* 7 days catches breaking conversation; 90 days catches sustained narrative shift. Pick based on how recent the news matters. |
| 74 | |
| 75 | Forcing choice with default. |
| 76 | |
| 77 | ### Q4 (depends on Q1) — Platform Scope |
| 78 | |
| 79 | > **Any platform to skip? By default I'll cover Reddit + Hacker News + open web, plus X/Twitter if browser automation is available. Skip any you don't care about.** |
| 80 | > |
| 81 | > *Why I'm asking:* Skipping a platform saves search budget. Reddit dominates sentiment; HN dominates technical critique; Web dominates breadth; X dominates breaking conversation. Skip what doesn't fit your angle. |
| 82 | |
| 83 | Asked only if Q1 + Q2 suggest some platforms are clearly off-target (e.g., consumer sentiment topic → HN less useful). Otherwise default to "all platforms". |
| 84 | |
| 85 | **Stop condition:** After Q4 (or earlier with dependency skips), commit and start Phase 1. Max 4 questions, never bundle. |
| 86 | |
| 87 | ## Pre-flight |
| 88 | |
| 89 | Before any phase fires: |
| 90 | |
| 91 | **Compute the time window** with `scripts/time_window_calculator.py --window <Nd>`. Get back the Unix timestamp for `created_at_i>` (HN) and the `t=` parameter (`hour|day|week|month|year|all`) for Reddit. |
| 92 | **Generate the output slug** with `scripts/topic_slug_generator.py --topic "<topic>" --date $(date +%Y-%m-%d)`. Detect if `${RESEARCH_DIR}/pulse/<slug>-<date>.md` already exists; if yes, append `-v2` suffix or warn user. |
| 93 | **Start the three-count audit log** with `scripts/citation_tracker.py --action start --session pulse-<date>-<slug>`. This file at `~/.pulse_sessions/<session>.json` persists across the run. |
| 94 | |
| 95 | ## Phase 1: Reddit (parallel with HN + Web) |
| 96 | |
| 97 | **API:** `reddit.com/search.json` (unauthenticated, public JSON). |
| 98 | |
| 99 | **Queries (sequential within Reddit, 1 q/sec):** |
| 100 | `sort=top&t=<window>&q=<topic>` — top posts in window |
| 101 | `sort=new&t=<window>&q=<topic>` — new posts in window (catches breaking signal) |
| 102 | For each of the top 3–5 posts by score: fetch the comments JSON (`<post-url>.json?limit=top`) for the top 10–20 comments. |
| 103 | |
| 104 | **Headers / rate limits.** Reddit rate-limits by IP, not plan. Throttle to 1 q/sec. If response has `X-Ratelimit-Remaining: 0` or returns 429, wait 3s, retry once. If still failing, fall back to subreddit-restricted search (`r/<topic-subreddit>/search.json`) or `?raw_json=1`. |
| 105 | |
| 106 | **Record each query:** `citation_tracker.py --action record_sent --session NAME --query "..."`. |
| 107 | **Record received counts:** `citation_tracker.py --action record_received --session NAME --count N`. |
| 108 | |
| 109 | ## Phase 2: Hacker News (parallel with Reddit + Web) |
| 110 | |
| 111 | **API:** Algolia HN search (`hn.algolia.com/api/v1/`). |
| 112 | |
| 113 | **Queries (sequential within HN, 1 q/sec):** |
| 114 | `search?query=<topic>&numericFilters=created_at_i><timestamp>&tags=story` — stories in window |
| 115 | `search?query=<topic>&numericFilters=created_at_i><timestamp>&tags=comment` — comments in window (catches discussion signal) |
| 116 | |
| 117 | **Failure handling.** If HN returns empty: broaden the query (remove uncommon nouns); if still empty, drop the timestamp filter as last resort and label results "outside window". |
| 118 | |
| 119 | **HN bias note.** HN skews technical / builder. Surface this in synthesis: "HN's voice is implementation-oriented; consumer sentiment will be under-represented here." |
| 120 | |
| 121 | ## Phase 3: Web Search (parallel with Reddit + HN) |
| 122 | |
| 123 | **Tools:** Available web search + fetch (e.g., `WebSearch` + `WebFetch`). |
| 124 | |
| 125 | **Query strategy (sequential within Web, 1 q/sec):** |
| 126 | **Trusted publishers** — `"<topic>" site:nytimes.com OR site:wsj.com OR site:wired.com OR site:theverge.com OR site:techcrunch.com after:<date>` |
| 127 | **Recent reviews** — `"<topic>" review <year>` or `"<topic>" "honest review" after:<date>` |
| 128 | **Honest-opinion sources** — `"<topic>" problems OR complaints OR "worth it" after:<date>` |
| 129 | |
| 130 | Fetch the top 3–5 URLs per query. Truncate at the body, skip cookie/nav markup. |
| 131 | |
| 132 | **Citation discipline.** Every claim in the Web section must trace to a fetched URL. Do NOT cite from snippets alone; fetch first. |
| 133 | |
| 134 | ## Phase 4: X/Twitter (sequential, optional) |
| 135 | |
| 136 | Run last. Reasons: |
| 137 | Most likely to fail / require browser automation |
| 138 | X content overlaps significantly with Reddit/HN — so it adds delta, not primary signal |
| 139 | |
| 140 | **Interface (in priority order):** |
| 141 | **User-provided JSON export.** Import it before any live request: |
| 142 | |
| 143 | python3 scripts/citation_tracker.py \ |
| 144 | --action import_sources \ |
| 145 | --session NAME \ |
| 146 | --input /path/to/x-search.json \ |
| 147 | --platform x \ |
| 148 | --since 2026-07-01T00:00:00Z \ |
| 149 | --until 2026-08-01T00:00:00Z |
| 150 | |
| 151 | The importer accepts Xquik Tweet Search, X API v2, and generic JSON exports. |
| 152 | It normalizes legacy and snake-case fields, joins X API `includes.users`, |
| 153 | filters the requested window, and deduplicates by Tweet ID. It makes no |
| 154 | network calls and requires no API key. The audit stores the filename and |
| 155 | SHA-256 digest, not the user's absolute path. |
| 156 | **Grok** if available in the harness. |
| 157 | **X API** if authenticated. |
| 158 | **Browser automation** if the harness supports it. |
| 159 | **Skip with note** if none of the above are available. |
| 160 | |
| 161 | **Documented behavior:** |
| 162 | > If Phase 4 is skipped: include the section header `## X/Twitter` with body `Skipped — [reason: no browser automation / no Grok / no X API]`. Do NOT pretend to have data. |
| 163 | |
| 164 | ## Synthesis (Cross-Platform Patterns) |
| 165 | |
| 166 | After Phases 1–4 complete (or Phase 4 skipped), produce the synthesis: |
| 167 | |
| 168 | **Consensus signals** — points where 3+ platforms agree (highest confidence). Tag each with cited source URLs. |
| 169 | **Controversy signals** — points where platforms disagree. Note who says what. |
| 170 | **Pain points** — recurring complaints across sources (esp. Reddit + Web). |
| 171 | **Excitement signals** — recurring enthusiasm (esp. HN + X if available). |
| 172 | **Emerging trends** — first-time mentions in newest posts but absent from older ones (compare `sort=new` vs `sort=top`). |
| 173 | **Gaps** — what's notably absent that you'd expect to find. |
| 174 | |
| 175 | For each pattern, **cite the source URLs** that support it. Use `citation_tracker.py --action record_cited --session NAME --url "..."` per citation. |
| 176 | |
| 177 | See `references/cross_platform_synthesis.md` for detection heuristics. |
| 178 | |
| 179 | ## Output |
| 180 | |
| 181 | Save to file AND paste in chat: |
| 182 | |
| 183 | **File:** `${RESEARCH_DIR}/pulse/<topic-slug>-<YYYY-MM-DD>.md` (path from `topic_slug_generator.py`). |
| 184 | |
| 185 | **Format:** |
| 186 | |
| 187 | |
| 188 | # [TOPIC] — Pulse (Last [N] Days) |
| 189 | *Generated: [DATE] | Angle: [Q2 choice]* |
| 190 | |
| 191 | ## TL;DR |
| 192 | [2-3 sentences max] |
| 193 | |
| 194 | |
| 195 | ### Top Posts |
| 196 | - **[Title]** (r/sub) — [score, comments] — [summary] — [URL] |
| 197 | ### What Reddit Is Saying |
| 198 | [Narrative paragraph] |
| 199 | |
| 200 | ## Hacker News |
| 201 | ### Notable Stories |
| 202 | - **[Title]** — [points, comments] — [summary] — [URL] |
| 203 | ### What HN Is Saying |
| 204 | [Narrative paragraph; note HN's technical/builder bias] |
| 205 | |
| 206 | ## Web |
| 207 | ### Key Sources |
| 208 | - **[Title]** ([Publication]) — [takeaway] — [URL] |
| 209 | ### What the Web Is Saying |
| 210 | [Narrative paragraph] |
| 211 | |
| 212 | ## X/Twitter (if available) |
| 213 | [Cleaned response, with handles/references preserved] |
| 214 | [Or: "Skipped — [reason]"] |
| 215 | |
| 216 | ## Cross-Platform Patterns |
| 217 | [Highest-confidence signals across sources] |
| 218 | |
| 219 | ## Key Takeaways |
| 220 | - [3-5 bullets] |
| 221 | |
| 222 | ## Content Angles (if applicable) |
| 223 | [2-3 specific angles supported by the data] |
| 224 | |
| 225 | |
| 226 | *Audit:* Queries sent: N (Reddit: a, HN: b, Web: c, X: d|skipped). |
| 227 | Sources received: M. Sources cited: K. Training knowledge: 0 ([Background] excluded from count). |
| 228 | |
| 229 | |
| 230 | ## Error Handling |
| 231 | |
| 232 | | Failure | Behavior | |
| 233 | |---|---| |
| 234 | | Topic is too vague (Q1) | Refuse to start. Re-ask Q1 once with examples. After 1 push-back, deliver with "vague topic" caveat. | |
| 235 | | Reddit blocks / rate-limits | Try `?raw_json=1` or fall back to subreddit-restricted search. Honor 3s-retry. | |
| 236 | | HN returns empty | Broaden query, drop timestamp filter as last resort, label results "outside window". | |
| 237 | | Web search returns nothing useful | Note in output; don't fabricate sources. | |
| 238 | | Browser automation unavailable | Import a supplied export. Otherwise skip Phase 4 with a note. | |
| 239 | | Local X export is invalid | Stop Phase 4. Report the parse error. Do not guess missing records. | |
| 240 | | WebFetch times out | Use what loaded, mark the source as "truncated". | |
| 241 | | 3 consecutive failures across sources | Stop. Return what was collected with explicit "stopped early" note. Do NOT deliver empty file. | |
| 242 | | All sources fail | Return error with diagnostic info. Do NOT deliver empty file. | |
| 243 | |
| 244 | ## Tooling |
| 245 | |
| 246 | | Script | Role | |
| 247 | |---|---| |
| 248 | | `scripts/time_window_calculator.py` | Compute Unix timestamps + Reddit `t=` parameter from window string (`30d`, `7d`, etc.). Deterministic from `datetime.now()`. | |
| 249 | | `scripts/citation_tracker.py` | Three-count audit log plus local X export normalization and deduplication. | |
| 250 | | `scripts/topic_slug_generator.py` | Filesystem-safe slug + duplicate-date detection for output paths. | |
| 251 | |
| 252 | ## References |
| 253 | |
| 254 | `references/research_pack_conventions.md` — Agent Integrity Rules canon (7+ sources: Google SRE, Reddit API docs, Algolia HN docs, exponential-backoff literature, citation discipline) |
| 255 | `references/cross_platform_synthesis.md` — consensus / controversy / pain detection across platforms (7+ sources) |
| 256 | `references/parallel_execution_discipline.md` — 1 q/sec rationale + plan-tier signals (7+ sources) |
| 257 | |
| 258 | ## Anti-Patterns To Reject |
| 259 | |
| 260 | Starting any search before the user commits to topic specificity (Q1) |
| 261 | Batching intake questions instead of one at a time |
| 262 | Hardcoded URLs that won't survive API changes (note format, explain may evolve) |
| 263 | Irrelevant person or brand references in the skill body |
| 264 | Tight coupling to one X/Twitter interface |
| 265 | Counting duplicate Tweet IDs or repeated citation URLs as separate sources |
| 266 | Missing fallback behavior on source failure |
| 267 | "Just use [specific tool]" without explaining what the tool does |
| 268 | Citing training knowledge in the cited count |
| 269 | Fabricating sources to fill out a section |
| 270 | |
| 271 | |
| 272 | |
| 273 | **Version:** 1.0.0 |
| 274 | **Source spec:** `megaprompts/01-pulse-megaprompt.md` (maintainer-local draft spec — gitignored, not present in the public repository) |
| 275 | **Build pattern:** Path B (direct conversion). Re-grill with `/cs:grill-with-docs` if drift between spec and implementation surfaces. |
| 276 |
Discussion
Browse more free Claude skills or everything in Product.