cx-design
npx skills add https://github.com/m19803261706/cx-workflow --skill cx-design
Agent 安装分布
Skill 文档
cx-design: ææ¯è®¾è®¡ä¸ API å¥çº¦
æ ¸å¿ç®æ ï¼éè¿ API å¥çº¦ï¼æ¥å£è·¯å¾ + 请æ±ååº + ç¶ææä¸¾ + åæ®µæ å°ï¼å¨å代ç ä¹åéæ»åå端ç对é½è§èã
ä½¿ç¨æ¹æ³
/cx-design {åè½å} # 为æå®åè½çæ Design Doc
/cx-design # ä½¿ç¨æè¿ç PRD
æ ¸å¿æ¥éª¤
Step 0: åå§åæ¬å°ç¯å¢
PROJECT_ROOT=$(git rev-parse --show-toplevel)
DEVELOPER_ID=$(jq -r '.developer_id' "$PROJECT_ROOT/.claude/cx/config.json" 2>/dev/null || echo "cx")
FEATURE_DIR="$PROJECT_ROOT/.claude/cx/features/${DEVELOPER_ID}-{feature_slug}"
Step 1: 读å PRD
仿¬å° .claude/cx/features/{dev_id}-{feature}/prd.md 读åéæ±ä¿¡æ¯ã
Step 2: ææ¯æ æ£æµä¸ä»£ç æ«æ
-
èªå¨æ£æµææ¯æ ï¼æ¡æ¶ãORMãAPI æ¡æ¶çï¼
-
å¯å¨ Explore subagent æ«æç°æä»£ç ï¼
- å·²æç API è·¯ç±åæ¥å£æ ¼å¼
- å·²æçæ°æ®æ¨¡ååå½åè§è
- å端ç»ä»¶ç»æåç¶æç®¡ç
- å ¬å ±æ¨¡ååå·¥å ·å½æ°
- ä¸å·²æ Design Doc ä¸å®ä¹çæ¥å£ä¸è´æ§
-
æ«ææ¥å£è·¯å¾è§èï¼Java
@RequestMappingãPythonrouter.getãTSapi.getçï¼
Step 3: çæ Design Doc
å¼ºå¶æ§ï¼å å«ä¸å¤§å¥çº¦ç« èã
模æ¿ï¼
# Design Doc: {åè½å}
## å
³è
- PRD: #{prd_number}
- ç¸å
³å·²æ Design Doc: (妿æ)
## åºäºç°æä»£ç
{ä»£ç æ«æåç°çå¯å¤ç¨æ¨¡åãéè¦æ©å±çæ¥å£}
## æ¶ææ¦è§
{模åååãæ°æ®æµ}
## æ°æ®åºè®¾è®¡
### æ°å¢/ä¿®æ¹è¡¨
\`\`\`sql
CREATE TABLE {table_name} (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
{åæ®µ} {ç±»å} COMMENT '{说æ}',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
\`\`\`
### åæ®µè¯´æ
| åæ®µ | ç±»å | 说æ | åç«¯å¯¹åº |
|------|------|------|---------|
| {field} | {type} | {desc} | {front_field} |
---
## â¡ API å¥çº¦ï¼å¼ºå¶ç« èï¼
> **æ¤ç« èæ¯åå端ç对é½ååãexec é¶æ®µå¿
é¡»ä¸¥æ ¼éµå®ã**
### æ¥å£æ»è§
| # | æ¹æ³ | è·¯å¾ | 说æ | è®¤è¯ |
|---|------|------|------|------|
| 1 | POST | /api/v1/{resource} | {说æ} | â
|
| 2 | GET | /api/v1/{resource}/{id} | {说æ} | â
|
### æ¥å£è¯¦æ
#### 1. {æ¥å£åç§°}
\`\`\`
{METHOD} /api/v1/{path}
Content-Type: application/json
Authorization: Bearer {token}
\`\`\`
**Request Body:**
\`\`\`json
{
"fieldName": "string", // å¿
å¡«
"anotherField": 0, // éå¡«
"nestedObject": {
"subField": "string"
}
}
\`\`\`
**Response (æå):**
\`\`\`json
{
"code": 0,
"message": "success",
"data": {
"id": 1,
"fieldName": "string",
"status": "PENDING", // â è§ç¶ææä¸¾è¡¨
"createdAt": "2024-01-15T14:30:45"
}
}
\`\`\`
**Response (失败):**
\`\`\`json
{
"code": 4001,
"message": "å
·ä½é误说æ",
"data": null
}
\`\`\`
**é误ç :**
| code | å«ä¹ | å端å¤ç |
|------|------|---------|
| 0 | æå | æ£å¸¸æµç¨ |
| 4001 | {é误1} | {æç¤ºæ¹å¼} |
---
## â¡ ç¶ææä¸¾å¯¹ç
§è¡¨ï¼å¼ºå¶ç« èï¼
> **åå端å¿
须使ç¨å®å
¨ä¸è´çæä¸¾å¼ãæ¤å¤å®ä¹åï¼exec é¶æ®µä¸å
许修æ¹ã**
### {ä¸å¡é¢å}ç¶æ
| æä¸¾å¼ | å端常é | API ä¼ è¾å¼ | å端常é | æ¾ç¤ºææ¬ | 说æ |
|--------|---------|-----------|---------|---------|------|
| å¾
å¤ç | PENDING | "PENDING" | 'PENDING' | "å¾
å¤ç" | åå§ç¶æ |
| å¤çä¸ | PROCESSING | "PROCESSING" | 'PROCESSING' | "å¤çä¸" | è¿è¡ä¸ |
| 已宿 | COMPLETED | "COMPLETED" | 'COMPLETED' | "已宿" | æç» |
### ç¶ææµè½¬è§å
\`\`\`
PENDING â PROCESSING â COMPLETED
â FAILED
\`\`\`
---
## â¡ VO/DTO åæ®µæ å°è¡¨ï¼å¼ºå¶ç« èï¼
> **æ¤è¡¨å®ä¹ä»æ°æ®åºå°å端ç宿´å段æ å°é¾ãexec é¶æ®µå建 DTO å interface æ¶å¿
é¡»ä¸¥æ ¼éµå¾ªã**
| # | åè½ | æ°æ®åºå段 (snake_case) | Java DTO (camelCase) | API JSON | TypeScript | ç±»å | å¿
å¡« | 说æ |
|---|------|----------------------|--------|-----------|---------|------|------|------|
| 1 | {åè½} | {db_field} | {dtoField} | {apiField} | {tsField} | {type} | â
| {说æ} |
### å½åè§è确认
- æ°æ®åº: snake_caseï¼`real_name`ï¼
- Java DTO: camelCaseï¼`realName`ï¼
- API JSON: camelCaseï¼Jackson èªå¨è½¬æ¢ï¼
- TypeScript: camelCaseï¼`realName`ï¼
- ç¹æ®æ å°: @JsonProperty æå端转æ¢å¨æ¤æ 注
### DTO/VO ç±»å®ä¹
**å端 Java:**
\`\`\`java
@Data
public class {Name}DTO {
/** {说æ} */
private {Type} {fieldName};
}
\`\`\`
**å端 TypeScript:**
\`\`\`typescript
interface {Name} {
/** {说æ} */
{fieldName}: {type};
}
\`\`\`
---
## å端设计
{页é¢ç»æãç¶æç®¡çãå
³é®ç±»åå®ä¹}
## å端设计
{代ç è·¯å¾ãå
³é®ç±»ãæ¹æ³ç¾å}
## å½±åèå´
- ä¿®æ¹çå·²ææä»¶: {å表}
- æ°å¢æä»¶: {å表}
## é£é©ç¹
- {é£é©1}: {åºå¯¹æ¹æ¡}
ä¿åå° .claude/cx/features/{dev_id}-{feature}/design.mdã
Step 4: CLI 确认ä¸è°æ´
æ¾ç¤ºè®¾è®¡ Doc æè¦ï¼éç¹å±ç¤ºä¸å¤§å¥çº¦ï¼
{
"questions": [
{
"question": "Design Doc å API å¥çº¦æ¯å¦éè¦è°æ´ï¼",
"header": "确认",
"multiSelect": false,
"options": [
{"label": "确认éè¿", "description": "API å¥çº¦æ 误ï¼å建æ¬å°ææ¡£"},
{"label": "è°æ´æ¥å£", "description": "æ¥å£è·¯å¾æè¯·æ±/ååºéè¦ä¿®æ¹"},
{"label": "è°æ´å段", "description": "åæ®µæ å°æç±»åéè¦ä¿®æ¹"},
{"label": "éæ°çæ", "description": "è¡¥å
ä¿¡æ¯åéæ°çæ"}
]
}
]
}
Step 5: GitHub 忥ï¼å¯éï¼
æ ¹æ® config.github_syncï¼
- off/localï¼ä» ä¿åæ¬å°
- collab/fullï¼å建 GitHub Issueï¼æ ç¾
doc:designï¼ï¼è®°å½ Issue ç¼å·
Step 6: 夿æ¯å¦éè¦ ADR
æ£æ¥ Design Doc 䏿¯å¦æ¶åæ¶æå³çï¼æ°ææ¯ãå卿¹æ¡ãéä¿¡åè®®ãéå¤§æ¶æåæ´ï¼ã
{
"questions": [
{
"question": "Design Doc 䏿¯å¦æ¶åéè¦è®°å½çæ¶æå³çï¼",
"header": "ADR",
"multiSelect": false,
"options": [
{"label": "éè¦ ADR", "description": "æææ¯éåææ¶æåæ´"},
{"label": "ä¸éè¦", "description": "没æé大å³ç"},
{"label": "ç¨åè¡¥å
", "description": "å
ç»§ç»ï¼ä¹ååç¬å建"}
]
}
]
}
妿éè¦ï¼èªå¨è§¦å /cx-adrã
Step 7: ä¸ä¸æ¥
{
"questions": [
{
"question": "æ¯å¦ç«å³å建任å¡è§åï¼",
"header": "ä¸ä¸æ¥",
"multiSelect": false,
"options": [
{"label": "ç«å³è§å", "description": "è¿è¡ /cx-plan"},
{"label": "ç¨åå¤ç", "description": "å
review Design Doc"}
]
}
]
}
妿鿩ç«å³è§åï¼èªå¨è§¦å /cx-plan {åè½å}ã
æ¬å°æä»¶ç»æ
.claude/cx/features/{dev_id}-{feature}/
âââ design.md â Design Doc
âââ design.json â Issue ç¼å·ãå¥çº¦å
æ°æ®
âââ ...
Explore Subagent 使ç¨
Step 2 å¯å¨ä»£ç æ«æï¼
Task tool åæ°:
subagent_type: "Explore"
description: "æ«æç°æä»£ç ç»æåæ¥å£æ ¼å¼"
prompt: "ååºå·²æ API è·¯ç±ãæ°æ®æ¨¡åãç»ä»¶ç»æãå½åè§è"
ä¸å¤§å¥çº¦çç¨å¤
è¿ä¸ä¸ªå¥çº¦ç« èå¨ cx-plan ä¸ä¼è¢«ä¸æ²å°ååä»»å¡ Issueï¼ä½¿ exec é¶æ®µæ éç¿»é Design Doc å³å¯æå¥çº¦å®ç°ã
ä¸å ¶ä» Skills çè¡æ¥
- è¾å ¥ï¼prd.mdï¼æ¥èª cx-prdï¼
- è¾åºï¼design.mdï¼ä¾ cx-adr å cx-plan 使ç¨ï¼
- è§¦åæ¹å¼ï¼
- æ¥èª cx-prdï¼M/L è§æ¨¡èªå¨è§¦åï¼
- ç¨æ·æå¨
/cx-design