Files
Claude-Code-Workflow/.claude/skills/team-command-designer/phases/01-requirements-collection.md
catlog22 d3bc6177dd feat: add team-command-designer skill with folder-based team structure and 10 collaboration patterns
Introduces a complete skill for designing and generating team command .md
files. Each team is organized as a folder under .claude/commands/team/{team-name}/
with colon-separated skill paths (e.g., team:spec:analyst). Includes 8
infrastructure patterns, 10 collaboration patterns (CP-1 through CP-10),
5-phase generation pipeline, and quality validation standards.
2026-02-13 11:11:01 +08:00

7.9 KiB

Phase 1: Requirements Collection

Collect team definition, role definition, capabilities, and communication patterns for the new team command.

Objective

  • Determine team name (folder name)
  • Determine role name and responsibilities
  • Define task prefix and communication patterns
  • Select required tools and capabilities
  • Generate role-config.json

Input

  • Dependency: User request ($ARGUMENTS or interactive input)
  • Specification: specs/team-design-patterns.md (read in Phase 0)

Execution Steps

Step 1: Team & Role Basic Information

const teamInfo = await AskUserQuestion({
  questions: [
    {
      question: "What is the team name? (lowercase, used as folder name under .claude/commands/team/{team-name}/)",
      header: "Team Name",
      multiSelect: false,
      options: [
        { label: "Custom team", description: "Enter a custom team name" },
        { label: "spec", description: "Specification documentation team" },
        { label: "security", description: "Security audit and compliance team" },
        { label: "devops", description: "Deployment and operations team" }
      ]
    },
    {
      question: "What is the role name for this teammate? (lowercase, e.g., 'analyzer', 'deployer')",
      header: "Role Name",
      multiSelect: false,
      options: [
        { label: "Custom role", description: "Enter a custom role name" },
        { label: "coordinator", description: "Team coordinator / orchestrator" },
        { label: "analyzer", description: "Code/data analysis specialist" },
        { label: "deployer", description: "Deployment and release management" }
      ]
    },
    {
      question: "What is the primary responsibility type?",
      header: "Responsibility",
      multiSelect: false,
      options: [
        { label: "Read-only analysis", description: "Analyze, review, report (no file modification)" },
        { label: "Code generation", description: "Write/modify code files" },
        { label: "Orchestration", description: "Coordinate sub-tasks and agents" },
        { label: "Validation", description: "Test, verify, audit" }
      ]
    }
  ]
});

Step 2: Task Configuration

const taskConfig = await AskUserQuestion({
  questions: [
    {
      question: "What task prefix should this role use? (UPPERCASE, unique, e.g., 'ANALYZE', 'DEPLOY')",
      header: "Task Prefix",
      multiSelect: false,
      options: [
        { label: "Custom prefix", description: "Enter a unique task prefix" },
        { label: "ANALYZE", description: "For analysis tasks (ANALYZE-001)" },
        { label: "DEPLOY", description: "For deployment tasks (DEPLOY-001)" },
        { label: "DOC", description: "For documentation tasks (DOC-001)" }
      ]
    },
    {
      question: "Where does this role fit in the task chain?",
      header: "Chain Position",
      multiSelect: false,
      options: [
        { label: "After PLAN (parallel with IMPL)", description: "Runs alongside implementation" },
        { label: "After IMPL (parallel with TEST/REVIEW)", description: "Post-implementation validation" },
        { label: "After TEST+REVIEW (final stage)", description: "Final processing before completion" },
        { label: "Independent (coordinator-triggered)", description: "No dependency on other tasks" }
      ]
    }
  ]
});

Step 3: Capability Selection

const capabilities = await AskUserQuestion({
  questions: [
    {
      question: "What capabilities does this role need?",
      header: "Capabilities",
      multiSelect: true,
      options: [
        { label: "File modification (Write/Edit)", description: "Can create and modify files" },
        { label: "Sub-agent delegation (Task)", description: "Can spawn sub-agents for complex work" },
        { label: "CLI tool invocation", description: "Can invoke ccw cli tools (gemini/qwen/codex)" },
        { label: "User interaction (AskUserQuestion)", description: "Can ask user questions during execution" }
      ]
    },
    {
      question: "Does this role need complexity-adaptive routing?",
      header: "Adaptive",
      multiSelect: false,
      options: [
        { label: "Yes (Recommended)", description: "Low=direct, Medium/High=agent delegation" },
        { label: "No", description: "Always use the same execution path" }
      ]
    }
  ]
});

Step 4: Message Types Definition

// Infer message types from role type
const responsibilityType = roleInfo["Responsibility"]

const baseMessageTypes = [
  { type: "error", direction: "-> coordinator", trigger: "Blocking error" }
]

const roleMessageTypes = {
  "Read-only analysis": [
    { type: "{role}_result", direction: "-> coordinator", trigger: "Analysis complete" },
    { type: "{role}_progress", direction: "-> coordinator", trigger: "Long analysis progress" }
  ],
  "Code generation": [
    { type: "{role}_complete", direction: "-> coordinator", trigger: "Generation complete" },
    { type: "{role}_progress", direction: "-> coordinator", trigger: "Batch progress update" }
  ],
  "Orchestration": [
    { type: "{role}_ready", direction: "-> coordinator", trigger: "Sub-task results ready" },
    { type: "{role}_progress", direction: "-> coordinator", trigger: "Sub-task progress" }
  ],
  "Validation": [
    { type: "{role}_result", direction: "-> coordinator", trigger: "Validation complete" },
    { type: "fix_required", direction: "-> coordinator", trigger: "Critical issues found" }
  ]
}

const messageTypes = [
  ...baseMessageTypes,
  ...(roleMessageTypes[responsibilityType] || [])
]

Step 5: Generate Configuration

const teamName = teamInfo["Team Name"] === "Custom team"
  ? teamInfo["Team Name_other"]
  : teamInfo["Team Name"]

const roleName = teamInfo["Role Name"] === "Custom role"
  ? teamInfo["Role Name_other"]
  : teamInfo["Role Name"]

const taskPrefix = taskConfig["Task Prefix"] === "Custom prefix"
  ? taskConfig["Task Prefix_other"]
  : taskConfig["Task Prefix"]

// Build allowed-tools list
const baseTools = ["SendMessage(*)", "TaskUpdate(*)", "TaskList(*)", "TaskGet(*)", "TodoWrite(*)", "Read(*)", "Bash(*)", "Glob(*)", "Grep(*)"]
const selectedCapabilities = capabilities["Capabilities"] || []

if (selectedCapabilities.includes("File modification")) {
  baseTools.push("Write(*)", "Edit(*)")
}
if (selectedCapabilities.includes("Sub-agent delegation")) {
  baseTools.push("Task(*)")
}

const config = {
  team_name: teamName,
  role_name: roleName,
  display_name: `Team ${teamName} ${roleName}`,
  description_cn: `Team ${teamName} ${roleName} - ${teamInfo["Responsibility"]}`,
  responsibility_type: responsibilityType,
  task_prefix: taskPrefix.toUpperCase(),
  chain_position: taskConfig["Chain Position"],
  allowed_tools: baseTools,
  capabilities: selectedCapabilities,
  adaptive_routing: capabilities["Adaptive"].includes("Yes"),
  message_types: messageTypes.map(mt => ({
    ...mt,
    type: mt.type.replace('{role}', roleName)
  })),
  cli_integration: selectedCapabilities.includes("CLI tool invocation"),
  user_interaction: selectedCapabilities.includes("User interaction"),
  // Derived paths
  skill_path: `team:${teamName}:${roleName}`,          // e.g., team:spec:analyst
  output_folder: `.claude/commands/team/${teamName}`,   // e.g., .claude/commands/team/spec
  output_file: `${roleName}.md`                         // e.g., analyst.md
}

Write(`${workDir}/role-config.json`, JSON.stringify(config, null, 2))

Output

  • File: role-config.json
  • Format: JSON
  • Location: {workDir}/role-config.json

Quality Checklist

  • Team name is lowercase, valid as folder name
  • Role name is lowercase, unique within the team folder
  • Task prefix is UPPERCASE, unique (not PLAN/IMPL/TEST/REVIEW)
  • Allowed tools include minimum set (SendMessage, TaskUpdate, TaskList, TaskGet)
  • Message types follow naming convention
  • Chain position is clearly defined
  • Derived paths (skill_path, output_folder, output_file) are consistent

Next Phase

-> Phase 2: Pattern Analysis