@kood/claude-code 0.5.1 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +163 -28
- package/package.json +1 -1
- package/templates/.claude/agents/analyst.md +6 -14
- package/templates/.claude/agents/architect.md +6 -14
- package/templates/.claude/agents/code-reviewer.md +8 -14
- package/templates/.claude/agents/dependency-manager.md +8 -14
- package/templates/.claude/agents/deployment-validator.md +8 -14
- package/templates/.claude/agents/designer.md +8 -0
- package/templates/.claude/agents/document-writer.md +6 -14
- package/templates/.claude/agents/explore.md +8 -3
- package/templates/.claude/agents/git-operator.md +63 -17
- package/templates/.claude/agents/implementation-executor.md +14 -37
- package/templates/.claude/agents/ko-to-en-translator.md +8 -13
- package/templates/.claude/agents/lint-fixer.md +8 -172
- package/templates/.claude/agents/planner.md +6 -14
- package/templates/.claude/agents/refactor-advisor.md +8 -14
- package/templates/.claude/commands/git-all.md +3 -167
- package/templates/.claude/commands/git-session.md +3 -71
- package/templates/.claude/commands/lint-fix.md +119 -82
- package/templates/.claude/commands/lint-init.md +2 -54
- package/templates/.claude/commands/pre-deploy.md +143 -82
- package/templates/.claude/commands/version-update.md +171 -66
- package/templates/.claude/instructions/agent-patterns/agent-coordination.md +208 -0
- package/templates/.claude/instructions/agent-patterns/index.md +264 -0
- package/templates/.claude/instructions/agent-patterns/model-routing.md +167 -0
- package/templates/.claude/instructions/agent-patterns/parallel-execution.md +91 -0
- package/templates/.claude/instructions/agent-patterns/read-parallelization.md +106 -0
- package/templates/.claude/instructions/index.md +350 -0
- package/templates/.claude/instructions/multi-agent/agent-roster.md +811 -0
- package/templates/.claude/{PARALLEL_AGENTS.md → instructions/multi-agent/coordination-guide.md} +27 -336
- package/templates/.claude/instructions/{parallel-agent-execution.md → multi-agent/execution-patterns.md} +127 -438
- package/templates/.claude/instructions/multi-agent/index.md +282 -0
- package/templates/.claude/instructions/multi-agent/performance-optimization.md +456 -0
- package/templates/.claude/instructions/tech-stack/design-standards.md +282 -0
- package/templates/.claude/instructions/tech-stack/index.md +70 -0
- package/templates/.claude/instructions/tech-stack/prisma-patterns.md +352 -0
- package/templates/.claude/instructions/tech-stack/tanstack-patterns.md +275 -0
- package/templates/.claude/instructions/validation/forbidden-patterns.md +281 -0
- package/templates/.claude/instructions/validation/index.md +32 -0
- package/templates/.claude/instructions/validation/required-behaviors.md +331 -0
- package/templates/.claude/instructions/validation/verification-checklist.md +318 -0
- package/templates/.claude/instructions/workflow-patterns/index.md +18 -0
- package/templates/.claude/instructions/workflow-patterns/phase-based-workflow.md +250 -0
- package/templates/.claude/instructions/workflow-patterns/sequential-thinking.md +217 -0
- package/templates/.claude/instructions/workflow-patterns/todowrite-pattern.md +215 -0
- package/templates/.claude/skills/bug-fix/SKILL.md +972 -0
- package/templates/.claude/skills/docs-creator/AGENTS.md +4 -1
- package/templates/.claude/skills/docs-creator/SKILL.md +258 -0
- package/templates/.claude/skills/docs-refactor/AGENTS.md +4 -1
- package/templates/.claude/skills/docs-refactor/SKILL.md +145 -0
- package/templates/.claude/skills/execute/SKILL.md +15 -242
- package/templates/.claude/skills/figma-to-code/AGENTS.md +4 -1
- package/templates/.claude/skills/figma-to-code/SKILL.md +306 -0
- package/templates/.claude/skills/global-uiux-design/AGENTS.md +4 -1
- package/templates/.claude/skills/global-uiux-design/SKILL.md +455 -125
- package/templates/.claude/skills/korea-uiux-design/AGENTS.md +4 -1
- package/templates/.claude/skills/korea-uiux-design/SKILL.md +461 -116
- package/templates/.claude/skills/nextjs-react-best-practices/SKILL.md +177 -0
- package/templates/.claude/skills/plan/SKILL.md +1102 -98
- package/templates/.claude/skills/prd/SKILL.md +367 -66
- package/templates/.claude/skills/ralph/AGENTS.md +4 -1
- package/templates/.claude/skills/ralph/SKILL.md +83 -0
- package/templates/.claude/skills/refactor/SKILL.md +1214 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/SKILL.md +149 -0
- package/templates/.claude/commands/bug-fix.md +0 -510
- package/templates/.claude/commands/refactor.md +0 -788
package/dist/index.js
CHANGED
|
@@ -23,6 +23,7 @@ var banner = () => {
|
|
|
23
23
|
|
|
24
24
|
// src/commands/init.ts
|
|
25
25
|
import prompts from "prompts";
|
|
26
|
+
import fs2 from "fs-extra";
|
|
26
27
|
|
|
27
28
|
// src/utils/copy.ts
|
|
28
29
|
import fs from "fs-extra";
|
|
@@ -33,12 +34,45 @@ var __dirname2 = path.dirname(__filename2);
|
|
|
33
34
|
var getTemplatesDir = () => {
|
|
34
35
|
return path.resolve(__dirname2, "../templates");
|
|
35
36
|
};
|
|
37
|
+
var validateTemplateName = (template) => {
|
|
38
|
+
const sanitized = path.basename(template);
|
|
39
|
+
if (sanitized !== template || template.includes("..")) {
|
|
40
|
+
throw new Error(`Invalid template name: "${template}"`);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var validateTargetDir = (targetDir) => {
|
|
44
|
+
const resolved = path.resolve(targetDir);
|
|
45
|
+
const protectedPaths = [
|
|
46
|
+
"/",
|
|
47
|
+
"/usr",
|
|
48
|
+
"/etc",
|
|
49
|
+
"/bin",
|
|
50
|
+
"/sbin",
|
|
51
|
+
"/home",
|
|
52
|
+
"/var",
|
|
53
|
+
"/root"
|
|
54
|
+
];
|
|
55
|
+
if (process.platform === "win32") {
|
|
56
|
+
const winProtected = [
|
|
57
|
+
"C:\\Windows",
|
|
58
|
+
"C:\\Program Files",
|
|
59
|
+
"C:\\Program Files (x86)"
|
|
60
|
+
];
|
|
61
|
+
protectedPaths.push(...winProtected);
|
|
62
|
+
}
|
|
63
|
+
for (const protectedPath of protectedPaths) {
|
|
64
|
+
if (resolved === protectedPath || resolved.startsWith(protectedPath + path.sep)) {
|
|
65
|
+
throw new Error(`Cannot modify protected system path: ${resolved}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
36
69
|
var hasFiles = async (dir) => {
|
|
37
70
|
if (!await fs.pathExists(dir)) return false;
|
|
38
71
|
const items = await fs.readdir(dir);
|
|
39
72
|
return items.length > 0;
|
|
40
73
|
};
|
|
41
74
|
var getTemplatePath = (template) => {
|
|
75
|
+
validateTemplateName(template);
|
|
42
76
|
return path.join(getTemplatesDir(), template);
|
|
43
77
|
};
|
|
44
78
|
var copyRecursive = async (src, dest, counter) => {
|
|
@@ -56,6 +90,7 @@ var copyRecursive = async (src, dest, counter) => {
|
|
|
56
90
|
}
|
|
57
91
|
};
|
|
58
92
|
var copySingleTemplate = async (template, targetDir) => {
|
|
93
|
+
validateTargetDir(targetDir);
|
|
59
94
|
const templatePath = getTemplatePath(template);
|
|
60
95
|
if (!await fs.pathExists(templatePath)) {
|
|
61
96
|
throw new Error(`Template "${template}" not found at ${templatePath}`);
|
|
@@ -77,6 +112,7 @@ var copySingleTemplate = async (template, targetDir) => {
|
|
|
77
112
|
return counter;
|
|
78
113
|
};
|
|
79
114
|
var copyMultipleTemplates = async (templates, targetDir) => {
|
|
115
|
+
validateTargetDir(targetDir);
|
|
80
116
|
const counter = { files: 0, directories: 0 };
|
|
81
117
|
const docsDir = path.join(targetDir, "docs");
|
|
82
118
|
if (await fs.pathExists(docsDir)) {
|
|
@@ -99,18 +135,49 @@ var copyMultipleTemplates = async (templates, targetDir) => {
|
|
|
99
135
|
return counter;
|
|
100
136
|
};
|
|
101
137
|
var generateIndexClaudeMd = (templates) => {
|
|
102
|
-
const
|
|
138
|
+
const templateMetadata = {
|
|
139
|
+
"tanstack-start": {
|
|
140
|
+
name: "TanStack Start",
|
|
141
|
+
description: "React + TanStack Router SSR \uD480\uC2A4\uD0DD \uD504\uB85C\uC81D\uD2B8",
|
|
142
|
+
stack: "React, TanStack Router, Vite, TypeScript"
|
|
143
|
+
},
|
|
144
|
+
hono: {
|
|
145
|
+
name: "Hono",
|
|
146
|
+
description: "Edge Runtime \uBC31\uC5D4\uB4DC API \uD504\uB85C\uC81D\uD2B8",
|
|
147
|
+
stack: "Hono, TypeScript, Cloudflare Workers"
|
|
148
|
+
},
|
|
149
|
+
npx: {
|
|
150
|
+
name: "NPX CLI",
|
|
151
|
+
description: "NPX\uB85C \uC2E4\uD589 \uAC00\uB2A5\uD55C CLI \uB3C4\uAD6C \uD504\uB85C\uC81D\uD2B8",
|
|
152
|
+
stack: "Node.js, TypeScript, Commander.js"
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const templateSections = templates.map((template) => {
|
|
156
|
+
const meta = templateMetadata[template] || {
|
|
157
|
+
name: template,
|
|
158
|
+
description: `${template} \uD504\uB85C\uC81D\uD2B8`,
|
|
159
|
+
stack: "TypeScript"
|
|
160
|
+
};
|
|
161
|
+
return `### ${meta.name}
|
|
162
|
+
- **\uC6A9\uB3C4:** ${meta.description}
|
|
163
|
+
- **\uC8FC\uC694 \uC2A4\uD0DD:** ${meta.stack}
|
|
164
|
+
- **\uAC00\uC774\uB4DC:** [docs/${template}/CLAUDE.md](docs/${template}/CLAUDE.md)`;
|
|
165
|
+
}).join("\n\n");
|
|
103
166
|
return `# CLAUDE.md
|
|
104
167
|
|
|
105
|
-
> \uC774 \uD504\uB85C\uC81D\uD2B8\uB294 \uC5EC\uB7EC \
|
|
168
|
+
> \uC774 \uD504\uB85C\uC81D\uD2B8\uB294 \uC5EC\uB7EC \uD504\uB808\uC784\uC6CC\uD06C\uC758 Claude Code \uAC00\uC774\uB4DC\uB97C \uD3EC\uD568\uD569\uB2C8\uB2E4.
|
|
169
|
+
|
|
170
|
+
## \uC0AC\uC6A9 \uBC29\uBC95
|
|
171
|
+
|
|
172
|
+
\uC544\uB798 \uD15C\uD50C\uB9BF \uC911 **\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC0AC\uC6A9 \uC911\uC778 \uD504\uB808\uC784\uC6CC\uD06C**\uB97C \uC120\uD0DD\uD558\uC5EC \uD574\uB2F9 \uAC00\uC774\uB4DC\uB97C \uB530\uB974\uC138\uC694.
|
|
106
173
|
|
|
107
|
-
## \uD15C\uD50C\uB9BF \
|
|
174
|
+
## \uD15C\uD50C\uB9BF \uBAA9\uB85D
|
|
108
175
|
|
|
109
|
-
${
|
|
176
|
+
${templateSections}
|
|
110
177
|
|
|
111
|
-
|
|
178
|
+
---
|
|
112
179
|
|
|
113
|
-
\
|
|
180
|
+
**\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8\uC5D0 \uB9DE\uB294 \uAC00\uC774\uB4DC\uB97C CLAUDE.md\uC758 \`@\` \uC778\uC2A4\uD2B8\uB7ED\uC158\uC5D0 \uCD94\uAC00\uD558\uC138\uC694.**
|
|
114
181
|
`;
|
|
115
182
|
};
|
|
116
183
|
var checkExistingFiles = async (targetDir) => {
|
|
@@ -171,10 +238,17 @@ var copySkills = async (templates, targetDir) => {
|
|
|
171
238
|
}
|
|
172
239
|
await fs.ensureDir(targetSkillsDir);
|
|
173
240
|
const skillsToCopy = /* @__PURE__ */ new Set();
|
|
241
|
+
const skillTemplateMap = /* @__PURE__ */ new Map();
|
|
174
242
|
COMMON_SKILLS.forEach((skill) => skillsToCopy.add(skill));
|
|
175
243
|
for (const template of templates) {
|
|
176
244
|
const skills = FRAMEWORK_SPECIFIC_SKILLS_MAP[template] || [];
|
|
177
|
-
skills.forEach((skill) =>
|
|
245
|
+
skills.forEach((skill) => {
|
|
246
|
+
skillsToCopy.add(skill);
|
|
247
|
+
if (!skillTemplateMap.has(skill)) {
|
|
248
|
+
skillTemplateMap.set(skill, /* @__PURE__ */ new Set());
|
|
249
|
+
}
|
|
250
|
+
skillTemplateMap.get(skill).add(template);
|
|
251
|
+
});
|
|
178
252
|
}
|
|
179
253
|
for (const skill of skillsToCopy) {
|
|
180
254
|
const skillSrc = path.join(skillsSrc, skill);
|
|
@@ -186,7 +260,19 @@ var copySkills = async (templates, targetDir) => {
|
|
|
186
260
|
await copyRecursive(skillSrc, skillDest, counter);
|
|
187
261
|
}
|
|
188
262
|
}
|
|
189
|
-
|
|
263
|
+
const duplicateSkills = [];
|
|
264
|
+
for (const [skill, templateSet] of skillTemplateMap.entries()) {
|
|
265
|
+
if (templateSet.size > 1) {
|
|
266
|
+
duplicateSkills.push({
|
|
267
|
+
skill,
|
|
268
|
+
templates: Array.from(templateSet).sort()
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
...counter,
|
|
274
|
+
...duplicateSkills.length > 0 && { duplicateSkills }
|
|
275
|
+
};
|
|
190
276
|
};
|
|
191
277
|
var copyCommands = async (_templates, targetDir) => {
|
|
192
278
|
const counter = { files: 0, directories: 0 };
|
|
@@ -266,6 +352,26 @@ var TEMPLATE_DESCRIPTIONS = {
|
|
|
266
352
|
};
|
|
267
353
|
var init = async (options) => {
|
|
268
354
|
const targetDir = options.cwd || process.cwd();
|
|
355
|
+
try {
|
|
356
|
+
const stat = await fs2.stat(targetDir);
|
|
357
|
+
if (!stat.isDirectory()) {
|
|
358
|
+
logger.error(`Target is not a directory: ${targetDir}`);
|
|
359
|
+
process.exit(1);
|
|
360
|
+
}
|
|
361
|
+
} catch (error) {
|
|
362
|
+
if (error.code === "ENOENT") {
|
|
363
|
+
logger.error(`Target directory does not exist: ${targetDir}`);
|
|
364
|
+
} else {
|
|
365
|
+
logger.error(`Cannot access target directory: ${targetDir}`);
|
|
366
|
+
}
|
|
367
|
+
process.exit(1);
|
|
368
|
+
}
|
|
369
|
+
try {
|
|
370
|
+
await fs2.access(targetDir, fs2.constants.W_OK);
|
|
371
|
+
} catch {
|
|
372
|
+
logger.error(`No write permission for: ${targetDir}`);
|
|
373
|
+
process.exit(1);
|
|
374
|
+
}
|
|
269
375
|
const availableTemplates = await listAvailableTemplates();
|
|
270
376
|
if (availableTemplates.length === 0) {
|
|
271
377
|
logger.error("No templates found. Package may be corrupted.");
|
|
@@ -375,22 +481,10 @@ var init = async (options) => {
|
|
|
375
481
|
installCommands = commandsResponse.install ?? false;
|
|
376
482
|
}
|
|
377
483
|
if (hasAgents) {
|
|
378
|
-
|
|
379
|
-
type: "confirm",
|
|
380
|
-
name: "install",
|
|
381
|
-
message: "Install agents to .claude/agents/?",
|
|
382
|
-
initial: false
|
|
383
|
-
});
|
|
384
|
-
installAgents = agentsResponse.install ?? false;
|
|
484
|
+
installAgents = true;
|
|
385
485
|
}
|
|
386
486
|
if (hasInstructions) {
|
|
387
|
-
|
|
388
|
-
type: "confirm",
|
|
389
|
-
name: "install",
|
|
390
|
-
message: "Install instructions to .claude/instructions/?",
|
|
391
|
-
initial: false
|
|
392
|
-
});
|
|
393
|
-
installInstructions = instructionsResponse.install ?? false;
|
|
487
|
+
installInstructions = true;
|
|
394
488
|
}
|
|
395
489
|
}
|
|
396
490
|
if (installSkills || installCommands || installAgents || installInstructions) {
|
|
@@ -417,11 +511,52 @@ var init = async (options) => {
|
|
|
417
511
|
logger.blank();
|
|
418
512
|
logger.info("Installing skills...");
|
|
419
513
|
const skillsResult = await copySkills(templates, targetDir);
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
514
|
+
if (skillsResult.duplicateSkills && skillsResult.duplicateSkills.length > 0) {
|
|
515
|
+
logger.blank();
|
|
516
|
+
logger.warn("The following skills are included in multiple templates:");
|
|
517
|
+
skillsResult.duplicateSkills.forEach(
|
|
518
|
+
({ skill, templates: skillTemplates }) => {
|
|
519
|
+
logger.step(`${skill} (${skillTemplates.join(", ")})`);
|
|
520
|
+
}
|
|
521
|
+
);
|
|
522
|
+
logger.blank();
|
|
523
|
+
const response = await prompts({
|
|
524
|
+
type: "select",
|
|
525
|
+
name: "selectedTemplate",
|
|
526
|
+
message: "Which template's version should be used?",
|
|
527
|
+
choices: templates.map((t) => ({
|
|
528
|
+
title: t,
|
|
529
|
+
value: t
|
|
530
|
+
}))
|
|
531
|
+
});
|
|
532
|
+
if (response.selectedTemplate) {
|
|
533
|
+
logger.info(
|
|
534
|
+
`Reinstalling skills with ${response.selectedTemplate} template...`
|
|
535
|
+
);
|
|
536
|
+
const reinstallResult = await copySkills(
|
|
537
|
+
[response.selectedTemplate],
|
|
538
|
+
targetDir
|
|
539
|
+
);
|
|
540
|
+
totalFiles += reinstallResult.files;
|
|
541
|
+
totalDirectories += reinstallResult.directories;
|
|
542
|
+
logger.success(
|
|
543
|
+
`Skills: ${reinstallResult.files} files, ${reinstallResult.directories} directories`
|
|
544
|
+
);
|
|
545
|
+
} else {
|
|
546
|
+
logger.warn("No template selected. Using all templates.");
|
|
547
|
+
totalFiles += skillsResult.files;
|
|
548
|
+
totalDirectories += skillsResult.directories;
|
|
549
|
+
logger.success(
|
|
550
|
+
`Skills: ${skillsResult.files} files, ${skillsResult.directories} directories`
|
|
551
|
+
);
|
|
552
|
+
}
|
|
553
|
+
} else {
|
|
554
|
+
totalFiles += skillsResult.files;
|
|
555
|
+
totalDirectories += skillsResult.directories;
|
|
556
|
+
logger.success(
|
|
557
|
+
`Skills: ${skillsResult.files} files, ${skillsResult.directories} directories`
|
|
558
|
+
);
|
|
559
|
+
}
|
|
425
560
|
} else if (installSkills && !hasSkills) {
|
|
426
561
|
logger.warn("No skills found in selected templates.");
|
|
427
562
|
}
|
|
@@ -492,7 +627,7 @@ var init = async (options) => {
|
|
|
492
627
|
|
|
493
628
|
// src/index.ts
|
|
494
629
|
var program = new Command();
|
|
495
|
-
program.name("claude-code").description("Claude Code documentation installer for projects").version("0.5.
|
|
630
|
+
program.name("claude-code").description("Claude Code documentation installer for projects").version("0.5.3");
|
|
496
631
|
program.option(
|
|
497
632
|
"-t, --template <names>",
|
|
498
633
|
"template names (comma-separated: tanstack-start,hono)"
|
package/package.json
CHANGED
|
@@ -5,6 +5,12 @@ tools: Read, Grep, Glob
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
9
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
10
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
11
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
12
|
+
@../../instructions/validation/required-behaviors.md
|
|
13
|
+
|
|
8
14
|
# Analyst Agent (Metis)
|
|
9
15
|
|
|
10
16
|
계획 수립 전 요구사항 심층 분석. "다른 사람이 놓친 것을 발견"하는 전략 컨설턴트.
|
|
@@ -29,20 +35,6 @@ model: opus
|
|
|
29
35
|
|
|
30
36
|
---
|
|
31
37
|
|
|
32
|
-
<parallel_execution>
|
|
33
|
-
|
|
34
|
-
## Agent Coordination
|
|
35
|
-
|
|
36
|
-
| 항목 | 설명 |
|
|
37
|
-
|------|------|
|
|
38
|
-
| **병렬 실행** | 불가 (전체 맥락 통합 분석 필요) |
|
|
39
|
-
| **연계 Agent** | architect (기술 분석), planner (계획 수립 전 분석), document-writer (문서화) |
|
|
40
|
-
| **권장 모델** | opus (심층 요구사항 분석) |
|
|
41
|
-
|
|
42
|
-
</parallel_execution>
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
38
|
<six_gaps>
|
|
47
39
|
|
|
48
40
|
## 6가지 핵심 갭
|
|
@@ -5,6 +5,12 @@ tools: Read, Grep, Glob
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
9
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
10
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
11
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
12
|
+
@../../instructions/validation/required-behaviors.md
|
|
13
|
+
|
|
8
14
|
# Architect Agent (Oracle)
|
|
9
15
|
|
|
10
16
|
델파이 신탁처럼 전략적 조언을 제공하는 READ-ONLY 아키텍처 고문. 코드를 수정하지 않고 분석과 권장사항만 제공.
|
|
@@ -29,20 +35,6 @@ model: opus
|
|
|
29
35
|
|
|
30
36
|
---
|
|
31
37
|
|
|
32
|
-
<parallel_execution>
|
|
33
|
-
|
|
34
|
-
## Agent Coordination
|
|
35
|
-
|
|
36
|
-
| 항목 | 설명 |
|
|
37
|
-
|------|------|
|
|
38
|
-
| **병렬 실행** | 부분 가능 (독립 모듈 분석), 아키텍처 전체 분석은 단일 실행 |
|
|
39
|
-
| **연계 Agent** | analyst (요구사항 분석), refactor-advisor (리팩토링 실행), planner (계획 수립) |
|
|
40
|
-
| **권장 모델** | opus (복잡한 아키텍처 분석) |
|
|
41
|
-
|
|
42
|
-
</parallel_execution>
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
38
|
<forbidden>
|
|
47
39
|
|
|
48
40
|
## 절대 금지
|
|
@@ -6,6 +6,14 @@ model: sonnet
|
|
|
6
6
|
permissionMode: default
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
10
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
11
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
12
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
13
|
+
@../../instructions/validation/required-behaviors.md
|
|
14
|
+
|
|
15
|
+
# Code Reviewer
|
|
16
|
+
|
|
9
17
|
너는 시니어 코드 리뷰어다. 높은 기준을 유지하며 건설적인 피드백을 제공한다.
|
|
10
18
|
|
|
11
19
|
호출 시 수행할 작업:
|
|
@@ -17,20 +25,6 @@ permissionMode: default
|
|
|
17
25
|
|
|
18
26
|
---
|
|
19
27
|
|
|
20
|
-
<parallel_execution>
|
|
21
|
-
|
|
22
|
-
## Agent Coordination
|
|
23
|
-
|
|
24
|
-
| 항목 | 설명 |
|
|
25
|
-
|------|------|
|
|
26
|
-
| **병렬 실행** | 불가 (git diff 기반 순차 검토) |
|
|
27
|
-
| **연계 Agent** | git-operator (커밋 전 리뷰), deployment-validator (배포 전 검토) |
|
|
28
|
-
| **권장 모델** | sonnet (코드 품질 분석) |
|
|
29
|
-
|
|
30
|
-
</parallel_execution>
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
28
|
<review_checklist>
|
|
35
29
|
|
|
36
30
|
## 검토 체크리스트
|
|
@@ -6,6 +6,14 @@ model: sonnet
|
|
|
6
6
|
permissionMode: default
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
10
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
11
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
12
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
13
|
+
@../../instructions/validation/required-behaviors.md
|
|
14
|
+
|
|
15
|
+
# Dependency Manager
|
|
16
|
+
|
|
9
17
|
너는 의존성 관리 및 보안 전문가다.
|
|
10
18
|
|
|
11
19
|
호출 시 수행할 작업:
|
|
@@ -17,20 +25,6 @@ permissionMode: default
|
|
|
17
25
|
|
|
18
26
|
---
|
|
19
27
|
|
|
20
|
-
<parallel_execution>
|
|
21
|
-
|
|
22
|
-
## Agent Coordination
|
|
23
|
-
|
|
24
|
-
| 항목 | 설명 |
|
|
25
|
-
|------|------|
|
|
26
|
-
| **병렬 실행** | 부분 가능 (분석 단계), 업데이트는 순차 필수 |
|
|
27
|
-
| **연계 Agent** | deployment-validator (업데이트 후 검증), code-reviewer (breaking change 검토) |
|
|
28
|
-
| **권장 모델** | sonnet (보안 및 breaking change 분석) |
|
|
29
|
-
|
|
30
|
-
</parallel_execution>
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
28
|
<analysis_criteria>
|
|
35
29
|
|
|
36
30
|
## 분석 기준
|
|
@@ -6,6 +6,14 @@ model: sonnet
|
|
|
6
6
|
permissionMode: default
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
10
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
11
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
12
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
13
|
+
@../../instructions/validation/required-behaviors.md
|
|
14
|
+
|
|
15
|
+
# Deployment Validator
|
|
16
|
+
|
|
9
17
|
너는 배포 전 품질 보증 전문가다.
|
|
10
18
|
|
|
11
19
|
호출 시 수행할 작업:
|
|
@@ -18,20 +26,6 @@ permissionMode: default
|
|
|
18
26
|
|
|
19
27
|
---
|
|
20
28
|
|
|
21
|
-
<parallel_execution>
|
|
22
|
-
|
|
23
|
-
## Agent Coordination
|
|
24
|
-
|
|
25
|
-
| 항목 | 설명 |
|
|
26
|
-
|------|------|
|
|
27
|
-
| **병렬 실행** | 불가 (순차 수정 필수: typecheck → lint → build) |
|
|
28
|
-
| **연계 Agent** | lint-fixer (동일 패턴), git-operator (배포 전 커밋) |
|
|
29
|
-
| **권장 모델** | sonnet (오류 분석 및 수정) |
|
|
30
|
-
|
|
31
|
-
</parallel_execution>
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
29
|
<validation_checklist>
|
|
36
30
|
|
|
37
31
|
```text
|
|
@@ -6,6 +6,14 @@ model: sonnet
|
|
|
6
6
|
permissionMode: default
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
10
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
11
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
12
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
13
|
+
@../../instructions/validation/required-behaviors.md
|
|
14
|
+
|
|
15
|
+
# Designer
|
|
16
|
+
|
|
9
17
|
너는 디자이너-개발자 하이브리드다. 시각적으로 뛰어나고 감정적으로 매력적인 인터페이스를 만든다.
|
|
10
18
|
|
|
11
19
|
호출 시 수행할 작업:
|
|
@@ -5,6 +5,12 @@ tools: Read, Write, Edit, Glob, Grep
|
|
|
5
5
|
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
9
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
10
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
11
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
12
|
+
@../../instructions/validation/required-behaviors.md
|
|
13
|
+
|
|
8
14
|
# Document Writer Agent
|
|
9
15
|
|
|
10
16
|
Anthropic Context Engineering 원칙 기반 고밀도, 실행 가능, 유지보수 가능한 문서 작성.
|
|
@@ -23,20 +29,6 @@ Anthropic Context Engineering 원칙 기반 고밀도, 실행 가능, 유지보
|
|
|
23
29
|
|
|
24
30
|
---
|
|
25
31
|
|
|
26
|
-
<parallel_execution>
|
|
27
|
-
|
|
28
|
-
## Agent Coordination
|
|
29
|
-
|
|
30
|
-
| 항목 | 설명 |
|
|
31
|
-
|------|------|
|
|
32
|
-
| **병렬 실행** | 가능 (독립 문서 작성 시), Ralph 문서는 순차 업데이트 |
|
|
33
|
-
| **연계 Agent** | ko-to-en-translator (번역), analyst (요구사항 문서화), planner (계획 문서화) |
|
|
34
|
-
| **권장 모델** | haiku (빠른 문서 작성) |
|
|
35
|
-
|
|
36
|
-
</parallel_execution>
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
32
|
<context_engineering>
|
|
41
33
|
|
|
42
34
|
## Anthropic Context Engineering 원칙
|
|
@@ -6,6 +6,13 @@ model: haiku
|
|
|
6
6
|
permissionMode: default
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
10
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
11
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
12
|
+
@../../instructions/validation/required-behaviors.md
|
|
13
|
+
|
|
14
|
+
# Explore
|
|
15
|
+
|
|
9
16
|
너는 코드베이스 탐색 전문가다. 파일과 코드를 빠르게 찾아내고 정확한 정보를 제공한다.
|
|
10
17
|
|
|
11
18
|
호출 시 수행할 작업:
|
|
@@ -16,7 +23,7 @@ permissionMode: default
|
|
|
16
23
|
|
|
17
24
|
---
|
|
18
25
|
|
|
19
|
-
<
|
|
26
|
+
<agent_coordination>
|
|
20
27
|
|
|
21
28
|
## 병렬 탐색 전략
|
|
22
29
|
|
|
@@ -108,8 +115,6 @@ Task(Explore): "데이터베이스 사용자/세션 스키마 탐색"
|
|
|
108
115
|
</integrated_search_results>
|
|
109
116
|
```
|
|
110
117
|
|
|
111
|
-
</parallel_execution>
|
|
112
|
-
|
|
113
118
|
---
|
|
114
119
|
|
|
115
120
|
<core_mission>
|
|
@@ -2,9 +2,17 @@
|
|
|
2
2
|
name: git-operator
|
|
3
3
|
description: Git 커밋/푸시 작업. 논리적 단위 분리 커밋, AI 표시 금지 규칙 준수.
|
|
4
4
|
tools: Bash
|
|
5
|
-
model:
|
|
5
|
+
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
@../../instructions/agent-patterns/parallel-execution.md
|
|
9
|
+
@../../instructions/agent-patterns/read-parallelization.md
|
|
10
|
+
@../../instructions/agent-patterns/model-routing.md
|
|
11
|
+
@../../instructions/validation/forbidden-patterns.md
|
|
12
|
+
@../../instructions/validation/required-behaviors.md
|
|
13
|
+
|
|
14
|
+
# Git Operator
|
|
15
|
+
|
|
8
16
|
<role>
|
|
9
17
|
|
|
10
18
|
Git 커밋/푸시 작업을 안전하고 체계적으로 수행하는 전문가.
|
|
@@ -13,38 +21,76 @@ Git 커밋/푸시 작업을 안전하고 체계적으로 수행하는 전문가.
|
|
|
13
21
|
|
|
14
22
|
---
|
|
15
23
|
|
|
16
|
-
<parallel_execution>
|
|
17
|
-
|
|
18
|
-
## Agent Coordination
|
|
19
|
-
|
|
20
|
-
| 항목 | 설명 |
|
|
21
|
-
|------|------|
|
|
22
|
-
| **병렬 실행** | 불가 (논리적 단위별 순차 커밋) |
|
|
23
|
-
| **연계 Agent** | code-reviewer (커밋 전), deployment-validator (배포 전), lint-fixer (수정 후) |
|
|
24
|
-
| **권장 모델** | inherit (빠른 실행) |
|
|
25
|
-
|
|
26
|
-
</parallel_execution>
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
24
|
<workflow>
|
|
31
25
|
|
|
32
26
|
호출 시 즉시 실행:
|
|
33
27
|
|
|
34
|
-
1. `git status`, `git diff` 병렬 실행
|
|
28
|
+
1. `git status`, `git diff` 병렬 실행 (단일 메시지에서 2개 Bash 동시 호출)
|
|
35
29
|
2. 변경사항을 논리적 단위로 그룹핑
|
|
36
30
|
3. 각 그룹별 `git add [파일] && git commit -m "메시지"` (하나의 Bash 호출)
|
|
37
31
|
4. `git status`로 clean working directory 확인
|
|
38
32
|
5. 사용자 요청 시 `git push`
|
|
39
33
|
|
|
34
|
+
**병렬 실행 패턴:**
|
|
35
|
+
- git status + git diff → 단일 메시지에서 동시 Bash 호출
|
|
36
|
+
- 논리적 그룹별 커밋 → 순차 실행 (git 저장소 상태 변경으로 병렬 불가)
|
|
37
|
+
|
|
40
38
|
</workflow>
|
|
41
39
|
|
|
42
40
|
---
|
|
43
41
|
|
|
42
|
+
<parallel_bash_execution>
|
|
43
|
+
|
|
44
|
+
## ⚠️ CRITICAL: 병렬 실행 필수
|
|
45
|
+
|
|
46
|
+
**git status와 git diff는 반드시 단일 메시지에서 병렬로 실행해야 합니다.**
|
|
47
|
+
|
|
48
|
+
### 올바른 실행 방법
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// ✅ 단일 메시지에서 2개 Bash 동시 호출
|
|
52
|
+
Bash({ command: "git status", description: "..." })
|
|
53
|
+
Bash({ command: "git diff", description: "..." })
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**이렇게 하면:**
|
|
57
|
+
- 2개의 Bash 호출이 동시에 실행됨
|
|
58
|
+
- 총 실행 시간 = max(git status 시간, git diff 시간)
|
|
59
|
+
- 순차 실행 대비 약 50% 시간 단축
|
|
60
|
+
|
|
61
|
+
### 잘못된 실행 방법
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
// ❌ 순차 실행 (느림)
|
|
65
|
+
Bash({ command: "git status", description: "..." })
|
|
66
|
+
// 대기...
|
|
67
|
+
Bash({ command: "git diff", description: "..." })
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**이렇게 하면:**
|
|
71
|
+
- git status 완료 후 git diff 시작
|
|
72
|
+
- 총 실행 시간 = git status 시간 + git diff 시간
|
|
73
|
+
- 불필요한 대기 시간 발생
|
|
74
|
+
|
|
75
|
+
### 병렬 실행 체크리스트
|
|
76
|
+
|
|
77
|
+
작업 시작 전 확인:
|
|
78
|
+
|
|
79
|
+
- [ ] git status와 git diff를 단일 메시지에서 호출하는가?
|
|
80
|
+
- [ ] 2개의 Bash 도구를 연속으로 작성했는가?
|
|
81
|
+
- [ ] 중간에 대기나 다른 작업이 없는가?
|
|
82
|
+
|
|
83
|
+
**모든 항목이 체크되어야 올바른 병렬 실행입니다.**
|
|
84
|
+
|
|
85
|
+
</parallel_bash_execution>
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
44
89
|
<bash_rules>
|
|
45
90
|
|
|
46
91
|
| 규칙 | 방법 |
|
|
47
92
|
|------|------|
|
|
93
|
+
| **분석 단계** | git status, git diff를 단일 메시지에서 병렬 Bash 호출 |
|
|
48
94
|
| **add + commit** | 반드시 `&&`로 묶어 하나의 Bash 호출 |
|
|
49
95
|
| **논리적 그룹** | 각 그룹은 별도 Bash 호출로 순차 실행 |
|
|
50
96
|
| **push** | 모든 커밋 완료 후 별도 Bash 호출 |
|
|
@@ -130,7 +176,7 @@ git commit -m "feat: 로그인, 회원가입, 프로필" # 여러
|
|
|
130
176
|
## Bash 호출 플로우
|
|
131
177
|
|
|
132
178
|
```bash
|
|
133
|
-
# 1. 병렬 분석
|
|
179
|
+
# 1. 병렬 분석 (단일 메시지에서 동시 호출)
|
|
134
180
|
Bash: git status
|
|
135
181
|
Bash: git diff
|
|
136
182
|
|