@itz4blitz/agentful 0.1.9 → 0.1.11
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/orchestrator.md +68 -16
- package/.claude/agents/product-analyzer.md +799 -0
- package/.claude/commands/agentful-product.md +1129 -0
- package/.claude/commands/agentful-status.md +47 -4
- package/.claude/commands/agentful.md +12 -0
- package/README.md +19 -1
- package/bin/cli.js +17 -48
- package/package.json +1 -1
- package/version.json +1 -1
|
@@ -9,6 +9,43 @@ This command shows the current state of autonomous product development.
|
|
|
9
9
|
|
|
10
10
|
## Display Format
|
|
11
11
|
|
|
12
|
+
### Product Readiness (if `.agentful/product-analysis.json` exists)
|
|
13
|
+
|
|
14
|
+
Display this section FIRST, before the header:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
18
|
+
Product Readiness: 85% ⚠️
|
|
19
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
20
|
+
|
|
21
|
+
Completeness: 92% ✅
|
|
22
|
+
Clarity: 88% ⚠️
|
|
23
|
+
Feasibility: 78% ⚠️
|
|
24
|
+
Testability: 85% ⚠️
|
|
25
|
+
Consistency: 82% ⚠️
|
|
26
|
+
|
|
27
|
+
⚠️ 2 blocking issues - run /agentful-product to resolve
|
|
28
|
+
|
|
29
|
+
⚠️ Product spec has minor gaps - recommend refinement
|
|
30
|
+
|
|
31
|
+
Last analyzed: 2 hours ago
|
|
32
|
+
Update: /agentful-product
|
|
33
|
+
|
|
34
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Emoji guidelines for scores:
|
|
38
|
+
- 90-100%: ✅
|
|
39
|
+
- 70-89%: ⚠️
|
|
40
|
+
- Below 70%: ❌
|
|
41
|
+
|
|
42
|
+
Overall readiness status:
|
|
43
|
+
- Score >= 90%: "✅ Product spec is ready for development"
|
|
44
|
+
- Score >= 70%: "⚠️ Product spec has minor gaps - recommend refinement"
|
|
45
|
+
- Score < 70%: "❌ Product spec needs refinement before development"
|
|
46
|
+
|
|
47
|
+
Blocking issues line only shows if there are blocking issues (count > 0).
|
|
48
|
+
|
|
12
49
|
### Header
|
|
13
50
|
|
|
14
51
|
```
|
|
@@ -81,10 +118,16 @@ Iterations: 24
|
|
|
81
118
|
|
|
82
119
|
Read and display:
|
|
83
120
|
|
|
84
|
-
1. `.agentful/
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
121
|
+
1. `.agentful/product-analysis.json` (optional) - Product readiness score and breakdown
|
|
122
|
+
- Only display product readiness section if this file exists
|
|
123
|
+
- Calculate emoji based on score thresholds (90-100: ✅, 70-89: ⚠️, <70: ❌)
|
|
124
|
+
- Show blocking issues count if > 0
|
|
125
|
+
- Format timestamp as relative time (e.g., "2 hours ago", "just now", "3 days ago")
|
|
126
|
+
|
|
127
|
+
2. `.agentful/state.json` - Current work, phase, iterations
|
|
128
|
+
3. `.agentful/completion.json` - Features and gates
|
|
129
|
+
4. `.agentful/decisions.json` - Pending decisions
|
|
130
|
+
5. `.claude/product/index.md` - Product name and overview
|
|
88
131
|
|
|
89
132
|
Format the output nicely with ASCII art for readability.
|
|
90
133
|
|
|
@@ -40,8 +40,19 @@ npx @itz4blitz/agentful init
|
|
|
40
40
|
| `/agentful-status` | Show completion percentage, current work |
|
|
41
41
|
| `/agentful-validate` | Run quality gates (tests, lint, security) |
|
|
42
42
|
| `/agentful-decide` | Answer blocking decisions |
|
|
43
|
+
| `/agentful-product` | Smart product requirements planning and analysis |
|
|
43
44
|
| `/agentful` | Show this reference |
|
|
44
45
|
|
|
46
|
+
### Product Planning (Optional)
|
|
47
|
+
|
|
48
|
+
Before starting development, you can use `/agentful-product` to:
|
|
49
|
+
- Create and refine product specifications
|
|
50
|
+
- Analyze requirements for gaps and ambiguities
|
|
51
|
+
- Get a readiness score before development begins
|
|
52
|
+
- Resolve blocking issues interactively
|
|
53
|
+
|
|
54
|
+
This is optional but recommended for complex projects. Run `/agentful-product` to get started.
|
|
55
|
+
|
|
45
56
|
## How It Works
|
|
46
57
|
|
|
47
58
|
### 1. Define Your Product
|
|
@@ -308,6 +319,7 @@ It learns **your project's patterns** and generates agents that match your conve
|
|
|
308
319
|
│ └─ Template creation │
|
|
309
320
|
├─────────────────────────────────────────────┤
|
|
310
321
|
│ Slash Commands (Claude Code) │
|
|
322
|
+
│ ├─ /agentful-product (requirements) │
|
|
311
323
|
│ ├─ /agentful-start (orchestrator) │
|
|
312
324
|
│ ├─ /agentful-status (progress) │
|
|
313
325
|
│ ├─ /agentful-validate (quality gates) │
|
package/README.md
CHANGED
|
@@ -21,7 +21,24 @@ This command creates the necessary directory structure and configuration files i
|
|
|
21
21
|
|
|
22
22
|
### 1. Define Product Specification
|
|
23
23
|
|
|
24
|
-
After initialization,
|
|
24
|
+
After initialization, define your product requirements:
|
|
25
|
+
|
|
26
|
+
#### Option A: Interactive Planning (Recommended)
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
claude # Start Claude Code
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Use `/agentful-product` for guided product planning:
|
|
33
|
+
- **New projects**: Interactive Q&A creates your product spec
|
|
34
|
+
- **Existing specs**: Analyzes for gaps, ambiguities, blocking issues
|
|
35
|
+
- **Readiness scoring**: Get a score (0-100) before development
|
|
36
|
+
- **Issue resolution**: Walk through blocking issues with smart suggestions
|
|
37
|
+
- **Q&A mode**: Ask planning questions in context
|
|
38
|
+
|
|
39
|
+
#### Option B: Manual Creation
|
|
40
|
+
|
|
41
|
+
Create your specification manually:
|
|
25
42
|
|
|
26
43
|
**Flat structure** (single file at project root):
|
|
27
44
|
- `PRODUCT.md` - All features in one file
|
|
@@ -132,6 +149,7 @@ Runtime state is stored in `.agentful/`:
|
|
|
132
149
|
|
|
133
150
|
| Command | Description |
|
|
134
151
|
|---------|-------------|
|
|
152
|
+
| `/agentful-product` | Smart product planning: create, analyze, and refine requirements |
|
|
135
153
|
| `/agentful-start` | Start or resume autonomous development |
|
|
136
154
|
| `/agentful-status` | Display progress and current state |
|
|
137
155
|
| `/agentful-validate` | Run all quality checks |
|
package/bin/cli.js
CHANGED
|
@@ -339,79 +339,48 @@ ${analysis && analysis.domains.length > 0 ? analysis.domains.map((d, i) => `${i
|
|
|
339
339
|
// Update .gitignore
|
|
340
340
|
checkGitignore();
|
|
341
341
|
|
|
342
|
-
// Perform
|
|
342
|
+
// Perform essential project detection (unless explicitly disabled)
|
|
343
343
|
if (smart) {
|
|
344
344
|
console.log('');
|
|
345
|
-
log(colors.bright, '🔍
|
|
345
|
+
log(colors.bright, '🔍 Detecting project essentials...');
|
|
346
346
|
console.log('');
|
|
347
347
|
|
|
348
348
|
try {
|
|
349
|
-
const startTime = Date.now();
|
|
350
349
|
analysis = await analyzeProject(targetDir);
|
|
351
350
|
await exportToArchitectureJson(targetDir, analysis);
|
|
352
|
-
const duration = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
353
351
|
|
|
354
|
-
// Show
|
|
352
|
+
// Show only essential info
|
|
355
353
|
if (analysis.language && analysis.language !== 'unknown') {
|
|
356
354
|
log(colors.cyan, ` Language: ${analysis.language}`);
|
|
357
|
-
if (analysis.primaryLanguage && analysis.primaryLanguage !== analysis.language) {
|
|
358
|
-
log(colors.dim, ` Primary: ${analysis.primaryLanguage}`);
|
|
359
|
-
}
|
|
360
355
|
}
|
|
361
356
|
|
|
362
357
|
if (analysis.frameworks.length > 0) {
|
|
363
|
-
log(colors.cyan, `
|
|
358
|
+
log(colors.cyan, ` Framework: ${analysis.frameworks[0]}`);
|
|
364
359
|
}
|
|
365
360
|
|
|
366
361
|
if (analysis.packageManager && analysis.packageManager !== 'unknown') {
|
|
367
362
|
log(colors.cyan, ` Package Mgr: ${analysis.packageManager}`);
|
|
368
363
|
}
|
|
369
364
|
|
|
370
|
-
if (analysis.buildSystem && analysis.buildSystem !== 'unknown') {
|
|
371
|
-
log(colors.cyan, ` Build: ${analysis.buildSystem}`);
|
|
372
|
-
}
|
|
373
|
-
|
|
374
365
|
console.log('');
|
|
366
|
+
log(colors.dim, ` ✓ Detection complete`);
|
|
375
367
|
|
|
376
|
-
// Show
|
|
377
|
-
if (analysis.domains.length > 0) {
|
|
378
|
-
log(colors.bright, '📊 Detected domains:');
|
|
379
|
-
console.log('');
|
|
380
|
-
|
|
381
|
-
analysis.domains.slice(0, 5).forEach(domain => {
|
|
382
|
-
const confidence = analysis.domainConfidence[domain] || 0.5;
|
|
383
|
-
const confidenceBar = '█'.repeat(Math.round(confidence * 10)) + '░'.repeat(10 - Math.round(confidence * 10));
|
|
384
|
-
const confidencePct = Math.round(confidence * 100);
|
|
385
|
-
|
|
386
|
-
// Color code based on confidence
|
|
387
|
-
let confidenceColor = colors.red;
|
|
388
|
-
if (confidence >= 0.8) confidenceColor = colors.green;
|
|
389
|
-
else if (confidence >= 0.5) confidenceColor = colors.yellow;
|
|
390
|
-
|
|
391
|
-
log(confidenceColor, ` • ${domain.padEnd(20)} ${confidenceBar} ${confidencePct}%`);
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
if (analysis.domains.length > 5) {
|
|
395
|
-
log(colors.dim, ` ... and ${analysis.domains.length - 5} more`);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
console.log('');
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
log(colors.dim, ` Analysis completed in ${duration}s (${Math.round(analysis.confidence * 100)}% confidence)`);
|
|
402
|
-
|
|
403
|
-
// Show warnings if any
|
|
368
|
+
// Show critical warnings only
|
|
404
369
|
if (analysis.warnings && analysis.warnings.length > 0) {
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
370
|
+
const criticalWarnings = analysis.warnings.filter(w =>
|
|
371
|
+
w.includes('empty') || w.includes('not detect')
|
|
372
|
+
);
|
|
373
|
+
if (criticalWarnings.length > 0) {
|
|
374
|
+
console.log('');
|
|
375
|
+
log(colors.yellow, '⚠️ Warnings:');
|
|
376
|
+
criticalWarnings.forEach(warning => {
|
|
377
|
+
log(colors.dim, ` • ${warning}`);
|
|
378
|
+
});
|
|
379
|
+
}
|
|
410
380
|
}
|
|
411
381
|
|
|
412
382
|
} catch (error) {
|
|
413
|
-
log(colors.dim, ' ⊙
|
|
414
|
-
log(colors.dim, ` Error: ${error.message}`);
|
|
383
|
+
log(colors.dim, ' ⊙ Detection skipped (project may be empty)');
|
|
415
384
|
analysis = null;
|
|
416
385
|
}
|
|
417
386
|
}
|
package/package.json
CHANGED
package/version.json
CHANGED