mirror of
https://github.com/garrytan/gstack.git
synced 2026-07-14 03:27:21 +02:00
8a60d99c74
Smallest interesting browser-skill: scrapes HN front page, returns
30 stories as JSON. No auth, stable HTML, fully fixture-tested.
Files:
SKILL.md frontmatter + prose
script.ts exports parseStoriesFromHtml(html)
main: goto + html + parse + JSON.stringify
_lib/browse-client.ts vendored copy of the SDK
fixtures/hn-2026-04-26.html captured front page (5 stories)
script.test.ts 13 assertions against the fixture
The parser is a pure function over HTML so script.test.ts runs
without a daemon (just imports parseStoriesFromHtml and asserts).
This exercises every Phase 1 component end-to-end:
- browse-client SDK (script imports browse from ./_lib/)
- 3-tier lookup (hackernews-frontpage lives in the bundled tier)
- scoped tokens (read+write is enough for goto + html)
- spawn lifecycle (\$B skill run hackernews-frontpage)
- file-fixture testing (\$B skill test hackernews-frontpage)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
53 lines
1.4 KiB
Markdown
53 lines
1.4 KiB
Markdown
---
|
|
name: hackernews-frontpage
|
|
description: Scrape the Hacker News front page (titles, points, comment counts).
|
|
host: news.ycombinator.com
|
|
trusted: true
|
|
source: human
|
|
version: 1.0.0
|
|
args: []
|
|
triggers:
|
|
- scrape hacker news frontpage
|
|
- scrape hn frontpage
|
|
- get hn top stories
|
|
- latest hacker news stories
|
|
---
|
|
|
|
# Hacker News front-page scraper
|
|
|
|
Scrapes the Hacker News (`news.ycombinator.com`) front page and returns the
|
|
top 30 stories as JSON. Each story has its rank, title, link URL, point count,
|
|
and comment count.
|
|
|
|
## Usage
|
|
|
|
```
|
|
$ $B skill run hackernews-frontpage
|
|
{
|
|
"stories": [
|
|
{ "rank": 1, "title": "...", "url": "...", "points": 412, "comments": 87 },
|
|
...
|
|
],
|
|
"count": 30
|
|
}
|
|
```
|
|
|
|
## How it works
|
|
|
|
1. Navigates to `https://news.ycombinator.com` via the daemon.
|
|
2. Reads the page HTML.
|
|
3. Parses each story row (HN's stable `tr.athing` structure) into a typed
|
|
`Story` record.
|
|
4. Emits a single JSON document on stdout.
|
|
|
|
## Why this is the reference skill
|
|
|
|
`hackernews-frontpage` is the smallest interesting browser-skill: no auth,
|
|
stable HTML, deterministic output, file-fixture-friendly. Every Phase 1
|
|
component (SDK, scoped tokens, three-tier lookup, spawn lifecycle) is
|
|
exercised by `$B skill run hackernews-frontpage` and the bundled
|
|
`script.test.ts`.
|
|
|
|
When the HN HTML rotates and our selectors break, the test fails against the
|
|
captured fixture before users notice. That's the point.
|