代码扩展框架

通过简单的YAML定义向Claude Code添加自定义工具,实现快速功能扩展的开发框架

  • by hexcreator
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 hexcreator/claude-code-extensions

使用说明

Claude Code Extensions

Add custom tools to Claude Code with simple YAML definitions

Quick Start • How It Works • Create Extensions • Built-in Tools • CLI Reference


✨ 演示

$ claude "use cowsay to say 'Hello from custom extensions!'"

 __________________________________
< Hello from custom extensions!    >
 ----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
$ claude "roll 4d6 for my D&D character"

Rolled 4d6: [6, 4, 5, 2] = 17
$ claude "what time is it right now?"

It's Monday, January 27, 2025 at 10:42:53 AM.

这些工具在Claude Code中不存在。它们在30秒内被添加。


🚀 快速开始

1.安装

git clone https://github.com/hexcreator/claude-code-extensions.git
cd claude-code-extensions
npm install
npm link  # Makes 'claude-ext' available globally

2.初始化并启动

claude-ext init    # Creates ~/.claude-extensions/
claude-ext start   # Starts the extension proxy

3.使用克劳德代码

ANTHROPIC_BASE_URL=http://localhost:8892 claude "roll a d20"

就是这样!Claude Code现在可以访问自定义工具。


🎯 为什么存在

Claude Code附带了大约30个内置工具,但如果你需要怎么办:

需求 解决方案
📢 松弛通知 claude-ext create SlackNotify
🎲 D&D骰子 内置 Dice 工具
⏰ 实际当前时间 内置 Timestamp 工具
🔌 自定义API调用 内置 HTTPRequest 工具
🐄 ASCII艺术奶牛 内置 Cowsay 工具

没有MCP服务器。没有复杂的协议。只是YAML+一个处理程序。


⚙️ 运作原理

┌─────────────────┐     ┌───────────────────────────────────────┐     ┌─────────────────┐
│                 │     │         Extension Proxy               │     │                 │
│   Claude Code   │────▶│  ┌─────────────────────────────────┐  │────▶│  Anthropic API  │
│                 │     │  │ 1. Inject custom tool schemas   │  │     │                 │
│  "roll a d20"   │     │  │ 2. Forward to Anthropic         │  │     │  claude-sonnet  │
│                 │◀────│  │ 3. Intercept tool calls         │  │◀────│                 │
│  "You rolled    │     │  │ 4. Execute local handlers       │  │     │  tool_use:Dice  │
│   17!"          │     │  │ 5. Inject results               │  │     │                 │
│                 │     │  └─────────────────────────────────┘  │     │                 │
└─────────────────┘     └───────────────────────────────────────┘     └─────────────────┘
                                        │
                                        ▼
                        ┌───────────────────────────────┐
                        │   ~/.claude-extensions/       │
                        │   ├── tools/                  │
                        │   │   ├── dice.yaml          │
                        │   │   └── cowsay.yaml        │
                        │   └── handlers/              │
                        │       ├── dice.js            │
                        │       └── cowsay.js          │
                        └───────────────────────────────┘

代理拦截Claude Code的API请求,并:

  1. 添加您的工具 到请求的工具列表
  2. 手表 工具调用的响应
  3. 执行 您的本地处理程序
  4. 注射 结果返回到对话中

克劳德认为这些工具是内置的。它们不是——它们在你的机器上运行。


📝 创建扩展

方法1:CLI(推荐)

claude-ext create MyTool

这种脚手架:

  • ~/.claude-extensions/tools/mytool.yaml -工具定义
  • ~/.claude-extensions/handlers/mytool.js -处理程序实现

方法2:手动

1.创建定义:

# ~/.claude-extensions/tools/slack.yaml
name: SlackPost
description: Post a message to a Slack channel
handler: slack.js

schema:
  properties:
    channel:
      type: string
      description: Channel name (e.g., #general)
    message:
      type: string
      description: Message to post
  required:
    - channel
    - message

2.创建处理程序:

// ~/.claude-extensions/handlers/slack.js
module.exports = async function(input, context) {
  const { channel, message } = input;
  const { env, fetch } = context;

  await fetch('https://slack.com/api/chat.postMessage', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${env.SLACK_TOKEN}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ channel, text: message })
  });

  return `Message posted to ${channel}`;
};

3.使用它:

claude "post 'Build complete!' to #dev-notifications"

🧰 内置工具

🐄 考赛

ASCII艺术牛信息。

schema:
  message: string   # What the cow says
  style: enum       # default, think, yell, dead, etc.

🎲 骰子

随机数生成。

schema:
  sides: number     # Die sides (default: 6)
  count: number     # Number of dice (default: 1)
  # OR
  min: number       # Range minimum
  max: number       # Range maximum
  # OR
  pick: array       # Items to randomly select from

⏰ 时间戳

当前日期和时间。

schema:
  format: enum      # iso, unix, human, date, time
  timezone: string  # e.g., "America/New_York"

🌐 HTTP请求

向任何URL发出HTTP请求。

schema:
  url: string       # Full URL (required)
  method: enum      # GET, POST, PUT, DELETE
  headers: object   # Key-value headers
  body: string      # Request body

💻 CLI参考

claude-ext <command> [options]
命令 描述
init 初始化 ~/.claude-extensions/ 目录
start 启动扩展代理
start --watch 从热重新加载开始
list 列出已安装的扩展
create <name> 创建新扩展
test <name> [json] 直接测试处理程序
help 显示帮助

例子

# Create and test a new tool
claude-ext create WeatherAPI
claude-ext test weatherapi '{"city": "San Francisco"}'

# Start proxy with auto-reload
claude-ext start --watch

# Use with Claude Code
ANTHROPIC_BASE_URL=http://localhost:8892 claude "your prompt"

🔧 处理器接口

JavaScript

module.exports = async function(input, context) {
  // input: Parameters from tool call
  // context: { env, log, fetch }

  const { myParam } = input;
  const { env, log, fetch } = context;

  log('Processing:', myParam);

  return 'Result string';
};

python

import os, json

input_data = json.loads(os.environ['EXTENSION_INPUT'])
print(f"Result: {input_data['myParam']}")

外壳

#!/bin/bash
# Input params are UPPERCASE env vars
echo "Received: $MYPARAM"

🔒 安全说明

  • 处理程序与 完全系统访问
  • 环境变量可以包含机密
  • 默认情况下没有沙盒
  • 仅安装您信任的扩展

🆚 与MCP的比较

MCP 本框架
设置 JSON-RPC服务器 YAML+处理程序
协议 必须执行 无
学习曲线 陡峭 最小
是时候使用第一个工具了 小时 分钟
最适合 生产 快速工具

使用MCP 用于强大的生产级集成。 使用这个 当你只想要一个工具,想继续前进时。


🤝 贡献

欢迎投稿!请随意:

  • 添加新的内置工具
  • 改进代理
  • 修复漏洞
  • 加强文件编制

📄 许可证

MIT© hexcreator


Built by reverse-engineering Claude Code's architecture
See the full research →