当前位置:首页 > 技术 > 正文内容

为Claude Code Action开发自定义工具

访客 技术 2026年8月30日 2

Claude Code Action 是一款强大的 AI 辅助开发工具,支持自动化代码审查、问题分类和测试分析等功能。通过创建自定义工具,可以扩展其功能以满足特定项目需求。本文将介绍如何为 Claude Code Action 开发自定义工具,涵盖从工具定义到集成使用的完整流程。

核心概念

在开始开发之前,需要了解 Claude Code Action 的工具系统架构。每个工具本质上是一个函数,AI 可以调用它来执行特定任务并返回结果。工具的解析和注册机制位于 src/modes/agent/parse-tools.ts 文件中。

每个工具必须包含以下关键部分:

  • 唯一标识符:用于 AI 调用工具。
  • 参数定义:明确工具所需的输入参数。
  • 执行逻辑:实现具体功能的代码。
  • 结果格式:规定工具返回数据的结构。

准备工作

确保你的开发环境已正确配置 Claude Code Action 项目:

git clone https://gitcode.com/GitHub_Trending/cl/claude-code-action
cd claude-code-action
npm install

主要涉及的文件包括:

  • src/modes/agent/parse-tools.ts:工具解析与注册。
  • src/create-prompt/index.ts:工具提示构建。
  • src/entrypoints/format-turns.ts:工具结果格式化。

定义工具接口

使用 TypeScript 接口定义工具结构。例如,在工具文件中定义如下接口:

interface ToolDefinition {
  identifier: string;
  description: string;
  params: {
    type: string;
    properties: Record;
    required: string[];
  };
}

该接口描述了工具的基本信息,包括标识符、描述以及参数规范,便于 AI 理解如何正确调用工具。

实现工具逻辑

创建一个工具类来实现具体功能。以下是一个示例工具,用于统计代码行数:

class LineCounter {
  async run(filePath: string): Promise<{ lines: number; errors: string[] }> {
    try {
      const content = await readFile(filePath, "utf-8");
      const lineCount = content.split("\n").length;
      return { lines: lineCount, errors: [] };
    } catch (error) {
      return { lines: 0, errors: [String(error)] };
    }
  }
}

将此类放置在 src/mcp/ 目录下,并遵循项目的文件组织方式。

注册工具

为了让 AI 能识别新工具,需在工具注册表中添加定义。修改 src/modes/agent/parse-tools.ts 文件:

export function addCustomTools() {
  const tools = [
    {
      identifier: "line_counter",
      description: "统计指定文件的代码行数",
      params: {
        type: "object",
        properties: {
          filePath: {
            type: "string",
            description: "要统计的文件路径",
          },
        },
        required: ["filePath"],
      },
    },
  ];

  return tools;
}

测试工具

test/modes/ 目录下创建测试文件:

import { test } from "bun:test";
import { LineCounter } from "../../src/mcp/line-counter";

test("LineCounter should return correct line count", async () => {
  const counter = new LineCounter();
  const result = await counter.run("src/sample.ts");

  expect(result.lines).toBeGreaterThan(0);
});

运行以下命令验证工具功能:

npm test

集成到工作流

修改 action.yml 文件,添加工具配置:

tools:
  - identifier: line_counter
    description: Count lines in specified files
    enabled: true

通过 src/create-prompt/index.ts 中的 generateToolList 函数,确保工具被包含在 AI 提示中。

最佳实践

开发自定义工具时,请遵循以下建议:

  1. 清晰的描述:提供详细的说明,帮助 AI 判断何时使用该工具。
  2. 严格的参数校验:在 src/validate-env.ts 中添加校验逻辑。
  3. 完善的错误处理:确保工具失败时能提供有用反馈。
  4. 性能优化:避免长时间运行的操作,考虑异步处理。
  5. 安全性检查:遵循 SECURITY.md 中的安全指南。

通过这些步骤,你可以创建功能强大的自定义工具,扩展 Claude Code Action 的能力,使其更符合项目需求。

标签: TypeScript

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。