@KhuyenTran16: 使AI生成的代码更易于审查和维护。AI生成的代码通常在第一次运行时就能工作,但其结构……
摘要
一个为AI代理提供的Clean Code Skills仓库,强制执行Robert C. Martin的原则,以改善AI生成代码的可维护性并减少技术债务。它为Python和TypeScript提供了模块化技能,指导代理编写更整洁、更结构化的代码。
查看缓存全文
缓存时间: 2026/06/03 15:52
让AI生成的代码更易于审查和维护 AI生成的代码往往第一次就能运行,但结构可能难以理解。你可能会看到冗长的函数、重复的逻辑、模糊的名称或深层嵌套的条件语句,这些都会拖慢未来的修改速度。Clean Code Skills 为你的AI代理提供基于 Robert C. Martin 的《Clean Code》原则(适用于 Python 和 TypeScript)的集中指导。每项技能针对一个维护问题:
• boy-scout:改善它所触碰的代码
• clean-functions:保持函数短小且专注
• clean-names:选择能解释意图的名称
• clean-tests:围绕明确的行为编写测试
• clean-general:减少重复、魔法数字、长分支路径等
我在要求代理编写Python代码、重构现有代码、审查更改或添加测试时使用此项技能。
仓库链接:https://github.com/ertugrul-dmr/clean-code-skills
… #AI #CleanCode #Python #软件工程
ertugrul-dmr/clean-code-skills
来源:https://github.com/ertugrul-dmr/clean-code-skills
AI代理的Clean Code技能
Agent Skills (https://agentskills.io)
许可证:MIT
教会你的AI写出不烂的代码。
本仓库包含 Agent Skills (https://agentskills.io),用于强制实施 Robert C. Martin 的 Clean Code 原则。它们与 Google Antigravity、Anthropic Claude Code 以及任何支持 Agent Skills 标准的代理兼容。
为什么?
AI 生成代码很快,但研究表明它也会快速产生技术债务:
- GitClear:采用AI后代码重复率增加4倍
- Carnegie Mellon:采用Cursor后静态分析警告增加30%,代码复杂度增加41%
- Google DORA:AI采用与软件交付稳定性呈负相关
这些技能将经过实战检验的解决方案直接编码到AI工作流中,恰好解决上述问题。
包含内容
| 语言 | 技能 | 描述 | 规则 |
|---|---|---|---|
| Python | boy-scout | 编排者——永远让代码比你发现时更整洁 | 协调所有技能 |
| Python | python-clean-code | 主技能,包含全部66条规则 | C1-C5, E1-E2, F1-F4, G1-G36, N1-N7, P1-P3, T1-T9 |
| Python | clean-comments | 最少、准确的注释 | C1-C5 |
| Python | clean-functions | 短小、专注、清晰的函数 | F1-F4 |
| Python | clean-general | 核心原则(DRY、单一职责) | G5, G16, G23, G25, G30, G36 |
| Python | clean-names | 描述性、无歧义的命名 | N1-N7 |
| Python | clean-tests | 快速、全面、关注边界的测试 | T1-T9 |
| TypeScript | boy-scout | 编排者——永远让代码比你发现时更整洁 | 协调所有技能 |
| TypeScript | typescript-clean-code | 主技能,包含全部66条规则 | C1-C5, E1-E2, F1-F4, G1-G36, N1-N7, TS1-TS3, T1-T9 |
| TypeScript | clean-comments | 最少、准确的注释 | C1-C5 |
| TypeScript | clean-functions | 短小、专注、清晰的函数 | F1-F4 |
| TypeScript | clean-general | 核心原则(DRY、单一职责) | G5, G16, G23, G25, G30, G36 |
| TypeScript | clean-names | 描述性、无歧义的命名 | N1-N7 |
| TypeScript | clean-tests | 快速、全面、关注边界的测试 | T1-T9 |
使用主技能进行全面覆盖,或使用单个技能进行针对性实施。
选择你的语言
选择一个语言分支,只复制该分支的技能:
每个技能目录只能安装一个语言分支。Python 和 TypeScript 分支重复使用相同的技能名称(
boy-scout、clean-functions等)。同时安装两者会导致代理加载冲突指令,行为不一致。
# Python 分支
cp -r skills/python/* /
# TypeScript 分支
cp -r skills/typescript/* /
童子军规则
boy-scout 技能体现了 Clean Code 的核心理念:
“总是让模块比你签出时更整洁地签入。”
你不必让代码完美——只需每次触碰时 稍微好一点点。
boy-scout 技能编排其他技能,确保每次代码交互都留下一连串的小改进。
安装
每个目标目录(.agent/skills、.claude/skills、~/.claude/skills 等)只安装一个语言分支。
Google Antigravity
项目专属(仅应用于一个项目):
# 从项目根目录执行
mkdir -p .agent/skills
# Python 分支
cp -r skills/python/* .agent/skills/
# TypeScript 分支
cp -r skills/typescript/* .agent/skills/
全局(应用于所有项目):
mkdir -p ~/.gemini/antigravity/skills
# Python 分支
cp -r skills/python/* ~/.gemini/antigravity/skills/
# TypeScript 分支
cp -r skills/typescript/* ~/.gemini/antigravity/skills/
快速安装(全局,单条命令)——选择一个分支:
# Python 分支
git clone https://github.com/ertugrul-dmr/clean-code-skills.git /tmp/clean-code-skills && \
mkdir -p ~/.gemini/antigravity/skills && \
cp -r /tmp/clean-code-skills/skills/python/* ~/.gemini/antigravity/skills/ && \
rm -rf /tmp/clean-code-skills
# TypeScript 分支
git clone https://github.com/ertugrul-dmr/clean-code-skills.git /tmp/clean-code-skills && \
mkdir -p ~/.gemini/antigravity/skills && \
cp -r /tmp/clean-code-skills/skills/typescript/* ~/.gemini/antigravity/skills/ && \
rm -rf /tmp/clean-code-skills
Anthropic Claude Code
项目专属:
# 从项目根目录执行
mkdir -p .claude/skills
# Python 分支
cp -r skills/python/* .claude/skills/
# TypeScript 分支
cp -r skills/typescript/* .claude/skills/
全局:
mkdir -p ~/.claude/skills
# Python 分支
cp -r skills/python/* ~/.claude/skills/
# TypeScript 分支
cp -r skills/typescript/* ~/.claude/skills/
快速安装(全局,单条命令)——选择一个分支:
# Python 分支
git clone https://github.com/ertugrul-dmr/clean-code-skills.git /tmp/clean-code-skills && \
mkdir -p ~/.claude/skills && \
cp -r /tmp/clean-code-skills/skills/python/* ~/.claude/skills/ && \
rm -rf /tmp/clean-code-skills
# TypeScript 分支
git clone https://github.com/ertugrul-dmr/clean-code-skills.git /tmp/clean-code-skills && \
mkdir -p ~/.claude/skills && \
cp -r /tmp/clean-code-skills/skills/typescript/* ~/.claude/skills/ && \
rm -rf /tmp/clean-code-skills
验证
在运行中的 Claude Code 会话中,确认技能已加载:
- 询问
What skills are available?——你应该会看到boy-scout、clean-comments、clean-functions、clean-general、clean-names、clean-tests和python-clean-code在列表中。 - 或者直接调用其中一个:
/boy-scout应显式加载童子军技能。
技能会在现有的 ~/.claude/skills/ 目录内热重载——无需重启。如果你是在本次会话中首次创建该目录,请重启一次 Claude Code,使其开始监听该目录。
更新
重新运行快速安装命令以拉取最新版本。它将覆盖七个技能目录,其他技能不受影响。
如果你预计会经常更新,建议使用符号链接而非复制:
git clone https://github.com/ertugrul-dmr/clean-code-skills.git ~/src/clean-code-skills
# 选择一个分支——将 `python` 替换为 `typescript` 以使用 TS 分支。
cd ~/src/clean-code-skills/skills/python
for d in */; do ln -sfn "$PWD/${d%/}" "$HOME/.claude/skills/${d%/}"; done
然后在 ~/src/clean-code-skills 中执行 git pull 即可刷新所有技能。
卸载
rm -rf ~/.claude/skills/{boy-scout,clean-comments,clean-functions,clean-general,clean-names,clean-tests,python-clean-code}
其他兼容 Agent Skills 的工具
这些技能遵循 Agent Skills (https://agentskills.io) 开放标准。请查看你的工具文档以了解技能目录位置,然后将 skills/ 文件夹的内容复制到该目录。
使用方式
安装后,技能会根据上下文自动激活。请你的代理:
- 编写代码:“创建一个用户认证模块” → 技能强制实施整洁模式
- 审查代码:“审查此函数是否有问题” → 代理按规则编号识别违规
- 重构:“重构此代码使其更整洁” → 代理应用所有相关规则
示例
之前(违反10条规则):
from utils import * # P1
# Author: John, Modified: 2024-01-15 # C1
def proc(d, t, flag=False): # N1, F1, F3
# Process the data # C3
x = [] # N1
for i in d:
if flag: # F3
if i['type'] == 'A': # G23
x.append(i['val'] * 1.0825) # G25
elif i['type'] == 'B':
x.append(i['val'] * 1.05) # G25
else:
x.append(i['val'])
return x
之后(技能激活时):
import json
from dataclasses import dataclass
from typing import Literal
TAX_RATE_CA = 0.0825
TAX_RATE_NY = 0.05
TransactionType = Literal['CA', 'NY']
@dataclass
class Transaction:
value: float
type: TransactionType
def apply_tax(transaction: Transaction) -> float:
"""Apply state-specific tax to transaction value."""
tax_rates = {'CA': TAX_RATE_CA, 'NY': TAX_RATE_NY}
return transaction.value * (1 + tax_rates[transaction.type])
def process_transactions_with_tax(transactions: list[Transaction]) -> list[float]:
"""Calculate taxed values for all transactions."""
return [apply_tax(t) for t in transactions]
def process_transactions_without_tax(transactions: list[Transaction]) -> list[float]:
"""Extract raw values from all transactions."""
return [t.value for t in transactions]
之后(TypeScript 分支):
type TransactionType = "CA" | "NY"
const TAX_RATE_CA = 0.0825
const TAX_RATE_NY = 0.05
type Transaction = {
value: number
type: TransactionType
}
function applyTax(transaction: Transaction): number {
const taxRates: Record<TransactionType, number> = {
CA: TAX_RATE_CA,
NY: TAX_RATE_NY,
}
return transaction.value * (1 + taxRates[transaction.type])
}
function processTransactionsWithTax(transactions: Transaction[]): number[] {
return transactions.map(applyTax)
}
function processTransactionsWithoutTax(transactions: Transaction[]): number[] {
return transactions.map((transaction) => transaction.value)
}
规则参考
注释 (C1-C5)
| 规则 | 原则 |
|---|---|
| C1 | 注释中不包含元数据(使用Git) |
| C2 | 立即删除过时的注释 |
| C3 | 没有冗余注释 |
| C4 | 如果必须写注释,请写好 |
| C5 | 永远不要提交注释掉的代码 |
函数 (F1-F4)
| 规则 | 原则 |
|---|---|
| F1 | 最多3个参数 |
| F2 | 没有输出参数 |
| F3 | 没有标志参数 |
| F4 | 删除无效函数 |
通用 (G1-G36)
| 规则 | 原则 |
|---|---|
| G1 | 每个文件一种语言 |
| G2 | 实现预期行为 |
| G3 | 处理边界条件 |
| G4 | 不要覆盖安全机制 |
| G5 | DRY——无重复 |
| G6 | 一致的抽象层级 |
| G7 | 基类不知道子类 |
| G8 | 最小化公开接口 |
| G9 | 删除无效代码 |
| G10 | 变量靠近使用处 |
| G11 | 保持一致 |
| G12 | 移除杂乱 |
| G13 | 没有人为耦合 |
| G14 | 没有特性依恋 |
| G15 | 没有选择器参数 |
| G16 | 没有模糊的意图 |
| G17 | 代码放在期望的位置 |
| G18 | 优先使用实例方法 |
| G19 | 使用解释性变量 |
| G20 | 函数名说明其功能 |
| G21 | 理解算法 |
| G22 | 使依赖关系物理化 |
| G23 | 用多态代替 if/else |
| G24 | 遵循约定(语言风格指南 + linter/formatter) |
| G25 | 使用命名常量,而非魔法数字 |
| G26 | 保持精确 |
| G27 | 结构胜于约定 |
| G28 | 封装条件表达式 |
| G29 | 避免否定条件 |
| G30 | 函数只做一件事 |
| G31 | 使时间耦合显式化 |
| G32 | 不要随意 |
| G33 | 封装边界条件 |
| G34 | 每个函数一个抽象层级 |
| G35 | 配置放在高层级 |
| G36 | 迪米特法则(一个点) |
命名 (N1-N7)
| 规则 | 原则 |
|---|---|
| N1 | 选择描述性名称 |
| N2 | 名称符合适当抽象层级 |
| N3 | 使用标准命名法 |
| N4 | 无歧义的名称 |
| N5 | 名称长度与作用域匹配 |
| N6 | 不带编码(不要匈牙利命名法) |
| N7 | 名称描述副作用 |
Python 专属 (P1-P3)
| 规则 | 原则 |
|---|---|
| P1 | 无通配符导入 |
| P2 | 使用枚举,而非魔法常量 |
| P3 | 公开接口提供类型提示 |
TypeScript 专属 (TS1-TS3)
| 规则 | 原则 |
|---|---|
| TS1 | 保持导入显式且稳定 |
| TS2 | 使用枚举或字面联合类型,而非魔法常量 |
| TS3 | 为公开接口提供类型,并在边界处避免使用 any |
测试 (T1-T9)
| 规则 | 原则 |
|---|---|
| T1 | 测试所有可能出问题的地方 |
| T2 | 使用覆盖率工具 |
| T3 | 不要跳过琐碎测试 |
| T4 | 忽略的测试 = 歧义问题 |
| T5 | 测试边界条件 |
| T6 | 全面测试临近缺陷区域 |
| T7 | 从失败中寻找模式 |
| T8 | 调试时检查覆盖率 |
| T9 | 测试必须快速(<100ms) |
自定义
使用单项技能
不需要全部66条规则?只复制你需要的技能:
# 仅函数规则
cp -r skills/python/clean-functions ~/.gemini/antigravity/skills/
# 仅注释规则
cp -r skills/typescript/clean-comments ~/.claude/skills/
扩展技能
通过编辑 SKILL.md 文件或创建新的技能文件夹来添加你自己的规则:
skills/
├── python/
│ ├── python-clean-code/
│ │ └── SKILL.md
│ └── clean-comments/
│ └── SKILL.md
├── typescript/
│ ├── typescript-clean-code/
│ │ └── SKILL.md
│ └── clean-comments/
│ └── SKILL.md
└── my-team-standards/ # 你的自定义技能
└── SKILL.md
添加实施脚本(可选)
本仓库默认不附带 scripts/ 文件夹或 lint 脚本。如果你想要更严格的实施,请在技能文件夹内创建你自己的脚本。
skills/python/python-clean-code/
├── SKILL.md
└── scripts/
└── lint.py
技能如何工作
技能使用渐进式披露:
- 发现:代理只看到技能名称和描述
- 激活:当你的请求匹配某个描述时,加载完整的指令
- 执行:仅在需要时加载脚本和模板
这能让代理保持快速——当你在编写 React 组件时,它不会想着数据库迁移。
贡献
欢迎提交 PR!一些想法:
- 随着规则演变保持 Python/TypeScript 对等
- 额外的语言支持(Go、Rust)
- 集成测试
- 预提交钩子
- IDE 扩展
资源
- Clean Code (https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882) by Robert C. Martin
- Agent Skills Standard (https://agentskills.io)
- Antigravity Documentation (https://developers.google.com/antigravity)
- Claude Code Documentation (https://docs.anthropic.com/claude-code)
许可证
MIT 许可证。详见 LICENSE。
编程的未来是人类意图由 AI 翻译。确保翻译在保留质量的同时,不仅仅是速度。
相似文章
@liumengxinfly: 试了下 improve-codebase-architecture 这个 skill,作者说定期跑这个可以清理 AI Slop,我跑了一下清理的都是用 AI 前我手写的代码
This article shares a developer's experience using the improve-codebase-architecture skill from mattpocock/skills, which claims to clean up AI-generated slop but apparently also removes code written before using AI. The skill set is a collection of small, composable agent skills for real engineering.
AI生成代码的质量
这篇文章讨论了一个担忧:随着AI工具生成越来越多的代码,未来基于这些合成代码训练的模型可能会质量下降、原创性降低,并询问像OpenAI、Anthropic和GitHub这样的主要AI实验室计划如何应对这个问题。
@freeCodeCamp:AI生成的代码可能看起来正确,但仍然会在边界情况、安全性或可靠性上失败。在本指南中,@manishmshiva……
本指南介绍了如何使用测试、黄金数据集、可靠性检查和人工审查来评估AI生成代码的质量。它提供了一个实用工作流,帮助捕获回归问题,并更有信心地交付AI辅助代码。
@DivyanshT91162: https://x.com/DivyanshT91162/status/2057692858501804435
Andrej Karpathy 对AI编码代理行为的观察导致了病毒式传播的 CLAUDE.md 文件,该文件包含4条AI代理行为规则,并成为GitHub上增长最快的仓库之一,标志着从AI智能到AI纪律的转变。
@free_ai_guides: https://x.com/free_ai_guides/status/2071666929451094227
一份全面指南,解释如何为AI编码代理创建可复用的技能,涵盖被OpenAI Codex和GitHub Copilot等主流工具采用的SKILL.md标准,基准数据显示,精选技能可以将通过率提升16个百分点。