claude-flow-novice 1.5.3 → 1.5.5
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/.claude/agents/CLAUDE.md +2617 -0
- package/.claude/agents/CLAUDE_AGENT_DESIGN_PRINCIPLES.md +1312 -0
- package/.claude/agents/README-VALIDATION.md +243 -0
- package/.claude/agents/SPARSE_LANGUAGE_FINDINGS.md +991 -0
- package/.claude/agents/specialized/CODER_AGENT_GUIDELINES.md +1245 -0
- package/.claude/agents/validate-agent.js +841 -0
- package/.claude-flow-novice/.claude/agents/CLAUDE.md +2617 -0
- package/.claude-flow-novice/.claude/agents/CLAUDE_AGENT_DESIGN_PRINCIPLES.md +1312 -0
- package/.claude-flow-novice/.claude/agents/SPARSE_LANGUAGE_FINDINGS.md +991 -0
- package/.claude-flow-novice/.claude/agents/specialized/CODER_AGENT_GUIDELINES.md +1245 -0
- package/.claude-flow-novice/.claude/agents/validate-agent.js +841 -0
- package/.claude-flow-novice/dist/src/cli/simple-commands/init/index.js +1896 -0
- package/.claude-flow-novice/dist/src/cli/simple-commands/init.js +4 -0
- package/.claude-flow-novice/dist/src/slash-commands/claude-md.js +22 -9
- package/package.json +3 -2
- package/scripts/migrate-to-sdk.sh +520 -0
- package/scripts/monitor-migration.js +339 -0
- package/scripts/rollback-sdk.sh +444 -0
- package/scripts/verify-sdk-phase1.cjs +293 -0
- package/src/cli/simple-commands/init/index.js +3 -3
- package/src/slash-commands/claude-md.js +22 -9
|
@@ -0,0 +1,1312 @@
|
|
|
1
|
+
# Claude Agent Design Principles
|
|
2
|
+
**Empirical Guide to Optimal Agent Prompt Engineering**
|
|
3
|
+
|
|
4
|
+
**Version**: 1.0
|
|
5
|
+
**Last Updated**: 2025-09-30
|
|
6
|
+
**Based On**: 45 Rust benchmark observations + Agent ecosystem analysis
|
|
7
|
+
**Status**: Production Ready with Validated Findings
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Table of Contents
|
|
12
|
+
|
|
13
|
+
1. [Executive Summary](#executive-summary)
|
|
14
|
+
2. [Universal Principles](#universal-principles)
|
|
15
|
+
3. [Agent Type × Task Matrix](#agent-type--task-matrix)
|
|
16
|
+
4. [Format Selection Algorithm](#format-selection-algorithm)
|
|
17
|
+
5. [Evidence Levels](#evidence-levels)
|
|
18
|
+
6. [Quick Start Templates](#quick-start-templates)
|
|
19
|
+
7. [Integration with Claude Flow](#integration-with-claude-flow)
|
|
20
|
+
8. [Advanced Patterns](#advanced-patterns)
|
|
21
|
+
9. [Continuous Improvement](#continuous-improvement)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Executive Summary
|
|
26
|
+
|
|
27
|
+
This document synthesizes empirical findings from 45+ benchmark runs across the Claude Flow agent ecosystem to establish universal principles for agent prompt design. The key discovery: **prompt format impact follows a complexity-dependent inverse relationship** - more scaffolding helps basic tasks, but constrains complex reasoning.
|
|
28
|
+
|
|
29
|
+
### The Bottom Line
|
|
30
|
+
|
|
31
|
+
**For Coder Agents (Validated)**:
|
|
32
|
+
- Basic tasks: CODE-HEAVY format → +43% quality, 27% faster
|
|
33
|
+
- Medium tasks: METADATA format → +4% quality, balanced cost
|
|
34
|
+
- Complex tasks: MINIMAL format → 0% quality gap, 10% faster
|
|
35
|
+
|
|
36
|
+
**For Other Agents (Hypothesized)**:
|
|
37
|
+
- Similar patterns expected, pending validation
|
|
38
|
+
- Reviewer agents likely benefit from MINIMAL across all complexities
|
|
39
|
+
- Coordinator agents may prefer METADATA for structured workflows
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Universal Principles
|
|
44
|
+
|
|
45
|
+
### 1. The Complexity-Verbosity Inverse Law
|
|
46
|
+
|
|
47
|
+
**Principle**: As task complexity increases, optimal prompt verbosity decreases.
|
|
48
|
+
|
|
49
|
+
**Evidence**:
|
|
50
|
+
```
|
|
51
|
+
rust-01-basic (5-10 min): 43% quality gap (CODE-HEAVY wins)
|
|
52
|
+
rust-02-concurrent (15-20 min): 8% quality gap (format matters)
|
|
53
|
+
rust-03-lru-cache (20-25 min): 3% quality gap (minimal impact)
|
|
54
|
+
rust-04-zero-copy (25-30 min): 0% gap (format irrelevant)
|
|
55
|
+
rust-05-async (30-40 min): 0% gap (identical scores)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Why This Happens**:
|
|
59
|
+
- **Basic tasks**: Clear patterns exist → examples scaffold implementation
|
|
60
|
+
- **Complex tasks**: No clear pattern → examples constrain solution space
|
|
61
|
+
- **Cognitive load**: Model must reason from first principles for hard problems
|
|
62
|
+
|
|
63
|
+
**Implication**: Don't fight the model's strengths. Let it reason when tasks are ambiguous.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### 2. The Priming Paradox
|
|
68
|
+
|
|
69
|
+
**Principle**: More content in prompts leads to FASTER responses (counterintuitive).
|
|
70
|
+
|
|
71
|
+
**Evidence**:
|
|
72
|
+
| Format | Prompt Tokens | Avg Response Time | Pattern |
|
|
73
|
+
|--------|--------------|-------------------|---------|
|
|
74
|
+
| CODE-HEAVY | 2000+ | 1922ms | Fastest |
|
|
75
|
+
| METADATA | 1000-1500 | 2033ms | Moderate |
|
|
76
|
+
| MINIMAL | 500-800 | 2046ms | Slowest |
|
|
77
|
+
|
|
78
|
+
**Why This Happens**:
|
|
79
|
+
1. **Better Priming**: Extensive examples reduce model's search space
|
|
80
|
+
2. **Lower Latency to First Token**: Model locks onto correct pattern faster
|
|
81
|
+
3. **Efficient Retrieval**: Less time spent searching knowledge base
|
|
82
|
+
4. **Reduced Uncertainty**: Clearer requirements minimize backtracking
|
|
83
|
+
|
|
84
|
+
**Implication**: Well-designed verbose prompts improve BOTH quality AND speed for appropriate tasks.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### 3. The 43% Rule
|
|
89
|
+
|
|
90
|
+
**Principle**: Code examples provide massive quality lift on basic tasks (+43%), but negligible impact on complex tasks (0-3%).
|
|
91
|
+
|
|
92
|
+
**Evidence**:
|
|
93
|
+
```
|
|
94
|
+
rust-01-basic:
|
|
95
|
+
MINIMAL (no examples): 32% quality, 2186ms
|
|
96
|
+
METADATA (partial): 65% quality, 2390ms
|
|
97
|
+
CODE-HEAVY (full): 75% quality, 1738ms
|
|
98
|
+
→ 43-point absolute gap, 27% speed improvement
|
|
99
|
+
|
|
100
|
+
rust-04-zero-copy:
|
|
101
|
+
MINIMAL: 0% quality (fails)
|
|
102
|
+
METADATA: 0% quality (fails)
|
|
103
|
+
CODE-HEAVY: 0% quality (fails)
|
|
104
|
+
→ No format can compensate for insufficient model knowledge
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**When Examples Help**:
|
|
108
|
+
- ✅ Well-understood patterns (iterator chains, error handling)
|
|
109
|
+
- ✅ Clear input/output specification
|
|
110
|
+
- ✅ Standard library usage
|
|
111
|
+
- ✅ Test structure and naming conventions
|
|
112
|
+
|
|
113
|
+
**When Examples Don't Help**:
|
|
114
|
+
- ❌ Architectural decisions (no "right" answer)
|
|
115
|
+
- ❌ Novel problem domains (no relevant examples)
|
|
116
|
+
- ❌ Advanced language features (lifetimes, zero-copy)
|
|
117
|
+
- ❌ System design trade-offs (CAP theorem, consistency models)
|
|
118
|
+
|
|
119
|
+
**Implication**: Examples are scaffolding, not solutions. Use strategically.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### 4. The Information Density Principle
|
|
124
|
+
|
|
125
|
+
**Principle**: Quality correlates with information density, not raw length.
|
|
126
|
+
|
|
127
|
+
**Anti-Pattern**:
|
|
128
|
+
```markdown
|
|
129
|
+
❌ DON'T pad prompts with filler:
|
|
130
|
+
[10 paragraphs of background]
|
|
131
|
+
[Extensive ASCII art]
|
|
132
|
+
[Unrelated examples]
|
|
133
|
+
Task: Add two numbers
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Best Practice**:
|
|
137
|
+
```markdown
|
|
138
|
+
✅ DO focus on relevant context:
|
|
139
|
+
## Task: Thread-Safe Counter
|
|
140
|
+
Implement with atomic operations.
|
|
141
|
+
|
|
142
|
+
**Requirements**:
|
|
143
|
+
- Use Arc<AtomicUsize> for shared state
|
|
144
|
+
- Provide increment(), decrement(), get()
|
|
145
|
+
- Ensure memory ordering (SeqCst for simplicity)
|
|
146
|
+
|
|
147
|
+
**Example Pattern**:
|
|
148
|
+
```rust
|
|
149
|
+
use std::sync::{Arc, atomic::{AtomicUsize, Ordering}};
|
|
150
|
+
|
|
151
|
+
struct Counter {
|
|
152
|
+
value: Arc<AtomicUsize>
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
Now implement following this pattern.
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Implication**: Every sentence should add signal, not noise.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Agent Type × Task Matrix
|
|
163
|
+
|
|
164
|
+
### Comprehensive Recommendation Table
|
|
165
|
+
|
|
166
|
+
| Agent Type | Basic Tasks | Medium Tasks | Complex Tasks | Rationale |
|
|
167
|
+
|------------|-------------|--------------|---------------|-----------|
|
|
168
|
+
| **Coder (Rust)** | CODE-HEAVY ✅ | METADATA | MINIMAL | Validated: 43% quality boost |
|
|
169
|
+
| **Coder (Python)** | CODE-HEAVY 🔮 | METADATA 🔮 | MINIMAL 🔮 | Hypothesized: similar patterns |
|
|
170
|
+
| **Coder (JS/TS)** | CODE-HEAVY 🔮 | METADATA 🔮 | MINIMAL 🔮 | Hypothesized: benefits async patterns |
|
|
171
|
+
| **Coder (Go)** | CODE-HEAVY 🔮 | METADATA 🔮 | MINIMAL 🔮 | Hypothesized: goroutine examples help |
|
|
172
|
+
| **Reviewer** | MINIMAL | MINIMAL | MINIMAL | Needs reasoning, not examples |
|
|
173
|
+
| **Tester** | CODE-HEAVY 🔮 | METADATA 🔮 | MINIMAL 🔮 | Examples show test structure |
|
|
174
|
+
| **Architect** | MINIMAL | MINIMAL | MINIMAL | Always architectural reasoning |
|
|
175
|
+
| **Planner** | METADATA 🔮 | METADATA 🔮 | MINIMAL 🔮 | Needs structure, not code |
|
|
176
|
+
| **Researcher** | METADATA 🔮 | METADATA 🔮 | METADATA 🔮 | Always needs structured output |
|
|
177
|
+
| **API Developer** | CODE-HEAVY 🔮 | METADATA 🔮 | MINIMAL 🔮 | Similar to coder patterns |
|
|
178
|
+
| **Mobile Dev** | CODE-HEAVY 🔮 | METADATA 🔮 | MINIMAL 🔮 | UI patterns benefit from examples |
|
|
179
|
+
| **Data/ML** | CODE-HEAVY 🔮 | METADATA 🔮 | MINIMAL 🔮 | Pipeline examples helpful |
|
|
180
|
+
| **DevOps** | METADATA 🔮 | METADATA 🔮 | MINIMAL 🔮 | Infrastructure needs constraints |
|
|
181
|
+
|
|
182
|
+
**Legend**:
|
|
183
|
+
- ✅ **Validated**: Empirical evidence from benchmarks (high confidence)
|
|
184
|
+
- 🔮 **Hypothesized**: Logical extrapolation from validated findings (medium confidence)
|
|
185
|
+
- (blank) **Unknown**: Needs empirical validation (low confidence)
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Format Selection Algorithm
|
|
190
|
+
|
|
191
|
+
### Decision Tree
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
┌─────────────────────────────────────────────┐
|
|
195
|
+
│ Is the task well-understood with clear │
|
|
196
|
+
│ implementation patterns? │
|
|
197
|
+
└────────────┬────────────────────────────────┘
|
|
198
|
+
│
|
|
199
|
+
┌────────┴────────┐
|
|
200
|
+
│ │
|
|
201
|
+
YES NO
|
|
202
|
+
│ │
|
|
203
|
+
│ └─────────────┐
|
|
204
|
+
│ │
|
|
205
|
+
┌───▼──────────────────────┐ ┌──▼──────────────────────┐
|
|
206
|
+
│ Can it be implemented │ │ Use MINIMAL format │
|
|
207
|
+
│ in <15 minutes? │ │ │
|
|
208
|
+
└───┬──────────────────────┘ │ Let agent reason from │
|
|
209
|
+
│ │ first principles without │
|
|
210
|
+
┌───┴────────┐ │ constraining solution │
|
|
211
|
+
│ │ └──────────────────────────┘
|
|
212
|
+
YES NO
|
|
213
|
+
│ │
|
|
214
|
+
│ │
|
|
215
|
+
▼ ▼
|
|
216
|
+
CODE-HEAVY METADATA
|
|
217
|
+
+43% quality Balanced cost
|
|
218
|
+
1700ms 2100ms
|
|
219
|
+
Best for: Best for:
|
|
220
|
+
- String ops - Multi-component
|
|
221
|
+
- Data val. - 2-4 constraints
|
|
222
|
+
- Basic algo - Integration
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### JavaScript Implementation
|
|
226
|
+
|
|
227
|
+
```javascript
|
|
228
|
+
/**
|
|
229
|
+
* Selects optimal prompt format based on task characteristics
|
|
230
|
+
*
|
|
231
|
+
* @param {Object} task - Task specification
|
|
232
|
+
* @param {string} task.agentType - Type of agent (coder, reviewer, etc.)
|
|
233
|
+
* @param {string} task.language - Programming language (rust, python, js, etc.)
|
|
234
|
+
* @param {number} task.estimatedMinutes - Estimated completion time
|
|
235
|
+
* @param {boolean} task.hasKnownPattern - Whether clear patterns exist
|
|
236
|
+
* @param {number} task.constraintCount - Number of specific constraints
|
|
237
|
+
* @param {string} task.domain - Problem domain (architecture, implementation, etc.)
|
|
238
|
+
* @returns {string} - Recommended format: "minimal", "metadata", or "code-heavy"
|
|
239
|
+
*/
|
|
240
|
+
function selectOptimalFormat(task) {
|
|
241
|
+
// Special cases: Always use minimal for architectural reasoning
|
|
242
|
+
if (task.domain === 'architecture' || task.agentType === 'architect') {
|
|
243
|
+
return 'minimal';
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Reviewer agents: Always use minimal (need to reason, not follow examples)
|
|
247
|
+
if (task.agentType === 'reviewer' || task.agentType === 'analyst') {
|
|
248
|
+
return 'minimal';
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Researcher agents: Always use metadata (need structured output)
|
|
252
|
+
if (task.agentType === 'researcher') {
|
|
253
|
+
return 'metadata';
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// For coder agents: Apply complexity-based selection
|
|
257
|
+
if (task.agentType === 'coder' || task.agentType === 'backend-dev' || task.agentType === 'mobile-dev') {
|
|
258
|
+
// Basic tasks: Clear pattern + quick implementation
|
|
259
|
+
if (task.hasKnownPattern && task.estimatedMinutes < 15) {
|
|
260
|
+
return 'code-heavy'; // +43% quality boost validated
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Complex tasks: Architectural or >25 minutes
|
|
264
|
+
if (!task.hasKnownPattern || task.estimatedMinutes > 25) {
|
|
265
|
+
return 'minimal'; // Format won't help, save tokens
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Medium tasks: Some constraints, moderate complexity
|
|
269
|
+
if (task.constraintCount >= 2 && task.constraintCount <= 4) {
|
|
270
|
+
return 'metadata'; // Balanced approach
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Default to metadata for ambiguous cases
|
|
274
|
+
return 'metadata';
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Tester agents: Similar to coders but emphasize test structure
|
|
278
|
+
if (task.agentType === 'tester') {
|
|
279
|
+
return task.estimatedMinutes < 15 ? 'code-heavy' : 'metadata';
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Planner/Coordinator agents: Prefer structure over examples
|
|
283
|
+
if (task.agentType === 'planner' || task.agentType === 'coordinator') {
|
|
284
|
+
return task.estimatedMinutes > 25 ? 'minimal' : 'metadata';
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Default: metadata as safe middle ground
|
|
288
|
+
return 'metadata';
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Usage examples
|
|
292
|
+
selectOptimalFormat({
|
|
293
|
+
agentType: 'coder',
|
|
294
|
+
language: 'rust',
|
|
295
|
+
estimatedMinutes: 10,
|
|
296
|
+
hasKnownPattern: true,
|
|
297
|
+
constraintCount: 1,
|
|
298
|
+
domain: 'implementation'
|
|
299
|
+
});
|
|
300
|
+
// → 'code-heavy' (basic task with clear pattern)
|
|
301
|
+
|
|
302
|
+
selectOptimalFormat({
|
|
303
|
+
agentType: 'coder',
|
|
304
|
+
language: 'rust',
|
|
305
|
+
estimatedMinutes: 30,
|
|
306
|
+
hasKnownPattern: false,
|
|
307
|
+
constraintCount: 5,
|
|
308
|
+
domain: 'implementation'
|
|
309
|
+
});
|
|
310
|
+
// → 'minimal' (complex task, no clear pattern)
|
|
311
|
+
|
|
312
|
+
selectOptimalFormat({
|
|
313
|
+
agentType: 'architect',
|
|
314
|
+
language: 'rust',
|
|
315
|
+
estimatedMinutes: 60,
|
|
316
|
+
hasKnownPattern: false,
|
|
317
|
+
constraintCount: 8,
|
|
318
|
+
domain: 'architecture'
|
|
319
|
+
});
|
|
320
|
+
// → 'minimal' (always minimal for architecture)
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Complexity Classification Helper
|
|
324
|
+
|
|
325
|
+
```javascript
|
|
326
|
+
/**
|
|
327
|
+
* Automatically classifies task complexity
|
|
328
|
+
*
|
|
329
|
+
* @param {string} description - Task description
|
|
330
|
+
* @returns {Object} - Classification with confidence
|
|
331
|
+
*/
|
|
332
|
+
function classifyTaskComplexity(description) {
|
|
333
|
+
const indicators = {
|
|
334
|
+
basic: [
|
|
335
|
+
'simple', 'basic', 'string', 'array', 'validation',
|
|
336
|
+
'parse', 'format', 'convert', 'single function'
|
|
337
|
+
],
|
|
338
|
+
medium: [
|
|
339
|
+
'multiple', 'integrate', 'refactor', 'concurrent',
|
|
340
|
+
'cache', 'queue', 'worker', 'pipeline'
|
|
341
|
+
],
|
|
342
|
+
complex: [
|
|
343
|
+
'architecture', 'system', 'distributed', 'scalable',
|
|
344
|
+
'design', 'trade-off', 'performance-critical', 'zero-copy',
|
|
345
|
+
'lifetime', 'async', 'scheduler'
|
|
346
|
+
]
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
const text = description.toLowerCase();
|
|
350
|
+
const scores = {
|
|
351
|
+
basic: indicators.basic.filter(word => text.includes(word)).length,
|
|
352
|
+
medium: indicators.medium.filter(word => text.includes(word)).length,
|
|
353
|
+
complex: indicators.complex.filter(word => text.includes(word)).length
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
const maxScore = Math.max(...Object.values(scores));
|
|
357
|
+
const complexity = Object.keys(scores).find(key => scores[key] === maxScore) || 'medium';
|
|
358
|
+
|
|
359
|
+
return {
|
|
360
|
+
complexity,
|
|
361
|
+
confidence: maxScore > 0 ? 'high' : 'low',
|
|
362
|
+
scores
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// Usage
|
|
367
|
+
classifyTaskComplexity('Implement a simple string reversal function');
|
|
368
|
+
// → { complexity: 'basic', confidence: 'high', scores: { basic: 2, medium: 0, complex: 0 } }
|
|
369
|
+
|
|
370
|
+
classifyTaskComplexity('Design a distributed event sourcing architecture with CQRS');
|
|
371
|
+
// → { complexity: 'complex', confidence: 'high', scores: { basic: 0, medium: 0, complex: 3 } }
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## Evidence Levels
|
|
377
|
+
|
|
378
|
+
### Validation Status by Agent Type
|
|
379
|
+
|
|
380
|
+
#### HIGH CONFIDENCE (Empirically Validated)
|
|
381
|
+
|
|
382
|
+
**Coder Agent - Rust (n=45, 5 scenarios, 3 formats)**
|
|
383
|
+
- ✅ **VALIDATED**: CODE-HEAVY → +43% quality on basic tasks (rust-01-basic)
|
|
384
|
+
- ✅ **VALIDATED**: Format impact decreases with complexity (43% → 8% → 3% → 0%)
|
|
385
|
+
- ✅ **VALIDATED**: CODE-HEAVY is fastest despite longer prompts (1922ms vs 2046ms)
|
|
386
|
+
- ✅ **VALIDATED**: No format helps when model lacks domain knowledge (rust-04-zero-copy: all 0%)
|
|
387
|
+
|
|
388
|
+
**Statistical Confidence**:
|
|
389
|
+
- Basic task differential: 43 percentage points (32% → 75%)
|
|
390
|
+
- Response time improvement: 27% faster (2186ms → 1738ms)
|
|
391
|
+
- Token output: 10x increase (25 → 258 tokens)
|
|
392
|
+
- Consistency: 100% across all 45 runs
|
|
393
|
+
|
|
394
|
+
#### MEDIUM CONFIDENCE (Logical Extrapolation)
|
|
395
|
+
|
|
396
|
+
**Coder Agent - Python/JavaScript/Go** 🔮
|
|
397
|
+
- **HYPOTHESIZED**: Similar complexity-verbosity inverse relationship
|
|
398
|
+
- **BASIS**: Programming fundamentals are language-agnostic
|
|
399
|
+
- **EXPECTED**: CODE-HEAVY helps with basic patterns (loops, error handling, tests)
|
|
400
|
+
- **EXPECTED**: MINIMAL wins for architectural decisions
|
|
401
|
+
- **VALIDATION NEEDED**: 30+ benchmark runs per language
|
|
402
|
+
|
|
403
|
+
**Tester Agent** 🔮
|
|
404
|
+
- **HYPOTHESIZED**: CODE-HEAVY benefits test structure/naming
|
|
405
|
+
- **BASIS**: Tests follow clear patterns (arrange-act-assert)
|
|
406
|
+
- **EXPECTED**: Examples show proper assertions, mocking, fixtures
|
|
407
|
+
- **VALIDATION NEEDED**: Benchmark with test-writing scenarios
|
|
408
|
+
|
|
409
|
+
**API Developer Agent** 🔮
|
|
410
|
+
- **HYPOTHESIZED**: Similar to coder patterns (endpoints are functions)
|
|
411
|
+
- **BASIS**: REST/GraphQL follow standard patterns
|
|
412
|
+
- **EXPECTED**: CODE-HEAVY helps with basic CRUD, MINIMAL for API design
|
|
413
|
+
- **VALIDATION NEEDED**: API-specific benchmark suite
|
|
414
|
+
|
|
415
|
+
#### LOW CONFIDENCE (Needs Empirical Testing)
|
|
416
|
+
|
|
417
|
+
**Reviewer Agent** (Unvalidated)
|
|
418
|
+
- **HYPOTHESIS**: MINIMAL across all complexities
|
|
419
|
+
- **REASONING**: Reviews require reasoning about context, not pattern matching
|
|
420
|
+
- **UNCERTAINTY**: May benefit from CODE-HEAVY for style guide enforcement
|
|
421
|
+
- **VALIDATION NEEDED**: Side-by-side review quality comparison
|
|
422
|
+
|
|
423
|
+
**Architect Agent** (Unvalidated)
|
|
424
|
+
- **HYPOTHESIS**: Always MINIMAL (architectural reasoning)
|
|
425
|
+
- **REASONING**: No code examples constrain solution space
|
|
426
|
+
- **UNCERTAINTY**: May benefit from METADATA for structured ADRs
|
|
427
|
+
- **VALIDATION NEEDED**: Architecture decision quality metrics
|
|
428
|
+
|
|
429
|
+
**Planner Agent** (Unvalidated)
|
|
430
|
+
- **HYPOTHESIS**: METADATA for structure, not code
|
|
431
|
+
- **REASONING**: Plans need organization, not implementation details
|
|
432
|
+
- **UNCERTAINTY**: Balance between structure and flexibility
|
|
433
|
+
- **VALIDATION NEEDED**: Plan quality and actionability metrics
|
|
434
|
+
|
|
435
|
+
**Researcher Agent** (Unvalidated)
|
|
436
|
+
- **HYPOTHESIS**: METADATA for all tasks (structured research output)
|
|
437
|
+
- **REASONING**: Research needs consistent format for synthesis
|
|
438
|
+
- **UNCERTAINTY**: May need different formats for different research types
|
|
439
|
+
- **VALIDATION NEEDED**: Research quality and comprehensiveness metrics
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## Quick Start Templates
|
|
444
|
+
|
|
445
|
+
### Template 1: Coder Agent - Basic Task (CODE-HEAVY)
|
|
446
|
+
|
|
447
|
+
**Use When**: Well-understood pattern, <15 minutes, clear requirements
|
|
448
|
+
|
|
449
|
+
```markdown
|
|
450
|
+
# Agent: [language]-basic-coder
|
|
451
|
+
# Format: CODE-HEAVY
|
|
452
|
+
# Expected: 70-85% quality, 1700-2000ms response
|
|
453
|
+
|
|
454
|
+
## Task: [Clear Task Name]
|
|
455
|
+
[1-2 sentence description of what needs to be implemented]
|
|
456
|
+
|
|
457
|
+
**Requirements**:
|
|
458
|
+
- [Specific requirement with language idiom reference]
|
|
459
|
+
- [Error handling pattern with example type signature]
|
|
460
|
+
- [Testing requirement with framework reference]
|
|
461
|
+
- [Documentation standard (docstrings, comments)]
|
|
462
|
+
|
|
463
|
+
**Example Implementation**:
|
|
464
|
+
\`\`\`[language]
|
|
465
|
+
[Complete, working code demonstrating all requirements]
|
|
466
|
+
[Include: function signature, documentation, error handling, tests]
|
|
467
|
+
[Show: proper naming, idiomatic patterns, best practices]
|
|
468
|
+
\`\`\`
|
|
469
|
+
|
|
470
|
+
Now implement the [task] following this pattern.
|
|
471
|
+
|
|
472
|
+
## Success Criteria
|
|
473
|
+
- [ ] All requirements implemented
|
|
474
|
+
- [ ] Tests pass with >80% coverage
|
|
475
|
+
- [ ] Documentation includes examples
|
|
476
|
+
- [ ] Follows language idioms
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
**Example: Rust String Processing**
|
|
480
|
+
```markdown
|
|
481
|
+
# Agent: rust-basic-coder
|
|
482
|
+
# Format: CODE-HEAVY
|
|
483
|
+
|
|
484
|
+
## Task: Reverse Words in String
|
|
485
|
+
Implement a function that reverses the order of words in a string, handling empty input gracefully.
|
|
486
|
+
|
|
487
|
+
**Requirements**:
|
|
488
|
+
- Use Rust iterators (`.split_whitespace()`, `.rev()`, `.collect()`)
|
|
489
|
+
- Return `Result<String, &'static str>` for error handling
|
|
490
|
+
- Include proper documentation with `///` comments
|
|
491
|
+
- Add unit tests with `#[test]` attribute
|
|
492
|
+
|
|
493
|
+
**Example Implementation**:
|
|
494
|
+
\`\`\`rust
|
|
495
|
+
/// Reverses the order of words in a string.
|
|
496
|
+
///
|
|
497
|
+
/// # Arguments
|
|
498
|
+
/// * `input` - A string slice containing words
|
|
499
|
+
///
|
|
500
|
+
/// # Returns
|
|
501
|
+
/// * `Ok(String)` - The reversed string
|
|
502
|
+
/// * `Err(&'static str)` - Error for empty/whitespace-only input
|
|
503
|
+
///
|
|
504
|
+
/// # Examples
|
|
505
|
+
/// \`\`\`
|
|
506
|
+
/// assert_eq!(reverse_words("hello world").unwrap(), "world hello");
|
|
507
|
+
/// \`\`\`
|
|
508
|
+
pub fn reverse_words(input: &str) -> Result<String, &'static str> {
|
|
509
|
+
let trimmed = input.trim();
|
|
510
|
+
|
|
511
|
+
if trimmed.is_empty() {
|
|
512
|
+
return Err("Empty or whitespace-only string");
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
Ok(trimmed
|
|
516
|
+
.split_whitespace()
|
|
517
|
+
.rev()
|
|
518
|
+
.collect::<Vec<&str>>()
|
|
519
|
+
.join(" "))
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
#[cfg(test)]
|
|
523
|
+
mod tests {
|
|
524
|
+
use super::*;
|
|
525
|
+
|
|
526
|
+
#[test]
|
|
527
|
+
fn test_basic_reversal() {
|
|
528
|
+
assert_eq!(reverse_words("hello world").unwrap(), "world hello");
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
#[test]
|
|
532
|
+
fn test_empty_string() {
|
|
533
|
+
assert!(reverse_words("").is_err());
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
#[test]
|
|
537
|
+
fn test_single_word() {
|
|
538
|
+
assert_eq!(reverse_words("hello").unwrap(), "hello");
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
\`\`\`
|
|
542
|
+
|
|
543
|
+
Now implement the function following this pattern.
|
|
544
|
+
|
|
545
|
+
## Post-Task Validation
|
|
546
|
+
\`\`\`bash
|
|
547
|
+
/hooks post-edit [FILE] --memory-key "coder/rust-basic" --structured
|
|
548
|
+
\`\`\`
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
### Template 2: Coder Agent - Medium Task (METADATA)
|
|
554
|
+
|
|
555
|
+
**Use When**: 2-4 constraints, 15-25 minutes, some ambiguity
|
|
556
|
+
|
|
557
|
+
```markdown
|
|
558
|
+
# Agent: [language]-medium-coder
|
|
559
|
+
# Format: METADATA
|
|
560
|
+
# Expected: 55-75% quality, 2000-2300ms response
|
|
561
|
+
|
|
562
|
+
## Task: [Descriptive Task Name]
|
|
563
|
+
[Detailed description with context and integration points]
|
|
564
|
+
|
|
565
|
+
**Metadata**:
|
|
566
|
+
- **Complexity**: Medium
|
|
567
|
+
- **Estimated Time**: [15-25] minutes
|
|
568
|
+
- **Key Constraints**:
|
|
569
|
+
1. [Specific constraint with metric/requirement]
|
|
570
|
+
2. [Integration requirement with existing system]
|
|
571
|
+
3. [Performance/security requirement]
|
|
572
|
+
4. [Testing requirement (unit + integration)]
|
|
573
|
+
- **Dependencies**: [List external libraries/modules]
|
|
574
|
+
- **Output Format**: [Expected deliverables]
|
|
575
|
+
|
|
576
|
+
**Design Considerations**:
|
|
577
|
+
- [Trade-off dimension 1 - explain both sides]
|
|
578
|
+
- [Edge case handling approach]
|
|
579
|
+
- [Testability and maintainability requirements]
|
|
580
|
+
|
|
581
|
+
Implement the solution following [language] best practices.
|
|
582
|
+
|
|
583
|
+
## Success Criteria
|
|
584
|
+
- [ ] All constraints satisfied
|
|
585
|
+
- [ ] Integration tests pass
|
|
586
|
+
- [ ] Performance within acceptable range
|
|
587
|
+
- [ ] Edge cases handled
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
**Example: Python API Client**
|
|
591
|
+
```markdown
|
|
592
|
+
# Agent: python-medium-coder
|
|
593
|
+
# Format: METADATA
|
|
594
|
+
|
|
595
|
+
## Task: Resilient HTTP API Client
|
|
596
|
+
Create a reusable HTTP client that handles retries, timeouts, and rate limiting for a REST API.
|
|
597
|
+
|
|
598
|
+
**Metadata**:
|
|
599
|
+
- **Complexity**: Medium
|
|
600
|
+
- **Estimated Time**: 20 minutes
|
|
601
|
+
- **Key Constraints**:
|
|
602
|
+
1. Retry failed requests up to 3 times with exponential backoff
|
|
603
|
+
2. Enforce 5-second timeout per request
|
|
604
|
+
3. Respect rate limit of 10 requests/second
|
|
605
|
+
4. Provide async interface using asyncio
|
|
606
|
+
- **Dependencies**: aiohttp, asyncio, tenacity
|
|
607
|
+
- **Output Format**: Python class with get(), post(), put(), delete() methods
|
|
608
|
+
|
|
609
|
+
**Design Considerations**:
|
|
610
|
+
- **Error Handling**: Distinguish between retryable (5xx) and non-retryable (4xx) errors
|
|
611
|
+
- **Rate Limiting**: Use token bucket algorithm to smooth out request bursts
|
|
612
|
+
- **Testing**: Mock HTTP responses for unit tests, use httpbin.org for integration tests
|
|
613
|
+
|
|
614
|
+
Implement following Python async best practices.
|
|
615
|
+
|
|
616
|
+
## Success Criteria
|
|
617
|
+
- [ ] All HTTP methods implemented
|
|
618
|
+
- [ ] Retry logic tested with failure injection
|
|
619
|
+
- [ ] Rate limiting verified with high-volume tests
|
|
620
|
+
- [ ] Comprehensive error messages
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
---
|
|
624
|
+
|
|
625
|
+
### Template 3: Coder Agent - Complex Task (MINIMAL)
|
|
626
|
+
|
|
627
|
+
**Use When**: Architectural decisions, >25 minutes, high ambiguity
|
|
628
|
+
|
|
629
|
+
```markdown
|
|
630
|
+
# Agent: [language]-advanced-architect
|
|
631
|
+
# Format: MINIMAL
|
|
632
|
+
# Expected: 40-65% quality, 1900-2100ms response
|
|
633
|
+
|
|
634
|
+
## Problem Statement
|
|
635
|
+
[Clear problem description in 1-2 sentences]
|
|
636
|
+
|
|
637
|
+
**Constraints**:
|
|
638
|
+
- [Technical constraint with measurable metric]
|
|
639
|
+
- [Business constraint or requirement]
|
|
640
|
+
- [Performance/scalability constraint]
|
|
641
|
+
- [Integration constraint]
|
|
642
|
+
|
|
643
|
+
**Trade-offs to Consider**:
|
|
644
|
+
- [Dimension 1]: [Option A] vs [Option B]
|
|
645
|
+
- [Dimension 2]: [Trade-off axis]
|
|
646
|
+
- [Dimension 3]: [Consideration]
|
|
647
|
+
|
|
648
|
+
Design and implement the solution, explaining your architectural decisions and trade-offs.
|
|
649
|
+
|
|
650
|
+
## Success Criteria
|
|
651
|
+
- [ ] Architectural decisions documented
|
|
652
|
+
- [ ] Trade-offs explicitly addressed
|
|
653
|
+
- [ ] Implementation matches design
|
|
654
|
+
- [ ] Performance constraints validated
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
**Example: Rust Async Scheduler**
|
|
658
|
+
```markdown
|
|
659
|
+
# Agent: rust-advanced-architect
|
|
660
|
+
# Format: MINIMAL
|
|
661
|
+
|
|
662
|
+
## Problem Statement
|
|
663
|
+
Implement an async task scheduler that manages priority queues with dynamic priority adjustment based on task age and system load.
|
|
664
|
+
|
|
665
|
+
**Constraints**:
|
|
666
|
+
- Must handle 10,000+ concurrent tasks without degradation
|
|
667
|
+
- Support priority levels 0-10 with sub-millisecond scheduling latency
|
|
668
|
+
- Graceful shutdown with in-flight task completion (max 30s wait)
|
|
669
|
+
- Memory usage proportional to active tasks (no unbounded queues)
|
|
670
|
+
|
|
671
|
+
**Trade-offs to Consider**:
|
|
672
|
+
- **Fairness vs Throughput**: Strict priority ordering may starve low-priority tasks
|
|
673
|
+
- **Memory vs Speed**: Pre-allocated task pools vs dynamic allocation
|
|
674
|
+
- **Simplicity vs Features**: Basic FIFO per priority vs aging algorithm
|
|
675
|
+
|
|
676
|
+
Design and implement, documenting your decisions.
|
|
677
|
+
|
|
678
|
+
## Success Criteria
|
|
679
|
+
- [ ] Architecture documented with ADRs
|
|
680
|
+
- [ ] All constraints verified with benchmarks
|
|
681
|
+
- [ ] Trade-off analysis included
|
|
682
|
+
- [ ] Production-ready error handling
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
### Template 4: Reviewer Agent (MINIMAL)
|
|
688
|
+
|
|
689
|
+
**Use When**: Any code review task (always minimal)
|
|
690
|
+
|
|
691
|
+
```markdown
|
|
692
|
+
# Agent: code-reviewer
|
|
693
|
+
# Format: MINIMAL
|
|
694
|
+
# Expected: Thorough analysis, actionable feedback
|
|
695
|
+
|
|
696
|
+
## Review Task
|
|
697
|
+
Review the following [language] code for [specific focus: security, performance, style, etc.].
|
|
698
|
+
|
|
699
|
+
**Code**:
|
|
700
|
+
\`\`\`[language]
|
|
701
|
+
[Code to review]
|
|
702
|
+
\`\`\`
|
|
703
|
+
|
|
704
|
+
**Review Criteria**:
|
|
705
|
+
- [Criterion 1]: [What to check]
|
|
706
|
+
- [Criterion 2]: [What to evaluate]
|
|
707
|
+
- [Criterion 3]: [What to validate]
|
|
708
|
+
|
|
709
|
+
Provide specific, actionable feedback with line numbers and suggested improvements.
|
|
710
|
+
|
|
711
|
+
## Output Format
|
|
712
|
+
- **Summary**: Overall assessment
|
|
713
|
+
- **Issues**: List of problems with severity (critical, major, minor)
|
|
714
|
+
- **Recommendations**: Concrete improvement suggestions
|
|
715
|
+
- **Positive Notes**: What's done well
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
---
|
|
719
|
+
|
|
720
|
+
### Template 5: Architect Agent (MINIMAL)
|
|
721
|
+
|
|
722
|
+
**Use When**: System design, ADRs, architecture decisions
|
|
723
|
+
|
|
724
|
+
```markdown
|
|
725
|
+
# Agent: system-architect
|
|
726
|
+
# Format: MINIMAL
|
|
727
|
+
# Expected: Comprehensive design with trade-off analysis
|
|
728
|
+
|
|
729
|
+
## Design Challenge
|
|
730
|
+
[1-2 sentence problem statement]
|
|
731
|
+
|
|
732
|
+
**Requirements**:
|
|
733
|
+
- [Functional requirement with acceptance criteria]
|
|
734
|
+
- [Non-functional requirement with measurable target]
|
|
735
|
+
- [Constraint or limitation]
|
|
736
|
+
|
|
737
|
+
**Context**:
|
|
738
|
+
- [Existing system component]
|
|
739
|
+
- [Technology constraint]
|
|
740
|
+
- [Team/organizational constraint]
|
|
741
|
+
|
|
742
|
+
Design the system architecture, documenting key decisions and trade-offs.
|
|
743
|
+
|
|
744
|
+
## Deliverables
|
|
745
|
+
- Architecture diagram (C4 model preferred)
|
|
746
|
+
- Component responsibilities
|
|
747
|
+
- Data flow and integration points
|
|
748
|
+
- ADRs for major decisions
|
|
749
|
+
- Risk assessment
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
---
|
|
753
|
+
|
|
754
|
+
## Integration with Claude Flow
|
|
755
|
+
|
|
756
|
+
### Automated Format Selection
|
|
757
|
+
|
|
758
|
+
```javascript
|
|
759
|
+
// Add to Claude Flow hooks system
|
|
760
|
+
// File: /hooks/pre-task
|
|
761
|
+
|
|
762
|
+
import { selectOptimalFormat } from './format-selector.js';
|
|
763
|
+
import { loadAgentConfig } from './agent-config.js';
|
|
764
|
+
|
|
765
|
+
/**
|
|
766
|
+
* Pre-task hook: Select optimal format before spawning agent
|
|
767
|
+
*/
|
|
768
|
+
async function preTaskHook(taskConfig) {
|
|
769
|
+
// Analyze task characteristics
|
|
770
|
+
const complexity = classifyTaskComplexity(taskConfig.description);
|
|
771
|
+
|
|
772
|
+
// Load agent configuration
|
|
773
|
+
const agentConfig = await loadAgentConfig(taskConfig.agentType);
|
|
774
|
+
|
|
775
|
+
// Select optimal format
|
|
776
|
+
const format = selectOptimalFormat({
|
|
777
|
+
agentType: taskConfig.agentType,
|
|
778
|
+
language: taskConfig.language || agentConfig.primaryLanguage,
|
|
779
|
+
estimatedMinutes: taskConfig.estimatedMinutes || estimateFromDescription(taskConfig.description),
|
|
780
|
+
hasKnownPattern: complexity.confidence === 'high' && complexity.complexity === 'basic',
|
|
781
|
+
constraintCount: countConstraints(taskConfig.description),
|
|
782
|
+
domain: taskConfig.domain || 'implementation'
|
|
783
|
+
});
|
|
784
|
+
|
|
785
|
+
// Load format-specific agent prompt
|
|
786
|
+
const agentPromptPath = `/mnt/c/Users/masha/Documents/claude-flow-novice/.claude/agents/benchmarking-tests/test-agent-${format}.md`;
|
|
787
|
+
const agentPrompt = await loadAgentPrompt(agentPromptPath);
|
|
788
|
+
|
|
789
|
+
// Store metrics for continuous learning
|
|
790
|
+
await storeMetrics({
|
|
791
|
+
taskId: taskConfig.id,
|
|
792
|
+
agentType: taskConfig.agentType,
|
|
793
|
+
selectedFormat: format,
|
|
794
|
+
complexity: complexity.complexity,
|
|
795
|
+
estimatedMinutes: taskConfig.estimatedMinutes,
|
|
796
|
+
timestamp: Date.now()
|
|
797
|
+
});
|
|
798
|
+
|
|
799
|
+
return {
|
|
800
|
+
format,
|
|
801
|
+
agentPrompt,
|
|
802
|
+
expectedQuality: getExpectedQuality(format, complexity.complexity),
|
|
803
|
+
expectedTime: getExpectedTime(format, complexity.complexity)
|
|
804
|
+
};
|
|
805
|
+
}
|
|
806
|
+
```
|
|
807
|
+
|
|
808
|
+
### Post-Task Validation
|
|
809
|
+
|
|
810
|
+
```javascript
|
|
811
|
+
// File: /hooks/post-task
|
|
812
|
+
|
|
813
|
+
/**
|
|
814
|
+
* Post-task hook: Validate results against expectations
|
|
815
|
+
*/
|
|
816
|
+
async function postTaskHook(taskResult) {
|
|
817
|
+
// Run post-edit validation
|
|
818
|
+
const validation = await runPostEditValidation(taskResult.filePath, {
|
|
819
|
+
memoryKey: `${taskResult.agentType}/${taskResult.complexity}`,
|
|
820
|
+
structured: true
|
|
821
|
+
});
|
|
822
|
+
|
|
823
|
+
// Compare actual vs expected
|
|
824
|
+
const expected = await getExpectedMetrics(taskResult.taskId);
|
|
825
|
+
const delta = {
|
|
826
|
+
qualityDelta: validation.quality - expected.expectedQuality,
|
|
827
|
+
timeDelta: taskResult.responseTime - expected.expectedTime
|
|
828
|
+
};
|
|
829
|
+
|
|
830
|
+
// Update learning model
|
|
831
|
+
await updateFormatModel({
|
|
832
|
+
taskId: taskResult.taskId,
|
|
833
|
+
actualQuality: validation.quality,
|
|
834
|
+
actualTime: taskResult.responseTime,
|
|
835
|
+
delta
|
|
836
|
+
});
|
|
837
|
+
|
|
838
|
+
// Log for continuous improvement
|
|
839
|
+
console.log(`Task ${taskResult.taskId} completed:`);
|
|
840
|
+
console.log(` Format: ${taskResult.format}`);
|
|
841
|
+
console.log(` Quality: ${validation.quality}% (expected ${expected.expectedQuality}%, Δ${delta.qualityDelta.toFixed(1)}%)`);
|
|
842
|
+
console.log(` Time: ${taskResult.responseTime}ms (expected ${expected.expectedTime}ms, Δ${delta.timeDelta}ms)`);
|
|
843
|
+
|
|
844
|
+
return {
|
|
845
|
+
validation,
|
|
846
|
+
delta,
|
|
847
|
+
recommendation: delta.qualityDelta < -10 ? 'Consider different format' : 'Format performed as expected'
|
|
848
|
+
};
|
|
849
|
+
}
|
|
850
|
+
```
|
|
851
|
+
|
|
852
|
+
### Continuous Learning Loop
|
|
853
|
+
|
|
854
|
+
```javascript
|
|
855
|
+
// File: /hooks/format-optimizer.js
|
|
856
|
+
|
|
857
|
+
class FormatOptimizer {
|
|
858
|
+
constructor() {
|
|
859
|
+
this.metricsDB = new MetricsDatabase();
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
/**
|
|
863
|
+
* Analyze historical performance to refine format selection
|
|
864
|
+
*/
|
|
865
|
+
async optimize() {
|
|
866
|
+
const metrics = await this.metricsDB.getAll();
|
|
867
|
+
|
|
868
|
+
// Group by agent type and complexity
|
|
869
|
+
const grouped = this.groupByAgentAndComplexity(metrics);
|
|
870
|
+
|
|
871
|
+
for (const [key, data] of Object.entries(grouped)) {
|
|
872
|
+
const [agentType, complexity] = key.split('/');
|
|
873
|
+
|
|
874
|
+
// Find best-performing format
|
|
875
|
+
const bestFormat = this.findBestFormat(data);
|
|
876
|
+
|
|
877
|
+
// Update recommendation model
|
|
878
|
+
await this.updateRecommendation(agentType, complexity, bestFormat);
|
|
879
|
+
|
|
880
|
+
// Log insights
|
|
881
|
+
console.log(`\n${agentType} - ${complexity} complexity:`);
|
|
882
|
+
console.log(` Best format: ${bestFormat.name}`);
|
|
883
|
+
console.log(` Avg quality: ${bestFormat.avgQuality.toFixed(1)}%`);
|
|
884
|
+
console.log(` Avg time: ${bestFormat.avgTime.toFixed(0)}ms`);
|
|
885
|
+
console.log(` Sample size: n=${bestFormat.count}`);
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
/**
|
|
890
|
+
* Find format with best quality/cost ratio
|
|
891
|
+
*/
|
|
892
|
+
findBestFormat(data) {
|
|
893
|
+
const byFormat = {};
|
|
894
|
+
|
|
895
|
+
for (const item of data) {
|
|
896
|
+
if (!byFormat[item.format]) {
|
|
897
|
+
byFormat[item.format] = { qualities: [], times: [], count: 0 };
|
|
898
|
+
}
|
|
899
|
+
byFormat[item.format].qualities.push(item.quality);
|
|
900
|
+
byFormat[item.format].times.push(item.responseTime);
|
|
901
|
+
byFormat[item.format].count++;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
// Calculate averages and score
|
|
905
|
+
const scored = Object.entries(byFormat).map(([format, stats]) => {
|
|
906
|
+
const avgQuality = stats.qualities.reduce((a, b) => a + b, 0) / stats.count;
|
|
907
|
+
const avgTime = stats.times.reduce((a, b) => a + b, 0) / stats.count;
|
|
908
|
+
|
|
909
|
+
// Score: quality / (time * cost_multiplier)
|
|
910
|
+
const costMultiplier = format === 'code-heavy' ? 4 : format === 'metadata' ? 2 : 1;
|
|
911
|
+
const score = avgQuality / (avgTime * costMultiplier / 1000);
|
|
912
|
+
|
|
913
|
+
return { name: format, avgQuality, avgTime, count: stats.count, score };
|
|
914
|
+
});
|
|
915
|
+
|
|
916
|
+
// Return highest scoring format
|
|
917
|
+
return scored.sort((a, b) => b.score - a.score)[0];
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// Run optimizer weekly
|
|
922
|
+
setInterval(async () => {
|
|
923
|
+
const optimizer = new FormatOptimizer();
|
|
924
|
+
await optimizer.optimize();
|
|
925
|
+
}, 7 * 24 * 60 * 60 * 1000); // Weekly
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
---
|
|
929
|
+
|
|
930
|
+
## Advanced Patterns
|
|
931
|
+
|
|
932
|
+
### Pattern 1: Hybrid Prompts (Advanced)
|
|
933
|
+
|
|
934
|
+
**Concept**: Combine MINIMAL reasoning with CODE-HEAVY examples for medium-complex tasks.
|
|
935
|
+
|
|
936
|
+
```markdown
|
|
937
|
+
## Task: [Medium Complexity Task]
|
|
938
|
+
[Minimal problem statement for reasoning]
|
|
939
|
+
|
|
940
|
+
**Architectural Constraints**:
|
|
941
|
+
- [Constraint requiring architectural thinking]
|
|
942
|
+
- [Trade-off to consider]
|
|
943
|
+
|
|
944
|
+
**Implementation Example** (reference pattern):
|
|
945
|
+
\`\`\`[language]
|
|
946
|
+
[Simplified code showing ONE specific pattern relevant to task]
|
|
947
|
+
\`\`\`
|
|
948
|
+
|
|
949
|
+
Design your solution considering the constraints, then implement using patterns like the example above.
|
|
950
|
+
```
|
|
951
|
+
|
|
952
|
+
**When to Use**: Medium tasks where architectural thinking is needed BUT specific patterns exist for sub-problems.
|
|
953
|
+
|
|
954
|
+
**Expected**: 60-70% quality, balanced approach
|
|
955
|
+
|
|
956
|
+
---
|
|
957
|
+
|
|
958
|
+
### Pattern 2: Progressive Disclosure
|
|
959
|
+
|
|
960
|
+
**Concept**: Start MINIMAL, provide examples only if agent requests clarification.
|
|
961
|
+
|
|
962
|
+
```markdown
|
|
963
|
+
## Task: [Task Description]
|
|
964
|
+
[Minimal initial prompt]
|
|
965
|
+
|
|
966
|
+
**If you need clarification on**:
|
|
967
|
+
- Error handling patterns → Request "error-handling-example"
|
|
968
|
+
- Testing structure → Request "test-example"
|
|
969
|
+
- Performance optimization → Request "optimization-example"
|
|
970
|
+
|
|
971
|
+
[Agent provides solution or requests specific example]
|
|
972
|
+
```
|
|
973
|
+
|
|
974
|
+
**When to Use**: Uncertain complexity, want to let agent self-assess knowledge gaps.
|
|
975
|
+
|
|
976
|
+
**Expected**: Adaptive quality based on agent's needs
|
|
977
|
+
|
|
978
|
+
---
|
|
979
|
+
|
|
980
|
+
### Pattern 3: Constraint-First Design (Architecture)
|
|
981
|
+
|
|
982
|
+
**Concept**: Lead with constraints, let agent derive solution.
|
|
983
|
+
|
|
984
|
+
```markdown
|
|
985
|
+
## Design Problem: [Problem Statement]
|
|
986
|
+
|
|
987
|
+
**Hard Constraints** (MUST satisfy):
|
|
988
|
+
- [Measurable constraint 1]
|
|
989
|
+
- [Measurable constraint 2]
|
|
990
|
+
|
|
991
|
+
**Soft Constraints** (SHOULD satisfy):
|
|
992
|
+
- [Preference 1]
|
|
993
|
+
- [Preference 2]
|
|
994
|
+
|
|
995
|
+
**Prohibited Approaches**:
|
|
996
|
+
- [Anti-pattern 1 and why]
|
|
997
|
+
- [Anti-pattern 2 and why]
|
|
998
|
+
|
|
999
|
+
Design and justify your solution.
|
|
1000
|
+
```
|
|
1001
|
+
|
|
1002
|
+
**When to Use**: Architecture tasks, complex system design.
|
|
1003
|
+
|
|
1004
|
+
**Expected**: High-quality reasoning, explicit trade-off analysis
|
|
1005
|
+
|
|
1006
|
+
---
|
|
1007
|
+
|
|
1008
|
+
## Continuous Improvement
|
|
1009
|
+
|
|
1010
|
+
### Metrics to Track
|
|
1011
|
+
|
|
1012
|
+
```javascript
|
|
1013
|
+
const qualityMetrics = {
|
|
1014
|
+
// Per-task metrics
|
|
1015
|
+
task: {
|
|
1016
|
+
id: string,
|
|
1017
|
+
agentType: string,
|
|
1018
|
+
format: string,
|
|
1019
|
+
complexity: string,
|
|
1020
|
+
language: string,
|
|
1021
|
+
|
|
1022
|
+
// Predicted vs actual
|
|
1023
|
+
expectedQuality: number,
|
|
1024
|
+
actualQuality: number,
|
|
1025
|
+
qualityDelta: number,
|
|
1026
|
+
|
|
1027
|
+
expectedTime: number,
|
|
1028
|
+
actualTime: number,
|
|
1029
|
+
timeDelta: number,
|
|
1030
|
+
|
|
1031
|
+
// Outcomes
|
|
1032
|
+
success: boolean,
|
|
1033
|
+
retryCount: number,
|
|
1034
|
+
finalQuality: number
|
|
1035
|
+
},
|
|
1036
|
+
|
|
1037
|
+
// Aggregate metrics (weekly)
|
|
1038
|
+
aggregate: {
|
|
1039
|
+
format: string,
|
|
1040
|
+
agentType: string,
|
|
1041
|
+
complexity: string,
|
|
1042
|
+
|
|
1043
|
+
// Distributions
|
|
1044
|
+
qualityDistribution: { mean, median, stdDev, p95 },
|
|
1045
|
+
timeDistribution: { mean, median, stdDev, p95 },
|
|
1046
|
+
|
|
1047
|
+
// Trends
|
|
1048
|
+
qualityTrend: Array<{ week, avgQuality }>,
|
|
1049
|
+
timeTrend: Array<{ week, avgTime }>,
|
|
1050
|
+
|
|
1051
|
+
// Performance
|
|
1052
|
+
successRate: number,
|
|
1053
|
+
avgRetries: number,
|
|
1054
|
+
costEfficiency: number // quality per token
|
|
1055
|
+
}
|
|
1056
|
+
};
|
|
1057
|
+
```
|
|
1058
|
+
|
|
1059
|
+
### A/B Testing Framework
|
|
1060
|
+
|
|
1061
|
+
```javascript
|
|
1062
|
+
/**
|
|
1063
|
+
* Run A/B test between formats for specific agent type and complexity
|
|
1064
|
+
*/
|
|
1065
|
+
async function runABTest(config) {
|
|
1066
|
+
const {
|
|
1067
|
+
agentType,
|
|
1068
|
+
complexity,
|
|
1069
|
+
formatA,
|
|
1070
|
+
formatB,
|
|
1071
|
+
sampleSize = 30,
|
|
1072
|
+
scenarios
|
|
1073
|
+
} = config;
|
|
1074
|
+
|
|
1075
|
+
const results = { formatA: [], formatB: [] };
|
|
1076
|
+
|
|
1077
|
+
for (let i = 0; i < sampleSize; i++) {
|
|
1078
|
+
const scenario = scenarios[i % scenarios.length];
|
|
1079
|
+
const format = i % 2 === 0 ? formatA : formatB;
|
|
1080
|
+
|
|
1081
|
+
const result = await runBenchmark({
|
|
1082
|
+
agentType,
|
|
1083
|
+
format,
|
|
1084
|
+
scenario,
|
|
1085
|
+
round: i
|
|
1086
|
+
});
|
|
1087
|
+
|
|
1088
|
+
results[format].push(result);
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
// Statistical analysis
|
|
1092
|
+
const analysis = analyzeABTest(results.formatA, results.formatB);
|
|
1093
|
+
|
|
1094
|
+
console.log(`\nA/B Test Results: ${formatA} vs ${formatB}`);
|
|
1095
|
+
console.log(`Agent: ${agentType}, Complexity: ${complexity}`);
|
|
1096
|
+
console.log(`Sample Size: ${sampleSize} per format\n`);
|
|
1097
|
+
|
|
1098
|
+
console.log(`${formatA}:`);
|
|
1099
|
+
console.log(` Quality: ${analysis.formatA.quality.mean.toFixed(1)}% ± ${analysis.formatA.quality.stdDev.toFixed(1)}`);
|
|
1100
|
+
console.log(` Time: ${analysis.formatA.time.mean.toFixed(0)}ms ± ${analysis.formatA.time.stdDev.toFixed(0)}`);
|
|
1101
|
+
|
|
1102
|
+
console.log(`\n${formatB}:`);
|
|
1103
|
+
console.log(` Quality: ${analysis.formatB.quality.mean.toFixed(1)}% ± ${analysis.formatB.quality.stdDev.toFixed(1)}`);
|
|
1104
|
+
console.log(` Time: ${analysis.formatB.time.mean.toFixed(0)}ms ± ${analysis.formatB.time.stdDev.toFixed(0)}`);
|
|
1105
|
+
|
|
1106
|
+
console.log(`\nStatistical Significance:`);
|
|
1107
|
+
console.log(` Quality difference: ${analysis.qualityDiff.toFixed(1)}% (p=${analysis.qualityPValue.toFixed(3)})`);
|
|
1108
|
+
console.log(` Time difference: ${analysis.timeDiff.toFixed(0)}ms (p=${analysis.timePValue.toFixed(3)})`);
|
|
1109
|
+
console.log(` Winner: ${analysis.winner} (${analysis.confidence} confidence)`);
|
|
1110
|
+
|
|
1111
|
+
return analysis;
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
// Example usage
|
|
1115
|
+
await runABTest({
|
|
1116
|
+
agentType: 'coder',
|
|
1117
|
+
complexity: 'basic',
|
|
1118
|
+
formatA: 'metadata',
|
|
1119
|
+
formatB: 'code-heavy',
|
|
1120
|
+
sampleSize: 30,
|
|
1121
|
+
scenarios: loadScenariosForComplexity('basic')
|
|
1122
|
+
});
|
|
1123
|
+
```
|
|
1124
|
+
|
|
1125
|
+
### Production Monitoring
|
|
1126
|
+
|
|
1127
|
+
```javascript
|
|
1128
|
+
/**
|
|
1129
|
+
* Real-time monitoring dashboard
|
|
1130
|
+
*/
|
|
1131
|
+
class FormatPerformanceDashboard {
|
|
1132
|
+
async getMetrics(timeRange = '7d') {
|
|
1133
|
+
const metrics = await this.metricsDB.query({
|
|
1134
|
+
startTime: Date.now() - parseTimeRange(timeRange),
|
|
1135
|
+
endTime: Date.now()
|
|
1136
|
+
});
|
|
1137
|
+
|
|
1138
|
+
return {
|
|
1139
|
+
// Overall statistics
|
|
1140
|
+
overall: {
|
|
1141
|
+
totalTasks: metrics.length,
|
|
1142
|
+
successRate: metrics.filter(m => m.success).length / metrics.length,
|
|
1143
|
+
avgQuality: mean(metrics.map(m => m.quality)),
|
|
1144
|
+
avgTime: mean(metrics.map(m => m.responseTime))
|
|
1145
|
+
},
|
|
1146
|
+
|
|
1147
|
+
// By format
|
|
1148
|
+
byFormat: groupBy(metrics, 'format').map(group => ({
|
|
1149
|
+
format: group.key,
|
|
1150
|
+
count: group.items.length,
|
|
1151
|
+
quality: {
|
|
1152
|
+
mean: mean(group.items.map(i => i.quality)),
|
|
1153
|
+
p95: percentile(group.items.map(i => i.quality), 95)
|
|
1154
|
+
},
|
|
1155
|
+
time: {
|
|
1156
|
+
mean: mean(group.items.map(i => i.responseTime)),
|
|
1157
|
+
p95: percentile(group.items.map(i => i.responseTime), 95)
|
|
1158
|
+
}
|
|
1159
|
+
})),
|
|
1160
|
+
|
|
1161
|
+
// By agent type
|
|
1162
|
+
byAgentType: groupBy(metrics, 'agentType').map(group => ({
|
|
1163
|
+
agentType: group.key,
|
|
1164
|
+
bestFormat: this.findBestFormat(group.items),
|
|
1165
|
+
sampleSize: group.items.length
|
|
1166
|
+
})),
|
|
1167
|
+
|
|
1168
|
+
// Trends
|
|
1169
|
+
trends: {
|
|
1170
|
+
daily: this.calculateDailyTrends(metrics),
|
|
1171
|
+
formatAdoption: this.calculateFormatAdoption(metrics)
|
|
1172
|
+
}
|
|
1173
|
+
};
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
/**
|
|
1177
|
+
* Alert on performance degradation
|
|
1178
|
+
*/
|
|
1179
|
+
async checkAlerts() {
|
|
1180
|
+
const recent = await this.getMetrics('24h');
|
|
1181
|
+
const baseline = await this.getMetrics('30d');
|
|
1182
|
+
|
|
1183
|
+
const alerts = [];
|
|
1184
|
+
|
|
1185
|
+
// Quality degradation
|
|
1186
|
+
if (recent.overall.avgQuality < baseline.overall.avgQuality * 0.9) {
|
|
1187
|
+
alerts.push({
|
|
1188
|
+
severity: 'warning',
|
|
1189
|
+
message: `Quality dropped 10%+ (${recent.overall.avgQuality.toFixed(1)}% vs ${baseline.overall.avgQuality.toFixed(1)}%)`,
|
|
1190
|
+
recommendation: 'Review recent format selections and task complexity classifications'
|
|
1191
|
+
});
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
// Response time increase
|
|
1195
|
+
if (recent.overall.avgTime > baseline.overall.avgTime * 1.2) {
|
|
1196
|
+
alerts.push({
|
|
1197
|
+
severity: 'info',
|
|
1198
|
+
message: `Response time increased 20%+ (${recent.overall.avgTime.toFixed(0)}ms vs ${baseline.overall.avgTime.toFixed(0)}ms)`,
|
|
1199
|
+
recommendation: 'Check for increased use of verbose formats or model latency changes'
|
|
1200
|
+
});
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
return alerts;
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
// Run dashboard update every hour
|
|
1208
|
+
setInterval(async () => {
|
|
1209
|
+
const dashboard = new FormatPerformanceDashboard();
|
|
1210
|
+
const metrics = await dashboard.getMetrics('7d');
|
|
1211
|
+
const alerts = await dashboard.checkAlerts();
|
|
1212
|
+
|
|
1213
|
+
console.log('\n=== Format Performance Dashboard ===');
|
|
1214
|
+
console.log(JSON.stringify(metrics, null, 2));
|
|
1215
|
+
|
|
1216
|
+
if (alerts.length > 0) {
|
|
1217
|
+
console.log('\n=== Alerts ===');
|
|
1218
|
+
alerts.forEach(alert => {
|
|
1219
|
+
console.log(`[${alert.severity.toUpperCase()}] ${alert.message}`);
|
|
1220
|
+
console.log(` → ${alert.recommendation}`);
|
|
1221
|
+
});
|
|
1222
|
+
}
|
|
1223
|
+
}, 60 * 60 * 1000); // Hourly
|
|
1224
|
+
```
|
|
1225
|
+
|
|
1226
|
+
---
|
|
1227
|
+
|
|
1228
|
+
## Appendix: Research Roadmap
|
|
1229
|
+
|
|
1230
|
+
### Phase 1: Validate Python Patterns (Priority: HIGH)
|
|
1231
|
+
- [ ] Create 5 Python scenarios (basic to complex)
|
|
1232
|
+
- [ ] Run 30+ benchmarks per format
|
|
1233
|
+
- [ ] Validate/refine Python-specific recommendations
|
|
1234
|
+
- **ETA**: 1 week
|
|
1235
|
+
|
|
1236
|
+
### Phase 2: Validate JavaScript/TypeScript Patterns (Priority: HIGH)
|
|
1237
|
+
- [ ] Create 5 JS/TS scenarios covering async, React, API clients
|
|
1238
|
+
- [ ] Run 30+ benchmarks per format
|
|
1239
|
+
- [ ] Validate async pattern benefits of CODE-HEAVY
|
|
1240
|
+
- **ETA**: 1 week
|
|
1241
|
+
|
|
1242
|
+
### Phase 3: Validate Non-Coder Agents (Priority: MEDIUM)
|
|
1243
|
+
- [ ] Reviewer agent: side-by-side format comparison
|
|
1244
|
+
- [ ] Tester agent: test quality metrics
|
|
1245
|
+
- [ ] Architect agent: ADR quality assessment
|
|
1246
|
+
- **ETA**: 2 weeks
|
|
1247
|
+
|
|
1248
|
+
### Phase 4: Production A/B Testing (Priority: HIGHEST ROI)
|
|
1249
|
+
- [ ] Deploy format selector in production
|
|
1250
|
+
- [ ] Run A/B tests on real user tasks
|
|
1251
|
+
- [ ] Collect user satisfaction metrics
|
|
1252
|
+
- [ ] Iterate based on real-world data
|
|
1253
|
+
- **ETA**: Ongoing
|
|
1254
|
+
|
|
1255
|
+
---
|
|
1256
|
+
|
|
1257
|
+
## Changelog
|
|
1258
|
+
|
|
1259
|
+
### Version 1.0 (2025-09-30)
|
|
1260
|
+
- Initial release based on 45 Rust benchmark observations
|
|
1261
|
+
- Documented universal principles (Complexity-Verbosity Inverse Law, Priming Paradox, 43% Rule)
|
|
1262
|
+
- Created Agent Type × Task Matrix with evidence levels
|
|
1263
|
+
- Implemented format selection algorithm with JavaScript reference
|
|
1264
|
+
- Provided quick-start templates for all common scenarios
|
|
1265
|
+
- Integrated with Claude Flow hooks system
|
|
1266
|
+
- Established continuous improvement framework
|
|
1267
|
+
|
|
1268
|
+
### Future Versions
|
|
1269
|
+
- v1.1: Python validation results
|
|
1270
|
+
- v1.2: JavaScript/TypeScript validation results
|
|
1271
|
+
- v1.3: Non-coder agent validation (reviewer, tester, architect)
|
|
1272
|
+
- v2.0: Production A/B testing insights and refined recommendations
|
|
1273
|
+
|
|
1274
|
+
---
|
|
1275
|
+
|
|
1276
|
+
## References
|
|
1277
|
+
|
|
1278
|
+
### Primary Sources
|
|
1279
|
+
1. **Rust Benchmark Analysis** (`/benchmark/agent-benchmarking/analysis/rust-benchmark-analysis.md`)
|
|
1280
|
+
- 45 observations, 5 scenarios, 3 formats
|
|
1281
|
+
- Statistical validation with ANOVA, t-tests, effect sizes
|
|
1282
|
+
- Key finding: 43% quality gap on basic tasks
|
|
1283
|
+
|
|
1284
|
+
2. **Coder Agent Guidelines** (`/.claude/agents/specialized/CODER_AGENT_GUIDELINES.md`)
|
|
1285
|
+
- Language-specific recommendations
|
|
1286
|
+
- Task complexity classification
|
|
1287
|
+
- Cost-benefit analysis
|
|
1288
|
+
|
|
1289
|
+
3. **Benchmark Test Report** (`/docs/benchmark-test-report.md`)
|
|
1290
|
+
- System validation and operational readiness
|
|
1291
|
+
- ES module conversion and testing infrastructure
|
|
1292
|
+
|
|
1293
|
+
### Related Documentation
|
|
1294
|
+
- **Claude Flow Hooks**: `/hooks/post-edit`, `/hooks/pre-task`, `/hooks/post-task`
|
|
1295
|
+
- **Agent Templates**: `/.claude/agents/benchmarking-tests/`
|
|
1296
|
+
- **Benchmark System**: `/benchmark/agent-benchmarking/`
|
|
1297
|
+
|
|
1298
|
+
---
|
|
1299
|
+
|
|
1300
|
+
**Document Maintained By**: System Architect + Coder Agent
|
|
1301
|
+
**Next Review**: After Python/JavaScript benchmark completion
|
|
1302
|
+
**Feedback**: [Create issue in project repository]
|
|
1303
|
+
|
|
1304
|
+
---
|
|
1305
|
+
|
|
1306
|
+
## License
|
|
1307
|
+
|
|
1308
|
+
This document is part of the Claude Flow project. Use and adapt freely within your projects.
|
|
1309
|
+
|
|
1310
|
+
---
|
|
1311
|
+
|
|
1312
|
+
**Remember**: These principles are evidence-based but not prescriptive. Always validate recommendations in your specific context and iterate based on results. The goal is continuous improvement, not perfection.
|