npx skills add ...
npx skills add okou-ai/vm0-skills --skill hackernews
Hacker News API for stories and comments. Use when user mentions "Hacker
npx skills add okou-ai/vm0-skills --skill hackernews
Fetch IDs of the current top 500 stories:
Fetch the best stories (highest voted over time):
Fetch the newest stories:
Fetch "Ask HN" posts:
Fetch "Show HN" posts:
Fetch job postings:
Fetch full details for any item by ID. Replace <item-id> with the actual item ID:
Response fields:
| Field | Description |
|---|---|
id | Unique item ID |
type | story, comment, job, poll, pollopt |
by | Username of author |
time | Unix timestamp |
title | Story title (stories only) |
url | Story URL (if external link) |
text | Content text (Ask HN, comments) |
score | Upvote count |
descendants | Total comment count |
kids | Array of child comment IDs |
Fetch top 5 stories with full details. Replace <item-id> with the actual item ID:
Fetch a story and its top-level comments. Replace <story-id> with the actual story ID:
Then for each comment ID in the kids array, replace <comment-id> with the actual comment ID:
Fetch user details. Replace <username> with the actual username:
Response fields:
| Field | Description |
|---|---|
id | Username |
created | Account creation timestamp |
karma | User's karma score |
about | User bio (HTML) |
submitted | Array of item IDs submitted |
Fetch a user's recent submissions. Replace <username> with the actual username:
Get the current largest item ID (useful for polling new items):
Get recently changed items and profiles (for real-time updates):
| Endpoint | Description |
|---|---|
/v0/topstories.json | Top 500 stories |
/v0/beststories.json | Best stories |
/v0/newstories.json | Newest 500 stories |
/v0/askstories.json | Ask HN stories |
/v0/showstories.json | Show HN stories |
/v0/jobstories.json | Job postings |
/v0/item/{id}.json | Item details |
/v0/user/{id}.json | User profile |
/v0/maxitem.json | Current max item ID |
/v0/updates.json | Changed items/profiles |
url for Ask HN)curl -s "https://hacker-news.firebaseio.com/v0/newstories.json" | jq '.[:10]'curl -s "https://hacker-news.firebaseio.com/v0/askstories.json" | jq '.[:10]'curl -s "https://hacker-news.firebaseio.com/v0/showstories.json" | jq '.[:10]'curl -s "https://hacker-news.firebaseio.com/v0/jobstories.json" | jq '.[:10]'curl -s "https://hacker-news.firebaseio.com/v0/item/<item-id>.json"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}'
donecurl -s "https://hacker-news.firebaseio.com/v0/item/<story-id>.json" | jq '{title, score, descendants, kids}'curl -s "https://hacker-news.firebaseio.com/v0/item/<comment-id>.json" | jq '{by, text, score}'curl -s "https://hacker-news.firebaseio.com/v0/user/<username>.json"curl -s "https://hacker-news.firebaseio.com/v0/user/<username>.json" | jq '.submitted[:5]'curl -s "https://hacker-news.firebaseio.com/v0/maxitem.json"curl -s "https://hacker-news.firebaseio.com/v0/updates.json"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")"'
donecurl -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)"'
donecurl -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