Files
Claude-Code-Workflow/.claude/skills/skill-generator/specs/skill-requirements.md
catlog22 be498acf59 feat: Add code analysis and LLM action templates with detailed configurations and examples
- Introduced a comprehensive code analysis action template for integrating code exploration and analysis capabilities.
- Added LLM action template for seamless integration of LLM calls with customizable prompts and tools.
- Implemented a benchmark search script to compare multiple search methods across various dimensions including speed, result quality, ranking stability, and coverage.
- Provided preset configurations for common analysis tasks and LLM actions, enhancing usability and flexibility.
2026-01-03 17:37:49 +08:00

13 KiB
Raw Blame History

Skill Requirements Specification

新 Skill 创建的需求收集规范。


必需信息

1. 基本信息

字段 类型 必需 说明
skill_name string Skill 标识符(小写-连字符)
display_name string 显示名称
description string 一句话描述
triggers string[] 触发关键词列表

2. 执行模式

字段 类型 必需 说明
execution_mode enum sequential | autonomous | hybrid
phase_count number 条件 Sequential 模式下的阶段数
action_count number 条件 Autonomous 模式下的动作数

2.5 上下文策略 (P0 增强)

字段 类型 必需 说明
context_strategy enum file | memory

策略对比:

策略 持久化 可调试 可恢复 适用场景
file 复杂多阶段任务(推荐)
memory 简单线性任务

2.6 LLM 集成配置 (P1 增强)

字段 类型 必需 说明
llm_integration object 可选 LLM 调用配置
llm_integration.enabled boolean - 是否启用 LLM 调用
llm_integration.default_tool enum - gemini | qwen | codex
llm_integration.fallback_chain string[] - 失败时的备选工具链

3. 工具依赖

字段 类型 必需 说明
allowed_tools string[] 允许使用的工具列表
mcp_tools string[] 可选 需要的 MCP 工具

4. 输出配置

字段 类型 必需 说明
output_format enum markdown | html | json
output_location string 输出目录模式

配置文件结构

interface SkillConfig {
  // 基本信息
  skill_name: string;           // "my-skill"
  display_name: string;         // "My Skill"
  description: string;          // "一句话描述"
  triggers: string[];           // ["keyword1", "keyword2"]
  
  // 执行模式
  execution_mode: 'sequential' | 'autonomous' | 'hybrid';

  // 上下文策略 (P0 增强)
  context_strategy: 'file' | 'memory';  // 默认: 'file'

  // LLM 集成配置 (P1 增强)
  llm_integration?: {
    enabled: boolean;                    // 是否启用 LLM 调用
    default_tool: 'gemini' | 'qwen' | 'codex';
    fallback_chain: string[];            // ['gemini', 'qwen', 'codex']
    mode: 'analysis' | 'write';          // 默认 mode
  };

  // Sequential 模式配置
  sequential_config?: {
    phases: Array<{
      id: string;               // "01-init"
      name: string;             // "Initialization"
      description: string;      // "收集初始配置"
      input: string[];          // 输入依赖
      output: string;           // 输出文件
    }>;
  };
  
  // Autonomous 模式配置
  autonomous_config?: {
    state_schema: {
      fields: Array<{
        name: string;
        type: string;
        description: string;
      }>;
    };
    actions: Array<{
      id: string;               // "action-init"
      name: string;             // "Initialize"
      description: string;      // "初始化状态"
      preconditions: string[];  // 前置条件
      effects: string[];        // 执行效果
    }>;
    termination_conditions: string[];
  };
  
  // 工具依赖
  allowed_tools: string[];      // ["Task", "Read", "Write", ...]
  mcp_tools?: string[];         // ["mcp__chrome__*"]
  
  // 输出配置
  output: {
    format: 'markdown' | 'html' | 'json';
    location: string;           // ".workflow/.scratchpad/{skill}-{timestamp}"
    filename_pattern: string;   // "{name}-output.{ext}"
  };
  
  // 质量配置
  quality?: {
    dimensions: string[];       // ["completeness", "consistency", ...]
    pass_threshold: number;     // 80
  };
  
  // 元数据
  created_at: string;
  version: string;
}

需求收集问题

Phase 1: 基本信息

AskUserQuestion({
  questions: [
    {
      question: "Skill 的名称是什么?(英文,小写-连字符格式)",
      header: "Skill 名称",
      multiSelect: false,
      options: [
        { label: "自动生成", description: "根据描述自动生成名称" },
        { label: "手动输入", description: "输入自定义名称" }
      ]
    },
    {
      question: "Skill 的主要用途是什么?",
      header: "用途类型",
      multiSelect: false,
      options: [
        { label: "文档生成", description: "生成 Markdown/HTML 文档" },
        { label: "代码分析", description: "分析代码结构、质量、安全" },
        { label: "交互管理", description: "管理 Issue、任务、工作流" },
        { label: "数据处理", description: "ETL、转换、报告生成" },
        { label: "自定义", description: "其他用途" }
      ]
    }
  ]
});

Phase 2: 执行模式

AskUserQuestion({
  questions: [
    {
      question: "选择执行模式:",
      header: "执行模式",
      multiSelect: false,
      options: [
        { 
          label: "Sequential (顺序)", 
          description: "阶段按固定顺序执行,适合流水线任务(推荐)" 
        },
        { 
          label: "Autonomous (自主)", 
          description: "动态选择执行路径,适合交互式任务" 
        },
        { 
          label: "Hybrid (混合)", 
          description: "初始化和收尾固定,中间交互灵活" 
        }
      ]
    }
  ]
});

Phase 3: 阶段/动作定义

Sequential 模式

AskUserQuestion({
  questions: [
    {
      question: "需要多少个执行阶段?",
      header: "阶段数量",
      multiSelect: false,
      options: [
        { label: "3 阶段", description: "简单: 收集 → 处理 → 输出" },
        { label: "5 阶段", description: "标准: 收集 → 探索 → 分析 → 组装 → 验证" },
        { label: "7 阶段", description: "完整: 包含并行处理和迭代优化" },
        { label: "自定义", description: "手动指定阶段" }
      ]
    }
  ]
});

Autonomous 模式

AskUserQuestion({
  questions: [
    {
      question: "核心动作有哪些?",
      header: "动作定义",
      multiSelect: true,
      options: [
        { label: "初始化 (init)", description: "设置初始状态" },
        { label: "列表 (list)", description: "显示当前项目" },
        { label: "创建 (create)", description: "创建新项目" },
        { label: "编辑 (edit)", description: "修改现有项目" },
        { label: "删除 (delete)", description: "删除项目" },
        { label: "完成 (complete)", description: "完成任务" }
      ]
    }
  ]
});

Phase 4: 上下文策略 (P0 增强)

AskUserQuestion({
  questions: [
    {
      question: "选择上下文管理策略:",
      header: "上下文策略",
      multiSelect: false,
      options: [
        {
          label: "文件策略 (file)",
          description: "持久化到 .scratchpad支持调试和恢复推荐"
        },
        {
          label: "内存策略 (memory)",
          description: "仅在运行时保持,速度快但无法恢复"
        }
      ]
    }
  ]
});

Phase 5: LLM 集成 (P1 增强)

AskUserQuestion({
  questions: [
    {
      question: "是否需要 LLM 调用能力?",
      header: "LLM 集成",
      multiSelect: false,
      options: [
        {
          label: "启用 LLM 调用",
          description: "使用 gemini/qwen/codex 进行分析或生成"
        },
        {
          label: "不需要",
          description: "仅使用本地工具"
        }
      ]
    }
  ]
});

// 如果启用 LLM
if (llmEnabled) {
  AskUserQuestion({
    questions: [
      {
        question: "选择默认 LLM 工具:",
        header: "LLM 工具",
        multiSelect: false,
        options: [
          { label: "Gemini", description: "大上下文,适合分析任务(推荐)" },
          { label: "Qwen", description: "代码生成能力强" },
          { label: "Codex", description: "自主执行能力强,适合实现任务" }
        ]
      }
    ]
  });
}

Phase 6: 工具依赖

AskUserQuestion({
  questions: [
    {
      question: "需要哪些工具?",
      header: "工具选择",
      multiSelect: true,
      options: [
        { label: "基础工具", description: "Task, Read, Write, Glob, Grep, Bash" },
        { label: "用户交互", description: "AskUserQuestion" },
        { label: "Chrome 截图", description: "mcp__chrome__*" },
        { label: "外部搜索", description: "mcp__exa__search" },
        { label: "CCW CLI 调用", description: "ccw cli (gemini/qwen/codex)" }
      ]
    }
  ]
});

验证规则

名称验证

function validateSkillName(name) {
  const rules = [
    { test: /^[a-z][a-z0-9-]*$/, msg: "必须以小写字母开头,只包含小写字母、数字、连字符" },
    { test: /^.{3,30}$/, msg: "长度 3-30 字符" },
    { test: /^(?!.*--)/, msg: "不能有连续连字符" },
    { test: /[^-]$/, msg: "不能以连字符结尾" }
  ];
  
  for (const rule of rules) {
    if (!rule.test.test(name)) {
      return { valid: false, error: rule.msg };
    }
  }
  return { valid: true };
}

配置验证

function validateSkillConfig(config) {
  const errors = [];
  
  // 必需字段
  if (!config.skill_name) errors.push("缺少 skill_name");
  if (!config.description) errors.push("缺少 description");
  if (!config.execution_mode) errors.push("缺少 execution_mode");
  
  // 模式特定验证
  if (config.execution_mode === 'sequential') {
    if (!config.sequential_config?.phases?.length) {
      errors.push("Sequential 模式需要定义 phases");
    }
  } else if (config.execution_mode === 'autonomous') {
    if (!config.autonomous_config?.actions?.length) {
      errors.push("Autonomous 模式需要定义 actions");
    }
  }
  
  return { valid: errors.length === 0, errors };
}

示例配置

Sequential 模式示例 (增强版)

{
  "skill_name": "api-docs-generator",
  "display_name": "API Docs Generator",
  "description": "Generate API documentation from source code",
  "triggers": ["generate api docs", "api documentation"],
  "execution_mode": "sequential",
  "context_strategy": "file",
  "llm_integration": {
    "enabled": true,
    "default_tool": "gemini",
    "fallback_chain": ["gemini", "qwen"],
    "mode": "analysis"
  },
  "sequential_config": {
    "phases": [
      {
        "id": "01-scan",
        "name": "Code Scanning",
        "output": "endpoints.json",
        "agent": { "type": "universal-executor", "run_in_background": false }
      },
      {
        "id": "02-analyze",
        "name": "LLM Analysis",
        "output": "analysis.json",
        "agent": { "type": "llm", "tool": "gemini", "mode": "analysis" }
      },
      {
        "id": "03-generate",
        "name": "Doc Generation",
        "output": "api-docs.md",
        "agent": { "type": "universal-executor", "run_in_background": false }
      }
    ]
  },
  "allowed_tools": ["Task", "Read", "Write", "Glob", "Grep", "Bash"],
  "output": {
    "format": "markdown",
    "location": ".workflow/.scratchpad/api-docs-{timestamp}",
    "filename_pattern": "{name}-api-docs.md"
  }
}

Autonomous 模式示例

{
  "skill_name": "task-manager",
  "display_name": "Task Manager",
  "description": "Interactive task management with CRUD operations",
  "triggers": ["manage tasks", "task list", "create task"],
  "execution_mode": "autonomous",
  "autonomous_config": {
    "state_schema": {
      "fields": [
        { "name": "tasks", "type": "Task[]", "description": "任务列表" },
        { "name": "current_view", "type": "string", "description": "当前视图" }
      ]
    },
    "actions": [
      { "id": "action-list", "name": "List Tasks", "preconditions": [], "effects": ["显示任务列表"] },
      { "id": "action-create", "name": "Create Task", "preconditions": [], "effects": ["添加新任务"] },
      { "id": "action-edit", "name": "Edit Task", "preconditions": ["task_selected"], "effects": ["更新任务"] },
      { "id": "action-delete", "name": "Delete Task", "preconditions": ["task_selected"], "effects": ["删除任务"] }
    ],
    "termination_conditions": ["user_exit", "error_limit"]
  },
  "allowed_tools": ["Task", "AskUserQuestion", "Read", "Write"],
  "output": {
    "format": "json",
    "location": ".workflow/.scratchpad/tasks",
    "filename_pattern": "tasks.json"
  }
}