@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.
Files changed (66) hide show
  1. package/dist/index.js +163 -28
  2. package/package.json +1 -1
  3. package/templates/.claude/agents/analyst.md +6 -14
  4. package/templates/.claude/agents/architect.md +6 -14
  5. package/templates/.claude/agents/code-reviewer.md +8 -14
  6. package/templates/.claude/agents/dependency-manager.md +8 -14
  7. package/templates/.claude/agents/deployment-validator.md +8 -14
  8. package/templates/.claude/agents/designer.md +8 -0
  9. package/templates/.claude/agents/document-writer.md +6 -14
  10. package/templates/.claude/agents/explore.md +8 -3
  11. package/templates/.claude/agents/git-operator.md +63 -17
  12. package/templates/.claude/agents/implementation-executor.md +14 -37
  13. package/templates/.claude/agents/ko-to-en-translator.md +8 -13
  14. package/templates/.claude/agents/lint-fixer.md +8 -172
  15. package/templates/.claude/agents/planner.md +6 -14
  16. package/templates/.claude/agents/refactor-advisor.md +8 -14
  17. package/templates/.claude/commands/git-all.md +3 -167
  18. package/templates/.claude/commands/git-session.md +3 -71
  19. package/templates/.claude/commands/lint-fix.md +119 -82
  20. package/templates/.claude/commands/lint-init.md +2 -54
  21. package/templates/.claude/commands/pre-deploy.md +143 -82
  22. package/templates/.claude/commands/version-update.md +171 -66
  23. package/templates/.claude/instructions/agent-patterns/agent-coordination.md +208 -0
  24. package/templates/.claude/instructions/agent-patterns/index.md +264 -0
  25. package/templates/.claude/instructions/agent-patterns/model-routing.md +167 -0
  26. package/templates/.claude/instructions/agent-patterns/parallel-execution.md +91 -0
  27. package/templates/.claude/instructions/agent-patterns/read-parallelization.md +106 -0
  28. package/templates/.claude/instructions/index.md +350 -0
  29. package/templates/.claude/instructions/multi-agent/agent-roster.md +811 -0
  30. package/templates/.claude/{PARALLEL_AGENTS.md → instructions/multi-agent/coordination-guide.md} +27 -336
  31. package/templates/.claude/instructions/{parallel-agent-execution.md → multi-agent/execution-patterns.md} +127 -438
  32. package/templates/.claude/instructions/multi-agent/index.md +282 -0
  33. package/templates/.claude/instructions/multi-agent/performance-optimization.md +456 -0
  34. package/templates/.claude/instructions/tech-stack/design-standards.md +282 -0
  35. package/templates/.claude/instructions/tech-stack/index.md +70 -0
  36. package/templates/.claude/instructions/tech-stack/prisma-patterns.md +352 -0
  37. package/templates/.claude/instructions/tech-stack/tanstack-patterns.md +275 -0
  38. package/templates/.claude/instructions/validation/forbidden-patterns.md +281 -0
  39. package/templates/.claude/instructions/validation/index.md +32 -0
  40. package/templates/.claude/instructions/validation/required-behaviors.md +331 -0
  41. package/templates/.claude/instructions/validation/verification-checklist.md +318 -0
  42. package/templates/.claude/instructions/workflow-patterns/index.md +18 -0
  43. package/templates/.claude/instructions/workflow-patterns/phase-based-workflow.md +250 -0
  44. package/templates/.claude/instructions/workflow-patterns/sequential-thinking.md +217 -0
  45. package/templates/.claude/instructions/workflow-patterns/todowrite-pattern.md +215 -0
  46. package/templates/.claude/skills/bug-fix/SKILL.md +972 -0
  47. package/templates/.claude/skills/docs-creator/AGENTS.md +4 -1
  48. package/templates/.claude/skills/docs-creator/SKILL.md +258 -0
  49. package/templates/.claude/skills/docs-refactor/AGENTS.md +4 -1
  50. package/templates/.claude/skills/docs-refactor/SKILL.md +145 -0
  51. package/templates/.claude/skills/execute/SKILL.md +15 -242
  52. package/templates/.claude/skills/figma-to-code/AGENTS.md +4 -1
  53. package/templates/.claude/skills/figma-to-code/SKILL.md +306 -0
  54. package/templates/.claude/skills/global-uiux-design/AGENTS.md +4 -1
  55. package/templates/.claude/skills/global-uiux-design/SKILL.md +455 -125
  56. package/templates/.claude/skills/korea-uiux-design/AGENTS.md +4 -1
  57. package/templates/.claude/skills/korea-uiux-design/SKILL.md +461 -116
  58. package/templates/.claude/skills/nextjs-react-best-practices/SKILL.md +177 -0
  59. package/templates/.claude/skills/plan/SKILL.md +1102 -98
  60. package/templates/.claude/skills/prd/SKILL.md +367 -66
  61. package/templates/.claude/skills/ralph/AGENTS.md +4 -1
  62. package/templates/.claude/skills/ralph/SKILL.md +83 -0
  63. package/templates/.claude/skills/refactor/SKILL.md +1214 -0
  64. package/templates/.claude/skills/tanstack-start-react-best-practices/SKILL.md +149 -0
  65. package/templates/.claude/commands/bug-fix.md +0 -510
  66. 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 templateLinks = templates.map((t) => `- [${t}](docs/${t}/CLAUDE.md)`).join("\n");
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 \uD15C\uD50C\uB9BF\uC758 Claude Code \uBB38\uC11C\uB97C \uD3EC\uD568\uD569\uB2C8\uB2E4.
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 \uBB38\uC11C
174
+ ## \uD15C\uD50C\uB9BF \uBAA9\uB85D
108
175
 
109
- ${templateLinks}
176
+ ${templateSections}
110
177
 
111
- ## \uC0AC\uC6A9\uBC95
178
+ ---
112
179
 
113
- \uAC01 \uD15C\uD50C\uB9BF\uC758 \`CLAUDE.md\`\uB97C \uCC38\uC870\uD558\uC5EC \uD574\uB2F9 \uAE30\uC220 \uC2A4\uD0DD\uC758 \uAC00\uC774\uB4DC\uB77C\uC778\uC744 \uD655\uC778\uD558\uC138\uC694.
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) => skillsToCopy.add(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
- return counter;
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
- const agentsResponse = await prompts({
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
- const instructionsResponse = await prompts({
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
- totalFiles += skillsResult.files;
421
- totalDirectories += skillsResult.directories;
422
- logger.success(
423
- `Skills: ${skillsResult.files} files, ${skillsResult.directories} directories`
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.1");
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kood/claude-code",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
4
4
  "description": "Claude Code documentation installer for projects",
5
5
  "type": "module",
6
6
  "bin": "./dist/index.js",
@@ -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
- <parallel_execution>
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: inherit
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