| name | prompt-strategy |
| description | Develop and optimize AI prompt strategies for code generation. Use when creating new AI model strategies, optimizing prompts for Claude/GPT/Gemini/DeepSeek/Grok, or improving prompt quality. Includes model-specific optimization techniques. |
| allowed-tools | Read, Glob, Grep |
AI Prompt Strategy Skill
Visual Layout Builder์ AI ํ๋กฌํํธ ์ ๋ต ๊ฐ๋ฐ์ ์ํ ์ ๋ฌธ ์คํฌ์
๋๋ค. Claude, GPT, Gemini, DeepSeek, Grok ๋ฑ ๋ค์ํ AI ๋ชจ๋ธ์ ์ต์ ํ๋ ํ๋กฌํํธ๋ฅผ ์์ฑํฉ๋๋ค.
When to Use
- ์๋ก์ด AI ๋ชจ๋ธ ์ ๋ต ํด๋์ค ์ถ๊ฐ
- ๊ธฐ์กด ํ๋กฌํํธ ํ์ง ๊ฐ์
lib/prompt-strategies/ ์์
lib/prompt-generator.ts ์์
lib/prompt-templates.ts ์
๋ฐ์ดํธ
- ํ๋กฌํํธ ๊ฒ์ฆ ๋ก์ง ๊ฐ์
- AI ๋ชจ๋ธ๋ณ ์ต์ ํ ์์
Supported AI Models
| Provider | Models | Strategy Class |
|---|
| Anthropic | Claude Sonnet 4.5, Sonnet 4, Opus 4, Haiku 3.5 | ClaudeStrategy |
| OpenAI | GPT-4.1, GPT-4 Turbo, GPT-4 | GPTStrategy |
| Google | Gemini 2.5 Pro, 2.0 Pro, 2.0 Flash | GeminiStrategy |
| DeepSeek | R1, V3, Coder V2 | DeepSeekStrategy |
| xAI | Grok 3, Grok 2 | GrokStrategy |
Strategy Architecture
Directory Structure
lib/prompt-strategies/
โโโ base-strategy.ts # ๊ธฐ๋ณธ ์ ๋ต ํด๋์ค
โโโ claude-strategy.ts # Claude ์ต์ ํ
โโโ gpt-strategy.ts # GPT ์ต์ ํ
โโโ gemini-strategy.ts # Gemini ์ต์ ํ
โโโ deepseek-strategy.ts # DeepSeek ์ต์ ํ
โโโ grok-strategy.ts # Grok ์ต์ ํ
โโโ strategy-factory.ts # Factory pattern
โโโ index.ts # Public exports
Base Strategy Class
export abstract class BasePromptStrategy {
protected modelId: string
protected modelCapabilities: ModelCapabilities
abstract generatePrompt(
schema: LaydlerSchema,
framework: string,
cssSolution: string,
options?: PromptOptions
): GenerationResult
protected buildSystemPrompt(): string {
}
protected buildComponentSection(components: Component[]): string {
}
protected buildLayoutSection(
components: Component[],
breakpoints: Breakpoint[],
layouts: Record<string, LayoutConfig>
): string {
}
protected estimateTokens(prompt: string): number {
}
}
Creating a New Model Strategy
Step 1: Create Strategy Class
import { BasePromptStrategy } from './base-strategy'
import type { LaydlerSchema, GenerationResult, PromptOptions } from '@/types'
export class NewModelStrategy extends BasePromptStrategy {
constructor(modelId: string) {
super()
this.modelId = modelId
this.modelCapabilities = this.getModelCapabilities(modelId)
}
generatePrompt(
schema: LaydlerSchema,
framework: string,
cssSolution: string,
options?: PromptOptions
): GenerationResult {
const sections: string[] = []
sections.push(this.buildSystemPrompt(options))
sections.push(this.buildComponentSection(schema.components))
sections.push(this.buildLayoutSection(
schema.components,
schema.breakpoints,
schema.layouts
))
sections.push(this.buildModelSpecificInstructions(options))
const prompt = sections.join('\n\n---\n\n')
return {
success: true,
prompt,
estimatedTokens: this.estimateTokens(prompt)
}
}
private buildModelSpecificInstructions(options?: PromptOptions): string {
if (this.modelCapabilities.supportsChainOfThought && options?.chainOfThought) {
return `
## Reasoning Process
Think through each component step by step:
1. Analyze the semantic tag and its purpose
2. Consider the positioning strategy
3. Plan the layout implementation
4. Generate the code
Show your reasoning before providing the final code.
`
}
return ''
}
}
Step 2: Register in Factory
import { NewModelStrategy } from './new-model-strategy'
export function createPromptStrategy(modelId: string): BasePromptStrategy {
const provider = getProviderFromModelId(modelId)
switch (provider) {
case 'claude':
return new ClaudeStrategy(modelId)
case 'gpt':
return new GPTStrategy(modelId)
case 'gemini':
return new GeminiStrategy(modelId)
case 'deepseek':
return new DeepSeekStrategy(modelId)
case 'grok':
return new GrokStrategy(modelId)
case 'new-model':
return new NewModelStrategy(modelId)
default:
return new BasePromptStrategy(modelId)
}
}
Step 3: Add Model Registry Entry
export const AI_MODELS: AIModelInfo[] = [
{
id: 'new-model-v1',
name: 'New Model V1',
provider: 'new-provider',
contextWindow: 128000,
maxOutput: 8192,
capabilities: {
supportsChainOfThought: true,
supportsExtendedThinking: false,
codeSpecialization: 'general',
costTier: 'medium'
}
}
]
Model-Specific Optimizations
Claude Optimization
if (options?.optimizationLevel === 'quality') {
systemPrompt += `
<thinking>
Before generating code, analyze:
1. Component hierarchy and relationships
2. Responsive behavior across breakpoints
3. CSS Grid vs Flexbox decision points
4. Accessibility requirements
</thinking>
`
}
GPT Optimization
if (modelId.includes('o1')) {
return this.buildUserOnlyPrompt(schema, framework, cssSolution)
}
Gemini Optimization
instructions += `
## Output Format
Return the code in a structured format:
\`\`\`json
{
"components": [
{
"name": "ComponentName",
"code": "// React component code"
}
],
"layout": "// Main layout component"
}
\`\`\`
`
DeepSeek Optimization
if (modelId.includes('coder')) {
systemPrompt = `You are an expert React/TypeScript developer.
Generate production-ready code following these specifications exactly.
Prioritize code correctness and TypeScript type safety.`
}
Prompt Quality Guidelines
DO Include
## Component Specifications
For each component, specify:
- **Semantic Tag**: The HTML5 semantic element
- **Positioning**: CSS positioning strategy
- **Layout**: Internal layout (flex/grid/container)
- **Canvas Position**: Grid coordinates for visual layout
## Visual Layout (Canvas Grid)
The canvas represents the visual arrangement:
- Grid: 12 columns ร 8 rows (desktop)
- Each component has x, y, width, height in grid units
- Use CSS Grid for 2D positioning
- Respect the visual arrangement in generated code
DO NOT Include
โ DO NOT Generate:
- Theme colors (bg-blue, bg-purple, text-white, gradients)
- Shadows (shadow-sm, shadow-md, shadow-lg)
- Rounded corners (rounded-lg, rounded-xl)
- Demo content or placeholder text with specific styling
Layout-Only Philosophy
## Layout-Only Output
Generate pure structural code:
โ
Layout classes (flex, grid, container)
โ
Positioning classes (fixed, sticky, static)
โ
Spacing utilities (p-4, gap-6, m-auto)
โ
Border for structure (border-b, border-gray-300)
โ
Responsive utilities (hidden lg:block)
โ NO theme colors, shadows, or decorative styling
Canvas Grid to CSS Grid Conversion
export function canvasToGridPositions(
components: Component[],
breakpoint: string,
gridCols: number,
gridRows: number
): GridPosition[] {
return components
.filter(c => hasCanvasLayout(c, breakpoint))
.map(c => {
const layout = getCanvasLayoutForBreakpoint(c, breakpoint)!
return {
componentId: c.id,
gridColumn: `${layout.x + 1} / ${layout.x + layout.width + 1}`,
gridRow: `${layout.y + 1} / ${layout.y + layout.height + 1}`,
gridArea: `${layout.y + 1} / ${layout.x + 1} / ${layout.y + layout.height + 1} / ${layout.x + layout.width + 1}`
}
})
}
Visual Layout Description
export function describeVisualLayout(
components: Component[],
breakpoint: string,
gridCols: number,
gridRows: number
): VisualLayoutDescription {
return {
summary: `${gridCols}-column ร ${gridRows}-row grid system with ${components.length} components`,
rowByRow: generateRowByRowDescription(components, breakpoint),
spatialRelationships: analyzeSpatialRelationships(components, breakpoint),
implementationHints: generateImplementationHints(components, breakpoint)
}
}
Prompt Validation
Required Validations
export function validatePromptBreakpoints(
prompt: string,
schema: LaydlerSchema
): ValidationResult {
const issues: ValidationIssue[] = []
for (const bp of schema.breakpoints) {
if (!prompt.includes(bp.name)) {
issues.push({
code: 'MISSING_BREAKPOINT_IN_PROMPT',
message: `Breakpoint "${bp.name}" not mentioned in prompt`
})
}
}
if (!prompt.includes('grid') && !prompt.includes('Grid')) {
issues.push({
code: 'MISSING_GRID_INFO',
message: 'Canvas grid layout information not included'
})
}
return {
valid: issues.length === 0,
issues
}
}
Usage Example
import { createPromptStrategy } from '@/lib/prompt-strategies'
import { generatePrompt } from '@/lib/prompt-generator'
const strategy = createPromptStrategy('claude-sonnet-4.5')
const result = strategy.generatePrompt(schema, 'react', 'tailwind', {
optimizationLevel: 'quality',
chainOfThought: true,
verbosity: 'detailed'
})
const result = generatePrompt(
schema,
'react',
'tailwind',
componentLinks
)
Testing New Strategies
import { createPromptStrategy } from '@/lib/prompt-strategies'
import { sampleSchemas } from '@/lib/sample-data'
const strategy = createPromptStrategy('new-model-v1')
for (const [name, schema] of Object.entries(sampleSchemas)) {
console.log(`Testing ${name}...`)
const result = strategy.generatePrompt(schema, 'react', 'tailwind')
if (result.success) {
console.log(`โ
${name}: ${result.estimatedTokens} tokens`)
} else {
console.log(`โ ${name}: ${result.errors?.join(', ')}`)
}
}
Reference Files
lib/prompt-strategies/ - ๋ชจ๋ ์ ๋ต ํด๋์ค
lib/prompt-generator.ts - ๋ฉ์ธ ์์ฑ๊ธฐ
lib/prompt-templates.ts - ํ
ํ๋ฆฟ ์ ์
lib/ai-model-registry.ts - ๋ชจ๋ธ ๋ฉํ๋ฐ์ดํฐ
lib/canvas-to-grid.ts - CanvasโCSS Grid ๋ณํ
lib/visual-layout-descriptor.ts - ์์ฐ์ด ์ค๋ช
์์ฑ
docs/AI_MODELS_GUIDE.md - AI ๋ชจ๋ธ ๊ฐ์ด๋