今天我们推出 mods,一种改变 Claude Code 工作方式的小型 TypeScript 函数。一个 mod 可以重写提示词、添加新 UI、替换内置功能,或添加全新的功能。你可以自己写一个 mod,也可以让 Claude Code 帮你写一个。Mods 随插件一起分发,因此你可以像安装和分享任何插件一样安装和分享它们。它们可在 Claude Code CLI 和桌面应用中运行。

Mods 运行时对你机器的访问权限与 Claude Code 本身相同。它们没有沙箱隔离,你应该只从你信任的来源安装 mods,就像你在电脑上安装任何代码一样。

要了解 mods 能做什么,请阅读我们关于构建你的第一个 mod 的指南。

我们为什么构建 mods

开发者们一直希望对 Claude Code 的工作方式拥有更多控制权,而不必等我们发布某个功能。Hooks帮助用户获得了一部分这样的控制权,但 hooks 无法重写事件、绘制新 UI 或替换功能。Mods 可以。

我们希望 Claude Code 感觉像是你自己的,这样你就能把它塑造成符合你工作方式的样子。我们在 GitHub 上分享了 mods 的设计,在发布前征求开发者的反馈。感谢所有参与讨论的人。

Mods 如何工作

每当 Claude Code 做某件事时,它都会发出一个事件。例子包括调用工具、请求权限,以及绘制屏幕的一部分。一个 mod 就是一个挂接到这些事件之一的函数。一个 mod 可以在事件之前运行、在事件之后运行,或代替事件运行。它还可以包裹事件,在事件前后都运行代码。借助一个函数,一个 mod 可以:

  • 在提示词到达模型之前重写它。
  • 阻止、重写或重试工具调用。
  • 批准或拒绝权限请求。
  • 在 Claude 读取工具输出之前从中抹除机密信息。

一个 mod 还可以改变你所看到的内容。它可以编辑或替换 Claude Code 绘制的界面的一部分,比如工具结果或来自 Claude 的提问。它可以添加按钮和输入框,其他 mods 可以在你按下它们时做出响应。目前,一个 mod 可以针对终端、桌面应用,或两者。

当多个 mods 挂接同一个事件时,它们按加载顺序运行。最先加载的 mod 最先看到事件,最后看到结果。这让你可以叠加来自不同作者的 mods。

你还可以用 Claude Code 来给 Claude Code 做 mod。让 Claude 创建一个 mod,它就能写好 TypeScript、安装它,并在你的会话中热重载它。

用你自己的功能替换内置功能

Claude Code 的一些内置功能现在以 mod 的形式发布。例如,内置的/diff功能现在是一个 mod,所以你可以关掉它(在/plugin中)或用你自己的版本替换它。我们计划逐步把更多内置功能迁移为 mod,这样你就能把 Claude Code 精简到一个小核心,只加回你想要的部分。

面向团队和企业的 mod

mod 打包在插件里发布,因此你现有的插件管控依然适用。管理员可以允许或阻止插件市场。在 Team 和 Enterprise 套餐中,由所有者(owner)在管理控制台设置。在 Claude API 和第三方 API 套餐中,管理员将托管设置推送到用户的机器上。

在 Team 和 Enterprise 套餐中,以及任何带有托管设置的机器上,一个名为sec-default(“security default”)的内置 mod 会最先加载。它会阻止用户安装的 mod 做有风险的事,比如覆盖你的权限拒绝规则。你可以查看源代码来了解它限制了哪些内容。管理员可以改为先加载自己的 mod。如果你这样做,请把sec-default加入你的列表,以保留它的限制。

团队还可以用 mod 构建自己的管控和功能。例如:

  • CI/CD 状态:一个 mod 可以在对话旁边的窗格中显示你的流水线状态,并在构建通过或失败时更新它。
  • 生产环境防护:一个 mod 可以要求在任何命令触及生产配置之前进行确认。
  • 审计日志:一个最先加载的 mod 可以记录其他每个 mod 发出的每一次调用。

快速上手

mod 现已在 Claude Code CLI 和桌面应用中可用。从Claude 目录安装包含 mod 的插件,或在 CLI 中运行/plugin。要分享一个 mod,请把它打包进插件并提交到目录。

要构建你自己的 mod,请阅读我们的快速上手指南或查看文档。