[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DZYESY3Z3T8MWH9F7Q97NB":3,"skill-same:01M6DZYESY3Z3T8MWH9F7Q97NB":96},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":46,"install":47,"resources":59},"01M6DZYESY3Z3T8MWH9F7Q97NB","hackernews-frontpage",null,"Scrape the Hacker News front page (titles, points, comment counts).","westn\u002Fgstack-pi-port","westn","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F224833?v=4","01M6DZW54VKKV0RAMJWH6EGXZ5","Fredrik Nordell","01M6DZW596W0RYE47PT4SZSDJA",1,"MIT","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fbrowser-skills\u002Fhackernews-frontpage\u002FSKILL.md",[],[19,20,21,22,23,24,25],"hackernews frontpage","scrape","page","hn","news","human","get","2026-11-10 10:12:30",false,"---\nname: hackernews-frontpage\ndescription: Scrape the Hacker News front page (titles, points, comment counts).\nhost: news.ycombinator.com\ntrusted: true\nsource: human\nversion: 1.0.0\nargs: []\ntriggers:\n  - scrape hacker news frontpage\n  - scrape hn frontpage\n  - get hn top stories\n  - latest hacker news stories\n---\n\n# Hacker News front-page scraper\n\nScrapes the Hacker News (`news.ycombinator.com`) front page and returns the\ntop 30 stories as JSON. Each story has its rank, title, link URL, point count,\nand comment count.\n\n## Usage\n\n```\n$ $B skill run hackernews-frontpage\n{\n  \"stories\": [\n    { \"rank\": 1, \"title\": \"...\", \"url\": \"...\", \"points\": 412, \"comments\": 87 },\n    ...\n  ],\n  \"count\": 30\n}\n```\n\n## How it works\n\n1. Navigates to `https:\u002F\u002Fnews.ycombinator.com` via the daemon.\n2. Reads the page HTML.\n3. Parses each story row (HN's stable `tr.athing` structure) into a typed\n   `Story` record.\n4. Emits a single JSON document on stdout.\n\n## Why this is the reference skill\n\n`hackernews-frontpage` is the smallest interesting browser-skill: no auth,\nstable HTML, deterministic output, file-fixture-friendly. Every Phase 1\ncomponent (SDK, scoped tokens, three-tier lookup, spawn lifecycle) is\nexercised by `$B skill run hackernews-frontpage` and the bundled\n`script.test.ts`.\n\nWhen the HN HTML rotates and our selectors break, the test fails against the\ncaptured fixture before users notice. That's the point.\n","# Hacker News front-page scraper\n\nScrapes the Hacker News (`news.ycombinator.com`) front page and returns the\ntop 30 stories as JSON. Each story has its rank, title, link URL, point count,\nand comment count.\n\n## Usage\n\n```\n$ $B skill run hackernews-frontpage\n{\n  \"stories\": [\n    { \"rank\": 1, \"title\": \"...\", \"url\": \"...\", \"points\": 412, \"comments\": 87 },\n    ...\n  ],\n  \"count\": 30\n}\n```\n\n## How it works\n\n1. Navigates to `https:\u002F\u002Fnews.ycombinator.com` via the daemon.\n2. Reads the page HTML.\n3. Parses each story row (HN's stable `tr.athing` structure) into a typed\n   `Story` record.\n4. Emits a single JSON document on stdout.\n\n## Why this is the reference skill\n\n`hackernews-frontpage` is the smallest interesting browser-skill: no auth,\nstable HTML, deterministic output, file-fixture-friendly. Every Phase 1\ncomponent (SDK, scoped tokens, three-tier lookup, spawn lifecycle) is\nexercised by `$B skill run hackernews-frontpage` and the bundled\n`script.test.ts`.\n\nWhen the HN HTML rotates and our selectors break, the test fails against the\ncaptured fixture before users notice. That's the point.\n",{"args":31,"host":32,"name":5,"source":24,"trusted":33,"version":34,"triggers":35,"description":7},[],"news.ycombinator.com",true,"1.0.0",[36,37,38,39],"scrape hacker news frontpage","scrape hn frontpage","get hn top stories","latest hacker news stories","main","30109be4b796544f50f067915edf4d9874dc50d2","port\u002Fgstack\u002Fbrowser-skills\u002Fhackernews-frontpage",0,"https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port","https:\u002F\u002Fgithub.com\u002Fwestn","2026-09-04 10:21:48",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":33},[49,52,55],{"tool":50,"command":51},"npx","npx skills add westn\u002Fgstack-pi-port --skill hackernews-frontpage",{"tool":53,"command":54},"bunx","bunx skills add westn\u002Fgstack-pi-port --skill hackernews-frontpage",{"tool":56,"command":57},"pnpm","pnpm dlx skills add westn\u002Fgstack-pi-port --skill hackernews-frontpage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fbrowser-skills\u002Fhackernews-frontpage\u002FSKILL.md",[60,66,70,76,80,84,88,92],{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":65},"_lib\u002Fbrowse-client.ts","SCRIPT","脚本",11540,"https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fbrowser-skills\u002Fhackernews-frontpage\u002F_lib\u002Fbrowse-client.ts",{"path":67,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":68,"sourceHtmlUrl":69},"core.py",392,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fskills\u002Fworkspace_audit_orchestrator\u002Fcore.py",{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"fixtures\u002Fhn-2026-04-26.html","REFERENCE","参考文档",5162,"https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fbrowser-skills\u002Fhackernews-frontpage\u002Ffixtures\u002Fhn-2026-04-26.html",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"manifest.yaml",204,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fskills\u002Fworkspace_audit_orchestrator\u002Fmanifest.yaml",{"path":81,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":82,"sourceHtmlUrl":83},"script.test.ts",3865,"https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fbrowser-skills\u002Fhackernews-frontpage\u002Fscript.test.ts",{"path":85,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":86,"sourceHtmlUrl":87},"script.ts",4679,"https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fbrowser-skills\u002Fhackernews-frontpage\u002Fscript.ts",{"path":89,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":90,"sourceHtmlUrl":91},"SKILL.md.meta.json",867,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fskills\u002Fworkspace_audit_orchestrator\u002FSKILL.md.meta.json",{"path":93,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":94,"sourceHtmlUrl":95},"tests\u002Ftest_core.py",332,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fskills\u002Fworkspace_audit_orchestrator\u002Ftests\u002Ftest_core.py",[97,111,122,134,155,171],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":26},"01M6E05W3NMBAPS04BTY5022R0","unfreeze","Clear the freeze boundary set by \u002Fskill:freeze, allowing edits to all directories again. (gstack)","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Funfreeze\u002FSKILL.md",[],[99,104,105,106,107,108,109,110],"SET","boundary","freeze","edit","remove","gstack","clear",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":26},"01M6E05TJPTDXG2ARV08KYYWJG","beta","Clean fixture tool skill with no forced reads and no mode table.","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Ftest\u002Ffixtures\u002Fcontext-bill\u002Ftree-a\u002Fbeta\u002FSKILL.md",[],[113,118,119,120,121],"tool","table","clean","fixture",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":26},"01M6E05RERN8G9QBE7WNMZSQ4M","alpha","Fixture dispatcher with a mode table and forced-read references.","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Ftest\u002Ffixtures\u002Fcontext-bill\u002Ftree-a\u002Falpha\u002FSKILL.md",[],[124,129,119,130,131,132,133,121],"dispatcher","read","router","references","upstream",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":145,"publishedAt":26},"01M6E05MJ4R9JDPFPZG9RXNKDS","sync-gbrain","Keep gbrain current with this repo's code and refresh agent search guidance in AGENTS.md. (gstack)","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fsync-gbrain\u002FSKILL.md",[140],{"categoryNo":141,"categoryName":142,"taxonomyType":143,"taxonomyTypeDesc":144},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[146,147,148,149,109,150,151,152,153,154],"gbrain","sync gbrain","sync","refresh","update","code","search","repo","guidance",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":26},"01M6E05FKKHRASN15HCDPRVX1F","spec","Turn vague intent into a precise, executable spec in five phases. (gstack)","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fspec\u002FSKILL.md",[],[157,162,163,164,165,166,167,168,109,169,170],"github issue","github","file","write","up","issue","intent","backlog","ticket",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":26},"01M6E05BF4C4WZXYY4MKX78KQX","skillify","Codify the most recent successful \u002Fskill:scrape flow into a permanent browser-skill on disk. (gstack)","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fskillify\u002FSKILL.md",[],[173,178,179,20,180,181,109],"browser","flow","disk","save"]