基于 QMReader 演化的个人版 RSS 阅读与写作工作台。
Mars Reader 把筛选信息、深读文章、读中文改写、形成自己的判断,以及生成一版可继续编辑的社交媒体草稿,收进同一个本地优先的界面。它保留 QMReader 的 RSS 阅读、中文改写和文章上下文能力,在此基础上为个人阅读—写作流程加入了更轻量的 AI 写推文工作台与更收束的三栏界面。
这不是把文章自动变成一条看似合理的内容,而是一个让阅读和表达连在一起的个人工作台:
- 在左侧筛选信息源、未读、收藏、历史和文章;
- 在中间阅读原文、摘要和中文改写;
- 在右侧按需写下自己的判断、最想强调的点或希望略过的内容;
- 让 AI 结合文章重点与临时想法生成一版草稿,再继续编辑、复制或清空。草稿按文章保存,不会因为切换文章而丢失。
点击阅读器工具栏最前面的“AI 写推文”即可打开右侧 Writing Desk。v1.1 将原来的多种写作起点、篇幅、语气和三步确认流程收敛成一个简单任务:
- 留空直接生成:从文章的公共信息中选择最值得分享的一条主线,不把原作者的私人经历写成你的经历。
- 补充临时想法:写下自己的判断、希望强调或略过的内容;草稿优先按你的立场和取舍组织,文章只补充明确支持的事实、背景和机制。
- 继续编辑:生成结果按文章自动保存,支持停止、重新生成、复制和清空。
输出更通俗、有趣、有情绪,可以适度加强表达力度,但不会夸大事实、数字或因果。通常每段 1–2 句、最多 3 句;默认使用自然段,确实需要并列多个独立观点时才局部使用真正的项目符号。旧版草稿仍可打开、编辑和重新生成。
阅读区提供 原文、中文改写 与 中文改写(对照) 三个视图。对于有正文的文章,可以在同一处生成中文改写、查看生成状态、复制内容,并在需要时回到原文逐段核对。中文改写与 AI 写推文是两套能力:前者服务于阅读理解,后者服务于你的写作表达。
当前桌面工作台把角色分开,而不是让所有工具同时争抢注意力:
- 左侧:信息源导航、文章列表、搜索和个人阅读状态;
- 中间:文章标题、原文、中文改写、摘要和正文;
- 右侧:仅在写作时展开的 AI 写推文工作台,只保留文章引用、一个可选想法框、生成按钮和可编辑草稿;
- 工具栏:AI 写推文优先放在最前;进入写作状态后,关闭控制移动到写作台标题行,减少重复标题与重复按钮。
| 能力 | 用途 |
|---|---|
| 多源 RSS 阅读 | 聚合 RSSHub、直接 RSS、站点地图、Hacker News、Product Hunt、GitHub Trending、Hugging Face Papers 等信息源。 |
| 阅读工作台 | 在一页内完成信息源筛选、文章列表、深读和个人阅读状态管理。 |
| 中文改写 | 在文章阅读器中生成与查看中文改写,也可切换到对照视图。 |
| AI 写推文 | 提炼文章重点,结合本次临时想法生成可编辑社交媒体草稿。 |
| 个人阅读状态 | 未读、收藏、历史和已保存的推文草稿按文章沉淀。 |
| 文章上下文工具 | 保留文章级 AI 对话、点评和划线等既有阅读能力。 |
| 自托管与本地优先 | 使用 Express 与 SQLite 运行;服务端密钥放在环境变量,浏览器自定义 AI 配置保留在本机。 |
需要已安装当前 Node.js LTS 与 npm。
git clone https://github.com/archerthegoat/MarsReader.git
cd MarsReader
npm install
cp .env.example .env.env 不应提交到 Git。只阅读 RSS 内容时可以先保持 AI Key 为空;要使用服务端中文改写等能力时,再填入自己的 DeepSeek 或兼容配置。
npm start默认访问地址:http://localhost:8080
这是正常服务模式,遵循 .env 中的认证、Host、端口与 Cookie 配置,适合本地常驻或部署前验证。
macOS 用户可以使用原生用户级 LaunchAgent,让 Mars Reader 在登录后自动启动、异常退出后自动恢复,并把日志保存在 ~/Library/Logs/MarsReader/:
npm run service:install
npm run service:status常用管理命令:
npm run service:start
npm run service:stop
npm run service:restart
npm run service:logs
npm run service:uninstallLaunchAgent 固定运行稳定服务并监听 http://127.0.0.1:8080。它会覆盖 .env 中的 HOST、PORT、COOKIE_SECURE 和 MARSREADER_LOCAL_AUTH_BYPASS:只允许本机访问、使用本机 HTTP Cookie,并保留正常登录认证;其他 AI、管理员和刷新配置仍从 .env 读取。
service:stop 只停止当前登录会话中的服务,下次登录仍会自动启动;service:uninstall 会移除自动启动配置,但保留日志和 data/。如果移动项目目录或升级后 Node 路径失效,请重新运行 service:install。
本地修改不会由 LaunchAgent 自动同步或部署。使用下面的命令先运行测试和语法检查,全部通过后才重启服务并验证 HTTP:
npm run local:deploy实际 plist、日志、绝对路径、.env、密钥和运行数据都只留在本机,不应提交到 Git。
npm run dev:hot默认访问地址:http://marsreader.localhost:18081/
这个命令监听后端与前端关键文件,改动后自动重启本地服务;它默认仅绑定 127.0.0.1,并启用本地调试用的认证绕过。它只适合自己的电脑,不应暴露到局域网或公网。
除 .env 的服务端配置外,也可以在界面内维护自己的浏览器 AI 配置:点击左下角的设置图标,选择我的后台,再进入AI 设置。
- 在这里添加或切换 AI 配置,可填写 API Key、Base URL、模型、Temperature 与 Max Tokens,并可测试连接或设为默认;
- 同一页的“推文改写规则”只保留一个可编辑的推文改写系统提示词;它只影响“AI 写推文”,不影响中文改写和 AI 伴读;
- 页面内 AI 配置与推文规则都保存在当前浏览器,可随时点“恢复默认”还原系统提示词;不会写入 SQLite 或提交到 Git。
npm test
node --check server.js
node --check public/app.js从 .env.example 复制后,最常用的是:
| 变量 | 说明 |
|---|---|
DEEPSEEK_API_KEY / DEEPSEEK_MODEL / DEEPSEEK_BASE_URL |
服务端中文改写等 AI 能力的默认配置。 |
AI_PROVIDER / AI_API_KEY / AI_BASE_URL / AI_MODEL |
兼容 AI Provider 的服务端配置。 |
ADMIN_EMAIL / ADMIN_PASSWORD / ADMIN_NAME |
管理员初始配置。 |
HOST / PORT |
正常服务模式的监听地址与端口。 |
MARSREADER_LOCAL_AUTH_BYPASS |
仅用于本机热更新调试;正常启动应保持关闭。 |
AUTO_REWRITE_ENABLED / AUTO_REWRITE_SOURCE_IDS |
可选的后台自动改写范围。 |
运行时 SQLite 数据和 favicon 缓存保存在 data/,默认不纳入 Git。
- 服务端 API Key 只从环境变量或
.env读取,不写入仓库; - 浏览器中自行配置的 AI Key 保存在该浏览器的 localStorage,不存入 SQLite;
- AI 输出依赖所选 Provider、模型和额度,生成前应自行确认事实与表达;
- 社交草稿会移除文章来源链接,但这不代替你对公开表达、素材使用和发布平台规则的判断;
- SQLite 适用于个人或小团队自托管,不是高并发多租户方案。
Mars Reader 基于 joeseesun/qmreader 开发,现作为独立仓库维护。原项目来源、版权与 MIT License 必须保留;本项目并不把上游代码叙述为从零创作。
- @archerthegoat — 产品方向、需求与验收
- Codex — 开发协作
MIT License. See LICENSE.
A personal RSS reading and writing workbench built on QMReader.
Mars Reader keeps feed aggregation, article reading, Chinese rewrites, and article-context tools from QMReader, then adapts them to a personal workflow: filter information, read deeply, keep your own judgment, and turn it into an editable social-media draft.
- One clear social-draft flow — generate directly from an article, or add a temporary viewpoint, emphasis, disagreement, or omission. The draft prioritizes your input, stays editable, and is saved per article.
- Lighter writing controls — the former modes, length and tone selectors, extra instruction field, and three-step workflow have been removed. Stop, regenerate, copy, clear, and autosave remain available.
- More readable default writing — concise mobile-friendly paragraphs, natural prose with lists only when useful, and a more conversational and lively voice without exaggerating facts.
- Chinese rewrites in the reader — switch among original text, Chinese rewrite, and a comparison view without leaving the article.
- A more focused desktop surface — source navigation and article list on the left, deep reading in the middle, and an on-demand writing desk on the right.
- Local-first self-hosting — Express and SQLite power the app; server keys stay in environment variables and browser AI profiles stay in local storage.
git clone https://github.com/archerthegoat/MarsReader.git
cd MarsReader
npm install
cp .env.example .env
npm startOpen http://localhost:8080.
On macOS, install the native per-user LaunchAgent to start Mars Reader at login, restart it after unexpected exits, and keep local logs:
npm run service:install
npm run service:statusUse service:start, service:stop, service:restart, service:logs, or service:uninstall for lifecycle management. The service is fixed to http://127.0.0.1:8080, keeps normal login authentication enabled, and stores generated configuration and logs only on the current Mac. service:uninstall preserves application data and logs.
After local code changes, run the validation gate before restarting:
npm run local:deployThe LaunchAgent does not pull from Git or deploy GitHub changes automatically.
For local hot reload only:
npm run dev:hotOpen http://marsreader.localhost:18081/. This mode binds to localhost and enables a local-only auth bypass; never expose it to a LAN or the public internet.
In addition to .env server settings, you can manage browser-local AI settings from the interface: click the settings icon at the lower-left, choose My Dashboard, then open AI Settings.
- Add or switch AI profiles with an API key, base URL, model, temperature, and max tokens; test the connection or make a profile the default.
- The Tweet rewrite rules section on the same page contains one editable Tweet rewrite system prompt. It affects only AI tweet writing, not Chinese rewrites or the article AI companion.
- Browser AI profiles and the tweet-writing prompt stay in the current browser. Use Restore defaults to reset the prompt; nothing is written to SQLite or Git.
Mars Reader is independently maintained from QMReader while retaining its upstream attribution and MIT license.
- @archerthegoat — product direction, requirements, and acceptance
- Codex — development collaboration
MIT License. See LICENSE.


