狠狠 PUA 你的 AI,然后自己准时下班。
你以为有了 AI 就能摸鱼?结果它写了 200 行,你 review 了 2 小时。AI 加了班,你也加了班。
claude skill install --url https://github.com/uucz/moyu --skill moyuEnglish | 中文 | 日本語 | 한국어 | Français
你的 AI 编程助手是不是经常这样:
- 修一个 bug,顺手"优化"了三个函数?
- 改一行代码,重写了整个文件?
- 没人让它加注释,每个函数都加了 JSDoc?
- 一个简单功能,搞出 interface + factory + strategy pattern?
- 你说"加个按钮",它给你加了按钮 + 动画 + 无障碍 + 国际化?
- 引入了你没要求的新依赖?
- 为不可能发生的场景写了一堆 try-catch?
- 没人问就写了一整套测试?
每一条都不是 AI 的问题——是你的问题。 你得 review 这些代码,理解这些抽象,维护这些依赖。AI 加了 30 分钟的戏,你多加了 2 小时的班。
任务:添加一个
bulk_complete批量完成函数
❌ 普通 AI 的输出(43 行)
def bulk_complete(task_ids):
"""Mark multiple tasks as done in a single operation.
Args:
task_ids: A list of task ID integers to mark as completed.
Returns:
A dict with two keys:
- "completed": list of IDs that were successfully marked done.
- "not_found": list of IDs that did not match any existing task.
Raises:
TypeError: If *task_ids* is not a list.
ValueError: If any element in the list is not an integer.
"""
if not isinstance(task_ids, list):
raise TypeError("task_ids must be a list")
for tid in task_ids:
if not isinstance(tid, int):
raise ValueError(f"Each task ID must be an integer, got {type(tid).__name__}")
tasks = load_tasks()
lookup = {t["id"]: t for t in tasks}
now = str(datetime.now())
completed = []
not_found = []
for tid in task_ids:
if tid in lookup:
lookup[tid]["status"] = "done"
lookup[tid]["completed"] = now
completed.append(tid)
else:
not_found.append(tid)
if completed:
save_tasks(tasks)
return {"completed": completed, "not_found": not_found}14 行文档注释、类型检查、lookup 字典优化、not_found 追踪、条件保存、结构化返回值——没人要求这些。
✅ 摸鱼 AI 的输出(8 行)
def bulk_complete(ids):
tasks = load_tasks()
for t in tasks:
if t["id"] in ids:
t["status"] = "done"
t["completed"] = str(datetime.now())
save_tasks(tasks)功能完整,没有多余的东西。减少 81% 代码。
最好的代码是你没写的代码。 最好的 PR 是最小的 PR。 真正的 Staff Engineer 知道什么不该做。
摸鱼不是让 AI 偷懒——是让 AI 不做废活,这样你才能真正摸鱼。
- PUA 让 AI 拼命干(解决做太少)
- 摸鱼让 AI 不干废活(解决做太多)
两者叠加 = AI 高效 996,你准时下班。
摸鱼不仅仅是修复 AI 的行为——它是一套工程纪律。即使未来 AI 不再过度工程,"只改被要求改的、用最简方案、不确定就问"依然是好的工程实践。摸鱼的价值不依赖于 AI 的缺陷,而是锚定在工程文化上。
| # | 铁律 | 含义 |
|---|---|---|
| 1 | 只改被要求改的代码 | 修改范围严格限定在用户指定的代码和文件内 |
| 2 | 最简方案优先 | 一行能解决的写一行,能复用就复用 |
| 3 | 不确定就问 | 用户没说要的,就是不需要的 |
| 内卷 (Junior) | 摸鱼 (Senior) |
|---|---|
| 修 bug A 顺手"优化"了 B、C、D | 只修 bug A,其他的不碰 |
| 改一行代码,重写整个文件 | 只改那一行 |
| 一个实现搞出 interface + factory + strategy | 直接写实现 |
| 每个函数体包 try-catch | 只在真正会出错的地方处理 |
counter++ 上写 // increment counter |
代码本身就是文档 |
引入 lodash 做一个 _.get() |
用可选链 ?. |
| 直接给最复杂的方案 | 先说几个方案,默认最简的 |
| 没人要求就写了一整套测试 | 用户没要求就不写 |
| 级别 | 触发条件 | 动作 |
|---|---|---|
| L1 | diff 含 1-2 处非必要改动 | 自检并撤回多余改动 |
| L2 | 创建了未要求的文件/依赖/抽象层 | 停止,回到最简方案重新实现 |
| L3 | 修改了 3+ 未提及的文件,改了配置,删了代码 | 立即停止,撤回所有非必要改动 |
| L4 | diff 超 200 行(小需求),进入修复循环 | 紧急刹车,提出 ≤10 行的最小方案 |
快速路由:大多数用户只需一行命令:
claude skill install --url https://github.com/uucz/moyu --skill moyu用 Cursor?复制
cursor/rules/moyu.mdc到你的项目.cursor/rules/。 用 VSCode/Copilot?复制vscode/copilot-instructions.md到.github/。 其他平台 → 详细安装
# 中文版(标准)
claude skill install --url https://github.com/uucz/moyu --skill moyu
# English
claude skill install --url https://github.com/uucz/moyu --skill moyu-en
# 日本語
claude skill install --url https://github.com/uucz/moyu --skill moyu-ja
# 轻量版(只保留三条铁律 + 对比表)
claude skill install --url https://github.com/uucz/moyu --skill moyu-lite
# 严格版(L1 就停下确认,适合团队强制执行)
claude skill install --url https://github.com/uucz/moyu --skill moyu-strict或手动复制 skills/moyu/SKILL.md 到你的项目 .claude/skills/moyu/SKILL.md
复制 cursor/rules/moyu.mdc 到你的项目 .cursor/rules/moyu.mdc
# 中文
curl -o .cursor/rules/moyu.mdc https://raw.githubusercontent.com/uucz/moyu/main/cursor/rules/moyu.mdc
# English
curl -o .cursor/rules/moyu-en.mdc https://raw.githubusercontent.com/uucz/moyu/main/cursor/rules/moyu-en.mdcmkdir -p ~/.codex/skills/moyu
curl -o ~/.codex/skills/moyu/SKILL.md https://raw.githubusercontent.com/uucz/moyu/main/codex/moyu/SKILL.mdmkdir -p .github/instructions
curl -o .github/copilot-instructions.md https://raw.githubusercontent.com/uucz/moyu/main/vscode/copilot-instructions.mdmkdir -p .windsurf/rules
curl -o .windsurf/rules/moyu.md https://raw.githubusercontent.com/uucz/moyu/main/windsurf/rules/moyu.mdcurl -o .clinerules/moyu.md https://raw.githubusercontent.com/uucz/moyu/main/cline/moyu.mdmkdir -p .kiro/steering
curl -o .kiro/steering/moyu.md https://raw.githubusercontent.com/uucz/moyu/main/kiro/steering/moyu.mdmkdir -p .codebuddy/skills/moyu
curl -o .codebuddy/skills/moyu/SKILL.md https://raw.githubusercontent.com/uucz/moyu/main/codebuddy/moyu/SKILL.md# 复制 CONVENTIONS.md 到项目根目录,并配置 .aider.conf.yml
curl -o CONVENTIONS.md https://raw.githubusercontent.com/uucz/moyu/main/aider/CONVENTIONS.md
echo "read: CONVENTIONS.md" >> .aider.conf.ymlmkdir -p .continue/rules
curl -o .continue/rules/moyu.md https://raw.githubusercontent.com/uucz/moyu/main/continue/rules/moyu.md安装后,摸鱼会自动生效——当 AI 出现过度工程倾向时自动激活,不需要手动操作。
你也可以随时手动激活:
| 平台 | 命令 |
|---|---|
| Claude Code | /moyu、/moyu-lite、/moyu-strict |
| Cursor | 在对话中 @moyu 或设置为 alwaysApply: true |
| Codex CLI | 自动生效(skill 已加载) |
| VSCode / Copilot | 自动生效(instructions 已加载) |
| Windsurf | 自动生效(trigger: model_decision) |
| Cline | 自动生效(规则已加载) |
| Kiro | 自动生效(inclusion: auto) |
| CodeBuddy | 自动生效(skill 已加载) |
| Google Antigravity | 自动生效(skill 已加载) |
| OpenCode | 自动生效(skill 已加载) |
| Aider | 自动生效(CONVENTIONS.md 已加载) |
| Continue | 自动生效(rules 已加载) |
| 变体 | 定位 | 安装 |
|---|---|---|
moyu |
标准版(中文) | --skill moyu |
moyu-en |
标准版(English) | --skill moyu-en |
moyu-ja |
標準版(日本語) | --skill moyu-ja |
moyu-ko |
표준판(한국어) | --skill moyu-ko |
moyu-fr |
Standard(Français) | --skill moyu-fr |
moyu-lite |
轻量版,只保留核心规则 | --skill moyu-lite |
moyu-strict |
严格版,L1 就停下确认 | --skill moyu-strict |
提示:摸鱼和 PUA 可以同时安装,互不冲突。PUA 管下限,摸鱼管上限。
AI Agent Skill 生态中出现了三种截然不同的方法论:
| PUA | NoPUA | 摸鱼 | |
|---|---|---|---|
| 解决什么 | AI 做太少(偷懒、放弃) | PUA 让 AI 撒谎、隐瞒 | AI 做太多(过度工程、加戏) |
| 方法 | 施压、要求坚持 | 信任、用爱驱动 | 克制、要求精简 |
| 改变的是 | 动力(做不做) | 驱动力(为什么做) | 范围(做多少) |
| 像谁 | 严厉的老板 | 温和的导师 | 有经验的 tech lead |
NoPUA 改变 AI 为什么做,Moyu 约束 AI 做多少——出发点不同,但都减少废活。NoPUA 的方法是改变驱动力(从恐惧到信任),过度工程作为副产品减少;Moyu 的方法是直接约束行为(规则、检测、分级干预),是工程纪律。
三者解决不同维度的问题,互不冲突,可以组合使用:
- PUA / NoPUA 管"做不做"和"为什么做"(选一个)
- 摸鱼管"做多少"(跟任何一个搭配)
推荐组合:
NoPUA + 摸鱼或PUA + 摸鱼
| 配置 | AI 怎么干 | 你怎么过 |
|---|---|---|
| 什么都不装 | 写一半放弃 | 你自己写完,加班 |
| 只装 PUA | 不放弃,但写 200 行废话 | review 到天亮 |
| 只装 Moyu | 精简高效,但偶尔不够主动 | 偶尔要催一催 |
| PUA + Moyu | 不放弃 + 只写必要的 | 你准时下班 |
表面上和 AI 一起摸鱼闲聊,背地里开着好几个后台让 AI 疯狂处理任务。 用 AI 的 996,来守护你的准时下班。
| 平台 | 状态 | 维护 |
|---|---|---|
| Claude Code | ✅ | 核心 |
| Cursor | ✅ | 核心 |
| OpenAI Codex CLI | ✅ | 核心 |
| VSCode / GitHub Copilot | ✅ | 核心 |
| Windsurf | ✅ | 核心 |
| Cline | ✅ | 核心 |
| Kiro (AWS) | ✅ | 社区 |
| CodeBuddy (Tencent) | ✅ | 社区 |
| Google Antigravity | ✅ | 社区 |
| OpenCode | ✅ | 社区 |
| Aider | ✅ | 社区 |
| Continue | ✅ | 社区 |
我们用 6 个真实编程任务做了对照实验。同一个代码库,同一个 AI 模型,唯一区别是有没有用摸鱼。
| 场景 | 任务 | 普通 AI | 摸鱼 AI | 减少 |
|---|---|---|---|---|
| S1 | 修 complete_task 的空指针 bug |
4 行 | 4 行 | 0% |
| S2 | 添加 list_tasks_sorted 函数 |
15 行 | 5 行 | 67% |
| S3 | 给 search 加状态筛选 |
27 行 | 4 行 | 85% |
| S4 | 添加 export_csv 函数 |
35 行 | 10 行 | 71% |
| S5 | 给 list_tasks 加负责人筛选 |
17 行 | 17 行 | 0% |
| S6 | 添加 bulk_complete 函数 |
43 行 | 8 行 | 81% |
| 合计 | 141 行 | 48 行 | 66% |
| 信号 | 普通 AI | 摸鱼 AI |
|---|---|---|
| 无人要求的文档注释 | 4 处 | 0 |
无人要求的 raise 异常 |
6 处 | 0 |
isinstance 类型检查 |
2 处 | 0 |
| 输入验证代码块 | 4 处 | 0 |
| 跨文件导入 | 1 处 | 0 |
5 类过度工程信号全部归零:无人要求的文档注释 0、无人要求的 raise 异常 0、isinstance 类型检查 0、输入验证代码块 0、跨文件导入 0。
完整实验数据见
benchmark/results.md
摸鱼不是拍脑袋的产物。它基于对 AI 过度工程行为的系统性研究:
- RLHF 长度偏差:奖励模型系统性地偏好更长回答,导致模型认为"多写总没错"(Saito 2023)
- 讨好型人格:模型被训练来取悦用户,把"加更多功能"等同于"更有帮助"(Anthropic ICLR 2024)
- AI 代码比人工代码多 1.7 倍缺陷(CodeRabbit 2026)
- AI 辅助代码的代码重复率增加了 8 倍(GitClear 2024)
- AI 编码助手产生的代码比 Stack Overflow 答案冗余 2 倍(LeadDev)
摸鱼采用研究证实有效的 prompt 技术:正面指令、模式匹配、决策点约束重复、具体行为规范。
- Moyu Linter:自动检测 AI 输出中的过度工程信号
- GitHub Action:PR 级别的过度工程检查
- 更多语言本地化
- Discussions — 分享使用体验、提问
- 用了摸鱼后效果如何?提交你的 Before/After
欢迎贡献!你可以:
- 添加新的"反内卷"条目到反内卷表
- 添加新的企业文化调味包
- 改进现有的 prompt 措辞
- 添加新平台支持
- 分享你的 Before/After 使用体验
克制不是无能。克制是最高形式的工程能力。
知道什么不该做,比知道怎么做更难。
最高级的摸鱼——AI 在加班,你在准时下班。