oh-my-customcode 0.3.2 → 0.5.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.
Files changed (97) hide show
  1. package/README.md +14 -67
  2. package/dist/cli/index.js +8 -68
  3. package/dist/index.js +23 -14
  4. package/package.json +6 -1
  5. package/templates/.claude/agents/arch-documenter.md +3 -0
  6. package/templates/.claude/agents/arch-speckit-agent.md +3 -0
  7. package/templates/.claude/agents/be-express-expert.md +3 -0
  8. package/templates/.claude/agents/be-fastapi-expert.md +4 -0
  9. package/templates/.claude/agents/be-go-backend-expert.md +4 -0
  10. package/templates/.claude/agents/be-nestjs-expert.md +3 -0
  11. package/templates/.claude/agents/be-springboot-expert.md +4 -0
  12. package/templates/.claude/agents/db-supabase-expert.md +2 -0
  13. package/templates/.claude/agents/fe-svelte-agent.md +3 -0
  14. package/templates/.claude/agents/fe-vercel-agent.md +6 -0
  15. package/templates/.claude/agents/fe-vuejs-agent.md +3 -0
  16. package/templates/.claude/agents/infra-aws-expert.md +4 -0
  17. package/templates/.claude/agents/infra-docker-expert.md +4 -0
  18. package/templates/.claude/agents/lang-golang-expert.md +4 -0
  19. package/templates/.claude/agents/lang-java21-expert.md +3 -0
  20. package/templates/.claude/agents/lang-kotlin-expert.md +4 -0
  21. package/templates/.claude/agents/lang-python-expert.md +4 -0
  22. package/templates/.claude/agents/lang-rust-expert.md +4 -0
  23. package/templates/.claude/agents/lang-typescript-expert.md +4 -0
  24. package/templates/.claude/agents/mgr-claude-code-bible.md +246 -0
  25. package/templates/.claude/agents/mgr-creator.md +6 -0
  26. package/templates/.claude/agents/mgr-gitnerd.md +4 -1
  27. package/templates/.claude/agents/mgr-sauron.md +34 -25
  28. package/templates/.claude/agents/mgr-supplier.md +4 -0
  29. package/templates/.claude/agents/mgr-sync-checker.md +4 -0
  30. package/templates/.claude/agents/mgr-updater.md +4 -0
  31. package/templates/.claude/agents/qa-engineer.md +3 -0
  32. package/templates/.claude/agents/qa-planner.md +3 -0
  33. package/templates/.claude/agents/qa-writer.md +3 -0
  34. package/templates/.claude/agents/sys-memory-keeper.md +14 -8
  35. package/templates/.claude/agents/sys-naggy.md +3 -0
  36. package/templates/.claude/agents/tool-bun-expert.md +3 -0
  37. package/templates/.claude/agents/tool-npm-expert.md +6 -0
  38. package/templates/.claude/agents/tool-optimizer.md +6 -0
  39. package/templates/.claude/hooks/hooks.json +3 -37
  40. package/templates/.claude/install-hooks.sh +1 -1
  41. package/templates/.claude/rules/MUST-agent-design.md +37 -0
  42. package/templates/.claude/rules/MUST-orchestrator-coordination.md +61 -0
  43. package/templates/.claude/rules/MUST-parallel-execution.md +85 -14
  44. package/templates/.claude/rules/MUST-sync-verification.md +13 -0
  45. package/templates/.claude/rules/MUST-tool-identification.md +23 -0
  46. package/templates/.claude/rules/SHOULD-hud-statusline.md +26 -10
  47. package/templates/.claude/rules/SHOULD-memory-integration.md +96 -78
  48. package/templates/.claude/rules/index.yaml +1 -9
  49. package/templates/.claude/skills/aws-best-practices/SKILL.md +1 -0
  50. package/templates/.claude/skills/claude-code-bible/SKILL.md +180 -0
  51. package/templates/.claude/skills/claude-code-bible/scripts/fetch-docs.js +244 -0
  52. package/templates/.claude/skills/docker-best-practices/SKILL.md +1 -0
  53. package/templates/.claude/skills/fastapi-best-practices/SKILL.md +1 -0
  54. package/templates/.claude/skills/go-backend-best-practices/SKILL.md +1 -0
  55. package/templates/.claude/skills/go-best-practices/CLAUDE.md +9 -0
  56. package/templates/.claude/skills/go-best-practices/SKILL.md +1 -0
  57. package/templates/.claude/skills/help/SKILL.md +1 -1
  58. package/templates/.claude/skills/intent-detection/SKILL.md +1 -0
  59. package/templates/.claude/skills/intent-detection/patterns/agent-triggers.yaml +8 -8
  60. package/templates/.claude/skills/kotlin-best-practices/SKILL.md +1 -0
  61. package/templates/.claude/skills/lists/SKILL.md +2 -2
  62. package/templates/.claude/skills/memory-management/SKILL.md +8 -7
  63. package/templates/.claude/skills/memory-recall/SKILL.md +5 -5
  64. package/templates/.claude/skills/memory-save/SKILL.md +4 -4
  65. package/templates/.claude/skills/python-best-practices/SKILL.md +1 -0
  66. package/templates/.claude/skills/react-best-practices/SKILL.md +1 -0
  67. package/templates/.claude/skills/result-aggregation/SKILL.md +1 -0
  68. package/templates/.claude/skills/rust-best-practices/SKILL.md +1 -0
  69. package/templates/.claude/skills/springboot-best-practices/SKILL.md +1 -0
  70. package/templates/.claude/skills/status/SKILL.md +2 -2
  71. package/templates/.claude/skills/supabase-postgres-best-practices/SKILL.md +1 -0
  72. package/templates/.claude/skills/typescript-best-practices/SKILL.md +1 -0
  73. package/templates/.claude/skills/web-design-guidelines/SKILL.md +1 -0
  74. package/templates/.claude/skills/writing-clearly-and-concisely/SKILL.md +64 -0
  75. package/templates/CLAUDE.md.en +40 -13
  76. package/templates/CLAUDE.md.ko +40 -13
  77. package/templates/guides/elements-of-style/elements-of-style.html +2609 -0
  78. package/templates/guides/index.yaml +1 -1
  79. package/templates/index.yaml +1 -1
  80. package/templates/manifest.json +5 -11
  81. package/templates/.claude/agents/tutor-go.md +0 -125
  82. package/templates/.claude/hooks/hud/index.yaml +0 -27
  83. package/templates/.claude/hooks/hud/update-status.sh +0 -32
  84. package/templates/.claude/hooks/index.yaml +0 -46
  85. package/templates/.claude/hooks/memory-persistence/pre-compact.sh +0 -37
  86. package/templates/.claude/hooks/memory-persistence/session-end.sh +0 -64
  87. package/templates/.claude/hooks/memory-persistence/session-start.sh +0 -41
  88. package/templates/.claude/hooks/strategic-compact/suggest-compact.sh +0 -50
  89. package/templates/.claude/rules/SHOULD-pipeline-mode.md +0 -165
  90. package/templates/.claude/skills/pipeline-execution/SKILL.md +0 -188
  91. package/templates/.claude/skills/pipeline-list/SKILL.md +0 -74
  92. package/templates/.claude/skills/pipeline-run/SKILL.md +0 -143
  93. package/templates/examples/code-review.yaml +0 -66
  94. package/templates/pipelines/examples/code-review.yaml +0 -66
  95. package/templates/pipelines/index.yaml +0 -18
  96. package/templates/pipelines/templates/pipeline-template.yaml +0 -50
  97. package/templates/templates/pipeline-template.yaml +0 -50
package/README.md CHANGED
@@ -16,7 +16,7 @@ Like oh-my-zsh transformed shell customization, oh-my-customcode makes personali
16
16
 
17
17
  | Feature | Description |
18
18
  |---------|-------------|
19
- | **Batteries Included** | 34 agents, 42 skills, 13 guides - synced with baekgom-agents templates |
19
+ | **Batteries Included** | 34 agents, 41 skills, 14 guides - ready to use out of the box |
20
20
  | **Sub-Agent Model** | Supports hierarchical agent orchestration with specialized roles |
21
21
  | **Dead Simple Customization** | Create a folder + markdown file = new agent or skill |
22
22
  | **Mix and Match** | Use built-in components, create your own, or combine both |
@@ -94,45 +94,19 @@ Claude Code selects the appropriate model and parallelizes independent tasks (up
94
94
  |---------|-------|-------------|
95
95
  | `/create-agent <name>` | mgr-creator | Create a new agent |
96
96
  | `/update-docs` | mgr-updater | Sync docs with project structure |
97
- | `/audit-dependencies` | mgr-supplier | Verify agent dependencies |
98
- | `/code-review` | lang-* experts | Review code with expert agents |
99
- | `/run-pipeline <name>` | pipeline skill | Execute a workflow pipeline |
100
- | `/sync-check` | mgr-sync-checker | Full synchronization check |
101
-
102
- ### Custom Pipelines
103
-
104
- Define repeatable multi-agent workflows:
105
-
106
- ```yaml
107
- # .claude/skills/pipelines/deploy-review.yaml
108
- name: deploy-review
109
- steps:
110
- - id: security_scan
111
- agent: qa-planner
112
- action: security_review
113
-
114
- - id: performance_check
115
- agent: tool-optimizer
116
- action: analyze_performance
117
-
118
- - id: migration_review
119
- agent: db-migration-expert
120
- action: review_migrations
121
- ```
122
-
123
- Run it: `/run-pipeline deploy-review`
97
+ | `/audit-agents` | mgr-supplier | Verify agent dependencies |
98
+ | `/dev-review` | lang-* experts | Review code with expert agents |
99
+ | `/sauron-watch` | mgr-sauron | Full synchronization check |
124
100
 
125
101
  ---
126
102
 
127
103
  ## What's Included
128
104
 
129
- > **Templates synced from [baekgom-agents](https://github.com/baekenough/baekgom-agents)** - Battle-tested agent system with sub-agent orchestration support.
130
-
131
105
  ### Agents (34)
132
106
 
133
107
  | Category | Count | Agents |
134
108
  |----------|-------|--------|
135
- | **Managers** | 6 | mgr-creator, mgr-updater, mgr-supplier, mgr-gitnerd, mgr-sync-checker, mgr-sauron |
109
+ | **Managers** | 7 | mgr-creator, mgr-updater, mgr-supplier, mgr-gitnerd, mgr-sync-checker, mgr-sauron, mgr-claude-code-bible |
136
110
  | **System** | 2 | sys-memory-keeper, sys-naggy |
137
111
  | **Languages** | 6 | lang-golang-expert, lang-python-expert, lang-rust-expert, lang-kotlin-expert, lang-typescript-expert, lang-java21-expert |
138
112
  | **Frontend** | 3 | fe-vercel-agent, fe-vuejs-agent, fe-svelte-agent |
@@ -142,10 +116,9 @@ Run it: `/run-pipeline deploy-review`
142
116
  | **Architecture** | 2 | arch-documenter, arch-speckit-agent |
143
117
  | **Infrastructure** | 2 | infra-docker-expert, infra-aws-expert |
144
118
  | **QA** | 3 | qa-planner, qa-writer, qa-engineer |
145
- | **Tutor** | 1 | tutor-go |
146
119
  | **Total** | **34** | |
147
120
 
148
- ### Skills (42)
121
+ ### Skills (41)
149
122
 
150
123
  Includes slash commands and capabilities:
151
124
 
@@ -156,7 +129,7 @@ Includes slash commands and capabilities:
156
129
  - **Orchestration** (2): Pipeline execution, intent detection
157
130
  - **Slash Commands** (20+): /create-agent, /code-review, /audit-dependencies, /sync-check, /commit, /pr, and more
158
131
 
159
- ### Guides (13)
132
+ ### Guides (14)
160
133
 
161
134
  Comprehensive reference documentation covering:
162
135
  - Agent creation and management
@@ -165,13 +138,13 @@ Comprehensive reference documentation covering:
165
138
  - Best practices and patterns
166
139
  - Sub-agent orchestration
167
140
 
168
- ### Rules (18)
141
+ ### Rules (17)
169
142
 
170
143
  | Priority | Count | Purpose |
171
144
  |----------|-------|---------|
172
- | **MUST** | 10 | Safety, permissions, agent design (enforced) |
173
- | **SHOULD** | 6 | Interactions, error handling (recommended) |
174
- | **MAY** | 2 | Optimization guidelines (optional) |
145
+ | **MUST** | 11 | Safety, permissions, agent design (enforced) |
146
+ | **SHOULD** | 5 | Interactions, error handling (recommended) |
147
+ | **MAY** | 1 | Optimization guidelines (optional) |
175
148
 
176
149
  ---
177
150
 
@@ -197,7 +170,7 @@ After `omcustom init`:
197
170
  your-project/
198
171
  ├── CLAUDE.md # Entry point for Claude
199
172
  └── .claude/
200
- ├── rules/ # Behavior rules (18 total)
173
+ ├── rules/ # Behavior rules (17 total)
201
174
  ├── hooks/ # Event hooks
202
175
  ├── contexts/ # Context files
203
176
  ├── agents/ # All agents (flat structure, 34 total)
@@ -205,13 +178,13 @@ your-project/
205
178
  │ ├── be-fastapi-expert/
206
179
  │ ├── mgr-creator/
207
180
  │ └── ...
208
- ├── skills/ # All skills (42 total, includes slash commands)
181
+ ├── skills/ # All skills (41 total, includes slash commands)
209
182
  │ ├── development/
210
183
  │ ├── backend/
211
184
  │ ├── infrastructure/
212
185
  │ ├── system/
213
186
  │ └── orchestration/
214
- └── guides/ # Reference docs (13 total)
187
+ └── guides/ # Reference docs (14 total)
215
188
  ```
216
189
 
217
190
  ---
@@ -230,32 +203,6 @@ bun run build # Build for production
230
203
  - Node.js >= 18.0.0
231
204
  - Claude Code CLI
232
205
 
233
- ### Sync Verification
234
-
235
- oh-my-customcode templates are synced from [baekgom-agents](https://github.com/baekenough/baekgom-agents). To verify templates are in sync:
236
-
237
- ```bash
238
- # Local verification (requires baekgom-agents checkout)
239
- ./scripts/verify-sync.sh /path/to/baekgom-agents
240
-
241
- # Or using environment variable
242
- BAEKGOM_AGENTS_PATH=/path/to/baekgom-agents ./scripts/verify-sync.sh
243
- ```
244
-
245
- The verification checks 7 content directories:
246
- - `.claude/agents/` (34 agents)
247
- - `.claude/skills/` (42 skills)
248
- - `.claude/rules/` (18 rules)
249
- - `.claude/hooks/`
250
- - `.claude/contexts/`
251
- - `guides/`
252
- - `pipelines/`
253
-
254
- CI automatically runs sync verification on:
255
- - Push to main (when templates change)
256
- - Weekly schedule (Monday 00:00 UTC)
257
- - Manual workflow dispatch
258
-
259
206
  ---
260
207
 
261
208
  ## Contributing
package/dist/cli/index.js CHANGED
@@ -12314,24 +12314,6 @@ async function checkHooks(targetDir) {
12314
12314
  fixable: false
12315
12315
  };
12316
12316
  }
12317
- async function checkPipelines(targetDir) {
12318
- const pipelinesDir = path.join(targetDir, "pipelines");
12319
- const exists2 = await isDirectory(pipelinesDir);
12320
- if (!exists2) {
12321
- return {
12322
- name: "Pipelines",
12323
- status: "fail",
12324
- message: "pipelines/ directory not found",
12325
- fixable: true
12326
- };
12327
- }
12328
- return {
12329
- name: "Pipelines",
12330
- status: "pass",
12331
- message: "Pipelines OK",
12332
- fixable: false
12333
- };
12334
- }
12335
12317
  async function checkContexts(targetDir) {
12336
12318
  const contextsDir = path.join(targetDir, ".claude", "contexts");
12337
12319
  const exists2 = await isDirectory(contextsDir);
@@ -12384,7 +12366,6 @@ async function fixSingleIssue(check, targetDir) {
12384
12366
  Skills: () => createMissingDirectory(path.join(targetDir, ".claude", "skills")),
12385
12367
  Guides: () => createMissingDirectory(path.join(targetDir, "guides")),
12386
12368
  Hooks: () => createMissingDirectory(path.join(targetDir, ".claude", "hooks")),
12387
- Pipelines: () => createMissingDirectory(path.join(targetDir, "pipelines")),
12388
12369
  Contexts: () => createMissingDirectory(path.join(targetDir, ".claude", "contexts")),
12389
12370
  Symlinks: async () => {
12390
12371
  if (!check.details || check.details.length === 0)
@@ -12441,7 +12422,6 @@ async function doctorCommand(options = {}) {
12441
12422
  checkIndexFiles(targetDir),
12442
12423
  checkGuides(targetDir),
12443
12424
  checkHooks(targetDir),
12444
- checkPipelines(targetDir),
12445
12425
  checkContexts(targetDir)
12446
12426
  ]);
12447
12427
  if (options.fix) {
@@ -12828,7 +12808,7 @@ function getDefaultConfig() {
12828
12808
  componentVersions: {},
12829
12809
  agents: {},
12830
12810
  preferences: getDefaultPreferences(),
12831
- sourceRepo: "https://github.com/baekenough/baekgom-agents",
12811
+ sourceRepo: "https://github.com/baekenough/oh-my-customcode",
12832
12812
  autoUpdate: {
12833
12813
  enabled: false,
12834
12814
  checkIntervalHours: 24,
@@ -12907,25 +12887,12 @@ function migrateConfig(config) {
12907
12887
  }
12908
12888
 
12909
12889
  // src/core/installer.ts
12910
- var DIRECTORY_STRUCTURE = [
12911
- ".claude",
12912
- ".claude/rules",
12913
- ".claude/hooks",
12914
- ".claude/contexts",
12915
- ".claude/agents",
12916
- ".claude/skills",
12917
- "guides",
12918
- "pipelines",
12919
- "pipelines/templates",
12920
- "pipelines/examples"
12921
- ];
12922
12890
  var COMPONENT_PATHS = {
12923
12891
  "claude-md": "",
12924
12892
  rules: ".claude/rules",
12925
12893
  agents: ".claude/agents",
12926
12894
  skills: ".claude/skills",
12927
12895
  guides: "guides",
12928
- pipelines: "pipelines",
12929
12896
  hooks: ".claude/hooks",
12930
12897
  contexts: ".claude/contexts"
12931
12898
  };
@@ -13017,8 +12984,6 @@ async function install(options) {
13017
12984
  await handleBackup(options.targetDir, !!options.backup, result);
13018
12985
  await checkAndWarnExisting(options.targetDir, !!options.force, !!options.backup, result);
13019
12986
  await verifyTemplateDirectory();
13020
- await createDirectoryStructure(options.targetDir);
13021
- debug("install.directories_created");
13022
12987
  await installAllComponents(options.targetDir, options, result);
13023
12988
  await installClaudeMdWithTracking(options.targetDir, options, result);
13024
12989
  await updateInstallConfig(options.targetDir, options, result.installedComponents);
@@ -13031,14 +12996,8 @@ async function install(options) {
13031
12996
  }
13032
12997
  return result;
13033
12998
  }
13034
- async function createDirectoryStructure(targetDir) {
13035
- for (const dir2 of DIRECTORY_STRUCTURE) {
13036
- const fullPath = join3(targetDir, dir2);
13037
- await ensureDirectory(fullPath);
13038
- }
13039
- }
13040
12999
  function getAllComponents() {
13041
- return ["rules", "agents", "skills", "guides", "pipelines", "hooks", "contexts"];
13000
+ return ["rules", "agents", "skills", "guides", "hooks", "contexts"];
13042
13001
  }
13043
13002
  async function installComponent(targetDir, component, options) {
13044
13003
  const templatePath = COMPONENT_PATHS[component];
@@ -13088,7 +13047,7 @@ async function backupExisting(sourcePath, backupDir) {
13088
13047
  return backupPath;
13089
13048
  }
13090
13049
  async function checkExistingPaths(targetDir) {
13091
- const pathsToCheck = ["CLAUDE.md", ".claude", "guides", "pipelines"];
13050
+ const pathsToCheck = ["CLAUDE.md", ".claude", "guides"];
13092
13051
  const existingPaths = [];
13093
13052
  for (const relativePath of pathsToCheck) {
13094
13053
  const fullPath = join3(targetDir, relativePath);
@@ -13126,7 +13085,7 @@ async function checkExistingInstallation(targetDir) {
13126
13085
  const claudeDir = join4(targetDir, ".claude");
13127
13086
  return fileExists(claudeDir);
13128
13087
  }
13129
- var CLAUDE_SUBDIR_COMPONENTS = new Set(["rules", "hooks", "contexts"]);
13088
+ var CLAUDE_SUBDIR_COMPONENTS = new Set(["rules", "hooks", "contexts", "agents", "skills"]);
13130
13089
  function componentToPath(targetDir, component) {
13131
13090
  if (component === "claude-md") {
13132
13091
  return join4(targetDir, "CLAUDE.md");
@@ -13541,30 +13500,13 @@ async function getContexts(targetDir) {
13541
13500
  return [];
13542
13501
  }
13543
13502
  }
13544
- async function getPipelines(targetDir) {
13545
- const pipelinesDir = join5(targetDir, "pipelines");
13546
- if (!await fileExists(pipelinesDir))
13547
- return [];
13548
- try {
13549
- const pipelineFiles = await listFiles(pipelinesDir, { recursive: true, pattern: "*.yaml" });
13550
- return pipelineFiles.map((pipePath) => ({
13551
- name: basename2(pipePath, ".yaml"),
13552
- type: "pipeline",
13553
- category: relative(join5(targetDir, "pipelines"), dirname2(pipePath)) || "root",
13554
- path: relative(targetDir, pipePath)
13555
- })).sort((a, b) => a.name.localeCompare(b.name));
13556
- } catch {
13557
- return [];
13558
- }
13559
- }
13560
13503
  var COMPONENT_GETTERS = {
13561
13504
  agents: getAgents,
13562
13505
  skills: getSkills,
13563
13506
  guides: getGuides,
13564
13507
  rules: getRules,
13565
13508
  hooks: getHooks,
13566
- contexts: getContexts,
13567
- pipelines: getPipelines
13509
+ contexts: getContexts
13568
13510
  };
13569
13511
  function displayComponents(components, type, format) {
13570
13512
  if (format === "json") {
@@ -13576,14 +13518,13 @@ function displayComponents(components, type, format) {
13576
13518
  }
13577
13519
  }
13578
13520
  async function handleListAll(targetDir, format) {
13579
- const [agents, skills, guides, rules, hooks, contexts, pipelines] = await Promise.all([
13521
+ const [agents, skills, guides, rules, hooks, contexts] = await Promise.all([
13580
13522
  getAgents(targetDir),
13581
13523
  getSkills(targetDir),
13582
13524
  getGuides(targetDir),
13583
13525
  getRules(targetDir),
13584
13526
  getHooks(targetDir),
13585
- getContexts(targetDir),
13586
- getPipelines(targetDir)
13527
+ getContexts(targetDir)
13587
13528
  ]);
13588
13529
  if (format !== "json") {
13589
13530
  displayComponents(agents, "agents", format);
@@ -13592,9 +13533,8 @@ async function handleListAll(targetDir, format) {
13592
13533
  displayComponents(rules, "rules", format);
13593
13534
  displayComponents(hooks, "hooks", format);
13594
13535
  displayComponents(contexts, "contexts", format);
13595
- displayComponents(pipelines, "pipelines", format);
13596
13536
  }
13597
- return [...agents, ...skills, ...guides, ...rules, ...hooks, ...contexts, ...pipelines];
13537
+ return [...agents, ...skills, ...guides, ...rules, ...hooks, ...contexts];
13598
13538
  }
13599
13539
  async function listCommand(type = "all", options = {}) {
13600
13540
  const targetDir = process.cwd();
package/dist/index.js CHANGED
@@ -1,4 +1,20 @@
1
1
  import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
2
18
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
3
19
 
4
20
  // src/core/config.ts
@@ -321,7 +337,7 @@ function getDefaultConfig() {
321
337
  componentVersions: {},
322
338
  agents: {},
323
339
  preferences: getDefaultPreferences(),
324
- sourceRepo: "https://github.com/baekenough/baekgom-agents",
340
+ sourceRepo: "https://github.com/baekenough/oh-my-customcode",
325
341
  autoUpdate: {
326
342
  enabled: false,
327
343
  checkIntervalHours: 24,
@@ -408,10 +424,7 @@ var DIRECTORY_STRUCTURE = [
408
424
  ".claude/contexts",
409
425
  ".claude/agents",
410
426
  ".claude/skills",
411
- "guides",
412
- "pipelines",
413
- "pipelines/templates",
414
- "pipelines/examples"
427
+ "guides"
415
428
  ];
416
429
  var COMPONENT_PATHS = {
417
430
  "claude-md": "",
@@ -419,7 +432,6 @@ var COMPONENT_PATHS = {
419
432
  agents: ".claude/agents",
420
433
  skills: ".claude/skills",
421
434
  guides: "guides",
422
- pipelines: "pipelines",
423
435
  hooks: ".claude/hooks",
424
436
  contexts: ".claude/contexts"
425
437
  };
@@ -511,8 +523,6 @@ async function install(options) {
511
523
  await handleBackup(options.targetDir, !!options.backup, result);
512
524
  await checkAndWarnExisting(options.targetDir, !!options.force, !!options.backup, result);
513
525
  await verifyTemplateDirectory();
514
- await createDirectoryStructure(options.targetDir);
515
- debug("install.directories_created");
516
526
  await installAllComponents(options.targetDir, options, result);
517
527
  await installClaudeMdWithTracking(options.targetDir, options, result);
518
528
  await updateInstallConfig(options.targetDir, options, result.installedComponents);
@@ -555,11 +565,11 @@ async function getTemplateManifest() {
555
565
  description: `${name} component`,
556
566
  files: 0
557
567
  })),
558
- source: "https://github.com/baekenough/baekgom-agents"
568
+ source: "https://github.com/baekenough/oh-my-customcode"
559
569
  };
560
570
  }
561
571
  function getAllComponents() {
562
- return ["rules", "agents", "skills", "guides", "pipelines", "hooks", "contexts"];
572
+ return ["rules", "agents", "skills", "guides", "hooks", "contexts"];
563
573
  }
564
574
  async function installComponent(targetDir, component, options) {
565
575
  const templatePath = COMPONENT_PATHS[component];
@@ -609,7 +619,7 @@ async function backupExisting(sourcePath, backupDir) {
609
619
  return backupPath;
610
620
  }
611
621
  async function checkExistingPaths(targetDir) {
612
- const pathsToCheck = ["CLAUDE.md", ".claude", "guides", "pipelines"];
622
+ const pathsToCheck = ["CLAUDE.md", ".claude", "guides"];
613
623
  const existingPaths = [];
614
624
  for (const relativePath of pathsToCheck) {
615
625
  const fullPath = join3(targetDir, relativePath);
@@ -764,7 +774,7 @@ async function preserveCustomizations(targetDir, customizations) {
764
774
  return preserved;
765
775
  }
766
776
  function getAllUpdateComponents() {
767
- return ["rules", "agents", "skills", "guides", "pipelines", "hooks", "contexts"];
777
+ return ["rules", "agents", "skills", "guides", "hooks", "contexts"];
768
778
  }
769
779
  async function getLatestVersion() {
770
780
  const manifestPath = resolveTemplatePath("manifest.json");
@@ -812,7 +822,6 @@ function getComponentPath(component) {
812
822
  agents: ".claude/agents",
813
823
  skills: ".claude/skills",
814
824
  guides: "guides",
815
- pipelines: "pipelines",
816
825
  hooks: ".claude/hooks",
817
826
  contexts: ".claude/contexts"
818
827
  };
@@ -823,7 +832,7 @@ async function backupInstallation(targetDir) {
823
832
  const backupDir = join4(targetDir, `.omcustom-backup-${timestamp}`);
824
833
  const fs = await import("node:fs/promises");
825
834
  await ensureDirectory(backupDir);
826
- const dirsToBackup = [".claude", "guides", "pipelines"];
835
+ const dirsToBackup = [".claude", "guides"];
827
836
  for (const dir of dirsToBackup) {
828
837
  const srcPath = join4(targetDir, dir);
829
838
  if (await fileExists(srcPath)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-customcode",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "description": "Batteries-included agent harness for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,8 +46,13 @@
46
46
  "yaml": "^2.8.2"
47
47
  },
48
48
  "devDependencies": {
49
+ "@anthropic-ai/sdk": "^0.39.0",
49
50
  "@biomejs/biome": "^2.3.12",
50
51
  "@types/bun": "^1.3.6",
52
+ "@types/js-yaml": "^4.0.9",
53
+ "@types/nodemailer": "^6.4.17",
54
+ "js-yaml": "^4.1.0",
55
+ "nodemailer": "^6.10.1",
51
56
  "typescript": "^5.7.3",
52
57
  "vitepress": "^1.6.3"
53
58
  },
@@ -2,6 +2,9 @@
2
2
  name: arch-documenter
3
3
  description: Use for generating architecture documentation, API specifications (OpenAPI), Architecture Decision Records (ADRs), technical diagrams (Mermaid/PlantUML), and README maintenance
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills: []
5
8
  tools:
6
9
  - Read
7
10
  - Write
@@ -2,6 +2,9 @@
2
2
  name: arch-speckit-agent
3
3
  description: Use for spec-driven development, transforming requirements into executable specifications, defining project constitution, creating technical plans, and generating TDD task lists
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills: []
5
8
  tools:
6
9
  - Read
7
10
  - Write
@@ -2,6 +2,9 @@
2
2
  name: be-express-expert
3
3
  description: Expert Express.js developer for production-ready Node.js APIs following security best practices and 12-factor app principles. Use for Express.js APIs, REST API architectures, middleware chains, authentication/authorization, security hardening, and Node.js performance optimization.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills: []
5
8
  tools:
6
9
  - Read
7
10
  - Write
@@ -2,6 +2,10 @@
2
2
  name: be-fastapi-expert
3
3
  description: Expert FastAPI developer for building high-performance async Python APIs. Use for FastAPI projects, Python async/await patterns, Pydantic models, API architecture design, and performance optimization.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills:
8
+ - fastapi-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write
@@ -2,6 +2,10 @@
2
2
  name: be-go-backend-expert
3
3
  description: Expert Go backend developer for production-ready services following Uber style guide and standard layout. Use for Go backend services, HTTP/gRPC servers, microservices in Go, concurrent systems, and Go performance optimization.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills:
8
+ - go-backend-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write
@@ -2,6 +2,9 @@
2
2
  name: be-nestjs-expert
3
3
  description: Expert NestJS developer for opinionated, scalable Node.js applications with TypeScript. Use for NestJS projects, decorator-based patterns (@Injectable, @Module, @Controller), enterprise API architectures, authentication/authorization guards, DTO validation, and modular architecture.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills: []
5
8
  tools:
6
9
  - Read
7
10
  - Write
@@ -2,6 +2,10 @@
2
2
  name: be-springboot-expert
3
3
  description: Expert Spring Boot 3.5.x developer for enterprise-grade Java 21 applications. Use for Spring Boot projects, Java/Kotlin enterprise apps, RESTful APIs, microservices architecture, Spring Data, security patterns, virtual threads, and GraalVM native images.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills:
8
+ - springboot-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write
@@ -2,6 +2,8 @@
2
2
  name: db-supabase-expert
3
3
  description: Supabase and PostgreSQL expert. Use when working with Supabase projects, writing SQL queries, designing database schemas, configuring Row-Level Security (RLS), optimizing Postgres performance, or managing connection pooling. Handles .sql files and Supabase configuration.
4
4
  model: sonnet
5
+ memory: user
6
+ effort: high
5
7
  tools:
6
8
  - Read
7
9
  - Write
@@ -2,6 +2,9 @@
2
2
  name: fe-svelte-agent
3
3
  description: Use for Svelte compiler-based reactivity, reactive statements ($:), Svelte stores, and SvelteKit full-stack development with SSR
4
4
  model: sonnet
5
+ memory: project
6
+ effort: medium
7
+ skills: []
5
8
  tools:
6
9
  - Read
7
10
  - Write
@@ -2,6 +2,12 @@
2
2
  name: fe-vercel-agent
3
3
  description: Use for React/Next.js optimization, web design review (accessibility, UX), Vercel deployment automation, and bundle size optimization
4
4
  model: sonnet
5
+ memory: project
6
+ effort: medium
7
+ skills:
8
+ - react-best-practices
9
+ - web-design-guidelines
10
+ - vercel-deploy
5
11
  tools:
6
12
  - Read
7
13
  - Write
@@ -2,6 +2,9 @@
2
2
  name: fe-vuejs-agent
3
3
  description: Use for Vue 3 Composition API development, single-file components, Pinia state management, and Vue Router navigation
4
4
  model: sonnet
5
+ memory: project
6
+ effort: medium
7
+ skills: []
5
8
  tools:
6
9
  - Read
7
10
  - Write
@@ -2,6 +2,10 @@
2
2
  name: infra-aws-expert
3
3
  description: Use for AWS architecture design with Well-Architected Framework, infrastructure as code (CloudFormation/CDK/Terraform), VPC networking, IAM security, and cost optimization
4
4
  model: sonnet
5
+ memory: user
6
+ effort: high
7
+ skills:
8
+ - aws-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write
@@ -2,6 +2,10 @@
2
2
  name: infra-docker-expert
3
3
  description: Use for creating optimized Dockerfiles, multi-stage builds, container security hardening, Docker Compose configurations, and image size optimization
4
4
  model: sonnet
5
+ memory: user
6
+ effort: medium
7
+ skills:
8
+ - docker-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write
@@ -2,6 +2,10 @@
2
2
  name: lang-golang-expert
3
3
  description: Expert Go developer for writing idiomatic, performant Go code. Use for Go files (*.go, go.mod, go.sum), Go-related keywords, implementing concurrent systems, reviewing Go code, and optimizing Go applications.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills:
8
+ - go-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write
@@ -2,6 +2,9 @@
2
2
  name: lang-java21-expert
3
3
  description: Expert Java 21 developer for modern Java with Virtual Threads, Pattern Matching, Record Patterns, and Sequenced Collections. Use for Java files (*.java, pom.xml, build.gradle), Java-related keywords, high-concurrency systems, data-centric APIs with Records, and migrating from older Java versions.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills: []
5
8
  tools:
6
9
  - Read
7
10
  - Write
@@ -2,6 +2,10 @@
2
2
  name: lang-kotlin-expert
3
3
  description: Expert Kotlin developer for writing idiomatic, concise, null-safe Kotlin code. Use for Kotlin files (*.kt, *.kts), Kotlin-related keywords, Android development, Kotlin multiplatform projects, and migrating Java to Kotlin.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills:
8
+ - kotlin-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write
@@ -2,6 +2,10 @@
2
2
  name: lang-python-expert
3
3
  description: Expert Python developer for writing Pythonic, clean code following PEP 8. Use for Python files (*.py, requirements.txt, pyproject.toml), Python-related keywords, designing Python APIs, reviewing Python code, and optimizing Python applications.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills:
8
+ - python-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write
@@ -2,6 +2,10 @@
2
2
  name: lang-rust-expert
3
3
  description: Expert Rust developer for writing safe, performant, idiomatic Rust code. Use for Rust files (*.rs, Cargo.toml), Rust-related keywords, designing safe APIs, debugging ownership/lifetime issues, and implementing high-performance systems.
4
4
  model: sonnet
5
+ memory: project
6
+ effort: high
7
+ skills:
8
+ - rust-best-practices
5
9
  tools:
6
10
  - Read
7
11
  - Write