Claude Code:代码简化插件

Claude的代码简化插件,可以用于自动重构 AI 生成代码以提高清晰度和可维护性。

Claude Code:代码简化插件

当你深入代码库时,你会发现它:一个构造函数在自己的构造过程中将对象作为参数传递给回调。代码能工作——JavaScript 闭包确保了这一点——但每个新开发者阅读它时都会花 10 分钟来弄明白为什么。

这样的代码会积累。不是 bug,而是困惑。技术上可行但使代码库更难理解、维护和扩展的模式。

如果你有一个代理能发现这些模式并清理它们呢?一个理解你项目约定并自动重构以提高清晰度的代理?

这就是代码简化插件所做的。它是 Claude Code 团队在 Anthropic 内部使用的相同工具,用于保持其自身代码库的清洁。 尝试过的开发者看到令牌使用量减少 20-30%,代码显著更清晰。

1、代码简化器解决的问题

Boris Cherny(Claude Code 的创建者)使用代码简化器

AI 生成的代码有一个冗长问题。不是 Claude 写出糟糕的代码——而是它倾向于过于彻底。这种彻底性会带来维护负担。

当你与 AI 编码助手合作一小时时,你可能会生成数十个函数、几个新模块和数百行代码。大多数都能工作。但会出现一些不必要地复杂化的模式:

  • 嵌套的三元运算符节省了一行但要花五分钟理解
  • 你以为需要但从未使用的工具类
  • 隐藏重要逻辑的过于紧凑的单行代码
  • 难以遵循的深度嵌套条件
  • 构造函数中混杂的回调配置

这些模式不会破坏任何东西。它们只是让代码更难处理。

代码简化插件通过作为专门的清理代理运行来解决这个问题。它不是通用 linter——而是一个理解你项目约定并重构以提高清晰度的 AI,同时保留确切的功能。

2、代码简化器的工作原理:核心原则

代码简化代理在 Opus 上运行,这是 Anthropic 最有能力的模型。它专注于当前会话中最近修改的代码,除非你明确要求它审查更广泛的范围。

其核心,该代理遵循五个关键原则,这些原则共同使其可靠且实用:

2.1 保留功能

这是首要规则。简化器从不改变代码所做的事情——只改变它如何做。如果你的函数返回特定值、处理某些边界情况或产生特定副作用,所有这些都完全保持不变。

这个约束使代码简化器安全运行,而不必担心破坏东西。该代理针对清晰度优化,而不是可能引入微妙 bug 的巧妙重构。

2.2 应用项目标准

该代理读取你的 CLAUDE.md 文件——你记录编码标准的配置文件——并遵循你建立的模式:

// code-simplifier 将应用你 CLAUDE.md 中的标准,如这些:
- 使用带有适当导入排序和 .js 扩展的 ES 模块
- 对于命名函数,优先使用 function 关键字而不是箭头函数
- 为顶级函数使用显式返回类型注解
- 遵循带有显式 Props 类型的适当 React 组件模式
- 使用适当的错误处理模式(尽可能避免 try/catch)
- 保持一致的命名约定

这是关键——代理不是应用通用偏好。而是应用项目的约定。

2.3 增强清晰度

这里发生大部分魔力。该代理寻找机会:

  • 减少不必要的复杂性和嵌套 — 将深度嵌套的条件扁平化为顺序流程
  • 消除冗余代码和抽象 — 删除你不需要的那三个工具类
  • 改进变量和函数名称 — 更具描述性、直观的命名
  • 整合相关逻辑 — 将属于一起的东西分组
  • 删除不必要的注释 — 代码应尽可能自文档化
  • 避免嵌套三元运算符 — 优先使用 switch 语句或 if/else 链

至关重要的是,该代理选择清晰度而不是简洁性。目标不是最小行数代码——而是可读、可维护的代码。

2.4 保持平衡

该代理知道何时停止。它积极避免:

  • 减少清晰度的过度简化* 难以理解的过于巧妙的解决方案* 将太多关注点组合到单个函数或组件中* 删除改善代码组织的帮助性抽象* 优先考虑"更少行数"而不是可读性(例如嵌套三元、密集单行)* 使代码更难调试或扩展

这种平衡使代码简化器实用。它不会产生乍一看不错但痛苦处理的简洁、巧妙的代码。

2.5 聚焦范围

默认情况下,该代理只触碰当前会话中最近修改的代码。这防止它意外重构你未处理的代码库部分。

你可以明确要求它审查更广泛的范围——如"清理整个文件"或"简化服务文件夹中的所有代码"——但默认是保守的,专注于你最近的工作。

要理解代码简化器内部如何工作,你需要理解 Claude Code 的插件系统和代理架构。

3、插件结构

Claude Code 插件是扩展,为你的开发环境添加自定义斜杠命令、专门代理、钩子和 MCP 服务器。代码简化插件遵循标准结构:

code-simplifier/
├── .claude-plugin/
│   └── plugin.json          # 插件元数据(名称、描述、作者)
├── agents/                  # 专门代理
│   └── code-simplifier.md  # 带有系统指令的代理定义
└── README.md                # 文档

plugin.json 文件包含基本元数据:

{
  "name": "code-simplifier",
  "version": "1.0.0",
  "description": "代理,在保留功能的同时简化并优化代码以提高清晰度、一致性和可维护性",
  "author": {
    "name": "Anthropic",
    "email": "support@anthropic.com"
  }
}

4、代理定义

插件的真正智能存在于代理定义文件中——一个定义代理行为的 markdown 文档。代码简化代理定义有三个关键部分:

Frontmatter — 基本配置:

---
name: code-simplifier
description: 简化并优化代码以提高清晰度、一致性和可维护性,同时保留所有功能。除非另有指示,否则专注于最近修改的代码。
model: opus
---

这告诉 Claude Code:

  • 代理的名称(你用它调用的名称)
  • 它做什么(出现在 UI 中的描述)
  • 使用哪个模型(Opus 用于最大推理能力)

系统指令 — 指导代理行为的核心指令。这里详细定义了五个原则——保留功能、应用项目标准、增强清晰度、保持平衡、聚焦范围。

系统指令还定义代理的优化过程:

你的优化过程:
1. 识别最近修改的代码部分
2. 分析提高优雅度和一致性的机会
3. 应用项目特定的最佳实践和编码标准
4. 确保所有功能保持不变
5. 验证优化后的代码更简单且更可维护
6. 仅记录影响理解的重要更改

自主操作 — 该代理设计为主动操作。它监控代码写入或修改,并立即提供简化,而不需要你每次都明确请求。

这使得代码简化插件变得超级容易变得更框架特定。

5、代理循环

当你调用代码简化代理时,它在类似于其他 Claude 代理的循环中操作:

  1. 收集上下文 — 读取最近修改的文件,分析项目结构,并理解当前状态
  2. 识别机会 — 找到可以在保留功能的同时简化的模式
  3. 应用重构 — 遵循五个核心原则进行更改
  4. 验证工作 — 确保功能保留且代码更清洁
  5. 重复 — 继续直到所有最近修改的代码已被审查

这个循环允许代理高效处理大型代码库,同时维护质量。

6、代码简化器实战

让我们看看代码简化代理实际做什么的具体示例。这些不是假设的——它们是 Claude Code 团队实际遇到并简化的模式。

示例 1:解耦构造与配置

这是启发代码简化插件的示例——AgentSessionManager 中的混乱代码:

// BEFORE: 混乱 - agentSessionManager 在其自身构造过程中作为参数传递
const agentSessionManager = new AgentSessionManager(
    issueTracker,
    (childSessionId) => {
        // Handle child session creation
        logger.info(`Created child session: ${childSessionId}`);
        return childSessionId;
    },
    async (parentSessionId, childSessionId) => {
        // This works due to JavaScript closure semantics, but it's confusing
        // We're passing agentSessionManager to a callback during its own construction
        await this.handleResumeParentSession(parentSessionId, childSessionId, agentSessionManager);
    },
    this.procedureAnalyzer,
    this.sharedApplicationServer,
);

运行代码简化代理后

// AFTER: 清晰 - 构造与回调配置分离
const agentSessionManager = new AgentSessionManager(
    issueTracker,
    this.procedureAnalyzer,
    this.sharedApplicationServer,
);

agentSessionManager.setParentSessionCallbacks(
    (childSessionId) => {
        logger.info(`Created child session: ${childSessionId}`);
        return childSessionId;
    },
    async (parentSessionId, childSessionId) => {
        await this.handleResumeParentSession(parentSessionId, childSessionId, agentSessionManager);
    },
);

发生了什么变化?

  1. 识别混乱模式 — 构造函数通过回调接收其自身实例作为参数
  2. 引入 setter 方法setParentSessionCallbacks() 以解耦构造与配置
  3. 删除不必要的注释 — 关于 JavaScript 闭包的 8 行解释性注释不再需要
  4. 使代码线性读取 — 创建 → 配置 → 使用

结果?相同功能,显著更好的可读性。重构触及多个文件,所有 257 个测试继续通过。

示例 2:避免嵌套三元

AI 生成的代码经常过度使用嵌套三元运算符来保持紧凑。代码简化代理偏好清晰度:

// BEFORE: 紧凑但难以跟随
const getStatusColor = (status) => status === 'active' ? 'green' : status === 'pending' ? status === 'overdue' ? 'red' : 'orange' : 'yellow' : 'grey';

代码简化后:

// AFTER: 显式且易于理解
function getStatusColor(status) {
    switch (status) {
        case 'active':
            return 'green';
        case 'pending':
            return 'yellow';
        case 'overdue':
            return 'red';
        default:
            return 'grey';
    }
}

代理选择 switch 语句而不是嵌套三元的原因:

  • 每个 case 都显式且可读
  • 添加新状态很简单
  • 默认 case 清晰可见
  • 没有解析嵌套条件的认知开销

示例 3:扁平化嵌套条件

深度嵌套条件会带来心理负担。代码简化器将其扁平化:

// BEFORE: 深度嵌套
function validateUser(user) {
    if (user) {
        if (user.email) {
            if (user.email.includes('@')) {
                if (user.email.includes('.')) {
                    return true;
                }
            }
        }
    }
    return false;
}

代码简化后:

// AFTER: 扁平化和显式
function validateUser(user) {
    if (!user) {
        return false;
    }

   if (!user.email) {
        return false;
    }
    if (!user.email.includes('@')) {
        return false;
    }
    if (!user.email.includes('.')) {
        return false;
    }
    return true;
}

倒转方法(失败情况的早期返回)更容易推理,因为:

  • 每个条件都可以独立检查
  • 你从上到下阅读而不是跟踪嵌套深度
  • 添加新验证规则很简单

7、安装和工作流程

让代码简化器运行大约需要 30 秒。

你有两个选项:

选项 1:从任何终端直接安装

claude plugin install code-simplifier

选项 2:从 Claude Code 会话中

首先,确保你有官方 Anthropic 插件市场:

/plugin marketplace update claude-plugins-official

然后安装插件:

/plugin install code-simplifier

重要: 安装后,重启你的 Claude Code 会话以激活插件。该代理不会实时加载,所以你需要在退出并开始新会话后,它才会出现在你的可用子代理中。

8、何时使用代码简化器

8.1 长时间编码会话后

我们有过太多这样的,对吧?

这是主要用例。在 Claude 实现功能一小时后,让它运行代码简化器:

"Run code-simplifier agent on the changes we made today"

Claude 将分析所有最近修改的文件并一次性清理它们。

8.2 创建拉取请求前

在打开 PR 前运行简化器以确保你的代码符合质量标准:

"Use code-simplifier to review and clean up these changes before we create the PR"

这会在进入代码审查前捕获过度工程。

8.3 复杂重构后

当你在多个文件间进行广泛更改时,简化器可以确保一致性:

"Use code-simplifier to normalise the patterns in the files we just refactored"

8.4 清理 AI 生成代码

如果你大量使用 Claude Code 并怀疑积累了复杂性,简化器可以审计并清理:

"Analyse the recent changes with code-simplifier and suggest improvements"

8.5 最佳实践

  1. 定期运行它 — 不要等到代码变得一团糟。每次重大编码会话后运行简化器。
  2. 审查更改 — 简化器很好,但并非万无一失。提交前始终审查它更改的内容。
  3. 设置你的 CLAUDE.md — 你在 CLAUDE.md 中给出的指导越多,简化器就能更好地匹配你的模式。
  4. 与版本控制一起使用 — 始终在 git 跟踪目录中运行简化器,这样你就可以审查并在需要时恢复更改。
  5. 与其他工作流程结合 — 代码简化器与以下配合良好:计划模式(先计划,实现,然后简化)、代码审查代理、 测试运行器(简化后运行测试以验证没有破坏)

9、令牌效率益处

一个被低估的益处:简化的代码在未来会话中使用更少令牌。

当 Claude 读取你的代码库以理解上下文时,冗长代码更快填满上下文窗口。通过保持代码简单:

  • Claude 可以在相同令牌预算中读取更多代码库
  • 后续会话更便宜
  • 上下文窗口延伸更远

定期使用代码简化器的开发者报告令牌消耗减少 20-30%。这直接转化为较低的 API 成本。

// 冗长 AI 生成代码:~250 令牌
function processUserData(userData, options = {}) {
    const result = {
        processed: false,
        data: null,
        errors: []
    };
    if (userData && userData.id && userData.email) {
        try {
            const processedData = {
                id: userData.id,
                email: userData.email.toLowerCase().trim(),
                timestamp: Date.now(),
                ...options
            };
            result.data = processedData;
            result.processed = true;
        } catch (error) {
            result.errors.push(error.message);
        }
    }
    return result;
}
// 代码简化后:~180 令牌(28% 减少)
function processUserData(userData, options = {}) {
    if (!userData?.id || !userData?.email) {
        return { processed: false, data: null, errors: [] };
    }
    return {
        processed: true,
        data: {
            id: userData.id,
            email: userData.email.toLowerCase().trim(),
            timestamp: Date.now(),
            ...options
        },
        errors: []
    };
}

简化版本删除了不必要的中间状态(result 对象)、冗余条件检查和冗长结构——同时做完全相同的事情。

10、代码简化器与手动审查的比较

你可能会想:"我不能自己审查代码吗?"

你可以。但以下是代码简化器做的人类经常不做的事情:

  1. 一致性 — 它到处应用相同标准,每次都一样
  2. 速度 — 它在几秒内分析数千行
  3. 无疲劳 — 审查 20 个文件后不会疲劳
  4. 客观性 — 对巧妙解决方案没有情感依附
  5. 模式知识 — 它立即知道数十种简化模式

字面意思是无疲劳。

代码简化器不是取代人工代码审查——而是增强它。先运行简化器,然后人类审查简化的代码。

11、开始使用

准备好在自己的代码库上尝试代码简化器了吗?

# 安装插件
claude plugin install code-simplifier

# 重启 Claude Code,然后调用代理
> "Use the code-simplifier agent to clean up the changes we just made"

该插件是开源的。你可以在这里查看完整代理定义。


原文链接:Inside Claude's Code-Simplifier Plugin: How Anthropic Keeps Its Own Codebase Clean

汇智网翻译整理,转载请标明出处