Claude Code 推出 mods:用 TypeScript 函数自定义行为
Customize Claude Code with mods
Anthropic 为 Claude Code 推出 mods,即小型 TypeScript 函数,可重写提示词、拦截或重试工具调用、审批权限请求、添加新 UI 或替换内置功能。
官方介绍了 mods 的事件机制与安全边界,开发者可据此判断如何定制或替换 Claude Code 的内置功能。
今天我们推出 mods,这是一些小型的 TypeScript 函数,可以改变 Claude Code 的工作方式。一个 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。让 Claude 创建一个 mod,它可以编写 TypeScript、安装它,并在你的会话中热重载它。
用你自己的功能替换内置功能
Claude Code 的一些内置功能现在以 mods 形式提供。例如,内置的 /diff 功能现在是一个 mod,因此你可以关闭它(在 /plugin 中),或用你自己的版本替换它。我们计划随着时间推移将更多内置功能迁移为 mods,这样你就可以把 Claude Code 精简到一个小核心,只添加你想要的内容。
面向团队和企业的 Mods
Mods 随插件一起分发,因此你现有的插件控制措施仍然适用。管理员可以允许或阻止插件市场。在 Team 和 Enterprise 计划中,所有者可在管理控制台中设置此项。在 Claude API 和第三方 API 计划中,管理员会将托管设置推送到用户的机器上。
在 Team 和 Enterprise 计划中,以及在任何带有托管设置的机器上,一个名为 sec-default(“security default”)的内置 mod 会首先加载。它会阻止用户安装的 mods 执行有风险的操作,例如覆盖你的权限拒绝规则。你可以查看源代码,了解它限制了什么。管理员可以改为先加载自己的 mods。如果你这样做,请将 sec-default 添加到你的列表中,以保留其限制。
团队还可以使用 mods 构建自己的控制措施和功能。例如:
- CI/CD 状态:mod 可以在对话旁边的窗格中显示你的流水线状态,并在构建通过或失败时更新它。
- 生产环境防护措施:mod 可以要求在任何命令触及生产配置之前进行确认。
- 审计日志:一个最先加载的 mod 可以记录其他所有 mod 发起的每一次调用。
快速上手
mod 现已在 Claude Code CLI 和桌面应用中可用。从 Claude 目录安装包含 mod 的插件,或在 CLI 中运行 /plugin。要分享 mod,请将其打包到插件中并提交到目录。
来源:Claude:Blog(网页) · claude.com