mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-02 15:23:19 +08:00
- Add docs directory with VitePress configuration - Add GitHub Actions workflow for docs build and deploy - Support bilingual (English/Chinese) documentation - Include search, custom theme, and responsive design
264 lines
4.6 KiB
Markdown
264 lines
4.6 KiB
Markdown
# 自定义代理
|
|
|
|
创建和配置自定义 CCW 代理指南。
|
|
|
|
## 代理结构
|
|
|
|
```
|
|
~/.claude/agents/my-agent/
|
|
├── AGENT.md # 代理定义
|
|
├── index.ts # 代理逻辑
|
|
├── tools/ # 代理专用工具
|
|
└── examples/ # 使用示例
|
|
```
|
|
|
|
## 创建代理
|
|
|
|
### 1. 定义代理
|
|
|
|
创建 `AGENT.md`:
|
|
|
|
```markdown
|
|
---
|
|
name: my-agent
|
|
type: development
|
|
version: 1.0.0
|
|
capabilities: [react, typescript, testing]
|
|
---
|
|
|
|
# 我的自定义代理
|
|
|
|
专门用于 React 组件开发的 TypeScript 代理。
|
|
|
|
## 功能
|
|
|
|
- 使用 hooks 生成 React 组件
|
|
- TypeScript 类型定义
|
|
- Vitest 测试设置
|
|
- Tailwind CSS 样式
|
|
|
|
## 使用
|
|
|
|
\`\`\`javascript
|
|
Task({
|
|
subagent_type: "my-agent",
|
|
prompt: "创建用户配置文件组件"
|
|
})
|
|
\`\`\`
|
|
```
|
|
|
|
### 2. 实现代理逻辑
|
|
|
|
创建 `index.ts`:
|
|
|
|
```typescript
|
|
import type { AgentContext, AgentResult } from '@ccw/types'
|
|
|
|
export async function execute(
|
|
prompt: string,
|
|
context: AgentContext
|
|
): Promise<AgentResult> {
|
|
// 分析请求
|
|
const intent = analyzeIntent(prompt)
|
|
|
|
// 根据意图执行
|
|
switch (intent.type) {
|
|
case 'generate-component':
|
|
return await generateComponent(intent.options)
|
|
case 'add-tests':
|
|
return await addTests(intent.options)
|
|
default:
|
|
return await handleGeneral(prompt)
|
|
}
|
|
}
|
|
|
|
function analyzeIntent(prompt: string) {
|
|
// 从提示词解析用户意图
|
|
// 返回结构化意图对象
|
|
}
|
|
```
|
|
|
|
## 代理功能
|
|
|
|
### 代码生成
|
|
|
|
```typescript
|
|
async function generateComponent(options: ComponentOptions) {
|
|
return {
|
|
files: [
|
|
{
|
|
path: 'src/components/UserProfile.tsx',
|
|
content: generateReactComponent(options)
|
|
},
|
|
{
|
|
path: 'src/components/UserProfile.test.tsx',
|
|
content: generateTests(options)
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### 分析
|
|
|
|
```typescript
|
|
async function analyzeCodebase(context: AgentContext) {
|
|
const files = await context.filesystem.read('src/**/*.ts')
|
|
const patterns = identifyPatterns(files)
|
|
return {
|
|
patterns,
|
|
recommendations: generateRecommendations(patterns)
|
|
}
|
|
}
|
|
```
|
|
|
|
### 测试
|
|
|
|
```typescript
|
|
async function generateTests(options: TestOptions) {
|
|
return {
|
|
framework: 'vitest',
|
|
files: [
|
|
{
|
|
path: `${options.file}.test.ts`,
|
|
content: generateTestCode(options)
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## 代理工具
|
|
|
|
代理可以定义自定义工具:
|
|
|
|
```typescript
|
|
export const tools = {
|
|
'my-tool': {
|
|
description: '我的自定义工具',
|
|
parameters: {
|
|
type: 'object',
|
|
properties: {
|
|
input: { type: 'string' }
|
|
}
|
|
},
|
|
execute: async (params) => {
|
|
// 工具实现
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## 代理通信
|
|
|
|
代理通过消息总线通信:
|
|
|
|
```typescript
|
|
// 向另一个代理发送消息
|
|
await context.messaging.send({
|
|
to: 'tester',
|
|
type: 'task-complete',
|
|
data: { files: generatedFiles }
|
|
})
|
|
|
|
// 接收消息
|
|
context.messaging.on('task-complete', async (message) => {
|
|
if (message.from === 'executor') {
|
|
await startTesting(message.data.files)
|
|
}
|
|
})
|
|
```
|
|
|
|
## 代理配置
|
|
|
|
在 `~/.claude/agents/config.json` 中配置代理:
|
|
|
|
```json
|
|
{
|
|
"my-agent": {
|
|
"enabled": true,
|
|
"priority": 10,
|
|
"capabilities": {
|
|
"frameworks": ["react", "vue"],
|
|
"languages": ["typescript", "javascript"],
|
|
"tools": ["vitest", "playwright"]
|
|
},
|
|
"limits": {
|
|
"maxFiles": 100,
|
|
"maxSize": "10MB"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## 代理最佳实践
|
|
|
|
### 1. 明确目的
|
|
|
|
定义特定的、集中的功能:
|
|
|
|
```markdown
|
|
# 好: 专注
|
|
name: react-component-agent
|
|
purpose: 使用 TypeScript 生成 React 组件
|
|
|
|
# 坏: 太宽泛
|
|
name: fullstack-agent
|
|
purpose: 处理一切
|
|
```
|
|
|
|
### 2. 工具选择
|
|
|
|
为任务使用适当的工具:
|
|
|
|
```typescript
|
|
// 文件操作
|
|
context.filesystem.read(path)
|
|
context.filesystem.write(path, content)
|
|
|
|
// 代码分析
|
|
context.codebase.search(query)
|
|
context.codebase.analyze(pattern)
|
|
|
|
// 通信
|
|
context.messaging.send(to, type, data)
|
|
```
|
|
|
|
### 3. 错误处理
|
|
|
|
```typescript
|
|
try {
|
|
const result = await executeTask(prompt)
|
|
return { success: true, result }
|
|
} catch (error) {
|
|
return {
|
|
success: false,
|
|
error: error.message,
|
|
recovery: suggestRecovery(error)
|
|
}
|
|
}
|
|
```
|
|
|
|
## 测试代理
|
|
|
|
```typescript
|
|
import { describe, it, expect } from 'vitest'
|
|
import { execute } from '../index'
|
|
|
|
describe('my-agent', () => {
|
|
it('应该生成组件', async () => {
|
|
const result = await execute(
|
|
'创建 UserCard 组件',
|
|
mockContext
|
|
)
|
|
expect(result.success).toBe(true)
|
|
expect(result.files).toHaveLength(2) // 组件 + 测试
|
|
})
|
|
})
|
|
```
|
|
|
|
::: info 另请参阅
|
|
- [内置代理](./builtin.md) - 预配置代理
|
|
- [代理概述](./index.md) - 代理系统介绍
|
|
:::
|