myaidev-method 0.2.15 → 0.2.16
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/.env.example +8 -1
- package/CHANGELOG.md +32 -0
- package/package.json +2 -2
- package/src/lib/visual-generation-utils.js +219 -7
- package/.claude/CLAUDE.md +0 -98
- package/.claude/agents/content-production-coordinator.md +0 -111
- package/.claude/agents/content-writer.md +0 -155
- package/.claude/agents/proprietary-content-verifier.md +0 -96
- package/.claude/agents/visual-content-generator.md +0 -520
- package/.claude/agents/wordpress-admin.md +0 -271
- package/.claude/commands/myai-configure.md +0 -44
- package/.claude/commands/myai-content-writer.md +0 -78
- package/.claude/commands/myai-coordinate-content.md +0 -136
- package/.claude/commands/myai-wordpress-publish.md +0 -120
- package/.claude/mcp/gutenberg-converter.js +0 -447
- package/.claude/mcp/mcp-config.json +0 -184
- package/.claude/mcp/wordpress-server-simple.js +0 -182
- package/.claude/settings.local.json +0 -13
package/.env.example
CHANGED
|
@@ -50,8 +50,15 @@ GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
|
|
|
50
50
|
# Get API key: https://platform.openai.com/api-keys
|
|
51
51
|
OPENAI_API_KEY=
|
|
52
52
|
|
|
53
|
+
# Fal.ai API (for FLUX, Veo 3, and premium models) - OPTIONAL
|
|
54
|
+
# Get API key: https://fal.ai/dashboard/keys
|
|
55
|
+
# Hybrid Strategy: Use direct APIs (Google/OpenAI) for cost savings
|
|
56
|
+
# Use Fal.ai for exclusive models (FLUX, Veo 3) or fallback
|
|
57
|
+
# Pricing: FLUX Pro $0.06/image, Veo 3 $0.40/second
|
|
58
|
+
FAL_KEY=
|
|
59
|
+
|
|
53
60
|
# Visual Generation Preferences
|
|
54
|
-
VISUAL_DEFAULT_SERVICE=gemini # gemini|imagen|dalle|veo
|
|
61
|
+
VISUAL_DEFAULT_SERVICE=gemini # gemini|imagen|dalle|veo|flux|veo3
|
|
55
62
|
VISUAL_DEFAULT_QUALITY=standard # standard|hd
|
|
56
63
|
VISUAL_ASSETS_PATH=./content-assets # Where to save generated files
|
|
57
64
|
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,38 @@ All notable changes to the MyAIDev Method package will be documented in this fil
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.16] - 2025-11-19
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **Package Publishing**: Removed `.claude/` from published npm package
|
|
12
|
+
- `.claude/` folder is for local development/testing only
|
|
13
|
+
- Users get proper setup via `npx myaidev-method@latest init --claude`
|
|
14
|
+
- Reduces package size and prevents settings.local.json from being distributed
|
|
15
|
+
- Templates correctly published from `src/templates/claude/`
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **Fal.ai Integration**: Hybrid provider strategy for premium models
|
|
19
|
+
- Added `@fal-ai/client` dependency for Fal.ai API access
|
|
20
|
+
- `generateImageFal()` function for FLUX models (Pro v1.1 Ultra, Dev)
|
|
21
|
+
- `generateVideoFal()` function for Veo 3 video generation
|
|
22
|
+
- Auto-provider selection (uses direct APIs when cheaper, Fal.ai for exclusives)
|
|
23
|
+
- Support for FLUX Pro ($0.06/image), FLUX Dev ($0.025/MP)
|
|
24
|
+
- Support for Veo 3 ($0.40/second), Veo 3 Fast
|
|
25
|
+
- FAL_KEY environment variable configuration
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- **Visual Generation**: Enhanced provider ecosystem
|
|
29
|
+
- Updated pricing constants with Fal.ai models
|
|
30
|
+
- Enhanced `getServiceInfo()` with FLUX and Veo 3 details
|
|
31
|
+
- Updated `generateImage()` to support FLUX services
|
|
32
|
+
- `.env.example` updated with FAL_KEY and hybrid strategy documentation
|
|
33
|
+
- Hybrid strategy: Direct APIs primary (cost-effective), Fal.ai for premium/exclusive models
|
|
34
|
+
|
|
35
|
+
### Strategy
|
|
36
|
+
- **Cost Optimization**: Use direct APIs for better pricing (Gemini $0.02 vs Fal $0.0398)
|
|
37
|
+
- **Premium Access**: Use Fal.ai for FLUX (artistic) and Veo 3 (latest video)
|
|
38
|
+
- **Fallback**: Fal.ai available when direct APIs are rate-limited
|
|
39
|
+
|
|
8
40
|
## [0.2.15] - 2025-11-19
|
|
9
41
|
|
|
10
42
|
### Added
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "myaidev-method",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.16",
|
|
4
4
|
"description": "Comprehensive development framework with SPARC methodology for AI-assisted software development, AI visual content generation (Gemini, Imagen, DALL-E, Veo), multi-platform publishing (WordPress, PayloadCMS, Astro, Docusaurus, Mintlify), and Coolify deployment",
|
|
5
5
|
"mcpName": "io.github.myaione/myaidev-method",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -100,6 +100,7 @@
|
|
|
100
100
|
"type": "module",
|
|
101
101
|
"dependencies": {
|
|
102
102
|
"@effect/platform-node": "^0.98.4",
|
|
103
|
+
"@fal-ai/client": "^1.7.2",
|
|
103
104
|
"@hono/node-server": "^1.19.5",
|
|
104
105
|
"@modelcontextprotocol/sdk": "^1.18.0",
|
|
105
106
|
"@tsconfig/strictest": "^2.0.5",
|
|
@@ -140,7 +141,6 @@
|
|
|
140
141
|
"files": [
|
|
141
142
|
"bin/",
|
|
142
143
|
"src/",
|
|
143
|
-
".claude/",
|
|
144
144
|
"dist/",
|
|
145
145
|
"README.md",
|
|
146
146
|
"USER_GUIDE.md",
|
|
@@ -52,14 +52,20 @@ async function getVertexAIToken() {
|
|
|
52
52
|
|
|
53
53
|
// Pricing (USD per image/video) - GPT-Image-1 pricing
|
|
54
54
|
const PRICING = {
|
|
55
|
-
gemini: 0.02, // Gemini 2.5 Flash Image
|
|
56
|
-
imagen: 0.03, // Imagen 3
|
|
55
|
+
gemini: 0.02, // Gemini 2.5 Flash Image (direct Google API)
|
|
56
|
+
imagen: 0.03, // Imagen 3 (direct Google API)
|
|
57
57
|
dalle_low: 0.02, // GPT-Image-1 low quality
|
|
58
58
|
dalle_medium: 0.07, // GPT-Image-1 medium quality
|
|
59
59
|
dalle_standard: 0.07, // GPT-Image-1 medium quality (alias for standard)
|
|
60
60
|
dalle_high: 0.19, // GPT-Image-1 high quality
|
|
61
61
|
dalle_hd: 0.19, // GPT-Image-1 high quality (alias for hd)
|
|
62
|
-
veo: 0.10
|
|
62
|
+
veo: 0.10, // Veo 2 (estimated per video)
|
|
63
|
+
// Fal.ai pricing
|
|
64
|
+
flux_pro: 0.06, // FLUX Pro v1.1 Ultra
|
|
65
|
+
flux_dev: 0.025, // FLUX Dev (per megapixel)
|
|
66
|
+
veo3: 0.40, // Veo 3 (per second)
|
|
67
|
+
gemini_fal: 0.0398, // Gemini via fal.ai (fallback)
|
|
68
|
+
imagen_fal: 0.05 // Imagen via fal.ai (fallback)
|
|
63
69
|
};
|
|
64
70
|
|
|
65
71
|
/**
|
|
@@ -514,6 +520,166 @@ export async function generateVideoVeo(prompt, options = {}) {
|
|
|
514
520
|
throw lastError;
|
|
515
521
|
}
|
|
516
522
|
|
|
523
|
+
/**
|
|
524
|
+
* Generate image using Fal.ai
|
|
525
|
+
* Access to FLUX and other premium models
|
|
526
|
+
*
|
|
527
|
+
* @param {string} prompt - Image description
|
|
528
|
+
* @param {Object} options - Generation options
|
|
529
|
+
* @param {string} options.model - Fal.ai model (flux-pro, flux-dev, nano-banana, imagen-3-fast)
|
|
530
|
+
* @param {string} options.size - Image size
|
|
531
|
+
* @param {number} options.maxRetries - Maximum retry attempts
|
|
532
|
+
* @returns {Promise<Object>} Generated image data
|
|
533
|
+
*/
|
|
534
|
+
export async function generateImageFal(prompt, options = {}) {
|
|
535
|
+
const {
|
|
536
|
+
model = 'flux-pro',
|
|
537
|
+
size = '1024x1024',
|
|
538
|
+
maxRetries = 3
|
|
539
|
+
} = options;
|
|
540
|
+
|
|
541
|
+
const apiKey = process.env.FAL_KEY;
|
|
542
|
+
if (!apiKey) {
|
|
543
|
+
throw new Error('FAL_KEY not configured. Get your key from https://fal.ai/dashboard/keys');
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
// Import fal.ai client
|
|
547
|
+
const { fal } = await import('@fal-ai/client');
|
|
548
|
+
|
|
549
|
+
// Configure credentials
|
|
550
|
+
fal.config({ credentials: apiKey });
|
|
551
|
+
|
|
552
|
+
// Map model names to fal.ai endpoints
|
|
553
|
+
const modelMap = {
|
|
554
|
+
'flux-pro': 'fal-ai/flux-pro/v1.1-ultra',
|
|
555
|
+
'flux-dev': 'fal-ai/flux/dev',
|
|
556
|
+
'nano-banana': 'fal-ai/nano-banana',
|
|
557
|
+
'imagen-3-fast': 'fal-ai/fast-imagen'
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
const endpoint = modelMap[model] || modelMap['flux-pro'];
|
|
561
|
+
|
|
562
|
+
let lastError;
|
|
563
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
564
|
+
try {
|
|
565
|
+
const result = await fal.subscribe(endpoint, {
|
|
566
|
+
input: {
|
|
567
|
+
prompt: prompt,
|
|
568
|
+
image_size: size === '1024x1024' ? 'square' : 'landscape',
|
|
569
|
+
num_images: 1
|
|
570
|
+
},
|
|
571
|
+
logs: false
|
|
572
|
+
});
|
|
573
|
+
|
|
574
|
+
if (result.images && result.images[0]) {
|
|
575
|
+
const image = result.images[0];
|
|
576
|
+
|
|
577
|
+
// Fal.ai returns URL, need to fetch and convert to base64
|
|
578
|
+
const imageResponse = await fetch(image.url);
|
|
579
|
+
const imageBuffer = await imageResponse.arrayBuffer();
|
|
580
|
+
const base64Data = Buffer.from(imageBuffer).toString('base64');
|
|
581
|
+
|
|
582
|
+
return {
|
|
583
|
+
data: base64Data,
|
|
584
|
+
mimeType: image.content_type || 'image/png',
|
|
585
|
+
service: 'fal',
|
|
586
|
+
model: model,
|
|
587
|
+
cost: PRICING[`${model.replace('-', '_')}`] || PRICING.flux_pro
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
throw new Error('No image data in Fal.ai response');
|
|
592
|
+
|
|
593
|
+
} catch (error) {
|
|
594
|
+
lastError = error;
|
|
595
|
+
|
|
596
|
+
if (attempt < maxRetries) {
|
|
597
|
+
const backoff = Math.pow(2, attempt) * 1000;
|
|
598
|
+
console.log(`⚠️ Fal.ai attempt ${attempt} failed. Retrying in ${backoff/1000}s...`);
|
|
599
|
+
await sleep(backoff);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
throw lastError;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* Generate video using Fal.ai (Veo 3)
|
|
609
|
+
* Latest video generation models
|
|
610
|
+
*
|
|
611
|
+
* @param {string} prompt - Video description
|
|
612
|
+
* @param {Object} options - Generation options
|
|
613
|
+
* @param {string} options.model - Model (veo3, veo3-fast)
|
|
614
|
+
* @param {number} options.duration - Video duration in seconds
|
|
615
|
+
* @param {string} options.aspectRatio - Aspect ratio
|
|
616
|
+
* @param {number} options.maxRetries - Maximum retry attempts
|
|
617
|
+
* @returns {Promise<Object>} Generated video data
|
|
618
|
+
*/
|
|
619
|
+
export async function generateVideoFal(prompt, options = {}) {
|
|
620
|
+
const {
|
|
621
|
+
model = 'veo3',
|
|
622
|
+
duration = 5,
|
|
623
|
+
aspectRatio = '16:9',
|
|
624
|
+
maxRetries = 3
|
|
625
|
+
} = options;
|
|
626
|
+
|
|
627
|
+
const apiKey = process.env.FAL_KEY;
|
|
628
|
+
if (!apiKey) {
|
|
629
|
+
throw new Error('FAL_KEY not configured. Get your key from https://fal.ai/dashboard/keys');
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// Import fal.ai client
|
|
633
|
+
const { fal } = await import('@fal-ai/client');
|
|
634
|
+
|
|
635
|
+
// Configure credentials
|
|
636
|
+
fal.config({ credentials: apiKey });
|
|
637
|
+
|
|
638
|
+
const endpoint = model === 'veo3-fast' ? 'fal-ai/veo3-fast' : 'fal-ai/veo3';
|
|
639
|
+
|
|
640
|
+
let lastError;
|
|
641
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
642
|
+
try {
|
|
643
|
+
const result = await fal.subscribe(endpoint, {
|
|
644
|
+
input: {
|
|
645
|
+
prompt: prompt,
|
|
646
|
+
duration: Math.min(duration, 10),
|
|
647
|
+
aspect_ratio: aspectRatio
|
|
648
|
+
},
|
|
649
|
+
logs: false
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
if (result.video && result.video.url) {
|
|
653
|
+
// Fal.ai returns video URL
|
|
654
|
+
const videoResponse = await fetch(result.video.url);
|
|
655
|
+
const videoBuffer = await videoResponse.arrayBuffer();
|
|
656
|
+
const base64Data = Buffer.from(videoBuffer).toString('base64');
|
|
657
|
+
|
|
658
|
+
return {
|
|
659
|
+
data: base64Data,
|
|
660
|
+
mimeType: 'video/mp4',
|
|
661
|
+
service: 'fal',
|
|
662
|
+
model: model,
|
|
663
|
+
cost: PRICING.veo3 * duration
|
|
664
|
+
};
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
throw new Error('No video data in Fal.ai response');
|
|
668
|
+
|
|
669
|
+
} catch (error) {
|
|
670
|
+
lastError = error;
|
|
671
|
+
|
|
672
|
+
if (attempt < maxRetries) {
|
|
673
|
+
const backoff = Math.pow(2, attempt) * 1000;
|
|
674
|
+
console.log(`⚠️ Fal.ai video attempt ${attempt} failed. Retrying in ${backoff/1000}s...`);
|
|
675
|
+
await sleep(backoff);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
throw lastError;
|
|
681
|
+
}
|
|
682
|
+
|
|
517
683
|
/**
|
|
518
684
|
* Download image from URL and return buffer
|
|
519
685
|
*
|
|
@@ -568,6 +734,12 @@ export async function generateImage(prompt, options = {}) {
|
|
|
568
734
|
result = await generateImageDALLE(enhancedPrompt, serviceOptions);
|
|
569
735
|
break;
|
|
570
736
|
|
|
737
|
+
case 'flux':
|
|
738
|
+
case 'flux-pro':
|
|
739
|
+
case 'flux-dev':
|
|
740
|
+
result = await generateImageFal(enhancedPrompt, { ...serviceOptions, model: service });
|
|
741
|
+
break;
|
|
742
|
+
|
|
571
743
|
default:
|
|
572
744
|
throw new Error(`Unknown service: ${service}`);
|
|
573
745
|
}
|
|
@@ -636,7 +808,8 @@ export function getServiceInfo(service) {
|
|
|
636
808
|
speed: 'Fast',
|
|
637
809
|
cost: '$0.02/image',
|
|
638
810
|
quality: 'Good',
|
|
639
|
-
bestFor: 'Quick hero images, high volume'
|
|
811
|
+
bestFor: 'Quick hero images, high volume',
|
|
812
|
+
provider: 'Google AI (Direct)'
|
|
640
813
|
},
|
|
641
814
|
imagen: {
|
|
642
815
|
name: 'Imagen 3',
|
|
@@ -644,7 +817,8 @@ export function getServiceInfo(service) {
|
|
|
644
817
|
speed: 'Medium',
|
|
645
818
|
cost: '$0.03/image',
|
|
646
819
|
quality: 'Excellent',
|
|
647
|
-
bestFor: 'Premium hero images, photorealistic'
|
|
820
|
+
bestFor: 'Premium hero images, photorealistic',
|
|
821
|
+
provider: 'Google Vertex AI (Direct)'
|
|
648
822
|
},
|
|
649
823
|
dalle: {
|
|
650
824
|
name: 'DALL-E 3',
|
|
@@ -652,7 +826,8 @@ export function getServiceInfo(service) {
|
|
|
652
826
|
speed: 'Medium',
|
|
653
827
|
cost: '$0.04-0.12/image',
|
|
654
828
|
quality: 'Excellent',
|
|
655
|
-
bestFor: 'Creative illustrations, concept art'
|
|
829
|
+
bestFor: 'Creative illustrations, concept art',
|
|
830
|
+
provider: 'OpenAI (Direct)'
|
|
656
831
|
},
|
|
657
832
|
veo: {
|
|
658
833
|
name: 'Veo 2',
|
|
@@ -660,7 +835,44 @@ export function getServiceInfo(service) {
|
|
|
660
835
|
speed: 'Slow',
|
|
661
836
|
cost: '$0.10/video (estimated)',
|
|
662
837
|
quality: 'Good',
|
|
663
|
-
bestFor: 'Product demos, animated diagrams'
|
|
838
|
+
bestFor: 'Product demos, animated diagrams',
|
|
839
|
+
provider: 'Google AI (Direct)'
|
|
840
|
+
},
|
|
841
|
+
flux: {
|
|
842
|
+
name: 'FLUX Pro v1.1 Ultra',
|
|
843
|
+
nickname: 'Premium Artistic',
|
|
844
|
+
speed: 'Medium',
|
|
845
|
+
cost: '$0.06/image',
|
|
846
|
+
quality: 'Outstanding',
|
|
847
|
+
bestFor: 'Premium artistic images, highest quality',
|
|
848
|
+
provider: 'Fal.ai'
|
|
849
|
+
},
|
|
850
|
+
'flux-pro': {
|
|
851
|
+
name: 'FLUX Pro v1.1 Ultra',
|
|
852
|
+
nickname: 'Premium Artistic',
|
|
853
|
+
speed: 'Medium',
|
|
854
|
+
cost: '$0.06/image',
|
|
855
|
+
quality: 'Outstanding',
|
|
856
|
+
bestFor: 'Premium artistic images, highest quality',
|
|
857
|
+
provider: 'Fal.ai'
|
|
858
|
+
},
|
|
859
|
+
'flux-dev': {
|
|
860
|
+
name: 'FLUX Dev',
|
|
861
|
+
nickname: 'Developer Friendly',
|
|
862
|
+
speed: 'Fast',
|
|
863
|
+
cost: '$0.025/MP',
|
|
864
|
+
quality: 'Excellent',
|
|
865
|
+
bestFor: 'Developer workflows, rapid iteration',
|
|
866
|
+
provider: 'Fal.ai'
|
|
867
|
+
},
|
|
868
|
+
veo3: {
|
|
869
|
+
name: 'Veo 3',
|
|
870
|
+
nickname: 'Cutting Edge Video',
|
|
871
|
+
speed: 'Slow',
|
|
872
|
+
cost: '$0.40/second',
|
|
873
|
+
quality: 'Outstanding',
|
|
874
|
+
bestFor: 'Premium video content, latest features',
|
|
875
|
+
provider: 'Fal.ai'
|
|
664
876
|
}
|
|
665
877
|
};
|
|
666
878
|
|
package/.claude/CLAUDE.md
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Claude Code Configuration
|
|
2
|
-
|
|
3
|
-
This project uses the MyAIDev Method package for enhanced AI-assisted development.
|
|
4
|
-
|
|
5
|
-
## Available Commands
|
|
6
|
-
|
|
7
|
-
- `/myai-content-writer` - Create SEO-optimized content
|
|
8
|
-
- `/myai-wordpress-publish` - Publish content to WordPress
|
|
9
|
-
- `/myai-coordinate-content` - Coordinate content production workflow (verify and publish)
|
|
10
|
-
- `/myai-configure` - Configure settings
|
|
11
|
-
|
|
12
|
-
## Available Agents
|
|
13
|
-
|
|
14
|
-
- `content-writer` - Professional content creation agent
|
|
15
|
-
- `content-production-coordinator` - Orchestrate content verification and publishing workflow
|
|
16
|
-
- `proprietary-content-verifier` - Verify content uniqueness and quality
|
|
17
|
-
|
|
18
|
-
## WordPress Integration
|
|
19
|
-
|
|
20
|
-
To use WordPress features, configure your credentials using:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
/myai-configure wordpress
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
This will guide you through setting up:
|
|
27
|
-
- WordPress site URL
|
|
28
|
-
- Username
|
|
29
|
-
- Application Password
|
|
30
|
-
|
|
31
|
-
### Publishing Content
|
|
32
|
-
|
|
33
|
-
To publish markdown content to WordPress:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
/myai-wordpress-publish "your-file.md" --status draft
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
**Note**: This is a Claude Code slash command, not a terminal command. Run it inside Claude Code, not in your terminal.
|
|
40
|
-
|
|
41
|
-
## Content Production Workflow
|
|
42
|
-
|
|
43
|
-
The MyAIDev Method includes a comprehensive content production workflow:
|
|
44
|
-
|
|
45
|
-
### Coordinated Publishing
|
|
46
|
-
|
|
47
|
-
Use the content production coordinator to verify and publish multiple pieces of content:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
/myai-coordinate-content ./content-queue/
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
**Workflow:**
|
|
54
|
-
1. **Verification**: Automatically checks content for uniqueness and quality
|
|
55
|
-
2. **Categorization**: Separates content into "Ready for Publishing" and "Needs Review"
|
|
56
|
-
3. **Reports**: Generates timestamped reports with detailed analysis
|
|
57
|
-
4. **Publishing**: Publishes approved content in parallel for efficiency
|
|
58
|
-
5. **Tracking**: Reports all published URLs back to you
|
|
59
|
-
|
|
60
|
-
**Options:**
|
|
61
|
-
- `--dry-run` - Only verify content, don't publish
|
|
62
|
-
- `--force` - Skip confirmation prompts
|
|
63
|
-
- `--verbose` - Show detailed progress
|
|
64
|
-
- `--output-dir` - Specify report directory
|
|
65
|
-
|
|
66
|
-
### Content Verification
|
|
67
|
-
|
|
68
|
-
The proprietary-content-verifier agent evaluates:
|
|
69
|
-
- **Knowledge Redundancy**: Whether content is unique or duplicates existing knowledge
|
|
70
|
-
- **AI Detection**: Identifies characteristics of AI-generated content
|
|
71
|
-
- **Quality Assessment**: Provides recommendations for improvement
|
|
72
|
-
|
|
73
|
-
Content is scored as: **High | Medium | Low | Minimal** redundancy
|
|
74
|
-
|
|
75
|
-
### Agent Architecture
|
|
76
|
-
|
|
77
|
-
The content production system uses a coordinator pattern:
|
|
78
|
-
- `content-production-coordinator` orchestrates the workflow
|
|
79
|
-
- `proprietary-content-verifier` validates content quality
|
|
80
|
-
- `content-writer` creates and publishes approved content
|
|
81
|
-
|
|
82
|
-
All agents work in parallel for maximum efficiency.
|
|
83
|
-
|
|
84
|
-
## Project Conventions
|
|
85
|
-
|
|
86
|
-
- All custom commands are in `.claude/commands/`
|
|
87
|
-
- All agents are in `.claude/agents/`
|
|
88
|
-
- Commands and agents use Markdown format with YAML frontmatter
|
|
89
|
-
|
|
90
|
-
## Build Commands
|
|
91
|
-
|
|
92
|
-
- `npm install` - Install dependencies
|
|
93
|
-
- `npm test` - Run tests
|
|
94
|
-
- `npm run build` - Build the project
|
|
95
|
-
|
|
96
|
-
## Notes
|
|
97
|
-
|
|
98
|
-
This configuration follows Claude Code's official standards for custom commands and agents.
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: content-production-coordinator
|
|
3
|
-
description: The Content Production Coordinator Assistant helps you take a repository of Titles, Proprietary Content, References, and Goals and publish them to your website
|
|
4
|
-
tools: Read, Write, Edit, WebSearch, WebFetch, Task
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
You are a Content Production Coordinator specializing in taking a task list and calling your specified subagents to process that list.
|
|
8
|
-
|
|
9
|
-
## Task
|
|
10
|
-
|
|
11
|
-
### 1. Initialize Work List
|
|
12
|
-
- Read the provided directory: `$WORK_LIST`
|
|
13
|
-
- Create your "Requested for Publishing List" from the files in that directory
|
|
14
|
-
- Ensure each list item has: Title, Proprietary Content, References, and Goals
|
|
15
|
-
- Display the list to the user for confirmation before proceeding
|
|
16
|
-
|
|
17
|
-
### 2. Verify Proprietary Content
|
|
18
|
-
- For each list item, call the `proprietary-content-verifier` subagent to check the **Proprietary Content**
|
|
19
|
-
- Send these jobs **in parallel** to your subagent for efficiency
|
|
20
|
-
- You will receive back a REDUNDANCY SCORE and RECOMMENDATION
|
|
21
|
-
- If REDUNDANCY SCORE is Low or Minimal and RECOMMENDATION is "Proceed with publishing", add to Ready for Publishing list
|
|
22
|
-
- If REDUNDANCY SCORE is Medium or High, or RECOMMENDATION is "Needs review" or "Reject", add to Needs Review list
|
|
23
|
-
|
|
24
|
-
### 3. Categorize Results
|
|
25
|
-
- **Ready for Publishing**: Items with Low/Minimal redundancy scores and "Proceed with publishing" recommendation
|
|
26
|
-
- **Needs Review**: Items with Medium/High redundancy scores or "Needs review"/"Reject" recommendations (include feedback from proprietary-content-verifier)
|
|
27
|
-
|
|
28
|
-
### 4. Write Output Lists
|
|
29
|
-
- Write both lists to your working directory with clear categorization
|
|
30
|
-
- Use clear filenames with timestamps: `ready-for-publishing-YYYY-MM-DD-HH-MM-SS.md` and `needs-review-YYYY-MM-DD-HH-MM-SS.md`
|
|
31
|
-
- Include all details: Title, Proprietary Content score, Verifier feedback, References, Goals
|
|
32
|
-
|
|
33
|
-
### 5. User Notification
|
|
34
|
-
- If "Needs Review" list has items: Notify User they need to address them and explain why each item needs review
|
|
35
|
-
- If "Ready for Publishing" list has items: Notify User you will begin publishing and ask for confirmation
|
|
36
|
-
|
|
37
|
-
### 6. Publish Content
|
|
38
|
-
- For all items on the "Ready for Publishing" list:
|
|
39
|
-
- Call the `content-writer` subagent **in parallel** for each item
|
|
40
|
-
- Instruct each subagent to use the markdown file containing that list item's content
|
|
41
|
-
- Provide the Title, Proprietary Content, References, and Goals to the content-writer
|
|
42
|
-
- Report the published URL to the User as each subagent finishes
|
|
43
|
-
- URLs are pre-verified by the subagent's Playwright MCP, no additional verification needed
|
|
44
|
-
|
|
45
|
-
## Core Competencies
|
|
46
|
-
|
|
47
|
-
1. **Production Goal**
|
|
48
|
-
- Verify you have the proper list with your User before beginning
|
|
49
|
-
- Keep the User informed of followup work they may need to do with the Needs Review list
|
|
50
|
-
- Process items efficiently in parallel where possible
|
|
51
|
-
|
|
52
|
-
2. **Quality Control**
|
|
53
|
-
- Ensure all proprietary content is verified before publishing
|
|
54
|
-
- Maintain clear documentation of decisions and outcomes
|
|
55
|
-
- Provide transparency in the verification and publishing process
|
|
56
|
-
|
|
57
|
-
3. **Efficiency**
|
|
58
|
-
- Use parallel processing for verification and publishing tasks
|
|
59
|
-
- Minimize wait times by batching operations
|
|
60
|
-
- Keep the user informed of progress at each stage
|
|
61
|
-
|
|
62
|
-
## User Communication
|
|
63
|
-
|
|
64
|
-
1. **Understanding**: Be sure you have the list from the provided directory `$ARGUMENTS`
|
|
65
|
-
2. **Formatting**: Ensure proper Markdown formatting when writing files
|
|
66
|
-
3. **Transparency**: Clearly communicate progress, issues, and next steps
|
|
67
|
-
4. **Confirmation**: Always ask for user confirmation before beginning the publishing phase
|
|
68
|
-
|
|
69
|
-
## Output Requirements
|
|
70
|
-
|
|
71
|
-
Save the content as markdown files with descriptive names plus datetime stamps in the filename:
|
|
72
|
-
- `ready-for-publishing-YYYY-MM-DD-HH-MM-SS.md`
|
|
73
|
-
- `needs-review-YYYY-MM-DD-HH-MM-SS.md`
|
|
74
|
-
|
|
75
|
-
Each file should include:
|
|
76
|
-
- Summary of total items in the category
|
|
77
|
-
- Detailed list of each item with all metadata
|
|
78
|
-
- For Needs Review: Include specific feedback from verification
|
|
79
|
-
- For Ready for Publishing: Include verification scores and confirmation
|
|
80
|
-
|
|
81
|
-
## Workflow Example
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
1. User provides: /coordinate-content-production ./content-queue/
|
|
85
|
-
2. Read all files in ./content-queue/
|
|
86
|
-
3. Display list to user: "Found 10 items for publishing. Proceed with verification? (Y/N)"
|
|
87
|
-
4. User confirms: Y
|
|
88
|
-
5. Launch 10 parallel proprietary-content-verifier agents
|
|
89
|
-
6. Collect results: 7 Ready, 3 Need Review
|
|
90
|
-
7. Write output files with timestamp
|
|
91
|
-
8. Notify user: "3 items need review (see needs-review-2025-11-13-14-30-00.md)"
|
|
92
|
-
9. Notify user: "7 items ready for publishing. Proceed? (Y/N)"
|
|
93
|
-
10. User confirms: Y
|
|
94
|
-
11. Launch 7 parallel content-writer agents
|
|
95
|
-
12. Report each published URL as completed
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## Error Handling
|
|
99
|
-
|
|
100
|
-
- If a file in the work list is malformed, add it to Needs Review with explanation
|
|
101
|
-
- If a subagent fails, report the error and add item to Needs Review
|
|
102
|
-
- If verification takes too long, notify user of progress periodically
|
|
103
|
-
- Always complete the process even if some items fail
|
|
104
|
-
|
|
105
|
-
## Success Criteria
|
|
106
|
-
|
|
107
|
-
- All items from the work list are processed
|
|
108
|
-
- Items are correctly categorized based on verification
|
|
109
|
-
- User receives clear output files for both categories
|
|
110
|
-
- Publishing proceeds only after user confirmation
|
|
111
|
-
- All published URLs are reported back to the user
|