oh-my-customcode 0.36.2 → 0.37.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/dist/cli/index.js +47 -2
- package/dist/index.js +44 -0
- package/package.json +1 -1
- package/templates/.claude/agents/arch-documenter.md +4 -1
- package/templates/.claude/agents/arch-speckit-agent.md +15 -0
- package/templates/.claude/agents/be-django-expert.md +1 -0
- package/templates/.claude/agents/be-express-expert.md +1 -0
- package/templates/.claude/agents/be-fastapi-expert.md +1 -0
- package/templates/.claude/agents/be-go-backend-expert.md +1 -0
- package/templates/.claude/agents/be-nestjs-expert.md +1 -0
- package/templates/.claude/agents/be-springboot-expert.md +1 -0
- package/templates/.claude/agents/db-postgres-expert.md +1 -0
- package/templates/.claude/agents/db-redis-expert.md +1 -0
- package/templates/.claude/agents/db-supabase-expert.md +1 -0
- package/templates/.claude/agents/de-airflow-expert.md +1 -0
- package/templates/.claude/agents/de-dbt-expert.md +1 -0
- package/templates/.claude/agents/de-kafka-expert.md +1 -0
- package/templates/.claude/agents/de-pipeline-expert.md +1 -0
- package/templates/.claude/agents/de-snowflake-expert.md +1 -0
- package/templates/.claude/agents/de-spark-expert.md +1 -0
- package/templates/.claude/agents/fe-flutter-agent.md +1 -0
- package/templates/.claude/agents/fe-svelte-agent.md +1 -0
- package/templates/.claude/agents/fe-vercel-agent.md +1 -0
- package/templates/.claude/agents/fe-vuejs-agent.md +1 -0
- package/templates/.claude/agents/infra-aws-expert.md +1 -0
- package/templates/.claude/agents/infra-docker-expert.md +1 -0
- package/templates/.claude/agents/lang-golang-expert.md +1 -0
- package/templates/.claude/agents/lang-java21-expert.md +3 -0
- package/templates/.claude/agents/lang-kotlin-expert.md +1 -0
- package/templates/.claude/agents/lang-python-expert.md +1 -0
- package/templates/.claude/agents/lang-rust-expert.md +1 -0
- package/templates/.claude/agents/lang-typescript-expert.md +1 -0
- package/templates/.claude/agents/mgr-claude-code-bible.md +1 -2
- package/templates/.claude/agents/mgr-creator.md +1 -0
- package/templates/.claude/agents/mgr-gitnerd.md +1 -0
- package/templates/.claude/agents/mgr-sauron.md +5 -2
- package/templates/.claude/agents/mgr-supplier.md +1 -3
- package/templates/.claude/agents/mgr-updater.md +1 -0
- package/templates/.claude/agents/qa-engineer.md +1 -0
- package/templates/.claude/agents/qa-planner.md +4 -1
- package/templates/.claude/agents/qa-writer.md +1 -1
- package/templates/.claude/agents/sec-codeql-expert.md +4 -2
- package/templates/.claude/agents/sys-memory-keeper.md +30 -0
- package/templates/.claude/agents/sys-naggy.md +36 -2
- package/templates/.claude/agents/tool-bun-expert.md +1 -1
- package/templates/.claude/agents/tool-npm-expert.md +1 -1
- package/templates/.claude/agents/tool-optimizer.md +1 -2
- package/templates/.claude/hooks/hooks.json +2 -2
- package/templates/.claude/hooks/scripts/agent-teams-advisor.sh +10 -0
- package/templates/.claude/hooks/scripts/content-hash-validator.sh +2 -3
- package/templates/.claude/hooks/scripts/schema-validator.sh +15 -0
- package/templates/.claude/hooks/scripts/secret-filter.sh +31 -1
- package/templates/.claude/rules/MUST-agent-teams.md +0 -23
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +1 -13
- package/templates/.claude/skills/django-best-practices/SKILL.md +27 -134
- package/templates/.claude/skills/flutter-best-practices/SKILL.md +39 -146
- package/templates/.claude/skills/go-backend-best-practices/SKILL.md +29 -233
- package/templates/.claude/skills/java21-best-practices/SKILL.md +48 -163
- package/templates/CLAUDE.md.en +7 -65
- package/templates/CLAUDE.md.ko +7 -65
- package/templates/manifest.json +1 -1
|
@@ -44,6 +44,8 @@ records:
|
|
|
44
44
|
example: record Point(int x, int y) {}
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
+
Reference: guides/java21/java-style-guide.md
|
|
48
|
+
|
|
47
49
|
### 2. Virtual Threads (JEP 444)
|
|
48
50
|
|
|
49
51
|
```yaml
|
|
@@ -52,27 +54,10 @@ principles:
|
|
|
52
54
|
- Avoid pooling Virtual Threads (they are lightweight)
|
|
53
55
|
- Replace thread pools for blocking I/O with Virtual Thread executors
|
|
54
56
|
|
|
55
|
-
patterns:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
System.out.println(result.get());
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Direct creation
|
|
63
|
-
Thread vThread = Thread.ofVirtual().start(() -> {
|
|
64
|
-
// blocking I/O is fine here
|
|
65
|
-
String data = callExternalApi();
|
|
66
|
-
process(data);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// With structured concurrency (JEP 453, preview)
|
|
70
|
-
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
|
|
71
|
-
Future<String> user = scope.fork(() -> fetchUser(id));
|
|
72
|
-
Future<List<Order>> orders = scope.fork(() -> fetchOrders(id));
|
|
73
|
-
scope.join().throwIfFailed();
|
|
74
|
-
return new UserProfile(user.get(), orders.get());
|
|
75
|
-
}
|
|
57
|
+
patterns:
|
|
58
|
+
executor: "Executors.newVirtualThreadPerTaskExecutor()"
|
|
59
|
+
direct: "Thread.ofVirtual().start(() -> { ... })"
|
|
60
|
+
structured: "StructuredTaskScope.ShutdownOnFailure() for fork/join"
|
|
76
61
|
|
|
77
62
|
antipatterns:
|
|
78
63
|
- "Executors.newFixedThreadPool() for I/O tasks — use Virtual Threads instead"
|
|
@@ -80,44 +65,23 @@ antipatterns:
|
|
|
80
65
|
- "synchronized blocks in Virtual Thread code — use ReentrantLock instead"
|
|
81
66
|
```
|
|
82
67
|
|
|
68
|
+
Reference: guides/java21/modern-java21.md
|
|
69
|
+
|
|
83
70
|
### 3. Pattern Matching
|
|
84
71
|
|
|
85
72
|
```yaml
|
|
86
|
-
instanceof_patterns:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (obj instanceof String s) {
|
|
95
|
-
System.out.println(s.length());
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// With guard
|
|
99
|
-
if (obj instanceof String s && s.length() > 5) {
|
|
100
|
-
System.out.println("Long string: " + s);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
switch_patterns: |
|
|
104
|
-
// Pattern matching for switch (JEP 441)
|
|
105
|
-
String result = switch (obj) {
|
|
106
|
-
case Integer i -> "int " + i;
|
|
107
|
-
case String s -> "str " + s;
|
|
108
|
-
case null -> "null";
|
|
109
|
-
default -> "other " + obj;
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
// With guards (when clause)
|
|
113
|
-
String label = switch (shape) {
|
|
114
|
-
case Circle c when c.radius() > 10 -> "large circle";
|
|
115
|
-
case Circle c -> "small circle";
|
|
116
|
-
case Rectangle r -> "rectangle";
|
|
117
|
-
default -> "unknown";
|
|
118
|
-
};
|
|
73
|
+
instanceof_patterns:
|
|
74
|
+
rule: "Use pattern variable binding instead of explicit casts"
|
|
75
|
+
guard: "Combine with && for conditional matching"
|
|
76
|
+
|
|
77
|
+
switch_patterns:
|
|
78
|
+
rule: "Pattern matching for switch (JEP 441) — use case Type var syntax"
|
|
79
|
+
guards: "Use 'when' clause for conditional cases"
|
|
80
|
+
null_handling: "case null supported in switch"
|
|
119
81
|
```
|
|
120
82
|
|
|
83
|
+
Reference: guides/java21/modern-java21.md
|
|
84
|
+
|
|
121
85
|
### 4. Records (JEP 395)
|
|
122
86
|
|
|
123
87
|
```yaml
|
|
@@ -126,59 +90,29 @@ principles:
|
|
|
126
90
|
- Prefer Records over POJOs with getters/setters for pure data
|
|
127
91
|
- Compact constructors for validation
|
|
128
92
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
// With validation (compact constructor)
|
|
134
|
-
record Range(int min, int max) {
|
|
135
|
-
Range {
|
|
136
|
-
if (min > max) throw new IllegalArgumentException(
|
|
137
|
-
"min %d > max %d".formatted(min, max));
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// With custom methods
|
|
142
|
-
record Circle(double radius) {
|
|
143
|
-
double area() {
|
|
144
|
-
return Math.PI * radius * radius;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Implementing interface
|
|
149
|
-
interface Shape { double area(); }
|
|
150
|
-
record Square(double side) implements Shape {
|
|
151
|
-
public double area() { return side * side; }
|
|
152
|
-
}
|
|
93
|
+
features:
|
|
94
|
+
validation: "Compact constructor (no parens) for input validation"
|
|
95
|
+
methods: "Custom methods allowed alongside auto-generated accessors"
|
|
96
|
+
interfaces: "Records can implement interfaces"
|
|
153
97
|
|
|
154
98
|
antipatterns:
|
|
155
99
|
- "Mutable state in records — records are inherently immutable"
|
|
156
100
|
- "Using records for entities with behavior — prefer classes"
|
|
157
101
|
```
|
|
158
102
|
|
|
103
|
+
Reference: guides/java21/modern-java21.md
|
|
104
|
+
|
|
159
105
|
### 5. Record Patterns (JEP 440)
|
|
160
106
|
|
|
161
107
|
```yaml
|
|
162
|
-
patterns:
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// In switch
|
|
169
|
-
String describe = switch (shape) {
|
|
170
|
-
case Circle(double r) -> "circle r=" + r;
|
|
171
|
-
case Rectangle(double w, double h) -> "rect " + w + "x" + h;
|
|
172
|
-
default -> "unknown";
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
// Nested record patterns
|
|
176
|
-
record ColoredPoint(Point point, Color color) {}
|
|
177
|
-
if (obj instanceof ColoredPoint(Point(int x, int y), Color c)) {
|
|
178
|
-
System.out.println("colored point at " + x + "," + y);
|
|
179
|
-
}
|
|
108
|
+
patterns:
|
|
109
|
+
instanceof: "Deconstruct record components in instanceof check"
|
|
110
|
+
switch: "Deconstruct in switch case labels"
|
|
111
|
+
nested: "Nested record patterns for deep destructuring"
|
|
180
112
|
```
|
|
181
113
|
|
|
114
|
+
Reference: guides/java21/modern-java21.md
|
|
115
|
+
|
|
182
116
|
### 6. Sealed Classes (JEP 409)
|
|
183
117
|
|
|
184
118
|
```yaml
|
|
@@ -187,21 +121,11 @@ principles:
|
|
|
187
121
|
- Combine with Pattern Matching switch for exhaustive handling
|
|
188
122
|
- Prefer sealed interfaces for behavior-focused hierarchies
|
|
189
123
|
|
|
190
|
-
|
|
191
|
-
// Sealed interface with records
|
|
192
|
-
sealed interface Shape permits Circle, Rectangle, Triangle {}
|
|
193
|
-
record Circle(double radius) implements Shape {}
|
|
194
|
-
record Rectangle(double width, double height) implements Shape {}
|
|
195
|
-
record Triangle(double base, double height) implements Shape {}
|
|
196
|
-
|
|
197
|
-
// Exhaustive switch (no default needed)
|
|
198
|
-
double area = switch (shape) {
|
|
199
|
-
case Circle(double r) -> Math.PI * r * r;
|
|
200
|
-
case Rectangle(double w, double h) -> w * h;
|
|
201
|
-
case Triangle(double b, double h) -> 0.5 * b * h;
|
|
202
|
-
};
|
|
124
|
+
pattern: "sealed interface with record implementations, exhaustive switch (no default needed)"
|
|
203
125
|
```
|
|
204
126
|
|
|
127
|
+
Reference: guides/java21/modern-java21.md
|
|
128
|
+
|
|
205
129
|
### 7. Sequenced Collections (JEP 431)
|
|
206
130
|
|
|
207
131
|
```yaml
|
|
@@ -209,43 +133,21 @@ principles:
|
|
|
209
133
|
- Use SequencedCollection for ordered access
|
|
210
134
|
- getFirst()/getLast() replace get(0) and get(size-1)
|
|
211
135
|
|
|
212
|
-
|
|
213
|
-
// SequencedCollection methods
|
|
214
|
-
List<String> list = new ArrayList<>(List.of("a", "b", "c"));
|
|
215
|
-
String first = list.getFirst(); // "a"
|
|
216
|
-
String last = list.getLast(); // "c"
|
|
217
|
-
list.addFirst("z"); // ["z", "a", "b", "c"]
|
|
218
|
-
list.addLast("end"); // ["z", "a", "b", "c", "end"]
|
|
219
|
-
|
|
220
|
-
// Reversed view
|
|
221
|
-
List<String> reversed = list.reversed();
|
|
222
|
-
|
|
223
|
-
// SequencedMap
|
|
224
|
-
SequencedMap<String, Integer> map = new LinkedHashMap<>();
|
|
225
|
-
map.put("one", 1);
|
|
226
|
-
map.put("two", 2);
|
|
227
|
-
Map.Entry<String, Integer> firstEntry = map.firstEntry(); // "one"=1
|
|
136
|
+
methods: "getFirst(), getLast(), addFirst(), addLast(), reversed(), firstEntry()"
|
|
228
137
|
```
|
|
229
138
|
|
|
139
|
+
Reference: guides/java21/modern-java21.md
|
|
140
|
+
|
|
230
141
|
### 8. Text Blocks and String Features
|
|
231
142
|
|
|
232
143
|
```yaml
|
|
233
|
-
patterns:
|
|
234
|
-
|
|
235
|
-
String
|
|
236
|
-
{
|
|
237
|
-
"name": "Alice",
|
|
238
|
-
"age": 30
|
|
239
|
-
}
|
|
240
|
-
""";
|
|
241
|
-
|
|
242
|
-
// String.formatted() (since Java 15)
|
|
243
|
-
String msg = "Hello, %s! You are %d years old.".formatted(name, age);
|
|
244
|
-
|
|
245
|
-
// String templates (JEP 430, preview in Java 21)
|
|
246
|
-
// Prefer String.formatted() or MessageFormat for now
|
|
144
|
+
patterns:
|
|
145
|
+
text_blocks: "Triple-quote \"\"\" for multi-line strings (since Java 15)"
|
|
146
|
+
formatted: "String.formatted() for template substitution (since Java 15)"
|
|
247
147
|
```
|
|
248
148
|
|
|
149
|
+
Reference: guides/java21/modern-java21.md
|
|
150
|
+
|
|
249
151
|
### 9. Error Handling
|
|
250
152
|
|
|
251
153
|
```yaml
|
|
@@ -255,35 +157,16 @@ principles:
|
|
|
255
157
|
- Never swallow exceptions silently
|
|
256
158
|
- Use specific exception types
|
|
257
159
|
|
|
258
|
-
patterns:
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
return userRepository.findById(id)
|
|
262
|
-
.orElseThrow(() -> new UserNotFoundException("User not found: " + id));
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// Multi-catch
|
|
266
|
-
try {
|
|
267
|
-
process();
|
|
268
|
-
} catch (IOException | SQLException e) {
|
|
269
|
-
log.error("Data access failed", e);
|
|
270
|
-
throw new ServiceException("Processing failed", e);
|
|
271
|
-
}
|
|
160
|
+
patterns:
|
|
161
|
+
optional: "orElseThrow(() -> new SpecificException(msg)) for missing values"
|
|
162
|
+
multi_catch: "catch (IOException | SQLException e) for related exceptions"
|
|
272
163
|
```
|
|
273
164
|
|
|
165
|
+
Reference: guides/java21/java-style-guide.md
|
|
166
|
+
|
|
274
167
|
### 10. Documentation
|
|
275
168
|
|
|
276
169
|
```yaml
|
|
277
|
-
format: |
|
|
278
|
-
/**
|
|
279
|
-
* Processes the given {@link Order} and returns a {@link Receipt}.
|
|
280
|
-
*
|
|
281
|
-
* @param order the order to process (must not be null)
|
|
282
|
-
* @return the generated receipt
|
|
283
|
-
* @throws OrderException if the order cannot be fulfilled
|
|
284
|
-
*/
|
|
285
|
-
public Receipt processOrder(Order order) { }
|
|
286
|
-
|
|
287
170
|
best_practices:
|
|
288
171
|
- Use @param and @return for public API
|
|
289
172
|
- Link related types with {@link}
|
|
@@ -291,6 +174,8 @@ best_practices:
|
|
|
291
174
|
- Keep Javadoc focused on "what", not "how"
|
|
292
175
|
```
|
|
293
176
|
|
|
177
|
+
Reference: guides/java21/java-style-guide.md
|
|
178
|
+
|
|
294
179
|
## Application
|
|
295
180
|
|
|
296
181
|
When writing or reviewing Java 21 code:
|
package/templates/CLAUDE.md.en
CHANGED
|
@@ -5,26 +5,7 @@ Powered by oh-my-customcode.
|
|
|
5
5
|
---
|
|
6
6
|
## STOP AND READ BEFORE EVERY RESPONSE
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
+==================================================================+
|
|
10
|
-
| MANDATORY CHECK BEFORE RESPONDING: |
|
|
11
|
-
| |
|
|
12
|
-
| 1. Does my response start with agent identification? |
|
|
13
|
-
| +- Agent: {name} ({type}) |
|
|
14
|
-
| +- Task: {description} |
|
|
15
|
-
| |
|
|
16
|
-
| 2. Do my tool calls include identification? |
|
|
17
|
-
| [agent-name] -> Tool: {tool} |
|
|
18
|
-
| [agent-name] -> Target: {path} |
|
|
19
|
-
| |
|
|
20
|
-
| |
|
|
21
|
-
| 3. Am I about to spawn 2+ agents? |
|
|
22
|
-
| YES -> Check R018: Agent Teams may be REQUIRED |
|
|
23
|
-
| 3+ agents OR review cycle -> Agent Teams (MUST) |
|
|
24
|
-
| |
|
|
25
|
-
| If NO to any -> FIX IMMEDIATELY before continuing |
|
|
26
|
-
+==================================================================+
|
|
27
|
-
```
|
|
8
|
+
1. Response starts with agent identification? (R007) 2. Tool calls include identification? (R008) 3. Spawning 2+ agents? Check R018. → If NO to any, FIX IMMEDIATELY
|
|
28
9
|
|
|
29
10
|
---
|
|
30
11
|
|
|
@@ -62,51 +43,12 @@ NO EXCEPTIONS. NO EXCUSES.
|
|
|
62
43
|
|
|
63
44
|
> **These rules are NON-NEGOTIABLE. Violation = immediate correction required.**
|
|
64
45
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
+- Task: {brief-task-description}
|
|
72
|
-
|
|
73
|
-
NO EXCEPTIONS. Even for simple questions.
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### 2. Tool Usage Identification (ENFORCED)
|
|
77
|
-
```
|
|
78
|
-
EVERY tool call MUST be prefixed with:
|
|
79
|
-
|
|
80
|
-
[agent-name] -> Tool: <tool-name>
|
|
81
|
-
[agent-name] -> Target: <file/path/url>
|
|
82
|
-
|
|
83
|
-
Example:
|
|
84
|
-
[lang-golang-expert] -> Tool: Read
|
|
85
|
-
[lang-golang-expert] -> Target: src/main.go
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### 3. Parallel Execution (ENFORCED for 2+ independent tasks)
|
|
89
|
-
```
|
|
90
|
-
When 2 or more tasks are INDEPENDENT:
|
|
91
|
-
-> MUST spawn parallel agent instances (max 4)
|
|
92
|
-
-> MUST NOT process sequentially
|
|
93
|
-
|
|
94
|
-
Detection: If tasks don't share state or have dependencies -> PARALLEL
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### 4. Orchestrator Coordination (ENFORCED for multi-agent tasks)
|
|
98
|
-
```
|
|
99
|
-
When task requires multiple agents:
|
|
100
|
-
-> Main conversation (orchestrator) MUST coordinate
|
|
101
|
-
-> Main conversation assigns tasks to appropriate agents
|
|
102
|
-
-> Main conversation aggregates results
|
|
103
|
-
-> Orchestrator MUST NEVER directly modify files
|
|
104
|
-
|
|
105
|
-
Flow:
|
|
106
|
-
User -> Main conversation -> [agent-1, agent-2, agent-3] -> Main conversation -> User
|
|
107
|
-
|
|
108
|
-
Violation = immediate correction. No exception for "small changes".
|
|
109
|
-
```
|
|
46
|
+
| Rule | Core | On Violation |
|
|
47
|
+
|------|------|-------------|
|
|
48
|
+
| R007 Agent ID | Every response starts with `┌─ Agent:` header | Add header immediately |
|
|
49
|
+
| R008 Tool ID | Every tool call prefixed with `[agent][model] → Tool:` | Add prefix immediately |
|
|
50
|
+
| R009 Parallel | 2+ independent tasks → parallel agents (max 4) | Stop sequential, switch to parallel |
|
|
51
|
+
| R010 Orchestrator | Orchestrator never modifies files → delegate to subagents | Stop direct modification, delegate |
|
|
110
52
|
|
|
111
53
|
---
|
|
112
54
|
|
package/templates/CLAUDE.md.ko
CHANGED
|
@@ -5,26 +5,7 @@ oh-my-customcode로 구동됩니다.
|
|
|
5
5
|
---
|
|
6
6
|
## 모든 응답 전 반드시 확인
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
+==================================================================+
|
|
10
|
-
| 응답 전 필수 확인사항: |
|
|
11
|
-
| |
|
|
12
|
-
| 1. 내 응답이 에이전트 식별로 시작하는가? |
|
|
13
|
-
| +- Agent: {이름} ({타입}) |
|
|
14
|
-
| +- Task: {설명} |
|
|
15
|
-
| |
|
|
16
|
-
| 2. 도구 호출에 식별 정보가 포함되어 있는가? |
|
|
17
|
-
| [에이전트명] -> Tool: {도구} |
|
|
18
|
-
| [에이전트명] -> Target: {경로} |
|
|
19
|
-
| |
|
|
20
|
-
| |
|
|
21
|
-
| 3. 2개 이상 에이전트를 스폰하려 하는가? |
|
|
22
|
-
| YES -> R018 체크: Agent Teams 필수 여부 확인 |
|
|
23
|
-
| 3+ 에이전트 OR 리뷰 사이클 -> Agent Teams 필수 |
|
|
24
|
-
| |
|
|
25
|
-
| 하나라도 NO면 -> 즉시 수정 후 계속 |
|
|
26
|
-
+==================================================================+
|
|
27
|
-
```
|
|
8
|
+
1. 에이전트 식별로 시작하는가? (R007) 2. 도구 호출에 식별 포함? (R008) 3. 2+ 에이전트 스폰 시 R018 체크? → 하나라도 NO면 즉시 수정
|
|
28
9
|
|
|
29
10
|
---
|
|
30
11
|
|
|
@@ -62,51 +43,12 @@ oh-my-customcode로 구동됩니다.
|
|
|
62
43
|
|
|
63
44
|
> **이 규칙들은 협상 불가. 위반 = 즉시 수정 필요.**
|
|
64
45
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
모든 응답은
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
+- Task: {간단한 작업 설명}
|
|
72
|
-
|
|
73
|
-
예외 없음. 간단한 질문도 마찬가지.
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### 2. 도구 사용 식별 (강제)
|
|
77
|
-
```
|
|
78
|
-
모든 도구 호출은 반드시 에이전트 식별 포함:
|
|
79
|
-
|
|
80
|
-
[에이전트명] -> Tool: <도구명>
|
|
81
|
-
[에이전트명] -> Target: <파일/경로/URL>
|
|
82
|
-
|
|
83
|
-
예:
|
|
84
|
-
[lang-golang-expert] -> Tool: Read
|
|
85
|
-
[lang-golang-expert] -> Target: src/main.go
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### 3. 병렬 실행 (2개 이상 독립 작업 시 강제)
|
|
89
|
-
```
|
|
90
|
-
2개 이상의 작업이 독립적일 때:
|
|
91
|
-
-> 반드시 병렬 에이전트 인스턴스 생성 (최대 4개)
|
|
92
|
-
-> 순차 처리 금지
|
|
93
|
-
|
|
94
|
-
감지: 작업 간 상태 공유나 의존성이 없으면 -> 병렬
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### 4. 오케스트레이터 조율 (다중 에이전트 작업 시 강제)
|
|
98
|
-
```
|
|
99
|
-
작업에 여러 에이전트가 필요할 때:
|
|
100
|
-
-> 메인 대화 (오케스트레이터)가 반드시 조율
|
|
101
|
-
-> 메인 대화가 적절한 에이전트에 작업 할당
|
|
102
|
-
-> 메인 대화가 결과 집계
|
|
103
|
-
-> 오케스트레이터는 절대 직접 파일을 수정하지 않음
|
|
104
|
-
|
|
105
|
-
흐름:
|
|
106
|
-
사용자 -> 메인 대화 -> [agent-1, agent-2, agent-3] -> 메인 대화 -> 사용자
|
|
107
|
-
|
|
108
|
-
위반 시 즉시 수정. "작은 변경"도 예외 없음.
|
|
109
|
-
```
|
|
46
|
+
| 규칙 | 핵심 | 위반 시 |
|
|
47
|
+
|------|------|--------|
|
|
48
|
+
| R007 에이전트 식별 | 모든 응답은 `┌─ Agent:` 헤더로 시작 | 즉시 헤더 추가 |
|
|
49
|
+
| R008 도구 식별 | 모든 도구 호출에 `[에이전트명][모델] → Tool:` 접두사 | 즉시 접두사 추가 |
|
|
50
|
+
| R009 병렬 실행 | 독립 작업 2개 이상 → 병렬 에이전트 (최대 4개) | 순차 실행 중단, 병렬로 전환 |
|
|
51
|
+
| R010 오케스트레이터 | 오케스트레이터는 파일 수정 금지 → 서브에이전트에 위임 | 직접 수정 중단, 위임 |
|
|
110
52
|
|
|
111
53
|
---
|
|
112
54
|
|
package/templates/manifest.json
CHANGED