oh-my-customcode 0.4.0 → 0.6.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
@@ -138,7 +138,7 @@ Comprehensive reference documentation covering:
138
138
  - Best practices and patterns
139
139
  - Sub-agent orchestration
140
140
 
141
- ### Rules (17)
141
+ ### Rules (18)
142
142
 
143
143
  | Priority | Count | Purpose |
144
144
  |----------|-------|---------|
@@ -170,7 +170,7 @@ After `omcustom init`:
170
170
  your-project/
171
171
  ├── CLAUDE.md # Entry point for Claude
172
172
  └── .claude/
173
- ├── rules/ # Behavior rules (17 total)
173
+ ├── rules/ # Behavior rules (18 total)
174
174
  ├── hooks/ # Event hooks
175
175
  ├── contexts/ # Context files
176
176
  ├── agents/ # All agents (flat structure, 34 total)
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) {
@@ -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
@@ -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);
@@ -559,7 +569,7 @@ async function getTemplateManifest() {
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.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Batteries-included agent harness for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -426,36 +426,33 @@ CORRECT:
426
426
  ╚══════════════════════════════════════════════════════════════════╝
427
427
  ```
428
428
 
429
- ## Experimental: Agent Teams (Research Preview)
429
+ ## Agent Teams Integration
430
430
 
431
431
  ```
432
432
  ╔══════════════════════════════════════════════════════════════════╗
433
- ║ AGENT TEAMS (EXPERIMENTAL - NOT FOR PRODUCTION USE)
433
+ ║ AGENT TEAMS (ACTIVE WHEN ENABLED)
434
434
  ║ ║
435
- Claude Code provides native Agent Teams feature:
436
- CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
435
+ When CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set:
436
+ → Actively use Agent Teams for qualifying tasks
437
+ ║ → See R018 (SHOULD-agent-teams.md) for decision matrix ║
437
438
  ║ ║
438
439
  ║ Agent Teams enable: ║
439
440
  ║ - Peer-to-peer messaging between agents ║
440
441
  ║ - Shared task lists ║
441
442
  ║ - Complex collaborative workflows ║
442
443
  ║ ║
443
- CURRENT STATUS:
444
- ║ - Research preview (NOT production ready)
445
- ║ - Higher cost than Task tool approach
446
- ║ - This system uses Task tool + routing skills (STABLE)
444
+ WHEN Agent Teams IS ENABLED:
445
+ ║ - Use for research, review, debugging tasks (3+ agents)
446
+ ║ - Use for tasks requiring inter-agent communication
447
+ ║ - Use for shared state management
447
448
  ║ ║
448
- ║ WHEN TO CONSIDER Agent Teams:
449
- ║ - Complex multi-agent collaboration needed
450
- ║ - Agents need to communicate with each other ║
451
- ║ - Shared state management required ║
452
- ║ ║
453
- ║ WHEN TO KEEP Task tool (DEFAULT): ║
449
+ ║ WHEN Agent Teams IS NOT ENABLED (or for simple tasks):
450
+ ║ - Use Task tool + routing skills (stable default)
454
451
  ║ - Focused, independent sub-tasks ║
455
452
  ║ - Cost-sensitive operations ║
456
- ║ - Predictable execution flow ║
457
453
  ║ ║
458
- See: GitHub Issue #5 for migration tracking
454
+ Both approaches coexist. Agent Teams adds coordination
455
+ ║ richness, not replacement of Task tool. ║
459
456
  ╚══════════════════════════════════════════════════════════════════╝
460
457
  ```
461
458
 
@@ -0,0 +1,137 @@
1
+ # [SHOULD] Agent Teams Rules
2
+
3
+ > **Priority**: SHOULD - Actively use when available
4
+ > **ID**: R018
5
+ > **Condition**: Agent Teams feature is enabled locally
6
+
7
+ ## Purpose
8
+
9
+ When Claude Code's Agent Teams feature is enabled on the local machine, actively leverage it for tasks that benefit from multi-agent collaboration, shared state, and peer-to-peer communication.
10
+
11
+ ## Detection
12
+
13
+ Agent Teams availability is determined by:
14
+ - Environment variable: `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`
15
+ - The presence of TeamCreate, SendMessage, TaskCreate/TaskList (team variants) tools
16
+
17
+ When detected, Agent Teams becomes the **preferred coordination method** for qualifying tasks.
18
+
19
+ ## Decision Matrix
20
+
21
+ | Scenario | Task Tool | Agent Teams | Preferred |
22
+ |----------|-----------|-------------|-----------|
23
+ | Simple independent subtasks | Low cost | Overkill | **Task Tool** |
24
+ | Multi-step with shared state | Limited | Native support | **Agent Teams** |
25
+ | Research requiring discussion | No peer comm | Peer messaging | **Agent Teams** |
26
+ | Cost-sensitive batch ops | Lower tokens | Higher tokens | **Task Tool** |
27
+ | Complex debugging across modules | Isolated context | Shared context | **Agent Teams** |
28
+ | Code review + fix cycle | Sequential | Collaborative | **Agent Teams** |
29
+ | Single file operations | Fast | Overhead | **Task Tool** |
30
+
31
+ ## When to Use Agent Teams
32
+
33
+ ### SHOULD Use Agent Teams For
34
+
35
+ ```
36
+ Tasks requiring 3+ agents that need to coordinate
37
+ Research tasks where agents need to share findings
38
+ Debugging sessions spanning multiple modules
39
+ Review + implementation cycles
40
+ Any task where inter-agent communication adds value
41
+ ```
42
+
43
+ ### SHOULD Keep Task Tool For
44
+
45
+ ```
46
+ Independent parallel subtasks (no shared state)
47
+ Single-agent delegations
48
+ Cost-sensitive batch operations
49
+ Simple file operations
50
+ When Agent Teams is not available
51
+ ```
52
+
53
+ ## Team Composition Guidelines
54
+
55
+ ### Standard Team Patterns
56
+
57
+ #### Research Team
58
+ ```
59
+ TeamCreate("research-team")
60
+ +-- researcher-1: Explore codebase area A
61
+ +-- researcher-2: Explore codebase area B
62
+ +-- synthesizer: Aggregate findings
63
+ ```
64
+
65
+ #### Development Team
66
+ ```
67
+ TeamCreate("dev-team")
68
+ +-- implementer: Write code
69
+ +-- reviewer: Review changes
70
+ +-- tester: Validate changes
71
+ ```
72
+
73
+ #### Debug Team
74
+ ```
75
+ TeamCreate("debug-team")
76
+ +-- investigator-1: Trace issue in module A
77
+ +-- investigator-2: Trace issue in module B
78
+ +-- fixer: Apply fixes based on findings
79
+ ```
80
+
81
+ ### Team Lifecycle
82
+
83
+ ```
84
+ 1. TeamCreate -> Create team with purpose
85
+ 2. TaskCreate -> Define tasks for team members
86
+ 3. Task(team_name) -> Spawn team members
87
+ 4. SendMessage -> Coordinate between members
88
+ 5. TaskUpdate -> Track progress
89
+ 6. SendMessage(shutdown_request) -> Graceful shutdown
90
+ 7. TeamDelete -> Cleanup
91
+ ```
92
+
93
+ ## Fallback Behavior
94
+
95
+ When Agent Teams is NOT available:
96
+ - All team-qualifying tasks fall back to Task tool
97
+ - R009 (Parallel Execution) governs parallel spawning
98
+ - R010 (Orchestrator Coordination) governs delegation
99
+ - No degradation in capability, only in coordination richness
100
+
101
+ ```
102
+ +------------------------------------------------------------------+
103
+ | GRACEFUL DEGRADATION |
104
+ | |
105
+ | Agent Teams Available: |
106
+ | Complex task -> TeamCreate -> coordinated agents |
107
+ | |
108
+ | Agent Teams NOT Available: |
109
+ | Complex task -> Task tool -> parallel independent agents |
110
+ | |
111
+ | Both approaches produce results. |
112
+ | Agent Teams adds coordination, not capability. |
113
+ +------------------------------------------------------------------+
114
+ ```
115
+
116
+ ## Integration with Existing Rules
117
+
118
+ | Rule | Integration |
119
+ |------|-------------|
120
+ | R009 (Parallel) | Task tool parallel = fallback when no Agent Teams |
121
+ | R010 (Orchestrator) | Agent Teams = alternative coordination model |
122
+ | R012 (HUD) | Team status displayed in HUD |
123
+ | R013 (Ecomode) | Team communications respect ecomode |
124
+
125
+ ## Cost Awareness
126
+
127
+ Agent Teams consume more tokens due to:
128
+ - Full context per team member
129
+ - Inter-agent message passing
130
+ - Shared task list overhead
131
+
132
+ ```
133
+ Rule of thumb:
134
+ If task takes < 3 minutes with Task tool -> Use Task tool
135
+ If task needs inter-agent communication -> Use Agent Teams
136
+ If unsure -> Start with Task tool, escalate to Agent Teams if needed
137
+ ```
@@ -24,49 +24,26 @@ rules:
24
24
  priority: MUST
25
25
  scope: all
26
26
 
27
- # SHOULD - Strongly recommended
28
- - id: R003
29
- name: interaction
30
- title: Interaction Rules
31
- path: ./SHOULD-interaction.md
32
- priority: SHOULD
33
- scope: all
34
-
35
- - id: R004
36
- name: error-handling
37
- title: Error Handling Rules
38
- path: ./SHOULD-error-handling.md
39
- priority: SHOULD
40
- scope: all
41
-
42
27
  - id: R007
43
28
  name: agent-identification
44
29
  title: Agent Identification Rules
45
- path: ./SHOULD-agent-identification.md
46
- priority: SHOULD
30
+ path: ./MUST-agent-identification.md
31
+ priority: MUST
47
32
  scope: all
48
33
 
49
34
  - id: R008
50
35
  name: tool-identification
51
36
  title: Tool Usage Identification Rules
52
- path: ./SHOULD-tool-identification.md
53
- priority: SHOULD
54
- scope: all
55
-
56
- # MAY - Optional
57
- - id: R005
58
- name: optimization
59
- title: Optimization Guide
60
- path: ./MAY-optimization.md
61
- priority: MAY
37
+ path: ./MUST-tool-identification.md
38
+ priority: MUST
62
39
  scope: all
63
40
 
64
41
  - id: R009
65
42
  name: parallel-execution
66
43
  title: Parallel Execution Rules
67
- path: ./MAY-parallel-execution.md
68
- priority: MAY
69
- scope: agents
44
+ path: ./MUST-parallel-execution.md
45
+ priority: MUST
46
+ scope: all
70
47
 
71
48
  # Agent Design - MUST
72
49
  - id: R006
@@ -84,6 +61,45 @@ rules:
84
61
  priority: MUST
85
62
  scope: agents
86
63
 
64
+ # Intent Transparency - MUST
65
+ - id: R015
66
+ name: intent-transparency
67
+ title: Intent Transparency Rules
68
+ path: ./MUST-intent-transparency.md
69
+ priority: MUST
70
+ scope: orchestrator
71
+
72
+ # Continuous Improvement - MUST
73
+ - id: R016
74
+ name: continuous-improvement
75
+ title: Continuous Improvement Rules
76
+ path: ./MUST-continuous-improvement.md
77
+ priority: MUST
78
+ scope: all
79
+
80
+ # Sync Verification - MUST
81
+ - id: R017
82
+ name: sync-verification
83
+ title: Sync Verification Rules
84
+ path: ./MUST-sync-verification.md
85
+ priority: MUST
86
+ scope: all
87
+
88
+ # SHOULD - Strongly recommended
89
+ - id: R003
90
+ name: interaction
91
+ title: Interaction Rules
92
+ path: ./SHOULD-interaction.md
93
+ priority: SHOULD
94
+ scope: all
95
+
96
+ - id: R004
97
+ name: error-handling
98
+ title: Error Handling Rules
99
+ path: ./SHOULD-error-handling.md
100
+ priority: SHOULD
101
+ scope: all
102
+
87
103
  # Memory Integration - SHOULD
88
104
  - id: R011
89
105
  name: memory-integration
@@ -108,10 +124,18 @@ rules:
108
124
  priority: SHOULD
109
125
  scope: all
110
126
 
111
- # Intent Transparency - MUST
112
- - id: R015
113
- name: intent-transparency
114
- title: Intent Transparency Rules
115
- path: ./MUST-intent-transparency.md
116
- priority: MUST
127
+ # Agent Teams - SHOULD
128
+ - id: R018
129
+ name: agent-teams
130
+ title: Agent Teams Rules
131
+ path: ./SHOULD-agent-teams.md
132
+ priority: SHOULD
117
133
  scope: orchestrator
134
+
135
+ # MAY - Optional
136
+ - id: R005
137
+ name: optimization
138
+ title: Optimization Guide
139
+ path: ./MAY-optimization.md
140
+ priority: MAY
141
+ scope: all
@@ -129,6 +129,7 @@ Flow:
129
129
  | R012 | HUD Statusline | Real-time status display |
130
130
  | R013 | Ecomode | Token efficiency for batch ops |
131
131
  | R015 | Intent Transparency | **MUST** - Transparent agent routing |
132
+ | R018 | Agent Teams | Active use of Agent Teams when enabled |
132
133
 
133
134
  ### MAY (Optional)
134
135
  | ID | Rule | Description |
@@ -169,7 +170,7 @@ project/
169
170
  +-- .claude/
170
171
  | +-- agents/ # Subagent definitions (34 files)
171
172
  | +-- skills/ # Skills (41 directories)
172
- | +-- rules/ # Global rules (R000-R017)
173
+ | +-- rules/ # Global rules (R000-R018)
173
174
  | +-- hooks/ # Hook scripts (memory, HUD)
174
175
  | +-- contexts/ # Context files (ecomode)
175
176
  +-- guides/ # Reference docs (13 topics)
@@ -200,6 +201,21 @@ The main conversation acts as the sole orchestrator. Subagents cannot spawn othe
200
201
  | System | 2 | sys-memory-keeper, sys-naggy |
201
202
  | **Total** | **34** | |
202
203
 
204
+ ## Agent Teams
205
+
206
+ When Claude Code's Agent Teams feature is enabled (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`), actively use it for qualifying tasks.
207
+
208
+ | Feature | Subagents (Default) | Agent Teams |
209
+ |---------|---------------------|-------------|
210
+ | Communication | Results to caller only | Peer-to-peer mailbox |
211
+ | Coordination | Orchestrator manages | Shared task list |
212
+ | Best for | Focused tasks | Research, review, debugging |
213
+ | Token cost | Lower | Higher |
214
+
215
+ **When enabled, actively use Agent Teams for complex collaborative tasks.**
216
+ See R018 (SHOULD-agent-teams.md) for the decision matrix.
217
+ Task tool + routing skills remain the fallback for simple/cost-sensitive tasks.
218
+
203
219
  ## Quick Reference
204
220
 
205
221
  ```bash
@@ -129,6 +129,7 @@ oh-my-customcode로 구동됩니다.
129
129
  | R012 | HUD 상태줄 | 실시간 상태 표시 |
130
130
  | R013 | Ecomode | 배치 작업 토큰 효율성 |
131
131
  | R015 | 의도 투명성 | **필수** - 투명한 에이전트 라우팅 |
132
+ | R018 | Agent Teams | 활성화 시 Agent Teams 적극 사용 |
132
133
 
133
134
  ### MAY (선택)
134
135
  | ID | 규칙 | 설명 |
@@ -169,7 +170,7 @@ project/
169
170
  +-- .claude/
170
171
  | +-- agents/ # 서브에이전트 정의 (34 파일)
171
172
  | +-- skills/ # 스킬 (41 디렉토리)
172
- | +-- rules/ # 전역 규칙 (R000-R017)
173
+ | +-- rules/ # 전역 규칙 (R000-R018)
173
174
  | +-- hooks/ # 훅 스크립트 (메모리, HUD)
174
175
  | +-- contexts/ # 컨텍스트 파일 (ecomode)
175
176
  +-- guides/ # 레퍼런스 문서 (13 토픽)
@@ -200,6 +201,21 @@ project/
200
201
  | System | 2 | sys-memory-keeper, sys-naggy |
201
202
  | **총계** | **34** | |
202
203
 
204
+ ## Agent Teams
205
+
206
+ Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`), 적격한 작업에 적극적으로 사용합니다.
207
+
208
+ | 기능 | 서브에이전트 (기본) | Agent Teams |
209
+ |------|---------------------|-------------|
210
+ | 통신 | 호출자에게 결과만 반환 | 피어 투 피어 메시지 |
211
+ | 조율 | 오케스트레이터가 관리 | 공유 작업 목록 |
212
+ | 적합한 작업 | 집중된 작업 | 리서치, 리뷰, 디버깅 |
213
+ | 토큰 비용 | 낮음 | 높음 |
214
+
215
+ **활성화 시, 복잡한 협업 작업에 Agent Teams를 적극 사용합니다.**
216
+ 결정 매트릭스는 R018 (SHOULD-agent-teams.md)을 참조하세요.
217
+ 단순/비용 민감 작업에는 Task tool + 라우팅 스킬이 폴백으로 유지됩니다.
218
+
203
219
  ## 빠른 참조
204
220
 
205
221
  ```bash
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "version": "0.2.0",
3
- "lastUpdated": "2026-02-06T06:06:08.847Z",
3
+ "lastUpdated": "2026-02-08T07:00:00.000Z",
4
4
  "components": [
5
5
  {
6
6
  "name": "rules",
7
7
  "path": ".claude/rules",
8
8
  "description": "Agent behavior rules and guidelines",
9
- "files": 18
9
+ "files": 19
10
10
  },
11
11
  {
12
12
  "name": "agents",
@@ -1,66 +0,0 @@
1
- # Code Review Pipeline
2
- # Full code review workflow with language detection
3
-
4
- name: code-review
5
- description: Full code review workflow with automatic language detection
6
-
7
- inputs:
8
- - name: file_path
9
- required: true
10
- description: Path to the file to review
11
-
12
- - name: focus
13
- required: false
14
- description: Focus area (style, security, performance, all)
15
- default: all
16
-
17
- steps:
18
- # Step 1: Detect programming language
19
- - id: detect_language
20
- agent: secretary
21
- action: detect_language
22
- input:
23
- file: "${file_path}"
24
- output: language
25
- description: Detect the programming language of the file
26
-
27
- # Step 2: Code analysis by language expert
28
- - id: analyze
29
- agent: "${language}-expert"
30
- action: analyze_code
31
- input:
32
- file: "${file_path}"
33
- focus: "${focus}"
34
- output: analysis
35
- description: Analyze code using language-specific best practices
36
-
37
- # Step 3: Security review
38
- - id: security_check
39
- agent: qa-lead
40
- action: security_review
41
- input:
42
- file: "${file_path}"
43
- findings: "${analysis}"
44
- output: security
45
- description: Check for security vulnerabilities
46
- on_error: continue
47
-
48
- # Step 4: Generate final report
49
- - id: report
50
- agent: documenter
51
- action: generate_report
52
- input:
53
- file: "${file_path}"
54
- language: "${language}"
55
- analysis: "${analysis}"
56
- security: "${security}"
57
- output: report
58
- description: Generate comprehensive review report
59
-
60
- error_handling:
61
- default: stop
62
-
63
- metadata:
64
- author: oh-my-customcode
65
- version: 1.0.0
66
- tags: [code-review, quality, security]
@@ -1,66 +0,0 @@
1
- # Code Review Pipeline
2
- # Full code review workflow with language detection
3
-
4
- name: code-review
5
- description: Full code review workflow with automatic language detection
6
-
7
- inputs:
8
- - name: file_path
9
- required: true
10
- description: Path to the file to review
11
-
12
- - name: focus
13
- required: false
14
- description: Focus area (style, security, performance, all)
15
- default: all
16
-
17
- steps:
18
- # Step 1: Detect programming language
19
- - id: detect_language
20
- agent: secretary
21
- action: detect_language
22
- input:
23
- file: "${file_path}"
24
- output: language
25
- description: Detect the programming language of the file
26
-
27
- # Step 2: Code analysis by language expert
28
- - id: analyze
29
- agent: "${language}-expert"
30
- action: analyze_code
31
- input:
32
- file: "${file_path}"
33
- focus: "${focus}"
34
- output: analysis
35
- description: Analyze code using language-specific best practices
36
-
37
- # Step 3: Security review
38
- - id: security_check
39
- agent: qa-lead
40
- action: security_review
41
- input:
42
- file: "${file_path}"
43
- findings: "${analysis}"
44
- output: security
45
- description: Check for security vulnerabilities
46
- on_error: continue
47
-
48
- # Step 4: Generate final report
49
- - id: report
50
- agent: arch-documenter
51
- action: generate_report
52
- input:
53
- file: "${file_path}"
54
- language: "${language}"
55
- analysis: "${analysis}"
56
- security: "${security}"
57
- output: report
58
- description: Generate comprehensive review report
59
-
60
- error_handling:
61
- default: stop
62
-
63
- metadata:
64
- author: oh-my-customcode
65
- version: 1.0.0
66
- tags: [code-review, quality, security]
@@ -1,18 +0,0 @@
1
- # Pipeline Registry
2
-
3
- description: Registry of available pipelines for sequential workflows
4
-
5
- pipelines:
6
- - name: code-review
7
- path: ./examples/code-review.yaml
8
- description: Full code review workflow with language detection
9
-
10
- templates:
11
- - name: pipeline-template
12
- path: ./templates/pipeline-template.yaml
13
- description: Base template for creating new pipelines
14
-
15
- usage:
16
- run: "pipeline:run <name> --input key=value"
17
- list: "pipeline:list"
18
- create: "Use templates/pipeline-template.yaml as base"