PluginBench
Skill
Review
Audit score 70

hackernews

vm0-ai/vm0-skills

Access Hacker News stories, comments, and user data via the official API.

What is hackernews?

The Hacker News skill provides direct access to the Hacker News API for fetching stories, comments, job postings, and user profiles. Use it when users ask about tech news, specific HN stories, or want to search and filter content from the platform.

  • Fetch top, best, newest, Ask HN, Show HN, and job stories
  • Retrieve full item details including title, score, URL, and comment counts
  • Access story comments and build comment threads by ID
  • Look up user profiles and their submission history
  • Get real-time updates via max item ID and changed items endpoint
  • Filter stories by score, keywords, or category using jq

How to install hackernews

npx skills add https://github.com/vm0-ai/vm0-skills --skill hackernews
Claude Code
Cursor
Windsurf
Cline

How to use hackernews

  1. 1.Use curl to call the Hacker News API endpoints (e.g., topstories.json, beststories.json)
  2. 2.Parse the returned JSON array of item IDs using jq
  3. 3.Fetch full item details by calling /v0/item/{id}.json for each ID
  4. 4.For comments, extract the kids array from a story and fetch each comment ID separately
  5. 5.For user data, call /v0/user/{username}.json and inspect submitted array
  6. 6.Add delays between bulk requests and cache results when possible

Use cases

Good for
  • Find today's top 10 tech stories with scores and URLs
  • Search for AI/ML-related stories across recent posts
  • Retrieve a specific user's recent submissions and karma score
  • Build a real-time feed by polling the updates endpoint
  • Extract high-scoring stories (100+ points) for curation
Who it's for
  • Developers building HN integrations or dashboards
  • Researchers analyzing tech news trends
  • Content curators filtering stories by topic
  • Anyone tracking specific HN users or discussions

hackernews FAQ

Are there rate limits on the Hacker News API?

No rate limits are documented, but you should be respectful and add delays when fetching multiple items in bulk.

How do I get comments for a story?

Fetch the story by ID, extract the kids array (which contains comment IDs), then fetch each comment ID separately using /v0/item/{comment-id}.json.

What fields might be null or missing?

Some fields like url are null for Ask HN posts, and not all items have all fields. Always handle missing data gracefully.

How can I find stories about a specific topic?

Fetch stories from topstories.json or newstories.json, then filter using jq with regex patterns like select(.title | test("keyword"; "i")).

How do I track new stories in real-time?

Call /v0/maxitem.json to get the current max item ID, then poll /v0/updates.json for recently changed items and profiles.

Full instructions (SKILL.md)

Source of truth, from vm0-ai/vm0-skills.


name: hackernews description: Hacker News API for stories and comments. Use when user mentions "Hacker News", "HN", "Y Combinator", or asks about tech news.

How to Use

1. Get Top Stories

Fetch IDs of the current top 500 stories:

curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:10]'

2. Get Best Stories

Fetch the best stories (highest voted over time):

curl -s "https://hacker-news.firebaseio.com/v0/beststories.json" | jq '.[:10]'

3. Get New Stories

Fetch the newest stories:

curl -s "https://hacker-news.firebaseio.com/v0/newstories.json" | jq '.[:10]'

4. Get Ask HN Stories

Fetch "Ask HN" posts:

curl -s "https://hacker-news.firebaseio.com/v0/askstories.json" | jq '.[:10]'

5. Get Show HN Stories

Fetch "Show HN" posts:

curl -s "https://hacker-news.firebaseio.com/v0/showstories.json" | jq '.[:10]'

6. Get Job Stories

Fetch job postings:

curl -s "https://hacker-news.firebaseio.com/v0/jobstories.json" | jq '.[:10]'

Item Details

7. Get Story/Comment/Job Details

Fetch full details for any item by ID. Replace <item-id> with the actual item ID:

curl -s "https://hacker-news.firebaseio.com/v0/item/<item-id>.json"

Response fields:

FieldDescription
idUnique item ID
typestory, comment, job, poll, pollopt
byUsername of author
timeUnix timestamp
titleStory title (stories only)
urlStory URL (if external link)
textContent text (Ask HN, comments)
scoreUpvote count
descendantsTotal comment count
kidsArray of child comment IDs

8. Get Multiple Stories with Details

Fetch top 5 stories with full details. Replace <item-id> with the actual item ID:

curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:5][]' | while read id; do
  curl -s "https://hacker-news.firebaseio.com/v0/item/${id}.json" | jq '{id, title, score, url, by}'
done

9. Get Story with Comments

Fetch a story and its top-level comments. Replace <story-id> with the actual story ID:

curl -s "https://hacker-news.firebaseio.com/v0/item/<story-id>.json" | jq '{title, score, descendants, kids}'

Then for each comment ID in the kids array, replace <comment-id> with the actual comment ID:

curl -s "https://hacker-news.firebaseio.com/v0/item/<comment-id>.json" | jq '{by, text, score}'

User Data

10. Get User Profile

Fetch user details. Replace <username> with the actual username:

curl -s "https://hacker-news.firebaseio.com/v0/user/<username>.json"

Response fields:

FieldDescription
idUsername
createdAccount creation timestamp
karmaUser's karma score
aboutUser bio (HTML)
submittedArray of item IDs submitted

11. Get User's Recent Submissions

Fetch a user's recent submissions. Replace <username> with the actual username:

curl -s "https://hacker-news.firebaseio.com/v0/user/<username>.json" | jq '.submitted[:5]'

Real-time Updates

12. Get Max Item ID

Get the current largest item ID (useful for polling new items):

curl -s "https://hacker-news.firebaseio.com/v0/maxitem.json"

13. Get Changed Items and Profiles

Get recently changed items and profiles (for real-time updates):

curl -s "https://hacker-news.firebaseio.com/v0/updates.json"

Practical Examples

Fetch Today's Top 10 with Scores

curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:10][]' | while read id; do
  curl -s "https://hacker-news.firebaseio.com/v0/item/${id}.json" | jq -r '"\(.score) points | \(.title) | \(.url // "Ask HN")"'
done

Find High-Scoring Stories (100+ points)

curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:30][]' | while read id; do
  curl -s "https://hacker-news.firebaseio.com/v0/item/${id}.json" | jq -r 'select(.score >= 100) | "\(.score) | \(.title)"'
done

Get Latest AI/ML Related Stories

curl -s "https://hacker-news.firebaseio.com/v0/topstories.json" | jq '.[:50][]' | while read id; do
  curl -s "https://hacker-news.firebaseio.com/v0/item/${id}.json" | jq -r 'select(.title | test("AI|GPT|LLM|Machine Learning|Neural"; "i")) | "\(.score) | \(.title)"'
done

API Endpoints Summary

EndpointDescription
/v0/topstories.jsonTop 500 stories
/v0/beststories.jsonBest stories
/v0/newstories.jsonNewest 500 stories
/v0/askstories.jsonAsk HN stories
/v0/showstories.jsonShow HN stories
/v0/jobstories.jsonJob postings
/v0/item/{id}.jsonItem details
/v0/user/{id}.jsonUser profile
/v0/maxitem.jsonCurrent max item ID
/v0/updates.jsonChanged items/profiles

Guidelines

  1. No rate limits documented: But be respectful, add delays for bulk fetching
  2. Use jq for filtering: Filter JSON responses to extract needed data
  3. Cache results: Stories don't change frequently, cache when possible
  4. Batch requests carefully: Each item requires a separate API call
  5. Handle nulls: Some fields may be null or missing (e.g., url for Ask HN)
  6. Unix timestamps: All times are Unix timestamps, convert as needed