@KhuyenTran16: 使AI生成的代码更易于审查和维护。AI生成的代码通常在第一次运行时就能工作,但其结构……

X AI KOLs Timeline 工具

摘要

一个为AI代理提供的Clean Code Skills仓库,强制执行Robert C. Martin的原则,以改善AI生成代码的可维护性并减少技术债务。它为Python和TypeScript提供了模块化技能,指导代理编写更整洁、更结构化的代码。

使AI生成的代码更易于审查和维护 AI生成的代码通常在第一次运行时就能工作,但结构可能难以理解。 你可能会看到长函数、重复逻辑、模糊的命名或深层嵌套的条件语句,这些都会使未来的修改变慢。 Clean Code Skills基于Robert C. Martin针对Python和TypeScript的Clean Code规则,为你的AI代理提供聚焦的指导。 每个技能都针对一个维护问题: • boy-scout:改善所接触的代码 • clean-functions:保持函数短小且专注 • clean-names:选择能说明意图的名称 • clean-tests:围绕清晰的行为编写测试 • clean-general:减少重复、魔数、长分支路径等 当我要求我的代理编写Python代码、重构现有代码、审查更改或添加测试时,我会使用这个技能。 仓库链接:https://github.com/ertugrul-dmr/clean-code-skills… #AI #CleanCode #Python #SoftwareEngineering
查看原文
查看缓存全文

缓存时间: 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工作流中,恰好解决上述问题。

包含内容

语言技能描述规则
Pythonboy-scout编排者——永远让代码比你发现时更整洁协调所有技能
Pythonpython-clean-code主技能,包含全部66条规则C1-C5, E1-E2, F1-F4, G1-G36, N1-N7, P1-P3, T1-T9
Pythonclean-comments最少、准确的注释C1-C5
Pythonclean-functions短小、专注、清晰的函数F1-F4
Pythonclean-general核心原则(DRY、单一职责)G5, G16, G23, G25, G30, G36
Pythonclean-names描述性、无歧义的命名N1-N7
Pythonclean-tests快速、全面、关注边界的测试T1-T9
TypeScriptboy-scout编排者——永远让代码比你发现时更整洁协调所有技能
TypeScripttypescript-clean-code主技能,包含全部66条规则C1-C5, E1-E2, F1-F4, G1-G36, N1-N7, TS1-TS3, T1-T9
TypeScriptclean-comments最少、准确的注释C1-C5
TypeScriptclean-functions短小、专注、清晰的函数F1-F4
TypeScriptclean-general核心原则(DRY、单一职责)G5, G16, G23, G25, G30, G36
TypeScriptclean-names描述性、无歧义的命名N1-N7
TypeScriptclean-tests快速、全面、关注边界的测试T1-T9

使用主技能进行全面覆盖,或使用单个技能进行针对性实施。

选择你的语言

选择一个语言分支,只复制该分支的技能:

每个技能目录只能安装一个语言分支。Python 和 TypeScript 分支重复使用相同的技能名称(boy-scoutclean-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-scoutclean-commentsclean-functionsclean-generalclean-namesclean-testspython-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不要覆盖安全机制
G5DRY——无重复
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  

技能如何工作

技能使用渐进式披露

  1. 发现:代理只看到技能名称和描述
  2. 激活:当你的请求匹配某个描述时,加载完整的指令
  3. 执行:仅在需要时加载脚本和模板

这能让代理保持快速——当你在编写 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 翻译。确保翻译在保留质量的同时,不仅仅是速度。

相似文章

AI生成代码的质量

Reddit r/AI_Agents

这篇文章讨论了一个担忧:随着AI工具生成越来越多的代码,未来基于这些合成代码训练的模型可能会质量下降、原创性降低,并询问像OpenAI、Anthropic和GitHub这样的主要AI实验室计划如何应对这个问题。