pulse — community-pulse research
/pulse <topic> [window/flags in plain language]
Answer one question: what is the community actually saying about this topic right
now, and what's resonating? You ground every claim in a real source and rank by
real engagement — not by what a search engine's editors surfaced.
Inputs
- Topic (required): a person, product/company, project/repo, or concept/event.
- Window (optional, plain language): default last 30 days. Honor overrides
like "last week", "past 6 months", "this year". Record the resolved window.
- Any other plain-language steering ("focus on Reddit", "ELI5", "just the drama").
Step 0 — Resolve scope (ask only if genuinely ambiguous)
Run immediately for clear topics. Ask 1–2 quick questions only if:
- the name maps to multiple plausible entities (e.g. a common name, an ambiguous
product), or
- there's no obvious angle and the result would likely research the wrong thing.
Otherwise proceed and state your assumptions in the brief header.
Auto-detect the topic type and weight sources accordingly:
| Detected type |
Source emphasis |
| Person (dev/tech) |
GitHub (velocity) + Hacker News + web + Reddit |
| Person (non-tech) |
Web + Reddit (skip/deprioritize GitHub) |
| Product / company |
Reddit + web + Hacker News (GitHub if it's a tool) |
| Project / repo / tool |
GitHub + Hacker News + Reddit + web |
| Concept / event |
Web + Hacker News + Reddit (skip GitHub) |
Do light entity resolution first when useful (e.g. the canonical subreddit, the
GitHub owner/repo or username, the official site) so sub-agents search the right
handles rather than guessing.
Step 1 — Fan out: parallel source sub-agents
Spawn the relevant source sub-agents concurrently (one message, multiple Agent
calls). Skip sources the topic type deprioritizes. Give each the topic, resolved
entities, and the time window. Each sub-agent must return structured findings:
for every item — title, url, source, engagement (the raw metric + its kind),
date, and a 1–2 sentence snippet. Then it deepens its top 2–3 items
(below). Each gathers ~8–10 candidates before deepening.
Use subagent_type: "Explore" (read-only, fast) for fetch-heavy sources.
Effort scaling: match the fan-out to the ask. A niche topic or an explicit
"quick check" needs only the 2 best-matched sources from the table; the full
fan-out is for broad or clearly hot topics. Lossless hand-off: if a
sub-agent's deepened findings run long (many quotes/threads), have it write the
full extracts to out/pulse/.work/<source>.md and return just its ranked
summary — read the files at synthesis instead of losing detail in the relay.
Web sub-agent
- Use
WebSearch with several query variations (topic + "news"/"review"/"discussion"
- recency terms). Prefer results inside the window.
- Authority over SEO: prefer primary sources (official posts, the actual
thread/repo, named practitioners) over SEO-optimized aggregators and listicle
farms. A claim that appears only on low-quality aggregator sites is
low-trust — mark it accordingly.
- Engagement proxy: publication prominence + how often a story recurs across results.
- Deepen top 2–3:
WebFetch the article and extract the core claim + any quotes.
Hacker News sub-agent (free Algolia API — most reliable signal)
- Search:
WebFetch →
https://hn.algolia.com/api/v1/search?query=<TOPIC>&tags=story&numericFilters=created_at_i>UNIX_START
(compute UNIX_START with a real shell command — e.g. date -d '30 days ago' +%s
— never guess the timestamp; for relevance over recency use /search instead
of /search_by_date).
engagement = points and num_comments.
- Deepen top 2–3: fetch
https://hn.algolia.com/api/v1/items/<objectID> and pull the
highest-signal top-level comments (the actual takes).
Reddit sub-agent (best-effort, keyless)
- Try
WebFetch on public JSON:
https://www.reddit.com/search.json?q=<TOPIC>&sort=top&t=month (map t to the
window: week/month/year), and/or https://www.reddit.com/r/<SUB>/search.json?...&restrict_sr=1.
engagement = ups (upvotes) and num_comments.
- Deepen top 2–3: fetch the thread JSON (
<permalink>.json) and pull top comments.
- Fallback chain on 403/empty: first retry the same JSON paths on
old.reddit.com (often served when www is blocked); if that also fails, use
WebSearch for site:reddit.com <topic> and WebFetch the threads.
Note in the brief that Reddit was reached via fallback.
GitHub sub-agent (keyless REST, 60 req/hr)
- Repo/tool topic:
https://api.github.com/search/repositories?q=<TOPIC>&sort=stars,
then for the chosen repo pull recent commits, releases, and open/closed PR
counts to gauge shipping velocity.
- Person topic: resolve the username, then
users/<u> + recent users/<u>/events
(public) to summarize what they're shipping.
engagement = stars, recent commit/PR/release cadence.
If a source returns nothing usable after its fallback, record it as unreachable
— do not fabricate.
Step 2 — Synthesize (main agent)
- Check for a previous pulse (delta memory): look for earlier
out/pulse/<slug>-*.md files for this topic. If one exists, read the most
recent one and compute the delta for a Since last pulse section: which
clusters are new, which previous stories have faded, and which previously
Disputed/Unconfirmed items have since been confirmed or debunked (say which,
with a source). This is what makes repeat pulses on a tracked topic useful —
the delta, not a second snapshot. Skip silently on the first run for a topic.
- Dedup & cluster: merge the same story appearing across sources into one
cluster; keep the strongest engagement signal and cite all sources in the cluster.
- Rank clusters by engagement (normalize across kinds — treat HN points, Reddit
upvotes, GitHub stars, and comment volume as comparable "this resonated" signals;
weight recency within the window).
- Flag reliability: explicitly tag rumors, speculation, single-source claims,
and contested items as Disputed/Unconfirmed. Never let a rumor read as fact.
- Pull Best Takes: 2–5 genuinely notable/clever/viral quotes, each attributed
with its source and engagement.
Step 3 — Emit the brief
Render the brief in chat per references/brief-template.md (read it when
you reach this step), then save it as .md and a self-contained .html file
(see Output files). Cite inline as ([source], <engagement>) with a linked URL.
If the user asked for ELI5, prepend a short plain-language summary above TL;DR.
Output files
Save to ./out/pulse/ in the current working directory:
out/pulse/<slug>-<YYYY-MM-DD>.md — the markdown brief verbatim.
out/pulse/<slug>-<YYYY-MM-DD>.html — a bespoke, distinctively designed
brief (see below). Self-contained: inline <style>, no JavaScript, links
preserved, engagement metrics visible, responsive, print-friendly.
<slug> = topic lowercased, non-alphanumerics → hyphens. Compute the date with a
shell command (e.g. date +%F) — do not guess it. Create out/pulse/ if needed;
the briefs are the user's to commit or ignore — don't edit .gitignore for them.
Tell the user the two saved paths at the end.
Designing the HTML brief
Design the .html via the frontend-design skill using the brief in
references/html-design.md; if unavailable, fall back to a clean self-contained
dark-mode, no-JS layout.
Guardrails
- Keyless only. Never request or use API keys. Degrade gracefully.
- No fabrication. Every claim → a real fetched source. Mark unreachable sources
honestly in the header.
- Recency discipline. Stay inside the window; if a pivotal item is older, include
it but label it as background/older context.
- Engagement is the spine. Order by what resonated, show the numbers inline.
- Speed over exhaustiveness. This is a pulse, not a dossier — for the latter,
point to
deep-research.
1---2name: pulse3description: Community-pulse research on any topic — "what are people saying about X right now." Fans out parallel sub-agents across web search, Hacker News, Reddit, and GitHub; ranks findings by real engagement (points/upvotes/stars/comments); flags rumors; and writes a cited brief to chat plus saved .md and .html files. Use when the user wants the current community conversation / recent buzz / sentiment / "last 30 days" view on a person, product, project, or concept — e.g. "/pulse <topic>", "what's the buzz on X", "what are people saying about X lately", "research recent discussion on X". For exhaustive, adversarially fact-checked web reports, prefer the deep-research skill instead.4---56# pulse — community-pulse research78`/pulse <topic> [window/flags in plain language]`910Answer one question: **what is the community actually saying about this topic right11now, and what's resonating?** You ground every claim in a real source and rank by12real engagement — not by what a search engine's editors surfaced.1314## Inputs1516- **Topic** (required): a person, product/company, project/repo, or concept/event.17- **Window** (optional, plain language): default **last 30 days**. Honor overrides18 like "last week", "past 6 months", "this year". Record the resolved window.19- Any other plain-language steering ("focus on Reddit", "ELI5", "just the drama").2021## Step 0 — Resolve scope (ask only if genuinely ambiguous)2223Run immediately for clear topics. Ask **1–2 quick questions only if**:2425- the name maps to multiple plausible entities (e.g. a common name, an ambiguous26 product), **or**27- there's no obvious angle and the result would likely research the wrong thing.2829Otherwise proceed and state your assumptions in the brief header.3031**Auto-detect the topic type** and weight sources accordingly:3233| Detected type | Source emphasis |34| -------------------- | --------------------------------------------------- |35| Person (dev/tech) | GitHub (velocity) + Hacker News + web + Reddit |36| Person (non-tech) | Web + Reddit (skip/deprioritize GitHub) |37| Product / company | Reddit + web + Hacker News (GitHub if it's a tool) |38| Project / repo / tool| GitHub + Hacker News + Reddit + web |39| Concept / event | Web + Hacker News + Reddit (skip GitHub) |4041Do light **entity resolution** first when useful (e.g. the canonical subreddit, the42GitHub `owner/repo` or username, the official site) so sub-agents search the right43handles rather than guessing.4445## Step 1 — Fan out: parallel source sub-agents4647Spawn the relevant source sub-agents **concurrently** (one message, multiple `Agent`48calls). Skip sources the topic type deprioritizes. Give each the topic, resolved49entities, and the time window. Each sub-agent must return **structured findings**:50for every item — `title`, `url`, `source`, `engagement` (the raw metric + its kind),51`date`, and a 1–2 sentence `snippet`. Then it deepens its **top 2–3** items52(below). Each gathers ~8–10 candidates before deepening.5354Use `subagent_type: "Explore"` (read-only, fast) for fetch-heavy sources.5556**Effort scaling:** match the fan-out to the ask. A niche topic or an explicit57"quick check" needs only the 2 best-matched sources from the table; the full58fan-out is for broad or clearly hot topics. **Lossless hand-off:** if a59sub-agent's deepened findings run long (many quotes/threads), have it write the60full extracts to `out/pulse/.work/<source>.md` and return just its ranked61summary — read the files at synthesis instead of losing detail in the relay.6263### Web sub-agent6465- Use `WebSearch` with several query variations (topic + "news"/"review"/"discussion"66 + recency terms). Prefer results inside the window.67- **Authority over SEO:** prefer primary sources (official posts, the actual68 thread/repo, named practitioners) over SEO-optimized aggregators and listicle69 farms. A claim that appears *only* on low-quality aggregator sites is70 low-trust — mark it accordingly.71- Engagement proxy: publication prominence + how often a story recurs across results.72- Deepen top 2–3: `WebFetch` the article and extract the core claim + any quotes.7374### Hacker News sub-agent (free Algolia API — most reliable signal)7576- Search: `WebFetch` →77 `https://hn.algolia.com/api/v1/search?query=<TOPIC>&tags=story&numericFilters=created_at_i>UNIX_START`78 (compute `UNIX_START` with a real shell command — e.g. `date -d '30 days ago' +%s`79 — never guess the timestamp; for relevance over recency use `/search` instead80 of `/search_by_date`).81- `engagement` = `points` and `num_comments`.82- Deepen top 2–3: fetch `https://hn.algolia.com/api/v1/items/<objectID>` and pull the83 highest-signal top-level comments (the actual takes).8485### Reddit sub-agent (best-effort, keyless)8687- Try `WebFetch` on public JSON:88 `https://www.reddit.com/search.json?q=<TOPIC>&sort=top&t=month` (map `t` to the89 window: `week`/`month`/`year`), and/or `https://www.reddit.com/r/<SUB>/search.json?...&restrict_sr=1`.90- `engagement` = `ups` (upvotes) and `num_comments`.91- Deepen top 2–3: fetch the thread JSON (`<permalink>.json`) and pull top comments.92- **Fallback chain on 403/empty:** first retry the same JSON paths on93 `old.reddit.com` (often served when `www` is blocked); if that also fails, use94 `WebSearch` for `site:reddit.com <topic>` and `WebFetch` the threads.95 **Note in the brief that Reddit was reached via fallback.**9697### GitHub sub-agent (keyless REST, 60 req/hr)9899- Repo/tool topic: `https://api.github.com/search/repositories?q=<TOPIC>&sort=stars`,100 then for the chosen repo pull recent `commits`, `releases`, and open/closed PR101 counts to gauge shipping velocity.102- Person topic: resolve the username, then `users/<u>` + recent `users/<u>/events`103 (public) to summarize what they're shipping.104- `engagement` = stars, recent commit/PR/release cadence.105106If a source returns nothing usable after its fallback, record it as **unreachable**107— do not fabricate.108109## Step 2 — Synthesize (main agent)1101110. **Check for a previous pulse (delta memory):** look for earlier112 `out/pulse/<slug>-*.md` files for this topic. If one exists, read the most113 recent one and compute the delta for a **Since last pulse** section: which114 clusters are new, which previous stories have faded, and which previously115 Disputed/Unconfirmed items have since been confirmed or debunked (say which,116 with a source). This is what makes repeat pulses on a tracked topic useful —117 the delta, not a second snapshot. Skip silently on the first run for a topic.1181. **Dedup & cluster:** merge the same story appearing across sources into one119 cluster; keep the strongest engagement signal and cite all sources in the cluster.1202. **Rank** clusters by engagement (normalize across kinds — treat HN points, Reddit121 upvotes, GitHub stars, and comment volume as comparable "this resonated" signals;122 weight recency within the window).1233. **Flag reliability:** explicitly tag rumors, speculation, single-source claims,124 and contested items as **Disputed/Unconfirmed**. Never let a rumor read as fact.1254. **Pull Best Takes:** 2–5 genuinely notable/clever/viral quotes, each attributed126 with its source and engagement.127128## Step 3 — Emit the brief129130Render the brief **in chat** per `references/brief-template.md` (read it when131you reach this step), then save it as `.md` and a self-contained `.html` file132(see Output files). Cite inline as `([source], <engagement>)` with a linked URL.133134If the user asked for ELI5, prepend a short plain-language summary above TL;DR.135136## Output files137138Save to `./out/pulse/` in the current working directory:139140- `out/pulse/<slug>-<YYYY-MM-DD>.md` — the markdown brief verbatim.141- `out/pulse/<slug>-<YYYY-MM-DD>.html` — a **bespoke, distinctively designed**142 brief (see below). Self-contained: inline `<style>`, **no JavaScript**, links143 preserved, engagement metrics visible, responsive, print-friendly.144145`<slug>` = topic lowercased, non-alphanumerics → hyphens. Compute the date with a146shell command (e.g. `date +%F`) — do not guess it. Create `out/pulse/` if needed;147the briefs are the user's to commit or ignore — don't edit `.gitignore` for them.148149Tell the user the two saved paths at the end.150151### Designing the HTML brief152153Design the .html via the **`frontend-design`** skill using the brief in154`references/html-design.md`; if unavailable, fall back to a clean self-contained155dark-mode, no-JS layout.156157## Guardrails158159- **Keyless only.** Never request or use API keys. Degrade gracefully.160- **No fabrication.** Every claim → a real fetched source. Mark unreachable sources161 honestly in the header.162- **Recency discipline.** Stay inside the window; if a pivotal item is older, include163 it but label it as background/older context.164- **Engagement is the spine.** Order by what resonated, show the numbers inline.165- **Speed over exhaustiveness.** This is a pulse, not a dossier — for the latter,166 point to `deep-research`.