hn-research/SKILL.md
Research Hacker News using Algolia API. Find trending topics, gauge community sentiment, discover what's hot, filter by recency/popularity. Perfect for tech trend analysis.
npx skillsauth add snqb/my-skills hn-researchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use Algolia HN API to research what Hacker News is discussing, trending, or thinking about any topic. Get both stories AND comments for full sentiment analysis.
Search by relevance (popularity):
https://hn.algolia.com/api/v1/search?query=TOPIC&tags=TAG&hitsPerPage=N
Search by date (recency):
https://hn.algolia.com/api/v1/search_by_date?query=TOPIC&tags=TAG&hitsPerPage=N
story - Stories onlycomment - Comments only (for sentiment)show_hn - Show HN postsask_hn - Ask HN postsfront_page - Front page storiesstory,front_page# Posts from last 7 days
numericFilters=created_at_i>$(date -v-7d +%s)
# Posts from last 30 days
numericFilters=created_at_i>$(date -v-30d +%s)
# Posts with 100+ points
numericFilters=points>100
# Combine filters (AND)
numericFilters=created_at_i>TIMESTAMP,points>100
hitsPerPage=N - Results per page (max 1000)page=N for paginationFront page (all topics):
curl -s "https://hn.algolia.com/api/v1/search?tags=front_page&hitsPerPage=30" | \
jq -r '.hits[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"' | \
sort -rn
Recent hot posts (last 7 days, 50+ points):
curl -s "https://hn.algolia.com/api/v1/search_by_date?tags=story&hitsPerPage=100" | \
jq -r '.hits[] | select(.points > 50) | "\(.points) pts | \(.created_at) | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"' | \
head -30
What's HN saying about X? (popular):
TOPIC="rust programming"
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=story&hitsPerPage=20" | \
jq -r '.hits[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"'
Recent discussions about X:
TOPIC="claude code"
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$TOPIC&tags=story&hitsPerPage=30" | \
jq -r '.hits[0:15] | .[] | "\(.points) pts | \(.created_at) | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"'
What are people saying about X?:
TOPIC="cursor IDE"
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=comment&hitsPerPage=30" | \
jq -r '.hits[] | select(.points > 3) | "[\(.points) pts] \(.author): \(.comment_text[0:200])..."'
Top comments on a story:
STORY_ID="46420670"
curl -s "https://hn.algolia.com/api/v1/search?tags=comment,story_$STORY_ID&hitsPerPage=20" | \
jq -r '.hits[] | "[\(.points) pts] \(.author):\n\(.comment_text)\n---"'
Recent Show HN posts:
curl -s "https://hn.algolia.com/api/v1/search_by_date?tags=show_hn&hitsPerPage=30" | \
jq -r '.hits[0:20] | .[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + (.objectID | tostring)))"'
Popular Ask HN (last month):
curl -s "https://hn.algolia.com/api/v1/search?tags=ask_hn&hitsPerPage=30" | \
jq -r '.hits[] | select(.points > 20) | "\(.points) pts | \(.title) | https://news.ycombinator.com/item?id=\(.objectID)"'
Compare interest in multiple topics:
for topic in "rust" "go" "zig" "elixir"; do
echo "=== $topic ==="
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$topic&tags=story&hitsPerPage=10" | \
jq -r '.hits[0:5] | .[] | select(.points > 30) | "\(.points) pts | \(.title)"'
echo
done
Find posts by user:
USER="patio11"
curl -s "https://hn.algolia.com/api/v1/search?tags=author_$USER&hitsPerPage=20" | \
jq -r '.hits[] | "\(.points) pts | \(.title // .comment_text[0:100])"'
{
"hits": [
{
"objectID": "46420670",
"title": "Post title",
"url": "https://example.com",
"author": "username",
"points": 250,
"num_comments": 42,
"created_at": "2025-12-29T13:22:59Z",
"created_at_i": 1735481579,
"story_text": null, // for Ask HN
"comment_text": null // for comments
}
],
"nbHits": 1000,
"page": 0,
"nbPages": 50
}
# Last 24 hours
date -v-24H +%s
# Last 7 days
date -v-7d +%s
# Last 30 days
date -v-30d +%s
# Last year
date -v-1y +%s
Top posts only:
jq -r '.hits[] | select(.points > 100) | ...'
Sort by points:
jq -r '.hits | sort_by(.points) | reverse | .[] | ...'
Filter by date:
jq -r '.hits[] | select(.created_at_i > 1735000000) | ...'
Extract domains:
jq -r '.hits[] | .url | select(. != null) | sub("https?://([^/]+).*"; "\\1")'
# Front page snapshot
curl -s "https://hn.algolia.com/api/v1/search?tags=front_page&hitsPerPage=30" | \
jq -r '.hits[] | "\(.points)|\(.title)|\(.url // ("HN:" + .objectID))"' | \
sort -rn | column -t -s'|'
TOPIC="your_topic"
# Stories
echo "=== Stories ==="
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=story&hitsPerPage=20" | \
jq -r '.hits[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + .objectID))"'
# Recent discussion
echo -e "\n=== Recent ==="
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$TOPIC&tags=story&hitsPerPage=20" | \
jq -r '.hits[0:10] | .[] | "\(.points) pts | \(.created_at) | \(.title)"'
TOPIC="your_topic"
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=comment&hitsPerPage=50" | \
jq -r '.hits[] | select(.points > 2) | "[\(.points)pts] \(.author): \(.comment_text)"' | \
head -20
TOPIC="AI coding"
for period in "24H" "7d" "30d"; do
echo "=== Last $period ==="
TIMESTAMP=$(date -v-$period +%s)
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=story&numericFilters=created_at_i>$TIMESTAMP&hitsPerPage=100" | \
jq -r '.nbHits'
done
Use HN research when you want to:
Clean list:
jq -r '.hits[] | "\(.points) pts | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + .objectID))"'
With date:
jq -r '.hits[] | "\(.points) pts | \(.created_at) | \(.title) | \(.url // ("https://news.ycombinator.com/item?id=" + .objectID))"'
Markdown links:
jq -r '.hits[] | "- **[\(.title)](\(.url // ("https://news.ycombinator.com/item?id=" + .objectID)))** (\(.points) pts)"'
CSV export:
jq -r '.hits[] | [.points, .title, .url, .created_at] | @csv'
points > N liberally"What does HN think about X?"
# Stories + top comments
TOPIC="cursor IDE"
echo "=== Stories ===" && \
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=story&hitsPerPage=10" | \
jq -r '.hits[] | "\(.points) pts | \(.title)"'
echo -e "\n=== Sentiment ===" && \
curl -s "https://hn.algolia.com/api/v1/search?query=$TOPIC&tags=comment&hitsPerPage=30" | \
jq -r '.hits[] | select(.points > 5) | "[\(.points)] \(.comment_text[0:150])..."' | head -10
"What's trending in X?"
TOPIC="rust"
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$TOPIC&tags=story&hitsPerPage=30" | \
jq -r '.hits[0:15] | .[] | select(.points > 20) | "\(.points) pts | \(.created_at) | \(.title)"'
"Show me good Show HN projects"
curl -s "https://hn.algolia.com/api/v1/search?tags=show_hn&hitsPerPage=50" | \
jq -r '.hits[] | select(.points > 100) | "\(.points) pts | \(.title) | \(.url)"'
API returns 400:
numericFilters syntax (no parentheses in bash!)$(date ...) inlineEmpty results:
points > thresholdhitsPerPagejq parse errors:
#!/bin/bash
# Research multiple technologies, compare HN interest
TOPICS=("rust" "go" "elixir" "zig")
echo "=== HN Tech Stack Comparison (Last 30 days) ==="
for topic in "${TOPICS[@]}"; do
echo -e "\n## $topic"
# Story count
COUNT=$(curl -s "https://hn.algolia.com/api/v1/search_by_date?query=$topic&tags=story&hitsPerPage=100" | jq '.nbHits')
echo "Stories: $COUNT"
# Top posts
echo "Top posts:"
curl -s "https://hn.algolia.com/api/v1/search?query=$topic&tags=story&hitsPerPage=5" | \
jq -r '.hits[0:3] | .[] | " • \(.points) pts - \(.title)"'
done
This skill makes you HN-literate. Use it before building, to validate ideas, find prior art, gauge community reception, or just stay informed.
documentation
Enrich Markdown articles with inline Wikipedia links. First mention of each notable entity gets a hyperlink. Use when asked to add wiki links, enrich, or add references to .md files.
development
Structured visual QA: screenshot → batch issues → fix all → verify. Replaces the 300-cycle screenshot→edit death spiral. Optional bishkek review as exit gate. Use when building/polishing UI with browser testing, or when user asks for N iterations/reviews.
development
Find complex code, analyze intent, recommend battle-tested library replacements. Uses radon/eslint for detection, GitHub quality search for alternatives.
research
Research real-world UI patterns from curated galleries (Collect UI, Component Gallery, Mobbin). Use when exploring what exists: dropdowns, accordions, inputs, navigation, cards, modals, etc.