mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-05 01:50:27 +08:00
重构 ccw cli 模板系统: - 新增 template-discovery.ts 模块,支持扁平化模板自动发现 - 添加 --rule <template> 选项,自动加载 protocol 和 template - 模板目录从嵌套结构 (prompts/category/file.txt) 迁移到扁平结构 (prompts/category-function.txt) - 更新所有 agent/command 文件,使用 $PROTO $TMPL 环境变量替代 $(cat ...) 模式 - 支持模糊匹配:--rule 02-review-architecture 可匹配 analysis-review-architecture.txt 其他更新: - Dashboard: 添加 Claude Manager 和 Issue Manager 页面 - Codex-lens: 增强 chain_search 和 clustering 模块 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
311 lines
8.2 KiB
Markdown
311 lines
8.2 KiB
Markdown
---
|
|
name: tech-research-rules
|
|
description: "3-phase orchestrator: extract tech stack → Exa research → generate path-conditional rules (auto-loaded by Claude Code)"
|
|
argument-hint: "[session-id | tech-stack-name] [--regenerate] [--tool <gemini|qwen>]"
|
|
allowed-tools: SlashCommand(*), TodoWrite(*), Bash(*), Read(*), Write(*), Task(*)
|
|
---
|
|
|
|
# Tech Stack Rules Generator
|
|
|
|
## Overview
|
|
|
|
**Purpose**: Generate multi-layered, path-conditional rules that Claude Code automatically loads based on file context.
|
|
|
|
**Output Structure**:
|
|
```
|
|
.claude/rules/tech/{tech-stack}/
|
|
├── core.md # paths: **/*.{ext} - Core principles
|
|
├── patterns.md # paths: src/**/*.{ext} - Implementation patterns
|
|
├── testing.md # paths: **/*.{test,spec}.{ext} - Testing rules
|
|
├── config.md # paths: *.config.* - Configuration rules
|
|
├── api.md # paths: **/api/**/* - API rules (backend only)
|
|
├── components.md # paths: **/components/**/* - Component rules (frontend only)
|
|
└── metadata.json # Generation metadata
|
|
```
|
|
|
|
**Templates Location**: `~/.claude/workflows/cli-templates/prompts/rules/`
|
|
|
|
---
|
|
|
|
## Core Rules
|
|
|
|
1. **Start Immediately**: First action is TodoWrite initialization
|
|
2. **Path-Conditional Output**: Every rule file includes `paths` frontmatter
|
|
3. **Template-Driven**: Agent reads templates before generating content
|
|
4. **Agent Produces Files**: Agent writes all rule files directly
|
|
5. **No Manual Loading**: Rules auto-activate when Claude works with matching files
|
|
|
|
---
|
|
|
|
## 3-Phase Execution
|
|
|
|
### Phase 1: Prepare Context & Detect Tech Stack
|
|
|
|
**Goal**: Detect input mode, extract tech stack info, determine file extensions
|
|
|
|
**Input Mode Detection**:
|
|
```bash
|
|
input="$1"
|
|
|
|
if [[ "$input" == WFS-* ]]; then
|
|
MODE="session"
|
|
SESSION_ID="$input"
|
|
# Read workflow-session.json to extract tech stack
|
|
else
|
|
MODE="direct"
|
|
TECH_STACK_NAME="$input"
|
|
fi
|
|
```
|
|
|
|
**Tech Stack Analysis**:
|
|
```javascript
|
|
// Decompose composite tech stacks
|
|
// "typescript-react-nextjs" → ["typescript", "react", "nextjs"]
|
|
|
|
const TECH_EXTENSIONS = {
|
|
"typescript": "{ts,tsx}",
|
|
"javascript": "{js,jsx}",
|
|
"python": "py",
|
|
"rust": "rs",
|
|
"go": "go",
|
|
"java": "java",
|
|
"csharp": "cs",
|
|
"ruby": "rb",
|
|
"php": "php"
|
|
};
|
|
|
|
const FRAMEWORK_TYPE = {
|
|
"react": "frontend",
|
|
"vue": "frontend",
|
|
"angular": "frontend",
|
|
"nextjs": "fullstack",
|
|
"nuxt": "fullstack",
|
|
"fastapi": "backend",
|
|
"express": "backend",
|
|
"django": "backend",
|
|
"rails": "backend"
|
|
};
|
|
```
|
|
|
|
**Check Existing Rules**:
|
|
```bash
|
|
normalized_name=$(echo "$TECH_STACK_NAME" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
|
|
rules_dir=".claude/rules/tech/${normalized_name}"
|
|
existing_count=$(find "${rules_dir}" -name "*.md" 2>/dev/null | wc -l || echo 0)
|
|
```
|
|
|
|
**Skip Decision**:
|
|
- If `existing_count > 0` AND no `--regenerate` → `SKIP_GENERATION = true`
|
|
- If `--regenerate` → Delete existing and regenerate
|
|
|
|
**Output Variables**:
|
|
- `TECH_STACK_NAME`: Normalized name
|
|
- `PRIMARY_LANG`: Primary language
|
|
- `FILE_EXT`: File extension pattern
|
|
- `FRAMEWORK_TYPE`: frontend | backend | fullstack | library
|
|
- `COMPONENTS`: Array of tech components
|
|
- `SKIP_GENERATION`: Boolean
|
|
|
|
**TodoWrite**: Mark phase 1 completed
|
|
|
|
---
|
|
|
|
### Phase 2: Agent Produces Path-Conditional Rules
|
|
|
|
**Skip Condition**: Skipped if `SKIP_GENERATION = true`
|
|
|
|
**Goal**: Delegate to agent for Exa research and rule file generation
|
|
|
|
**Template Files**:
|
|
```
|
|
~/.claude/workflows/cli-templates/prompts/rules/
|
|
├── tech-rules-agent-prompt.txt # Agent instructions
|
|
├── rule-core.txt # Core principles template
|
|
├── rule-patterns.txt # Implementation patterns template
|
|
├── rule-testing.txt # Testing rules template
|
|
├── rule-config.txt # Configuration rules template
|
|
├── rule-api.txt # API rules template (backend)
|
|
└── rule-components.txt # Component rules template (frontend)
|
|
```
|
|
|
|
**Agent Task**:
|
|
|
|
```javascript
|
|
Task({
|
|
subagent_type: "general-purpose",
|
|
description: `Generate tech stack rules: ${TECH_STACK_NAME}`,
|
|
prompt: `
|
|
You are generating path-conditional rules for Claude Code.
|
|
|
|
## Context
|
|
- Tech Stack: ${TECH_STACK_NAME}
|
|
- Primary Language: ${PRIMARY_LANG}
|
|
- File Extensions: ${FILE_EXT}
|
|
- Framework Type: ${FRAMEWORK_TYPE}
|
|
- Components: ${JSON.stringify(COMPONENTS)}
|
|
- Output Directory: .claude/rules/tech/${TECH_STACK_NAME}/
|
|
|
|
## Instructions
|
|
|
|
Read the agent prompt template for detailed instructions.
|
|
Use --rule rules-tech-rules-agent-prompt to load the template automatically.
|
|
|
|
## Execution Steps
|
|
|
|
1. Execute Exa research queries (see agent prompt)
|
|
2. Read each rule template
|
|
3. Generate rule files following template structure
|
|
4. Write files to output directory
|
|
5. Write metadata.json
|
|
6. Report completion
|
|
|
|
## Variable Substitutions
|
|
|
|
Replace in templates:
|
|
- {TECH_STACK_NAME} → ${TECH_STACK_NAME}
|
|
- {PRIMARY_LANG} → ${PRIMARY_LANG}
|
|
- {FILE_EXT} → ${FILE_EXT}
|
|
- {FRAMEWORK_TYPE} → ${FRAMEWORK_TYPE}
|
|
`
|
|
})
|
|
```
|
|
|
|
**Completion Criteria**:
|
|
- 4-6 rule files written with proper `paths` frontmatter
|
|
- metadata.json written
|
|
- Agent reports files created
|
|
|
|
**TodoWrite**: Mark phase 2 completed
|
|
|
|
---
|
|
|
|
### Phase 3: Verify & Report
|
|
|
|
**Goal**: Verify generated files and provide usage summary
|
|
|
|
**Steps**:
|
|
|
|
1. **Verify Files**:
|
|
```bash
|
|
find ".claude/rules/tech/${TECH_STACK_NAME}" -name "*.md" -type f
|
|
```
|
|
|
|
2. **Validate Frontmatter**:
|
|
```bash
|
|
head -5 ".claude/rules/tech/${TECH_STACK_NAME}/core.md"
|
|
```
|
|
|
|
3. **Read Metadata**:
|
|
```javascript
|
|
Read(`.claude/rules/tech/${TECH_STACK_NAME}/metadata.json`)
|
|
```
|
|
|
|
4. **Generate Summary Report**:
|
|
```
|
|
Tech Stack Rules Generated
|
|
|
|
Tech Stack: {TECH_STACK_NAME}
|
|
Location: .claude/rules/tech/{TECH_STACK_NAME}/
|
|
|
|
Files Created:
|
|
├── core.md → paths: **/*.{ext}
|
|
├── patterns.md → paths: src/**/*.{ext}
|
|
├── testing.md → paths: **/*.{test,spec}.{ext}
|
|
├── config.md → paths: *.config.*
|
|
├── api.md → paths: **/api/**/* (if backend)
|
|
└── components.md → paths: **/components/**/* (if frontend)
|
|
|
|
Auto-Loading:
|
|
- Rules apply automatically when editing matching files
|
|
- No manual loading required
|
|
|
|
Example Activation:
|
|
- Edit src/components/Button.tsx → core.md + patterns.md + components.md
|
|
- Edit tests/api.test.ts → core.md + testing.md
|
|
- Edit package.json → config.md
|
|
```
|
|
|
|
**TodoWrite**: Mark phase 3 completed
|
|
|
|
---
|
|
|
|
## Path Pattern Reference
|
|
|
|
| Pattern | Matches |
|
|
|---------|---------|
|
|
| `**/*.ts` | All .ts files |
|
|
| `src/**/*` | All files under src/ |
|
|
| `*.config.*` | Config files in root |
|
|
| `**/*.{ts,tsx}` | .ts and .tsx files |
|
|
|
|
| Tech Stack | Core Pattern | Test Pattern |
|
|
|------------|--------------|--------------|
|
|
| TypeScript | `**/*.{ts,tsx}` | `**/*.{test,spec}.{ts,tsx}` |
|
|
| Python | `**/*.py` | `**/test_*.py, **/*_test.py` |
|
|
| Rust | `**/*.rs` | `**/tests/**/*.rs` |
|
|
| Go | `**/*.go` | `**/*_test.go` |
|
|
|
|
---
|
|
|
|
## Parameters
|
|
|
|
```bash
|
|
/memory:tech-research [session-id | "tech-stack-name"] [--regenerate]
|
|
```
|
|
|
|
**Arguments**:
|
|
- **session-id**: `WFS-*` format - Extract from workflow session
|
|
- **tech-stack-name**: Direct input - `"typescript"`, `"typescript-react"`
|
|
- **--regenerate**: Force regenerate existing rules
|
|
|
|
---
|
|
|
|
## Examples
|
|
|
|
### Single Language
|
|
|
|
```bash
|
|
/memory:tech-research "typescript"
|
|
```
|
|
|
|
**Output**: `.claude/rules/tech/typescript/` with 4 rule files
|
|
|
|
### Frontend Stack
|
|
|
|
```bash
|
|
/memory:tech-research "typescript-react"
|
|
```
|
|
|
|
**Output**: `.claude/rules/tech/typescript-react/` with 5 rule files (includes components.md)
|
|
|
|
### Backend Stack
|
|
|
|
```bash
|
|
/memory:tech-research "python-fastapi"
|
|
```
|
|
|
|
**Output**: `.claude/rules/tech/python-fastapi/` with 5 rule files (includes api.md)
|
|
|
|
### From Session
|
|
|
|
```bash
|
|
/memory:tech-research WFS-user-auth-20251104
|
|
```
|
|
|
|
**Workflow**: Extract tech stack from session → Generate rules
|
|
|
|
---
|
|
|
|
## Comparison: Rules vs SKILL
|
|
|
|
| Aspect | SKILL Memory | Rules |
|
|
|--------|--------------|-------|
|
|
| Loading | Manual: `Skill("tech")` | Automatic by path |
|
|
| Scope | All files when loaded | Only matching files |
|
|
| Granularity | Monolithic packages | Per-file-type |
|
|
| Context | Full package | Only relevant rules |
|
|
|
|
**When to Use**:
|
|
- **Rules**: Tech stack conventions per file type
|
|
- **SKILL**: Reference docs, APIs, examples for manual lookup
|