你的高质量技术资讯大本营,兼顾断舍离与极速查询。
本地优先 · 数据主权 —— 你的数据永远属于你。
一个优雅、简单、强大的 Go 语言命令行工具,专为程序员设计。采用 LLM-Native 架构和本地优先理念,支持多源 API 采集、智能网页抓取、LLM 内容增强、深度研究分析和本地知识库 RAG 问答。
| 特性 | News4Coder | 云端阅读器 |
|---|---|---|
| 数据存储 | 本地 SQLite | 云端服务器 |
| 账号注册 | 不需要 | 必需 |
| 隐私保护 | 数据不上传 | 服务商可查看 |
| 服务可用性 | 永久可用 | 依赖服务商 |
| 离线使用 | 完全支持 | 有限支持 |
| 数据导出 | 完全自由 | 受限 |
| AI 能力 | 本地 RAG + 深度研究 | 依赖云端 |
- ✅ 本地优先: 所有数据存储在本地 SQLite,无需云端账号
- 🔒 数据主权: 你的阅读记录、收藏、笔记完全属于你
- 🌐 多源智能采集: 直接调用 HN/Reddit/V2EX API + Jina AI Reader
- 🤖 LLM 内容增强: 自动生成摘要、技术标签、质量评分(0-10)
- 🎯 智能策展: 基于质量评分和阅读偏好,自动生成「今日必读」
- 💬 RAG 问答: 基于本地知识库回答,标注引用来源
- 🔍 极速搜索: 本地 FTS5 全文检索,秒级响应
- 🔬 Deep Research: 遵循专业研究方法论的深度分析
- 规划阶段:自动生成研究假设和搜索计划
- 多源采集:本地知识库 + 网络搜索并行
- 内容获取:Jina Reader 抓取完整页面内容
- 证据提取:关键声明、事实、引用自动提取
- 交叉验证:证据关联分析,计算可信度
- 信息缺口识别:发现研究中的薄弱环节
- 📺 AI 阅读器: 分栏显示文章列表和正文预览
- 左侧:文章列表(上下键选择)
- 右侧:文章预览(标题、URL、摘要、标签)
- 支持快捷操作:标记已读、收藏、丢弃
- 📖 阅读状态流: unread / read / starred / archived / discarded
- 🧹 断舍离支持: 批量归档、自动清理、语义去重
- 📝 快速输入: 笔记、标签、Markdown 导出
- 🎨 优雅输出: 彩色终端输出,清晰易读
- 🚀 快速启动: 单二进制文件,无需额外依赖
- 🌐 浏览器插件: 一键保存网页到本地知识库
news4coder 内置 9 个精选高质量技术源,覆盖中英文:
| 别名 | 名称 | 采集方式 | 说明 |
|---|---|---|---|
hn |
Hacker News | Algolia API | YC 技术新闻聚合 |
github |
GitHub Blog | Jina Reader | GitHub 官方博客 |
lobsters |
lobste.rs | HTML 解析 | 友好程序员社区 |
reddit |
Reddit r/programming | JSON API | Reddit 编程热门 |
ruanyf |
阮一峰的网络日志 | Jina Reader | 中文技术博客标杆 |
coolshell |
酷壳 CoolShell | Jina Reader | 左耳朵耗子的技术博客 |
v2ex |
V2EX | API | 中文技术社区 |
infoq |
InfoQ 中文站热点清单 | 专用抓取器 | 抓取热点文章列表 |
ai |
InfoQ AI Briefs | 专用抓取器 | AI 大模型即时资讯 |
使用 news4coder sources 查看完整列表,也可以直接用别名获取内容,如 news4coder hn。
curl -sSL https://get.news4coder.dev | bash确保已安装 Go 1.25 或更高版本:
git clone https://github.com/news4coder/news4coder.git
cd news4coder
make buildgo install github.com/news4coder/news4coder@latest# 添加 shell 别名(推荐)
echo "alias nn='news4coder'" >> ~/.zshrc
source ~/.zshrc编辑 ~/.news4coder/config.json,填入你的 LLM API 信息:
{
"llm": {
"base_url": "https://api.openai.com/v1",
"api_key": "sk-xxxxxxxx",
"model": "gpt-4o-mini",
"embedding_model": "text-embedding-3-small",
"enrich_max_tokens": 2000,
"ask_max_tokens": 4000
}
}支持任何 OpenAI 兼容接口,包括 Ollama 本地服务(
http://localhost:11434/v1)。
# 查看帮助
news4coder --help
# 查看可用官方源
news4coder sources
# 同步所有官方源
news4coder sync
# 查看已同步文章
news4coder list --articlesnews4coder 的深度研究功能遵循专业研究方法论,模拟 Qwen/DeepSeek Deep Research 的研究流程。
┌─────────────────────────────────────────────────────┐
│ 1. 规划阶段 - 分析主题,生成研究假设和搜索计划 │
├─────────────────────────────────────────────────────┤
│ 2. 搜索阶段 - 并行搜索本地知识库 + 网络 │
├─────────────────────────────────────────────────────┤
│ 3. 内容获取 - Jina Reader 抓取重要页面全文 │
├─────────────────────────────────────────────────────┤
│ 4. 证据提取 - 提取关键声明、事实、引用 │
├─────────────────────────────────────────────────────┤
│ 5. 分析阶段 - 交叉验证、识别模式、分析缺口 │
├─────────────────────────────────────────────────────┤
│ 6. 综合阶段 - 生成结构化报告 │
└─────────────────────────────────────────────────────┘
# 基本研究
news4coder research "AI coding tools"
# 指定参数
news4coder research "Rust vs Go" --sub-queries 8 --limit 30
# 仅本地知识库(不进行网络搜索)
news4coder research "WebAssembly" --no-web
# 详细报告(含研究追踪)
news4coder research "Kubernetes trends" --detailed
# JSON 输出
news4coder research "微服务架构" --json- 执行摘要: 2-3 句话概括核心趋势和发现
- 关键发现: 带证据引用和置信度
- 多角度分析: 主流观点、争议焦点、新兴趋势
- 信息缺口分析: 未覆盖方面、弱证据
- 参考来源: 带可信度评分和来源类型
| 参数 | 默认值 | 说明 |
|---|---|---|
--days |
30 | 搜索时间范围 |
--limit |
20 | 最大来源数量 |
--sub-queries |
5 | 子查询数量 |
--no-web |
false | 仅使用本地知识库 |
--json |
false | JSON 格式输出 |
--detailed |
false | 详细报告(含研究追踪) |
分栏显示文章列表和正文预览,提供更高效的阅读体验。
news4coder ai tui
# 或使用别名
nn ai tui┌─────────────────────┬─────────────────────────────┐
│ Articles (42) [Unread] │ Content Preview │
├─────────────────────┼─────────────────────────────┤
│ ○ [8.5] Article 1... │ Article Title │
│ ✓ [9.0] Article 2... │ https://example.com │
│ ★ [7.5] Article 3... │ │
│ ○ [6.5] Article 4... │ Source: Hacker News │
│ │ Tags: golang, rust │
│ │ Score: 8.5/10 │
│ │ │
│ │ LLM Summary or content...│
├─────────────────────┴─────────────────────────────┤
│ j/k:↑↓ Navigate | Enter:Select | r:Read | q:Quit │
└──────────────────────────────────────────────────┘
| 键 | 功能 |
|---|---|
j / ↓ |
下移 |
k / ↑ |
上移 |
K / PgUp |
向上翻页 |
J / PgDn |
向下翻页 |
r |
标记已读 |
s |
收藏 |
d |
丢弃 |
1 |
显示全部 |
2 |
仅显示未读 |
3 |
仅显示收藏 |
q |
退出 |
# 1. 同步所有官方源
news4coder sync
# 2. 对新文章进行 LLM 增强
news4coder enrich --limit 20
# 3. 查看智能策展的今日必读
news4coder curate --top 10# 对某个技术主题进行深度研究
news4coder research "AI coding tools evolution"
# 生成详细报告(含研究过程追踪)
news4coder research "Rust in 2025" --detailed# 启动 AI 阅读器
news4coder ai tui
# 在 TUI 中浏览、标记、收藏文章news4coder ask "Go 和 Rust 在并发模型上有什么差异?"# 1. AI TUI 浏览文章
news4coder ai tui
# 2. 为重要文章添加笔记
news4coder note <article-id> "核心观点记录..."
# 3. 添加自定义标签
news4coder tag <article-id> "golang,concurrency"| 命令 | 说明 | 示例 |
|---|---|---|
sync |
同步官方源到本地数据库 | news4coder sync --source hn |
enrich |
LLM 内容增强 | news4coder enrich --limit 10 |
curate |
智能策展 | news4coder curate --top 10 |
ask |
RAG 问答 | news4coder ask "问题" |
research |
深度研究 | news4coder research "主题" |
ai tui |
AI 阅读器 | news4coder ai tui |
inbox |
TUI 收件箱 | news4coder inbox |
| 命令 | 说明 | 示例 |
|---|---|---|
list |
列出订阅/文章 | news4coder list -a --status unread |
read |
标记已读 | news4coder read 1 2 3 |
star |
收藏 | news4coder star 42 |
discard |
丢弃 | news4coder discard 5 6 |
archive |
批量归档 | news4coder archive |
note |
添加笔记 | news4coder note 42 "笔记" |
tag |
添加标签 | news4coder tag 42 "tag1,tag2" |
| 命令 | 说明 | 示例 |
|---|---|---|
search |
全文搜索 | news4coder search "golang" |
stats |
订阅健康度 | news4coder stats |
export |
导出文章 | news4coder export --status starred |
cleanup |
清理旧文章 | news4coder cleanup |
| 命令 | 说明 |
|---|---|
hn |
直接获取 Hacker News |
infoq |
直接获取 InfoQ 热点 |
v2ex |
直接获取 V2EX 热门 |
github |
直接获取 GitHub Blog |
reddit |
直接获取 Reddit 热门 |
inspire |
HN 新产品灵感 |
news4coder/
├── cmd/ # CLI 命令定义(Cobra)
│ ├── root.go # 根命令 + 官方源别名处理
│ ├── sync.go # 同步文章
│ ├── enrich.go # LLM 内容增强
│ ├── curate.go # 智能策展
│ ├── ask.go # RAG 问答
│ ├── research.go # 深度研究
│ ├── ai.go # AI TUI 命令
│ ├── inbox.go # TUI 收件箱
│ └── ...
├── internal/ # 内部模块
│ ├── article/ # 文章模型
│ ├── config/ # 配置管理
│ ├── crawler/ # 多源内容采集器
│ ├── curator/ # 智能策展
│ ├── db/ # SQLite + FTS5
│ ├── deep_research/ # 深度研究引擎
│ ├── dedup/ # 语义去重
│ ├── enricher/ # LLM 内容增强
│ ├── llm/ # LLM 统一客户端
│ ├── official/ # 官方信息源注册表
│ ├── rag/ # RAG 问答
│ ├── search/ # DuckDuckGo 搜索
│ ├── tui/ # TUI 组件
│ │ ├── split_reader.go # 分栏阅读器
│ │ └── ...
│ └── i18n/ # 国际化
├── browser-extension/ # 浏览器插件
│ ├── manifest.json # Chrome Extension Manifest V3
│ ├── popup.html/js/css # 弹窗界面
│ ├── background.js # Service Worker
│ └── content.js # 内容脚本
├── web/ # Web 宣传页面
├── main.go # 程序入口
├── go.mod # 依赖管理
├── Makefile # 构建脚本
├── .golangci.yml # Linter 配置
├── .editorconfig # 编辑器配置
├── .pre-commit-config.yaml # Pre-commit 钩子
└── .github/workflows/ # CI/CD 配置
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 官方源 │────▶│ Crawler/ │────▶│ SQLite │
│ (HN/V2EX等) │ │ Fetcher │ │ (db) │
└─────────────┘ └─────────────┘ └──────┬──────┘
│
┌────────────────────────┘
▼
┌─────────────────┐
│ Enricher │
│ (LLM 摘要/标签) │
└────────┬────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Curator │ │ RAG │ │ Deep │
│(智能推荐)│ │(知识问答)│ │ Research│
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└─────────────┴─────────────┘
│
▼
┌─────────────┐
│ TUI / CLI │
│ (用户交互) │
└─────────────┘
# 编译
make build
# 跨平台编译
make release
# 运行测试
make test
# 代码质量检查
make quality项目包含完整的质量检查流程:
| 检查项 | 命令 | 说明 |
|---|---|---|
| 格式化 | make fmt |
gofmt 检查 |
| 静态分析 | make vet |
go vet 检查 |
| Lint | make lint |
golangci-lint 检查 |
| 单元测试 | make test |
go test -race |
| 覆盖率 | make test-coverage |
覆盖率 ≥60% |
| 安全扫描 | make security |
gosec 检查 |
安装 pre-commit 后,每次提交会自动运行质量检查:
pip install pre-commit
pre-commit install- 在
cmd/下新建xxx.go - 定义
xxxCmd并使用rootCmd.AddCommand(xxxCmd) - 在
init()中注册 Flag
- 在
internal/official/registry.go的registerDefaultSources()中注册 - 如需专用采集器,在
internal/crawler/factory.go的NewCrawler()中实现分支
项目使用 GitHub Actions 进行持续集成:
- Format Check: gofmt 格式化检查
- Build: 多平台编译验证
- Test: 跨平台测试(Ubuntu/macOS/Windows × Go 1.25/1.26)
- Lint: golangci-lint 静态检查
- Security: gosec 安全扫描
- Coverage: 覆盖率门槛检查(≥60%)
- 遵循 Effective Go 规范
- 使用
gofmt格式化代码 - 启用 golangci-lint 规则:errcheck, gosec, gosimple, govet, ineffassign, staticcheck, typecheck, unused, golint, misspell, nakedret, prealloc, exportloopref
- 使用 Go Modules 管理依赖
- 通过 Dependabot 自动更新依赖
- 工具依赖声明在
go.mod的tool指令中
A: News4Coder 坚持「本地优先」和「数据主权」理念:
- ✅ 隐私: 无需账号,数据不上传云端
- ✅ 永久可用: 不受服务商倒闭影响
- ✅ 可导出: 随时备份或迁移
- ✅ 离线使用: 没有网络也能访问已同步内容
A: 可以。不配置 LLM 也能:
- 同步和阅读文章
- 管理阅读状态
- 搜索本地文章
- 使用 AI TUI 阅读器
但无法使用:
enrich- 自动生成摘要和标签curate- 智能策展ask- RAG 问答research- 深度研究
A: 取决于同步的文章数量。通常:
- 1000 篇文章约 10-20 MB
- 包含全文索引,支持快速搜索
A:
- 检查网络连接
- 尝试单独同步该源:
news4coder sync --source <alias> - 对于 API 源,可能是 rate limit,稍后再试
News4Coder 提供 Chrome 浏览器插件,支持一键保存网页到本地知识库。
- Chrome Web Store(即将上线)
- 开发者模式本地加载:
- 打开
chrome://extensions/ - 开启右上角「开发者模式」
- 点击「加载已解压的扩展程序」
- 选择
browser-extension/目录
- 打开
- 一键保存当前网页到本地数据库
- 右键菜单保存页面或链接
- 快捷键
Ctrl+Shift+N快速保存 - 自定义本地 API 地址
项目包含自动化发布工作流(.github/workflows/publish-extension.yml)。配置 GitHub Secrets 后即可使用。
CONTRIBUTING.md- 贡献指南CHANGELOG.md- 版本变更记录SECURITY.md- 安全政策CODE_OF_CONDUCT.md- 社区行为准则
MIT License
享受你的本地优先技术阅读体验! 🚀
你的数据,永远属于你。