omgkit 2.5.2 → 2.7.0

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/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
8
8
 
9
9
  > **AI Team System for Claude Code**
10
- > 23 Agents • 58 Commands • 76 Skills • 10 Modes
10
+ > 23 Agents • 58 Commands • 88 Skills • 10 Modes
11
11
  > *"Think Omega. Build Omega. Be Omega."*
12
12
 
13
13
  OMGKIT transforms Claude Code into an autonomous AI development team with sprint management, specialized agents, and Omega-level thinking for 10x-1000x productivity improvements.
@@ -18,7 +18,7 @@ OMGKIT transforms Claude Code into an autonomous AI development team with sprint
18
18
  |-----------|-------|-------------|
19
19
  | **Agents** | 23 | Specialized AI team members |
20
20
  | **Commands** | 58 | Slash commands for every task |
21
- | **Skills** | 76 | Domain expertise modules |
21
+ | **Skills** | 88 | Domain expertise modules |
22
22
  | **Modes** | 10 | Behavioral configurations |
23
23
  | **Sprint Management** | ✅ | Vision, backlog, team autonomy |
24
24
  | **Omega Thinking** | ✅ | 7 modes for 10x-1000x solutions |
@@ -204,6 +204,25 @@ Switch modes with: `/mode <name>`
204
204
  | 🕸️ Systemic | Interconnections and emergence |
205
205
  | ⚛️ Quantum | Multiple possibilities |
206
206
 
207
+ ## 🧠 AI Engineering Skills (12)
208
+
209
+ Based on Chip Huyen's "AI Engineering" book, OMGKIT includes comprehensive skills for building production AI applications:
210
+
211
+ | Skill | Description |
212
+ |-------|-------------|
213
+ | `foundation-models` | Model architecture, sampling, structured outputs |
214
+ | `evaluation-methodology` | AI-as-judge, semantic similarity, ELO ranking |
215
+ | `ai-system-evaluation` | Benchmarks, model selection, cost analysis |
216
+ | `prompt-engineering` | Few-shot, chain-of-thought, injection defense |
217
+ | `rag-systems` | Chunking, embedding, hybrid retrieval, reranking |
218
+ | `ai-agents` | Tool use, ReAct, Plan-and-Execute, memory |
219
+ | `finetuning` | LoRA, QLoRA, PEFT, model merging |
220
+ | `dataset-engineering` | Curation, deduplication, synthesis |
221
+ | `inference-optimization` | Quantization, batching, caching, vLLM |
222
+ | `ai-architecture` | Gateway, routing, observability |
223
+ | `guardrails-safety` | Input/output guards, PII protection |
224
+ | `user-feedback` | Explicit/implicit signals, A/B testing |
225
+
207
226
  ## 🛠️ CLI Commands
208
227
 
209
228
  ```bash
package/lib/cli.js CHANGED
@@ -58,7 +58,7 @@ ${COLORS.magenta}╔════════════════════
58
58
  `;
59
59
 
60
60
  /**
61
- * Get the plugin installation directory
61
+ * Get the plugin backup directory (for reference/updates)
62
62
  * @param {string} [homeDir] - Optional home directory override for testing
63
63
  * @returns {string} Plugin directory path
64
64
  */
@@ -67,6 +67,160 @@ export function getPluginDir(homeDir) {
67
67
  return join(home, '.claude', 'plugins', 'omgkit');
68
68
  }
69
69
 
70
+ /**
71
+ * Get the Claude Code commands directory
72
+ * @param {string} [homeDir] - Optional home directory override for testing
73
+ * @returns {string} Commands directory path
74
+ */
75
+ export function getCommandsDir(homeDir) {
76
+ const home = homeDir || process.env.HOME || process.env.USERPROFILE;
77
+ return join(home, '.claude', 'commands');
78
+ }
79
+
80
+ /**
81
+ * Get the Claude Code skills directory
82
+ * @param {string} [homeDir] - Optional home directory override for testing
83
+ * @returns {string} Skills directory path
84
+ */
85
+ export function getSkillsDir(homeDir) {
86
+ const home = homeDir || process.env.HOME || process.env.USERPROFILE;
87
+ return join(home, '.claude', 'skills');
88
+ }
89
+
90
+ /**
91
+ * Get the Claude Code agents directory
92
+ * @param {string} [homeDir] - Optional home directory override for testing
93
+ * @returns {string} Agents directory path
94
+ */
95
+ export function getAgentsDir(homeDir) {
96
+ const home = homeDir || process.env.HOME || process.env.USERPROFILE;
97
+ return join(home, '.claude', 'agents');
98
+ }
99
+
100
+ /**
101
+ * Copy commands from plugin to Claude Code commands directory
102
+ * Commands are flattened with category prefix (e.g., dev/fix.md -> dev-fix.md)
103
+ * @param {string} pluginSrc - Source plugin directory
104
+ * @param {string} commandsDest - Destination commands directory
105
+ * @returns {number} Number of commands copied
106
+ */
107
+ function copyCommands(pluginSrc, commandsDest) {
108
+ const commandsSrc = join(pluginSrc, 'commands');
109
+ if (!existsSync(commandsSrc)) return 0;
110
+
111
+ mkdirSync(commandsDest, { recursive: true });
112
+ let count = 0;
113
+
114
+ // Get all category directories
115
+ const categories = readdirSync(commandsSrc).filter(f =>
116
+ statSync(join(commandsSrc, f)).isDirectory()
117
+ );
118
+
119
+ for (const category of categories) {
120
+ const categoryPath = join(commandsSrc, category);
121
+ const files = readdirSync(categoryPath).filter(f => f.endsWith('.md'));
122
+
123
+ for (const file of files) {
124
+ const srcPath = join(categoryPath, file);
125
+ // Use category prefix for clarity (e.g., dev-fix.md)
126
+ const destName = `${category}-${file}`;
127
+ const destPath = join(commandsDest, destName);
128
+ cpSync(srcPath, destPath);
129
+ count++;
130
+ }
131
+ }
132
+
133
+ return count;
134
+ }
135
+
136
+ /**
137
+ * Copy skills from plugin to Claude Code skills directory
138
+ * Preserves the skill directory structure (category/skill-name/SKILL.md)
139
+ * @param {string} pluginSrc - Source plugin directory
140
+ * @param {string} skillsDest - Destination skills directory
141
+ * @returns {number} Number of skills copied
142
+ */
143
+ function copySkills(pluginSrc, skillsDest) {
144
+ const skillsSrc = join(pluginSrc, 'skills');
145
+ if (!existsSync(skillsSrc)) return 0;
146
+
147
+ mkdirSync(skillsDest, { recursive: true });
148
+ let count = 0;
149
+
150
+ // Get all category directories
151
+ const categories = readdirSync(skillsSrc).filter(f =>
152
+ statSync(join(skillsSrc, f)).isDirectory()
153
+ );
154
+
155
+ for (const category of categories) {
156
+ const categoryPath = join(skillsSrc, category);
157
+ const skills = readdirSync(categoryPath).filter(f =>
158
+ statSync(join(categoryPath, f)).isDirectory()
159
+ );
160
+
161
+ for (const skill of skills) {
162
+ const skillSrcPath = join(categoryPath, skill);
163
+ // Use flat structure with unique name: category-skill-name
164
+ const skillDestPath = join(skillsDest, `${category}-${skill}`);
165
+ cpSync(skillSrcPath, skillDestPath, { recursive: true });
166
+ count++;
167
+ }
168
+ }
169
+
170
+ return count;
171
+ }
172
+
173
+ /**
174
+ * Copy agents from plugin to Claude Code agents directory
175
+ * @param {string} pluginSrc - Source plugin directory
176
+ * @param {string} agentsDest - Destination agents directory
177
+ * @returns {number} Number of agents copied
178
+ */
179
+ function copyAgents(pluginSrc, agentsDest) {
180
+ const agentsSrc = join(pluginSrc, 'agents');
181
+ if (!existsSync(agentsSrc)) return 0;
182
+
183
+ mkdirSync(agentsDest, { recursive: true });
184
+ let count = 0;
185
+
186
+ const files = readdirSync(agentsSrc).filter(f => f.endsWith('.md'));
187
+
188
+ for (const file of files) {
189
+ const srcPath = join(agentsSrc, file);
190
+ const destPath = join(agentsDest, file);
191
+ cpSync(srcPath, destPath);
192
+ count++;
193
+ }
194
+
195
+ return count;
196
+ }
197
+
198
+ /**
199
+ * Copy modes as special commands
200
+ * @param {string} pluginSrc - Source plugin directory
201
+ * @param {string} commandsDest - Destination commands directory
202
+ * @returns {number} Number of modes copied
203
+ */
204
+ function copyModes(pluginSrc, commandsDest) {
205
+ const modesSrc = join(pluginSrc, 'modes');
206
+ if (!existsSync(modesSrc)) return 0;
207
+
208
+ mkdirSync(commandsDest, { recursive: true });
209
+ let count = 0;
210
+
211
+ const files = readdirSync(modesSrc).filter(f => f.endsWith('.md'));
212
+
213
+ for (const file of files) {
214
+ const srcPath = join(modesSrc, file);
215
+ // Prefix modes with 'mode-' for clarity
216
+ const destPath = join(commandsDest, `mode-${file}`);
217
+ cpSync(srcPath, destPath);
218
+ count++;
219
+ }
220
+
221
+ return count;
222
+ }
223
+
70
224
  /**
71
225
  * Get package version from package.json
72
226
  * @returns {string} Version string
@@ -112,15 +266,44 @@ export function installPlugin(options = {}) {
112
266
 
113
267
  const pluginSrc = join(getPackageRoot(), 'plugin');
114
268
  const pluginDest = getPluginDir(homeDir);
269
+ const commandsDest = getCommandsDir(homeDir);
270
+ const skillsDest = getSkillsDir(homeDir);
271
+ const agentsDest = getAgentsDir(homeDir);
115
272
 
116
273
  if (!existsSync(pluginSrc)) {
117
274
  if (!silent) log.error('Plugin source not found. Package may be corrupted.');
118
275
  return { success: false, error: 'SOURCE_NOT_FOUND' };
119
276
  }
120
277
 
278
+ const stats = {
279
+ commands: 0,
280
+ skills: 0,
281
+ agents: 0,
282
+ modes: 0
283
+ };
284
+
121
285
  try {
286
+ // Step 1: Copy full plugin to backup location for reference
287
+ if (!silent) log.info('Copying plugin to backup location...');
122
288
  mkdirSync(pluginDest, { recursive: true });
123
289
  cpSync(pluginSrc, pluginDest, { recursive: true });
290
+
291
+ // Step 2: Install commands to ~/.claude/commands/
292
+ if (!silent) log.info('Installing commands...');
293
+ stats.commands = copyCommands(pluginSrc, commandsDest);
294
+
295
+ // Step 3: Install skills to ~/.claude/skills/
296
+ if (!silent) log.info('Installing skills...');
297
+ stats.skills = copySkills(pluginSrc, skillsDest);
298
+
299
+ // Step 4: Install agents to ~/.claude/agents/
300
+ if (!silent) log.info('Installing agents...');
301
+ stats.agents = copyAgents(pluginSrc, agentsDest);
302
+
303
+ // Step 5: Install modes as commands
304
+ if (!silent) log.info('Installing modes...');
305
+ stats.modes = copyModes(pluginSrc, commandsDest);
306
+
124
307
  } catch (err) {
125
308
  if (!silent) log.error(`Installation failed: ${err.message}`);
126
309
  return { success: false, error: err.message };
@@ -128,24 +311,39 @@ export function installPlugin(options = {}) {
128
311
 
129
312
  if (!silent) {
130
313
  log.success('Plugin installed successfully!');
131
- log.info(`Location: ${pluginDest}`);
132
314
  console.log(`
133
- ${COLORS.bright}Installed:${COLORS.reset}
134
- 📦 23 Agents
135
- 54 Commands
136
- 🧠 43 Skills
137
- 🎭 9 Modes
315
+ ${COLORS.bright}Installed to Claude Code:${COLORS.reset}
316
+ ${COLORS.cyan}Commands:${COLORS.reset} ${commandsDest} (${stats.commands} commands + ${stats.modes} modes)
317
+ ${COLORS.cyan}Skills:${COLORS.reset} ${skillsDest} (${stats.skills} skills)
318
+ ${COLORS.cyan}Agents:${COLORS.reset} ${agentsDest} (${stats.agents} agents)
319
+ ${COLORS.cyan}Backup:${COLORS.reset} ${pluginDest}
320
+
321
+ ${COLORS.bright}Summary:${COLORS.reset}
322
+ 📦 ${stats.agents} Agents
323
+ ⚡ ${stats.commands} Commands
324
+ 🧠 ${stats.skills} Skills
325
+ 🎭 ${stats.modes} Modes
138
326
 
139
327
  ${COLORS.bright}Next steps:${COLORS.reset}
140
- 1. cd your-project
141
- 2. omgkit init
142
- 3. Open Claude Code and type /help
328
+ 1. Restart Claude Code to load new commands
329
+ 2. Type /help to see available commands
330
+ 3. Try /dev-fix, /git-commit, /planning-plan, etc.
143
331
 
144
332
  ${COLORS.magenta}🔮 Think Omega. Build Omega. Be Omega.${COLORS.reset}
145
333
  `);
146
334
  }
147
335
 
148
- return { success: true, path: pluginDest };
336
+ return {
337
+ success: true,
338
+ path: pluginDest,
339
+ stats,
340
+ locations: {
341
+ commands: commandsDest,
342
+ skills: skillsDest,
343
+ agents: agentsDest,
344
+ backup: pluginDest
345
+ }
346
+ };
149
347
  }
150
348
 
151
349
  /**
@@ -248,18 +446,23 @@ export function doctor(options = {}) {
248
446
  }
249
447
 
250
448
  const pluginDir = getPluginDir(homeDir);
449
+ const commandsDir = getCommandsDir(homeDir);
450
+ const skillsDir = getSkillsDir(homeDir);
451
+ const agentsDir = getAgentsDir(homeDir);
452
+
251
453
  const result = {
252
454
  plugin: { installed: false, components: {} },
455
+ claudeCode: { commands: 0, skills: 0, agents: 0 },
253
456
  project: { initialized: false, files: {} }
254
457
  };
255
458
 
256
- // Check plugin
257
- if (!silent) console.log(`${COLORS.bright}Plugin Status${COLORS.reset}`);
459
+ // Check backup plugin location
460
+ if (!silent) console.log(`${COLORS.bright}Backup Plugin Location${COLORS.reset}`);
258
461
 
259
462
  if (existsSync(pluginDir)) {
260
463
  result.plugin.installed = true;
261
464
  result.plugin.path = pluginDir;
262
- if (!silent) log.success(`Installed at ${pluginDir}`);
465
+ if (!silent) log.success(`Backup at ${pluginDir}`);
263
466
 
264
467
  const components = [
265
468
  { path: 'commands', name: 'Commands' },
@@ -282,7 +485,84 @@ export function doctor(options = {}) {
282
485
  });
283
486
  } else {
284
487
  if (!silent) {
285
- log.error('Not installed');
488
+ log.warn('Backup not found (optional)');
489
+ }
490
+ }
491
+
492
+ // Check Claude Code directories (the important ones)
493
+ if (!silent) console.log(`\n${COLORS.bright}Claude Code Integration${COLORS.reset}`);
494
+
495
+ // Count commands
496
+ if (existsSync(commandsDir)) {
497
+ const commandPrefixes = ['dev-', 'git-', 'planning-', 'quality-', 'context-', 'design-', 'omega-', 'sprint-', 'mode-'];
498
+ const files = readdirSync(commandsDir).filter(f =>
499
+ f.endsWith('.md') && commandPrefixes.some(p => f.startsWith(p))
500
+ );
501
+ result.claudeCode.commands = files.length;
502
+ if (!silent) {
503
+ if (files.length > 0) {
504
+ log.success(`Commands: ${files.length} installed at ${commandsDir}`);
505
+ } else {
506
+ log.warn(`Commands: None found at ${commandsDir}`);
507
+ }
508
+ }
509
+ } else {
510
+ if (!silent) log.warn(`Commands: Directory not found (${commandsDir})`);
511
+ }
512
+
513
+ // Count skills
514
+ if (existsSync(skillsDir)) {
515
+ const skillPrefixes = ['databases-', 'devops-', 'tools-', 'languages-', 'frameworks-', 'frontend-', 'backend-', 'mobile-', 'integrations-', 'security-', 'testing-', 'methodology-', 'ai-engineering-', 'omega-'];
516
+ const dirs = readdirSync(skillsDir).filter(f => {
517
+ const fullPath = join(skillsDir, f);
518
+ return statSync(fullPath).isDirectory() && skillPrefixes.some(p => f.startsWith(p));
519
+ });
520
+ result.claudeCode.skills = dirs.length;
521
+ if (!silent) {
522
+ if (dirs.length > 0) {
523
+ log.success(`Skills: ${dirs.length} installed at ${skillsDir}`);
524
+ } else {
525
+ log.warn(`Skills: None found at ${skillsDir}`);
526
+ }
527
+ }
528
+ } else {
529
+ if (!silent) log.warn(`Skills: Directory not found (${skillsDir})`);
530
+ }
531
+
532
+ // Count agents
533
+ if (existsSync(agentsDir)) {
534
+ const agentFiles = [
535
+ 'code-reviewer.md', 'architect.md', 'debugger.md', 'api-designer.md',
536
+ 'database-admin.md', 'cicd-manager.md', 'oracle.md', 'researcher.md',
537
+ 'project-manager.md', 'copywriter.md', 'vulnerability-scanner.md',
538
+ 'security-auditor.md', 'journal-writer.md', 'sprint-master.md',
539
+ 'tester.md', 'fullstack-developer.md', 'planner.md', 'docs-manager.md',
540
+ 'git-manager.md', 'ui-ux-designer.md', 'scout.md', 'brainstormer.md',
541
+ 'pipeline-architect.md'
542
+ ];
543
+ const installed = agentFiles.filter(f => existsSync(join(agentsDir, f)));
544
+ result.claudeCode.agents = installed.length;
545
+ if (!silent) {
546
+ if (installed.length > 0) {
547
+ log.success(`Agents: ${installed.length} installed at ${agentsDir}`);
548
+ } else {
549
+ log.warn(`Agents: None found at ${agentsDir}`);
550
+ }
551
+ }
552
+ } else {
553
+ if (!silent) log.warn(`Agents: Directory not found (${agentsDir})`);
554
+ }
555
+
556
+ // Overall status
557
+ const isInstalled = result.claudeCode.commands > 0 ||
558
+ result.claudeCode.skills > 0 ||
559
+ result.claudeCode.agents > 0;
560
+
561
+ if (!silent) {
562
+ if (isInstalled) {
563
+ console.log(`\n${COLORS.green}✓ OMGKIT is properly installed in Claude Code${COLORS.reset}`);
564
+ } else {
565
+ console.log(`\n${COLORS.red}✗ OMGKIT is not installed in Claude Code${COLORS.reset}`);
286
566
  log.info('Run: omgkit install');
287
567
  }
288
568
  }
@@ -322,6 +602,34 @@ export function doctor(options = {}) {
322
602
  return result;
323
603
  }
324
604
 
605
+ /**
606
+ * Remove OMGKIT files from a directory based on naming patterns
607
+ * @param {string} dir - Directory to clean
608
+ * @param {string[]} prefixes - File prefixes to remove (e.g., ['dev-', 'git-'])
609
+ * @returns {number} Number of files removed
610
+ */
611
+ function cleanOmgkitFiles(dir, prefixes) {
612
+ if (!existsSync(dir)) return 0;
613
+
614
+ let count = 0;
615
+ const items = readdirSync(dir);
616
+
617
+ for (const item of items) {
618
+ const itemPath = join(dir, item);
619
+ const stat = statSync(itemPath);
620
+
621
+ // Check if item matches any prefix
622
+ const matchesPrefix = prefixes.some(p => item.startsWith(p));
623
+
624
+ if (matchesPrefix) {
625
+ rmSync(itemPath, { recursive: true, force: true });
626
+ count++;
627
+ }
628
+ }
629
+
630
+ return count;
631
+ }
632
+
325
633
  /**
326
634
  * Uninstall the plugin
327
635
  * @param {Object} options - Options
@@ -338,15 +646,86 @@ export function uninstallPlugin(options = {}) {
338
646
  }
339
647
 
340
648
  const pluginDir = getPluginDir(homeDir);
649
+ const commandsDir = getCommandsDir(homeDir);
650
+ const skillsDir = getSkillsDir(homeDir);
651
+ const agentsDir = getAgentsDir(homeDir);
652
+
653
+ const removed = {
654
+ backup: false,
655
+ commands: 0,
656
+ skills: 0,
657
+ agents: 0
658
+ };
659
+
660
+ // Command prefixes from our categories
661
+ const commandPrefixes = [
662
+ 'dev-', 'git-', 'planning-', 'quality-', 'context-',
663
+ 'design-', 'omega-', 'sprint-', 'mode-'
664
+ ];
665
+
666
+ // Skill prefixes from our categories
667
+ const skillPrefixes = [
668
+ 'databases-', 'devops-', 'tools-', 'languages-', 'frameworks-',
669
+ 'frontend-', 'backend-', 'mobile-', 'integrations-', 'security-',
670
+ 'testing-', 'methodology-', 'ai-engineering-', 'omega-'
671
+ ];
672
+
673
+ // Agent files we installed
674
+ const agentFiles = [
675
+ 'code-reviewer.md', 'architect.md', 'debugger.md', 'api-designer.md',
676
+ 'database-admin.md', 'cicd-manager.md', 'oracle.md', 'researcher.md',
677
+ 'project-manager.md', 'copywriter.md', 'vulnerability-scanner.md',
678
+ 'security-auditor.md', 'journal-writer.md', 'sprint-master.md',
679
+ 'tester.md', 'fullstack-developer.md', 'planner.md', 'docs-manager.md',
680
+ 'git-manager.md', 'ui-ux-designer.md', 'scout.md', 'brainstormer.md',
681
+ 'pipeline-architect.md'
682
+ ];
341
683
 
684
+ // Remove backup location
342
685
  if (existsSync(pluginDir)) {
343
686
  rmSync(pluginDir, { recursive: true, force: true });
344
- if (!silent) log.success('Plugin uninstalled!');
345
- return { success: true, removed: true };
346
- } else {
347
- if (!silent) log.warn('Plugin not found.');
348
- return { success: true, removed: false };
687
+ removed.backup = true;
688
+ if (!silent) log.success('Removed backup plugin directory');
349
689
  }
690
+
691
+ // Remove commands
692
+ removed.commands = cleanOmgkitFiles(commandsDir, commandPrefixes);
693
+ if (!silent && removed.commands > 0) {
694
+ log.success(`Removed ${removed.commands} commands`);
695
+ }
696
+
697
+ // Remove skills
698
+ removed.skills = cleanOmgkitFiles(skillsDir, skillPrefixes);
699
+ if (!silent && removed.skills > 0) {
700
+ log.success(`Removed ${removed.skills} skills`);
701
+ }
702
+
703
+ // Remove agents
704
+ if (existsSync(agentsDir)) {
705
+ for (const agentFile of agentFiles) {
706
+ const agentPath = join(agentsDir, agentFile);
707
+ if (existsSync(agentPath)) {
708
+ rmSync(agentPath, { force: true });
709
+ removed.agents++;
710
+ }
711
+ }
712
+ if (!silent && removed.agents > 0) {
713
+ log.success(`Removed ${removed.agents} agents`);
714
+ }
715
+ }
716
+
717
+ const anyRemoved = removed.backup || removed.commands > 0 ||
718
+ removed.skills > 0 || removed.agents > 0;
719
+
720
+ if (!silent) {
721
+ if (anyRemoved) {
722
+ log.success('OMGKIT uninstalled successfully!');
723
+ } else {
724
+ log.warn('OMGKIT was not installed.');
725
+ }
726
+ }
727
+
728
+ return { success: true, removed };
350
729
  }
351
730
 
352
731
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "omgkit",
3
- "version": "2.5.2",
4
- "description": "Omega-Level Development Kit - AI Team System for Claude Code. 23 agents, 58 commands, 76 skills, sprint management.",
3
+ "version": "2.7.0",
4
+ "description": "Omega-Level Development Kit - AI Team System for Claude Code. 23 agents, 58 commands, 88 skills, sprint management.",
5
5
  "keywords": [
6
6
  "claude-code",
7
7
  "ai",
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: ai-engineering
3
+ description: Building production AI applications with Foundation Models. Covers prompt engineering, RAG, agents, finetuning, evaluation, and deployment. Use when working with LLMs, building AI features, or architecting AI systems.
4
+ ---
5
+
6
+ # AI Engineering Skills
7
+
8
+ Comprehensive skills for building AI applications with Foundation Models.
9
+
10
+ ## AI Engineering Stack
11
+
12
+ ```
13
+ ┌─────────────────────────────────────────────────────┐
14
+ │ APPLICATION LAYER │
15
+ │ Prompt Engineering, RAG, Agents, Guardrails │
16
+ ├─────────────────────────────────────────────────────┤
17
+ │ MODEL LAYER │
18
+ │ Model Selection, Finetuning, Evaluation │
19
+ ├─────────────────────────────────────────────────────┤
20
+ │ INFRASTRUCTURE LAYER │
21
+ │ Inference Optimization, Caching, Orchestration │
22
+ └─────────────────────────────────────────────────────┘
23
+ ```
24
+
25
+ ## 12 Core Skills
26
+
27
+ | Skill | Description | Guide |
28
+ |-------|-------------|-------|
29
+ | Foundation Models | Model architecture, sampling, structured outputs | [foundation-models/](foundation-models/SKILL.md) |
30
+ | Evaluation Methodology | Metrics, AI-as-judge, comparative evaluation | [evaluation-methodology/](evaluation-methodology/SKILL.md) |
31
+ | AI System Evaluation | End-to-end evaluation, benchmarks, model selection | [ai-system-evaluation/](ai-system-evaluation/SKILL.md) |
32
+ | Prompt Engineering | System prompts, few-shot, chain-of-thought, defense | [prompt-engineering/](prompt-engineering/SKILL.md) |
33
+ | RAG Systems | Chunking, embedding, retrieval, reranking | [rag-systems/](rag-systems/SKILL.md) |
34
+ | AI Agents | Tool use, planning strategies, memory systems | [ai-agents/](ai-agents/SKILL.md) |
35
+ | Finetuning | LoRA, QLoRA, PEFT, model merging | [finetuning/](finetuning/SKILL.md) |
36
+ | Dataset Engineering | Data quality, curation, synthesis, annotation | [dataset-engineering/](dataset-engineering/SKILL.md) |
37
+ | Inference Optimization | Quantization, batching, caching, speculative decoding | [inference-optimization/](inference-optimization/SKILL.md) |
38
+ | AI Architecture | Gateway, routing, observability, deployment | [ai-architecture/](ai-architecture/SKILL.md) |
39
+ | Guardrails & Safety | Input/output guards, PII protection, injection defense | [guardrails-safety/](guardrails-safety/SKILL.md) |
40
+ | User Feedback | Explicit/implicit signals, feedback loops, A/B testing | [user-feedback/](user-feedback/SKILL.md) |
41
+
42
+ ## Development Process
43
+
44
+ ```
45
+ 1. Use Case Evaluation → 2. Model Selection → 3. Evaluation Pipeline
46
+
47
+ 4. Prompt Engineering → 5. Context (RAG/Agents) → 6. Finetuning (if needed)
48
+
49
+ 7. Inference Optimization → 8. Deployment → 9. Monitoring & Feedback
50
+ ```
51
+
52
+ ## Quick Decision Guide
53
+
54
+ | Need | Start With |
55
+ |------|------------|
56
+ | Improve output quality | prompt-engineering |
57
+ | Add external knowledge | rag-systems |
58
+ | Multi-step reasoning | ai-agents |
59
+ | Reduce latency/cost | inference-optimization |
60
+ | Measure quality | evaluation-methodology |
61
+ | Protect system | guardrails-safety |
62
+
63
+ ## Reference
64
+
65
+ Based on "AI Engineering" by Chip Huyen (O'Reilly, 2025).