@kood/claude-code 0.5.0 → 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 +179 -33
  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) => {
@@ -144,15 +211,24 @@ var listAvailableTemplates = async () => {
144
211
  }
145
212
  return templates;
146
213
  };
147
- var TEMPLATE_SKILLS_MAP = {
214
+ var FRAMEWORK_SPECIFIC_SKILLS_MAP = {
148
215
  nextjs: ["nextjs-react-best-practices", "korea-uiux-design", "figma-to-code"],
149
216
  "tanstack-start": [
150
217
  "tanstack-start-react-best-practices",
151
218
  "korea-uiux-design",
152
219
  "figma-to-code"
153
220
  ]
154
- // hono와 npx는 스킬 없음
221
+ // hono와 npx는 프레임워크별 스킬 없음
155
222
  };
223
+ var COMMON_SKILLS = [
224
+ "global-uiux-design",
225
+ "docs-creator",
226
+ "docs-refactor",
227
+ "plan",
228
+ "prd",
229
+ "ralph",
230
+ "execute"
231
+ ];
156
232
  var copySkills = async (templates, targetDir) => {
157
233
  const counter = { files: 0, directories: 0 };
158
234
  const targetSkillsDir = path.join(targetDir, ".claude", "skills");
@@ -162,9 +238,17 @@ var copySkills = async (templates, targetDir) => {
162
238
  }
163
239
  await fs.ensureDir(targetSkillsDir);
164
240
  const skillsToCopy = /* @__PURE__ */ new Set();
241
+ const skillTemplateMap = /* @__PURE__ */ new Map();
242
+ COMMON_SKILLS.forEach((skill) => skillsToCopy.add(skill));
165
243
  for (const template of templates) {
166
- const skills = TEMPLATE_SKILLS_MAP[template] || [];
167
- skills.forEach((skill) => skillsToCopy.add(skill));
244
+ const skills = FRAMEWORK_SPECIFIC_SKILLS_MAP[template] || [];
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
+ });
168
252
  }
169
253
  for (const skill of skillsToCopy) {
170
254
  const skillSrc = path.join(skillsSrc, skill);
@@ -176,7 +260,19 @@ var copySkills = async (templates, targetDir) => {
176
260
  await copyRecursive(skillSrc, skillDest, counter);
177
261
  }
178
262
  }
179
- 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
+ };
180
276
  };
181
277
  var copyCommands = async (_templates, targetDir) => {
182
278
  const counter = { files: 0, directories: 0 };
@@ -237,10 +333,11 @@ var checkAllExtrasExist = async (templates) => {
237
333
  const commandsSrc = path.join(claudeDir, "commands");
238
334
  const agentsSrc = path.join(claudeDir, "agents");
239
335
  const instructionsSrc = path.join(claudeDir, "instructions");
240
- const hasSkills = templates.some((template) => {
241
- const skills = TEMPLATE_SKILLS_MAP[template];
336
+ const hasFrameworkSkills = templates.some((template) => {
337
+ const skills = FRAMEWORK_SPECIFIC_SKILLS_MAP[template];
242
338
  return skills && skills.length > 0;
243
339
  });
340
+ const hasSkills = COMMON_SKILLS.length > 0 || hasFrameworkSkills;
244
341
  const hasCommands = await hasFiles(commandsSrc);
245
342
  const hasAgents = await hasFiles(agentsSrc);
246
343
  const hasInstructions = await hasFiles(instructionsSrc);
@@ -255,6 +352,26 @@ var TEMPLATE_DESCRIPTIONS = {
255
352
  };
256
353
  var init = async (options) => {
257
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
+ }
258
375
  const availableTemplates = await listAvailableTemplates();
259
376
  if (availableTemplates.length === 0) {
260
377
  logger.error("No templates found. Package may be corrupted.");
@@ -364,22 +481,10 @@ var init = async (options) => {
364
481
  installCommands = commandsResponse.install ?? false;
365
482
  }
366
483
  if (hasAgents) {
367
- const agentsResponse = await prompts({
368
- type: "confirm",
369
- name: "install",
370
- message: "Install agents to .claude/agents/?",
371
- initial: false
372
- });
373
- installAgents = agentsResponse.install ?? false;
484
+ installAgents = true;
374
485
  }
375
486
  if (hasInstructions) {
376
- const instructionsResponse = await prompts({
377
- type: "confirm",
378
- name: "install",
379
- message: "Install instructions to .claude/instructions/?",
380
- initial: false
381
- });
382
- installInstructions = instructionsResponse.install ?? false;
487
+ installInstructions = true;
383
488
  }
384
489
  }
385
490
  if (installSkills || installCommands || installAgents || installInstructions) {
@@ -406,11 +511,52 @@ var init = async (options) => {
406
511
  logger.blank();
407
512
  logger.info("Installing skills...");
408
513
  const skillsResult = await copySkills(templates, targetDir);
409
- totalFiles += skillsResult.files;
410
- totalDirectories += skillsResult.directories;
411
- logger.success(
412
- `Skills: ${skillsResult.files} files, ${skillsResult.directories} directories`
413
- );
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
+ }
414
560
  } else if (installSkills && !hasSkills) {
415
561
  logger.warn("No skills found in selected templates.");
416
562
  }
@@ -481,7 +627,7 @@ var init = async (options) => {
481
627
 
482
628
  // src/index.ts
483
629
  var program = new Command();
484
- program.name("claude-code").description("Claude Code documentation installer for projects").version("0.5.0");
630
+ program.name("claude-code").description("Claude Code documentation installer for projects").version("0.5.3");
485
631
  program.option(
486
632
  "-t, --template <names>",
487
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.0",
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>