Anti-Slop Skill:给 AI 编程助手装上”代码品味过滤器”的 TypeScript lint 规则
给 AI 编程助手装上”代码品味过滤器”:Anti-Slop 让你远离低质量 TypeScript 陷阱
GitHub Trending 上最近出现了一个令人意外的现象级项目:一套专治”AI 瞎写 TypeScript”代码味道的 lint 规则包。它不教 AI 怎么写代码,而是给它装上一个”品味过滤器”,把那些看似合理但实际上充满隐患的写法直接拦截掉。这个项目叫 anti-slop,作者是 Dillon Mulroy (dmmulroy),在 skills.sh 排行榜上稳居热榜首位,周增 355 星,增长率 20%,而整个生态里已经有 5 位开发者在推特上讨论它。
功能与原则
anti-slop 是一套基于 Oxlint 的Opinionated 规则集,专门用来拦截 TypeScript/JavaScript 代码里那些”看起来对、实际上坑”的模式。它的设计哲学是”零妥协”——每条规则一旦触发就直接报 error,不给你留任何”算了,差不多就行”的空间。不同于普通的风格lint,anti-slop 聚焦的是”语义级”问题:类型断言滥用、unknown 掩盖、reflect 误用、模块 mock 陷阱。这些问题在 AI 生成代码时出现频率极高,因为模型倾向于用最少的 token 完成任务,而那些”能用就行”的宽泛类型恰好是 token 最友好的写法。
认可度
- GitHub:约 2,768 stars(截至 2026-08-20),周增 355 星,Trending #1
- 生态讨论:2 位开发者在 X/Twitter 上主动提及,安装量快速增长
- 安装方式:
npx skills add dmmulroy/anti-slop --skill install-anti-slop - 无需本地环境——规则直接通过 agent skill 安装进项目
链接
GitHub:https://github.com/dmmulroy/anti-slop
原作者
Dillon Mulroy(@dillon_mulroy,GitHub: dmmulroy),独立开发者,专注于 Effect TypeScript 生态与代码质量工具。其 X 帖子”stop AI from writing slop”获得了 911 likes,圈内口碑良好。
介绍
anti-slop 最初是为了解决一个具体问题:团队里 Claude Code 和 Cursor 生成 TypeScript 代码时,总会在几个特定模式上反复踩坑。比如 input as object as User 这种链式类型断言,模型会觉得”反正能跑”,但实际运行时完全不可控。再比如 vi.mock() 这种测试 mock,AI 特别爱用,但长期来看会严重破坏测试的可维护性。
整个规则包分为通用规则和 Effect 专用规则两类。通用规则覆盖 15 条,Effect 规则覆盖 1 条(no-service-constructor-imports)。通用规则里值得特别关注的几条:
- no-unknown-type-aliases:拒绝用
unknown包裹一个别名来假装有类型安全,实际上什么都没说 - no-object-parameters:拒绝函数参数用
object类型,这等于没写类型 - no-reflect-apply / no-reflect-get:要求用类型安全的函数调用替代反射 API
- no-module-mocking:要求用真实依赖边界而非 mock,维护测试的真实性
规则以”vendor 模式”分发——不是作为固定 npm 依赖,而是让 AI 把规则文件复制到项目里,之后由团队自行维护和修改。这很关键:规则是你的,不是第三方包版本的。
特点
- 零妥协拦截:所有规则都是
error级别,不提供warn选项,逼着开发者正面解决 - 专为 AI 输出定制:每条规则都对应 AI 生成代码时的高频”烂写法”,不是通用代码风格规则
- Vendor 模式分发:复制即拥有,团队可以按需修改,不受上游版本约束
- Effect 生态深度集成:专门为 Effect 框架设计了架构规则,弥补 Effect 用户没有强制规范的空白
- 配套 Agent Skill:提供
install-anti-slopskill,AI 自动完成复制+安装+配置全套流程
使用方法
安装只需一行命令:
npx skills add dmmulroy/anti-slop --skill install-anti-slop
安装完成后,在对话里让 AI 安装或配置 anti-slop:
请在当前仓库安装并配置 anti-slop
Skill 会自动完成:
1. 复制规则文件到 tools/oxlint/anti-slop/
2. 安装匹配的 oxlint 和 @oxlint/plugins 依赖
3. 合并规则到现有的 oxlint.config.ts
4. 启用所有通用规则并验证配置
如果项目使用了 Effect,还会自动启用 Effect 专用规则。
配置完成后效果立竿见影——AI 再想写 input as object as User 或 vi.mock("./user-store"),Oxlint 会直接报错。
使用场景与人群
- TypeScript 团队:已经在用或计划用 Claude Code / Cursor 等 AI 编程助手的团队,需要控制 AI 输出的代码质量下限
- Effect 框架用户:Effect 有独特的架构约定(比如 Service Layer 模式),anti-slop 的
no-service-constructor-imports强制执行这一约定 - 代码审查压力大的团队:AI 生成代码后审查成本高,anti-slop 把部分问题消灭在 lint 阶段,减少无效 review 轮次
- 不适用场景:对非 TypeScript 项目、没有使用 Effect 的团队,收益有限
输入与输出案例
案例 1:类型断言滥用
输入(AI 生成的代码):
const user = input as object as User;
触发规则:anti-slop/no-chained-type-assertions
输出:编译错误——Oxlint 拒绝链式类型断言,要求先用边界检查确认类型再操作。
案例 2:unknown 掩盖问题
输入:
function save(value: object) {}
触发规则:anti-slop/no-object-parameters
输出:编译错误——函数参数不能是宽泛的 object 类型,必须有明确的约束。
anti-slop 的出现说明一个趋势:AI 编程工具生态正在从”让 AI 写更多代码”进化到”让 AI 写更有保障的代码”。当 Agent 生成能力已经不是瓶颈,代码质量控制就变成了新的战场。如果你已经在用 Claude Code 或 Cursor,而且团队对 TypeScript 类型安全有要求,anti-slop 是目前最直接有效的”品味过滤器”。
评论区
登录后可评论。