README foru17/make-x-great-again
Make X Great Again
少看垃圾,多看人话。
你照常刷 X,社区共建的公开黑名单帮你把广告号和色情 bot 标出来 · Chrome 扩展 · AGPL-3.0 开源
🟦 从 Chrome 商店安装 · 🌐 官网门户 · 📋 公共名单 · 📦 GitHub Release · 📝 Changelog
这个项目要解决什么
X 现在的问题,大家都知道:
- 评论区一半是广告号和色情 bot,正常讨论被刷到底
- 想关注一个新人,分不清是真号还是水军
- 算法决定你看到谁,而不是你决定
- 看一个人聊过什么、最热几条是什么——只能手动翻几十层
Make X Great Again (MXGA) 装上之后,内置的社区共建公开黑名单帮你标出这些垃圾号,一键本地隐藏——默认「本地隐藏」模式不调用 X 的任何接口、扩展本身零网络请求;如需更进一步,可在设置里选择用你自己的 X 登录态调用 X 原生静音 / 拉黑(仍不经过我们的服务器、不收集任何数据)。
不收集你的信息,不要注册,源码全开。
五件事,分阶段做
| # | 想做的事 | 状态 | 简介 |
|---|---|---|---|
| 01 | 干掉刷评论的垃圾号 | ✅ Live | 扩展内置社区共建的公开黑名单,命中即出徽标,一键本地隐藏(默认仅本地隐藏,可随时取消;也可选用你自己的 X 登录态做原生静音 / 拉黑)。名单由关键词规则 + AI 初筛、维护者人工确认后公开。 |
| 02 | 看一眼就知道这个 KOL 靠谱不 | 🚧 计划 | 鼠标停在 @handle 上 → 浮卡:账号年龄、原创比、主题集中度、互动质量 |
| 03 | 进 profile 自动出摘要 | 🚧 计划 | 「这个人主要谈 A/B/C」「最近一个月最热的 5 条」「最佳互动时段」—— 不用手动翻 |
| 04 | 让信号穿过算法噪声 | 🚧 计划 | 在推文下提示「你关注的 3 个 KOL 转过 / 评论过」,找回算法之前的发现感 |
| 05 | 你的数据归你 | 🚧 计划 | 一键把你的关注 / 收藏 / 自己的推文导出成 JSON / Markdown,备份或迁出 |
现阶段只有 Pillar 01 上线;Pillar 02–05 的实现路径在 docs/PRODUCT.md 里。
Pillar 01 当前能做什么
这是已经跑在 x.zuoluo.tv 上的部分。公榜数量会持续变化,实时数据请看 /list。
- 内置公开黑名单:约 4.6 万条
human_confirmed条目直接打包进扩展(仅保留有数字 X ID 的条目,去重、剥离证据文本),加载和命中全部本地完成,默认模式下扩展运行时零网络请求 - 本地徽标 + 一键隐藏:命中名单的账号在推文旁出徽标,点「隐藏」本地隐藏该账号的帖子(5 秒可撤销)——默认是纯本地隐藏,不调用 X 的任何接口
- 三种处理方式(可选):设置页「处理方式」里可切换点「隐藏」时的默认行为——本地隐藏(默认,零联网,X 无感)/ X 静音(用你的 X 登录态调 X 原生静音,单向、对方不知情、关注关系不变)/ X 拉黑(X 原生屏蔽,互相看不到、解除关注)。静音 / 拉黑均为可选,且只在切换到该模式时才在运行时申请 x.com 的可选权限;这两种动作经过一个全局限速队列(跨 tab 串行、约 1.2s 间隔 + 抖动、阶段性冷却、429 退避)调用 X 自家接口,不经过我们的服务器,也不收集任何数据
- 随时取消隐藏:设置页可查看本地隐藏列表,一键取消隐藏纠正误判(本地隐藏一侧始终可恢复)
- 误判申诉:徽标里点「申诉」会打开 GitHub 上的申诉 issue 模板,由维护者人工复核
- 零数据收集:默认权限只有
storage;x.com 的 host 权限是「可选权限」,只有当你切换到 X 静音 / 拉黑时才在运行时弹窗申请,拒绝则停留在本地模式。无登录、无统计上报;统计数字只存在你本机,任何模式下都不向我们或第三方上传数据 - 守门员审核台(/admin,需要 ADMIN_TOKEN):待审队列 / 黑名单 / 白名单 / 审计日志 四个 tab,全自定义弹窗
- 公开公榜(/list):所有
human_confirmed账号公开可查,含理由 + 举报人数 - 共建机制(在网站端,不在扩展里):举报 / 确认走 x.zuoluo.tv 的 API(GitHub token 验证、加盐指纹存储);alpha 阶段所有举报先进人工队列。
3 个 ≥90 天 GH 账号 + AI 置信 ≥0.9是保留的自动发布治理门槛,目前默认关闭
详细治理规则见 GOVERNANCE.md。
怎么用
Note
关于处理方式与 X 风控:默认的本地隐藏模式只在扩展内做视觉隐藏,不调用 X 的任何接口,
因此不会触发 X 的自动化风控。但如果你在设置里主动开启 X 静音 / X 拉黑,
这两种动作会用你真实的 X 账号调用 X 自家接口,X 的反自动化规则就会适用——
短时间内连续操作大量账号(尤其是批量拉黑)可能被判定为异常行为,触发 Ghost Ban、
功能限制甚至冻结。MXGA 已对这两种动作做了限速排队来降低风险,但仍请你分批、少量操作,
优先用静音而非拉黑,尤其不要在新号或近期被限制过的账号上密集拉黑。
普通用户
推荐:直接从 Chrome Web Store 安装。
👉 chromewebstore.google.com/detail/make-x-great-again/aeoldnecphbkkckeedfgfcdcekkljdea
装好后,访问 x.com 扩展会自动开始工作。
用 Edge / Brave / Arc,或想跑开发版?
# 1. 从 https://github.com/foru17/make-x-great-again/releases/latest 下载最新 .zip 并解压
# 2. chrome://extensions → 开启「开发者模式」
# 3. 「加载已解压的扩展程序」→ 选择解压目录
# 4. 访问 x.com,扩展自动开始工作开发者
# 0. 装依赖(用 pnpm;锁文件已提交)
pnpm install
# 1. 静态检查
pnpm typecheck && pnpm test && pnpm lint
# 2. 扩展(WXT + React 19 + Tailwind v4)
cd extension
pnpm dev # 监听 + 自动重载,把 .output/chrome-mv3 加进 Chrome 即可
# 3. 边缘服务(Cloudflare Worker + D1 + Hono)
cd services/edge
pnpm dev # 本地 8787
# 4. 部署(需 Cloudflare 账号 + wrangler 登录)
pnpm deployLLM 配置
跑分类需要一个 OpenAI 兼容的 /chat/completions 端点。它永远不会进仓库:
# 本地 CLI 跑(src/cli.ts,给开发 / 调 prompt 用)
cp .env.example .env
# 编辑 .env,填 LLM_API_BASE / LLM_API_MODEL / LLM_API_KEY
# Worker 上跑(生产 + 部署)
cd services/edge
npx wrangler secret put LLM_API_BASE # OpenAI 兼容 base,比如 https://api.openai.com/v1
npx wrangler secret put LLM_API_MODEL # 模型 id,比如 gpt-4o-mini
npx wrangler secret put LLM_API_KEY # bearer
npx wrangler secret put ADMIN_TOKEN # /admin 网关仓库结构
src/ 本地 LLM 分类 CLI + node:test 单测(开发用,非生产路径)
extension/ MV3 浏览器扩展:WXT + React 19 + Tailwind v4(默认零网络请求)
entrypoints/
content.ts X DOM 的被动观察 + 气泡 UI + 一键隐藏(5 秒可撤销;按处理方式叠加 X 静音/拉黑)
background.ts 只回应本地消息(索引健康检查 / 统计),不发任何 fetch
popup/ options/ React 弹窗 + 设置页(含本地隐藏列表的取消隐藏、处理方式选择)
public/blacklist-data.json 打包进扩展的公开黑名单(scripts/compile-blacklist.js 生成)
lib/ cache / blocklist / local-index / detect / stats / x-action(X 静音/拉黑限速队列)
services/edge/ Cloudflare Worker(Hono)+ D1(xss-db)
src/index.ts /v1/* API + scheduled cron + Env 类型
src/pages/ SSR landing / list / admin(同套 base-ui design token)
data/ 公开数据快照(Worker 每 6h 自动同步,git history = 审计日志)
whitelist/v1.json 维护者人工确认安全的账号
blacklist/v1.json 维护者人工确认公开的垃圾号(含 evidence_text + reasons)
README.md schema 文档 + 更新机制说明
docs/ ARCHITECTURE / PRODUCT / MODERATION / FLOW / UX / STATUS / RUNNING / MVP
GOVERNANCE.md 治理铁律 + 申诉路径(在仓库根)
SECURITY.md 漏洞披露通道
CONTRIBUTING.md 贡献指南
公开数据集(审计入口)
data/whitelist/v1.json 和 data/blacklist/v1.json 是这个项目最重要的透明度承诺 —— 它们是 D1 数据库的只读快照,每 6 小时由服务端自动同步到这里。仓库的 git history 就是完整审计日志:任何人 clone 一下就能复现"维护者在哪天加了/移除了哪个账号"。
每条 blacklist 记录都附 evidence_text(触发判定的那条公开 X 文本)、reasons(AI 给出的理由数组)、reporters(独立举报人数),让审计不止是"我说他是 spam"。
→ 实时浏览:github.com/foru17/make-x-great-again/tree/main/data
→ 完整 schema 与使用说明:data/README.md
当前进度
v0.5.0(最新,2026-06-10)—— 被动本地优先 + 可选 X 原生动作
- 默认零网络请求:公开黑名单直接打包进扩展(约 4.6 万条,仅保留有数字 X ID 的条目),命中、统计全部本地完成;移除 GitHub 登录、MAIN-world 脚本和向服务端的一切 fetch
- 处理方式三选一:点「隐藏」默认仅本地隐藏(display:none + 本地隐藏列表,零联网,可随时取消);可选 X 静音 / X 拉黑——用你自己的 X 登录态调用 X 自家接口(
mutes/users/create.json/blocks/create.json),经全局限速队列调度,不经过我们的服务器 - 权限按需申请:默认权限仍只有
storage;x.com 的 host 权限改为「可选权限」,仅在你切换到 X 静音 / 拉黑时由chrome.permissions.request在运行时申请,拒绝则停留在本地模式 - 误判申诉:改为打开 GitHub 申诉 issue 模板,不再向服务端 POST
- 零数据收集不变:任何模式都不向我们或第三方上传数据;Firefox 保留
data_collection_permissions: none(静音 / 拉黑是你用自己的 X 账号经 X 接口操作,不构成数据收集) - 服务端加固:admin 鉴权 timing-safe、
/v1/classify与/v1/appeal限流、cron 拆分(R2 工件每 10 分钟 / GitHub 镜像每 6 小时)、举报人只存加盐指纹(无盐则 fail-closed)
v0.4.0(2026-05-28)
- 静默真拉黑:调用 X 自己的
blocks/create.json接口,不再模拟点击原生确认弹窗;后台队列带限速、重试、跨 tab 协调 - 可见进度:右上角气泡显示固定 4 格状态(命中 / 正在 / 待拉 / 已拉)、进度条和当前拉黑队列;成功后头像和名称划掉并淡出
- 批量公榜查询:
/v1/check?ids=...批量查 100 个 ID,垃圾号密集的帖子不再对服务端打出一串单账号请求 - 登录体验:popup 点 GitHub 会直接跳设置页并启动 Device Flow;验证码卡片支持一键复制
- Agent 审核侧路:新增
/v1/agent/*、agent staging 状态和 admin 审核台页签;修复 stale agent 决策降级公榜的竞态 - Landing 趋势图:新增
/v1/list/trends与 D1 索引迁移,用于官网展示 24h / 7d 公榜增长趋势
完整版本记录见 CHANGELOG.md。
v0.3.0(2026-05-26)
- GraphQL 身份解析硬化、viewer-scoped 过滤、公榜命中自动拉黑(默认关)、浅色主题、批量勾选 UI、
escHtml加固
v0.2.0(首发,2026-05-25)
- 浏览器扩展(Chrome MV3)— 被动 AI 识别 + 一键真拉黑
- 公开服务端 —
x.zuoluo.tv//list公榜 //admin审核台 - 维护者白名单 + 黑名单的 6h 自动同步到仓库
data/目录 - 公榜每条带
evidence_text(触发推文片段)+reasons(AI 给出的理由)+reporters(独立举报人数)
接下来想做的(02–05)
- 鼠标 hover @handle → KOL 信号分浮卡
- 进 profile 自动出"主要谈什么 / 最热几条 / 最佳互动时段"摘要
- 看推文时显示"你关注的 N 人转过 / 评论过"
- 一键导出你的关注 / 收藏 / 推文为 JSON / Markdown
完整 release notes:GitHub Releases
治理与隐私
这是一份对真实账号的公开指控列表,所以治理比代码本身重要。完整规则在 GOVERNANCE.md,要点:
- AI 永远不能单独公开。 alpha 阶段公榜入榜走人工维护者确认;历史设计中的自动发布门槛(AI 置信度 ≥ 0.9 + ≥3 个注册 90 天以上的 GitHub 账号独立举报)仍保留为治理红线,但当前默认关闭。
- 审核范围严格限定 商业 spam 和色情广告 bot。永远不判断观点、立场、政治、身份。
- 零 PII:库里只存 X 公开数字 ID 和举报人的加盐 HMAC 指纹(原始 GitHub ID 从不落库;
REPORT_SALT未配置时举报端点直接拒绝服务,fail-closed),不存任何邮箱、姓名、设备指纹、IP。 - 所有维护者动作都进
review_log:拉黑 / 驳回 / 移除 / 加白 / 移白,全部留痕,可在 /admin 审计日志 tab 翻。 - 申诉:在 GitHub 上新开 issue 即可,附带 X handle + 你的理由。维护者会复核,没有承诺 SLA,通常一两天内回应。
- 维护者凭据永不进消费端构建:审核台的
ADMIN_TOKEN只在 maintainer 浏览器 localStorage,不出现在公开扩展包里。 - LLM 供应商坐标永不进仓库:URL + model + key 全部是 Worker secrets。
- 协议是 AGPL-3.0,防止有人闭源套壳商用化。
安全问题请走 SECURITY.md 的非公开通道,不要开公开 issue。
技术 stack
| 层 | 选型 | 备注 |
|---|---|---|
| 扩展 | WXT 0.20 · React 19 · Tailwind v4 · Shadow DOM | content-script 用 Shadow DOM 隔离样式,不污染 X;默认模式零网络请求,名单随包内置;可选 X 静音/拉黑用 x.com 可选权限调 X 自家接口 |
| 边缘 | Cloudflare Worker · Hono · D1 SQLite · R2 | 单 region,custom domain x.zuoluo.tv |
| LLM | 任何 OpenAI 兼容 /chat/completions |
仅靠 system prompt 约束,不微调;只在服务端策展管线使用 |
| 身份 | GitHub token 验证(仅网站端举报/共建流程) | 扩展无任何登录;X 静音/拉黑复用你浏览器已有的 X 登录态,不读取也不上传该凭据;服务端只存加盐 HMAC 指纹 |
| 同步 | Workers Cron:*/10 * * * * 发布 R2 工件 · 0 */6 * * * 镜像 data/ 仓库 |
扩展端名单随扩展包内置,无运行时同步 |
更细的架构与决策记录在 docs/ARCHITECTURE.md。
贡献
欢迎 PR、issue、申诉。请先翻一下 CONTRIBUTING.md 和 GOVERNANCE.md。
如果你想贡献新的 Pillar(02–05 任意一个)的设计或代码,先开 issue 聊一下方向,避免重复造轮子。
