用途
pp-hackernews 是面向终端与智能体的 Hacker News 命令行工具,由 hackernews-pp-cli 二进制驱动。它把 HN 的列表、条目、用户与评论数据拉取到本地 SQLite 存储,形成可累积的快照历史,从而支持在本地完成差分比较、趋势分析与离线检索。适用于需要以程序化方式监控或分析 HN 信号的场景,例如每日首页变动对比、话题热度追踪、招聘帖聚合、提交前的重复帖检查,以及为上下文窗口生成结构化讨论摘要。
主要能力
本 CLI 为只读,不提供创建、更新、删除、发布、评论、点赞、邀请等改变远端状态的操作。
- 本地快照累积:
since显示自上次同步以来首页上升、下降、新出现或掉出的条目;velocity <id>基于本地快照展示某条目的排名轨迹(上升、持平或下降);sync将 top/new/best/show/ask/job 列表及近期变动条目拉入本地 SQLite,为上述能力提供基础。 - Algolia 相关能力:
pulse <topic>展示某话题在最近 N 天内的每日提及数、平均得分与评论量;repost <url>列出该 URL 此前的所有提交记录及得分、评论数与日期;search local对已同步的全部条目与评论做离线全文检索。 - 招聘帖挖掘:
hiring stats --months N聚合最近 N 期 Who-is-Hiring 帖,给出热门语言、远程比例、热门公司、地域分布;hiring companies --months N --min-posts M列出在 N 期中出现 M 次以上的公司及首见/末见时间与发帖月数;此外还有hiring filter与freelance。 - 跨实体本地查询:
users stats <userId>给出该用户提交内容的中位数与 p90 得分、热度分桶以及按小时分布的得分;users <userId>查看资料与 karma。 - 基础读取命令:
items <itemId>、maxitem、stories(top/new/best/show/ask/job 子命令)、updates。 - 辅助命令:
doctor进行自检(API 可达性、存储可写性、配置合理性);which "<自然语言能力描述>"将能力查询解析为最匹配的命令(退出码 0 表示有匹配,2 表示无把握匹配)。
使用方式
前置条件:需先安装 CLI。通过 Printing Press 安装器安装(macOS/Linux 默认二进制目录为 $HOME/.local/bin,Windows 为 %LOCALAPPDATA%\Programs\PrintingPress\bin):
npx -y @mvanhorn/printing-press-library install hackernews --cli-only
验证:hackernews-pp-cli --version。需确保安装目录在调用方运行时的 $PATH 中。若 npx 安装失败,可改用 Go 直装(需要 Go 1.26.6 或更新版本):
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/hackernews/cmd/hackernews-pp-cli@latest
常见调用示例:
hackernews-pp-cli sync && hackernews-pp-cli since --json --select added,removed,moved
hackernews-pp-cli pulse openai --days 7 --agent --select buckets.day,buckets.hits,buckets.avg_score
hackernews-pp-cli repost https://example.com/article --json
hackernews-pp-cli hiring filter "(remote|REMOTE).*\\bGo\\b" --json
hackernews-pp-cli hiring companies --months 6 --min-posts 3 --agent
Agent 模式:任意命令加 --agent,等价于 --json --compact --no-input --no-color --yes。输出 JSON 到 stdout、错误到 stderr;--select 可按点号路径筛选字段,数组按元素遍历;--dry-run 预览请求;非交互且只读。
响应信封:读取本地存储或 API 的命令会将输出包装为 {"meta": {"source": "live"|"local", "synced_at": "...", "reason": "..."}, "results": <data>},数据在 .results,来源在 .meta.source。
新鲜度契约:仅对已注册的存储型读取路径(stories 及其各子命令、updates)在 --data-source auto 下可能做有界刷新;--data-source local 从不刷新;--data-source live 只读 API 且不改动本地存储。设置 HACKERNEWS_NO_AUTO_REFRESH=1 可跳过刷新钩子。JSON 输出中新鲜度元数据位于 meta.freshness。
输出投递:--deliver <sink> 支持 stdout(默认)、file:<path>(先写临时文件再重命名)、webhook:<url>(以 application/json 或 --compact 时的 application/x-ndjson POST)。未知协议会返回结构化错误;webhook 失败返回非零退出码并在 stderr 记录 URL 与 HTTP 状态。
命名配置(profile):profile save/list/show/delete 保存一组标志值供重复调用;显式标志优先于 profile,profile 优先于默认值;agent-context 会在 available_profiles 下列出全部 profile。
反馈:feedback "..."、feedback --stdin、feedback list 将条目写入本地 ~/.hackernews-pp-cli/feedback.jsonl,默认不发送,除非设置了 HACKERNEWS_FEEDBACK_ENDPOINT 且传入 --send 或 HACKERNEWS_FEEDBACK_AUTO_SEND=true。
认证:无需认证。可运行 hackernews-pp-cli doctor 验证配置。
MCP 服务:
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/hackernews/cmd/hackernews-pp-mcp@latest
claude mcp add hackernews-pp-mcp -- hackernews-pp-mcp
验证:claude mcp list。
退出码:0 成功;2 用法错误;3 资源未找到;5 API 错误;7 触发限流;10 配置错误。
适用场景
智能体每日首页差分、话题热度升降判断、提交 Show HN 前的重复帖核查、季度/季节性招聘趋势分析(语言流行度、远程比例变化、地域密度)、长尾话题检索与历史研究回放、评估自身发帖的得分成因模式。
限制
只读,不支持任何改变远端状态的操作,不可用于评论、投票、发布等;velocity 等能力依赖本地快照,需要先运行 sync 才有意义;本地全文检索仅覆盖已同步过的条目与评论;新鲜度元数据仅代表所覆盖命令路径的当前缓存新鲜度,不保证完整历史回填或 API 特定增强。具体平台支持范围、性能上限与数据保留期限资料未提供。