myaidev-method 0.2.15 → 0.2.17
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 +65 -0
- package/README.md +56 -4
- package/USER_GUIDE.md +57 -2
- package/content-rules.example.md +239 -0
- package/package.json +4 -3
- package/src/lib/visual-generation-utils.js +253 -8
- package/src/templates/claude/agents/content-writer.md +49 -0
- 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
|
@@ -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
|
/**
|
|
@@ -74,9 +80,11 @@ const PRICING = {
|
|
|
74
80
|
export function validateAPIKeys() {
|
|
75
81
|
const googleKey = process.env.GOOGLE_API_KEY;
|
|
76
82
|
const openaiKey = process.env.OPENAI_API_KEY;
|
|
83
|
+
const falKey = process.env.FAL_KEY;
|
|
77
84
|
|
|
78
85
|
const hasGoogle = !!(googleKey && googleKey.length > 20);
|
|
79
86
|
const hasOpenAI = !!(openaiKey && openaiKey.length > 20);
|
|
87
|
+
const hasFal = !!(falKey && falKey.length > 20);
|
|
80
88
|
|
|
81
89
|
const availableServices = [];
|
|
82
90
|
if (hasGoogle) {
|
|
@@ -85,11 +93,15 @@ export function validateAPIKeys() {
|
|
|
85
93
|
if (hasOpenAI) {
|
|
86
94
|
availableServices.push('dalle');
|
|
87
95
|
}
|
|
96
|
+
if (hasFal) {
|
|
97
|
+
availableServices.push('flux', 'flux-pro', 'flux-dev', 'veo3');
|
|
98
|
+
}
|
|
88
99
|
|
|
89
100
|
return {
|
|
90
101
|
hasGoogle,
|
|
91
102
|
hasOpenAI,
|
|
92
|
-
|
|
103
|
+
hasFal,
|
|
104
|
+
hasAny: hasGoogle || hasOpenAI || hasFal,
|
|
93
105
|
availableServices
|
|
94
106
|
};
|
|
95
107
|
}
|
|
@@ -127,6 +139,17 @@ export function estimateCost(service, options = {}) {
|
|
|
127
139
|
case 'veo':
|
|
128
140
|
return PRICING.veo;
|
|
129
141
|
|
|
142
|
+
case 'flux':
|
|
143
|
+
case 'flux-pro':
|
|
144
|
+
return PRICING.flux_pro;
|
|
145
|
+
|
|
146
|
+
case 'flux-dev':
|
|
147
|
+
return PRICING.flux_dev;
|
|
148
|
+
|
|
149
|
+
case 'veo3':
|
|
150
|
+
case 'veo3-fast':
|
|
151
|
+
return PRICING.veo3; // per second, will multiply by duration
|
|
152
|
+
|
|
130
153
|
default:
|
|
131
154
|
return 0;
|
|
132
155
|
}
|
|
@@ -514,6 +537,182 @@ export async function generateVideoVeo(prompt, options = {}) {
|
|
|
514
537
|
throw lastError;
|
|
515
538
|
}
|
|
516
539
|
|
|
540
|
+
/**
|
|
541
|
+
* Generate image using Fal.ai
|
|
542
|
+
* Access to FLUX and other premium models
|
|
543
|
+
*
|
|
544
|
+
* @param {string} prompt - Image description
|
|
545
|
+
* @param {Object} options - Generation options
|
|
546
|
+
* @param {string} options.model - Fal.ai model (flux-pro, flux-dev, nano-banana, imagen-3-fast)
|
|
547
|
+
* @param {string} options.size - Image size
|
|
548
|
+
* @param {number} options.maxRetries - Maximum retry attempts
|
|
549
|
+
* @returns {Promise<Object>} Generated image data
|
|
550
|
+
*/
|
|
551
|
+
export async function generateImageFal(prompt, options = {}) {
|
|
552
|
+
const {
|
|
553
|
+
model = 'flux-pro',
|
|
554
|
+
size = '1024x1024',
|
|
555
|
+
maxRetries = 3
|
|
556
|
+
} = options;
|
|
557
|
+
|
|
558
|
+
const apiKey = process.env.FAL_KEY;
|
|
559
|
+
if (!apiKey) {
|
|
560
|
+
throw new Error('FAL_KEY not configured. Get your key from https://fal.ai/dashboard/keys');
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
// Import fal.ai client
|
|
564
|
+
const { fal } = await import('@fal-ai/client');
|
|
565
|
+
|
|
566
|
+
// Configure credentials
|
|
567
|
+
fal.config({ credentials: apiKey });
|
|
568
|
+
|
|
569
|
+
// Map model names to fal.ai endpoints
|
|
570
|
+
const modelMap = {
|
|
571
|
+
'flux-pro': 'fal-ai/flux-pro/v1.1-ultra',
|
|
572
|
+
'flux-dev': 'fal-ai/flux/dev',
|
|
573
|
+
'nano-banana': 'fal-ai/nano-banana',
|
|
574
|
+
'imagen-3-fast': 'fal-ai/fast-imagen'
|
|
575
|
+
};
|
|
576
|
+
|
|
577
|
+
const endpoint = modelMap[model] || modelMap['flux-pro'];
|
|
578
|
+
|
|
579
|
+
let lastError;
|
|
580
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
581
|
+
try {
|
|
582
|
+
const result = await fal.subscribe(endpoint, {
|
|
583
|
+
input: {
|
|
584
|
+
prompt: prompt,
|
|
585
|
+
image_size: size === '1024x1024' ? 'square' : 'landscape',
|
|
586
|
+
num_images: 1
|
|
587
|
+
},
|
|
588
|
+
logs: false
|
|
589
|
+
});
|
|
590
|
+
|
|
591
|
+
// Fal.ai can return images in different formats
|
|
592
|
+
let imageUrl;
|
|
593
|
+
let contentType = 'image/png';
|
|
594
|
+
|
|
595
|
+
if (result.data && result.data.images && result.data.images[0]) {
|
|
596
|
+
imageUrl = result.data.images[0].url;
|
|
597
|
+
contentType = result.data.images[0].content_type || 'image/png';
|
|
598
|
+
} else if (result.images && result.images[0]) {
|
|
599
|
+
imageUrl = result.images[0].url;
|
|
600
|
+
contentType = result.images[0].content_type || 'image/png';
|
|
601
|
+
} else if (result.image && result.image.url) {
|
|
602
|
+
imageUrl = result.image.url;
|
|
603
|
+
} else if (result.data && result.data[0] && result.data[0].url) {
|
|
604
|
+
imageUrl = result.data[0].url;
|
|
605
|
+
} else if (typeof result === 'string') {
|
|
606
|
+
imageUrl = result;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
if (imageUrl) {
|
|
610
|
+
// Fal.ai returns URL, need to fetch and convert to base64
|
|
611
|
+
const imageResponse = await fetch(imageUrl);
|
|
612
|
+
const imageBuffer = await imageResponse.arrayBuffer();
|
|
613
|
+
const base64Data = Buffer.from(imageBuffer).toString('base64');
|
|
614
|
+
|
|
615
|
+
return {
|
|
616
|
+
data: base64Data,
|
|
617
|
+
mimeType: contentType,
|
|
618
|
+
service: 'fal',
|
|
619
|
+
model: model,
|
|
620
|
+
cost: PRICING[`${model.replace('-', '_')}`] || PRICING.flux_pro
|
|
621
|
+
};
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
throw new Error('No image data in Fal.ai response');
|
|
625
|
+
|
|
626
|
+
} catch (error) {
|
|
627
|
+
lastError = error;
|
|
628
|
+
|
|
629
|
+
if (attempt < maxRetries) {
|
|
630
|
+
const backoff = Math.pow(2, attempt) * 1000;
|
|
631
|
+
console.log(`⚠️ Fal.ai attempt ${attempt} failed. Retrying in ${backoff/1000}s...`);
|
|
632
|
+
await sleep(backoff);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
throw lastError;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Generate video using Fal.ai (Veo 3)
|
|
642
|
+
* Latest video generation models
|
|
643
|
+
*
|
|
644
|
+
* @param {string} prompt - Video description
|
|
645
|
+
* @param {Object} options - Generation options
|
|
646
|
+
* @param {string} options.model - Model (veo3, veo3-fast)
|
|
647
|
+
* @param {number} options.duration - Video duration in seconds
|
|
648
|
+
* @param {string} options.aspectRatio - Aspect ratio
|
|
649
|
+
* @param {number} options.maxRetries - Maximum retry attempts
|
|
650
|
+
* @returns {Promise<Object>} Generated video data
|
|
651
|
+
*/
|
|
652
|
+
export async function generateVideoFal(prompt, options = {}) {
|
|
653
|
+
const {
|
|
654
|
+
model = 'veo3',
|
|
655
|
+
duration = 5,
|
|
656
|
+
aspectRatio = '16:9',
|
|
657
|
+
maxRetries = 3
|
|
658
|
+
} = options;
|
|
659
|
+
|
|
660
|
+
const apiKey = process.env.FAL_KEY;
|
|
661
|
+
if (!apiKey) {
|
|
662
|
+
throw new Error('FAL_KEY not configured. Get your key from https://fal.ai/dashboard/keys');
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// Import fal.ai client
|
|
666
|
+
const { fal } = await import('@fal-ai/client');
|
|
667
|
+
|
|
668
|
+
// Configure credentials
|
|
669
|
+
fal.config({ credentials: apiKey });
|
|
670
|
+
|
|
671
|
+
const endpoint = model === 'veo3-fast' ? 'fal-ai/veo3-fast' : 'fal-ai/veo3';
|
|
672
|
+
|
|
673
|
+
let lastError;
|
|
674
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
675
|
+
try {
|
|
676
|
+
const result = await fal.subscribe(endpoint, {
|
|
677
|
+
input: {
|
|
678
|
+
prompt: prompt,
|
|
679
|
+
duration: Math.min(duration, 10),
|
|
680
|
+
aspect_ratio: aspectRatio
|
|
681
|
+
},
|
|
682
|
+
logs: false
|
|
683
|
+
});
|
|
684
|
+
|
|
685
|
+
if (result.video && result.video.url) {
|
|
686
|
+
// Fal.ai returns video URL
|
|
687
|
+
const videoResponse = await fetch(result.video.url);
|
|
688
|
+
const videoBuffer = await videoResponse.arrayBuffer();
|
|
689
|
+
const base64Data = Buffer.from(videoBuffer).toString('base64');
|
|
690
|
+
|
|
691
|
+
return {
|
|
692
|
+
data: base64Data,
|
|
693
|
+
mimeType: 'video/mp4',
|
|
694
|
+
service: 'fal',
|
|
695
|
+
model: model,
|
|
696
|
+
cost: PRICING.veo3 * duration
|
|
697
|
+
};
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
throw new Error('No video data in Fal.ai response');
|
|
701
|
+
|
|
702
|
+
} catch (error) {
|
|
703
|
+
lastError = error;
|
|
704
|
+
|
|
705
|
+
if (attempt < maxRetries) {
|
|
706
|
+
const backoff = Math.pow(2, attempt) * 1000;
|
|
707
|
+
console.log(`⚠️ Fal.ai video attempt ${attempt} failed. Retrying in ${backoff/1000}s...`);
|
|
708
|
+
await sleep(backoff);
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
throw lastError;
|
|
714
|
+
}
|
|
715
|
+
|
|
517
716
|
/**
|
|
518
717
|
* Download image from URL and return buffer
|
|
519
718
|
*
|
|
@@ -568,6 +767,12 @@ export async function generateImage(prompt, options = {}) {
|
|
|
568
767
|
result = await generateImageDALLE(enhancedPrompt, serviceOptions);
|
|
569
768
|
break;
|
|
570
769
|
|
|
770
|
+
case 'flux':
|
|
771
|
+
case 'flux-pro':
|
|
772
|
+
case 'flux-dev':
|
|
773
|
+
result = await generateImageFal(enhancedPrompt, { ...serviceOptions, model: service });
|
|
774
|
+
break;
|
|
775
|
+
|
|
571
776
|
default:
|
|
572
777
|
throw new Error(`Unknown service: ${service}`);
|
|
573
778
|
}
|
|
@@ -636,7 +841,8 @@ export function getServiceInfo(service) {
|
|
|
636
841
|
speed: 'Fast',
|
|
637
842
|
cost: '$0.02/image',
|
|
638
843
|
quality: 'Good',
|
|
639
|
-
bestFor: 'Quick hero images, high volume'
|
|
844
|
+
bestFor: 'Quick hero images, high volume',
|
|
845
|
+
provider: 'Google AI (Direct)'
|
|
640
846
|
},
|
|
641
847
|
imagen: {
|
|
642
848
|
name: 'Imagen 3',
|
|
@@ -644,7 +850,8 @@ export function getServiceInfo(service) {
|
|
|
644
850
|
speed: 'Medium',
|
|
645
851
|
cost: '$0.03/image',
|
|
646
852
|
quality: 'Excellent',
|
|
647
|
-
bestFor: 'Premium hero images, photorealistic'
|
|
853
|
+
bestFor: 'Premium hero images, photorealistic',
|
|
854
|
+
provider: 'Google Vertex AI (Direct)'
|
|
648
855
|
},
|
|
649
856
|
dalle: {
|
|
650
857
|
name: 'DALL-E 3',
|
|
@@ -652,7 +859,8 @@ export function getServiceInfo(service) {
|
|
|
652
859
|
speed: 'Medium',
|
|
653
860
|
cost: '$0.04-0.12/image',
|
|
654
861
|
quality: 'Excellent',
|
|
655
|
-
bestFor: 'Creative illustrations, concept art'
|
|
862
|
+
bestFor: 'Creative illustrations, concept art',
|
|
863
|
+
provider: 'OpenAI (Direct)'
|
|
656
864
|
},
|
|
657
865
|
veo: {
|
|
658
866
|
name: 'Veo 2',
|
|
@@ -660,7 +868,44 @@ export function getServiceInfo(service) {
|
|
|
660
868
|
speed: 'Slow',
|
|
661
869
|
cost: '$0.10/video (estimated)',
|
|
662
870
|
quality: 'Good',
|
|
663
|
-
bestFor: 'Product demos, animated diagrams'
|
|
871
|
+
bestFor: 'Product demos, animated diagrams',
|
|
872
|
+
provider: 'Google AI (Direct)'
|
|
873
|
+
},
|
|
874
|
+
flux: {
|
|
875
|
+
name: 'FLUX Pro v1.1 Ultra',
|
|
876
|
+
nickname: 'Premium Artistic',
|
|
877
|
+
speed: 'Medium',
|
|
878
|
+
cost: '$0.06/image',
|
|
879
|
+
quality: 'Outstanding',
|
|
880
|
+
bestFor: 'Premium artistic images, highest quality',
|
|
881
|
+
provider: 'Fal.ai'
|
|
882
|
+
},
|
|
883
|
+
'flux-pro': {
|
|
884
|
+
name: 'FLUX Pro v1.1 Ultra',
|
|
885
|
+
nickname: 'Premium Artistic',
|
|
886
|
+
speed: 'Medium',
|
|
887
|
+
cost: '$0.06/image',
|
|
888
|
+
quality: 'Outstanding',
|
|
889
|
+
bestFor: 'Premium artistic images, highest quality',
|
|
890
|
+
provider: 'Fal.ai'
|
|
891
|
+
},
|
|
892
|
+
'flux-dev': {
|
|
893
|
+
name: 'FLUX Dev',
|
|
894
|
+
nickname: 'Developer Friendly',
|
|
895
|
+
speed: 'Fast',
|
|
896
|
+
cost: '$0.025/MP',
|
|
897
|
+
quality: 'Excellent',
|
|
898
|
+
bestFor: 'Developer workflows, rapid iteration',
|
|
899
|
+
provider: 'Fal.ai'
|
|
900
|
+
},
|
|
901
|
+
veo3: {
|
|
902
|
+
name: 'Veo 3',
|
|
903
|
+
nickname: 'Cutting Edge Video',
|
|
904
|
+
speed: 'Slow',
|
|
905
|
+
cost: '$0.40/second',
|
|
906
|
+
quality: 'Outstanding',
|
|
907
|
+
bestFor: 'Premium video content, latest features',
|
|
908
|
+
provider: 'Fal.ai'
|
|
664
909
|
}
|
|
665
910
|
};
|
|
666
911
|
|
|
@@ -65,13 +65,62 @@ if (hasAnyAPIKeys()) {
|
|
|
65
65
|
- Understanding the target audience
|
|
66
66
|
- Competitive content analysis
|
|
67
67
|
|
|
68
|
+
## Custom Content Rules
|
|
69
|
+
|
|
70
|
+
The content-writer agent supports custom content generation rules via a `content-rules.md` file in your project root. If this file exists, the agent will incorporate your custom guidelines into the content generation process.
|
|
71
|
+
|
|
72
|
+
**To use custom rules:**
|
|
73
|
+
|
|
74
|
+
1. Create a `content-rules.md` file in your project directory
|
|
75
|
+
2. Define your content preferences, style guidelines, brand voice, or formatting requirements
|
|
76
|
+
3. The agent will automatically detect and apply these rules
|
|
77
|
+
|
|
78
|
+
**Example content-rules.md:**
|
|
79
|
+
```markdown
|
|
80
|
+
# Content Generation Rules
|
|
81
|
+
|
|
82
|
+
## Brand Voice
|
|
83
|
+
- Use conversational, friendly tone
|
|
84
|
+
- Avoid jargon unless explaining technical concepts
|
|
85
|
+
- Include real-world examples
|
|
86
|
+
|
|
87
|
+
## Formatting Preferences
|
|
88
|
+
- Keep paragraphs under 3 sentences
|
|
89
|
+
- Use numbered lists for sequential steps
|
|
90
|
+
- Use bullet points for non-sequential items
|
|
91
|
+
|
|
92
|
+
## SEO Guidelines
|
|
93
|
+
- Target keyword density: 1-2%
|
|
94
|
+
- Include FAQ section for articles over 1000 words
|
|
95
|
+
- Add "Related Resources" section at the end
|
|
96
|
+
|
|
97
|
+
## Topics to Avoid
|
|
98
|
+
- Political opinions
|
|
99
|
+
- Medical advice
|
|
100
|
+
- Financial recommendations
|
|
101
|
+
|
|
102
|
+
## Required Elements
|
|
103
|
+
- Author bio at the end
|
|
104
|
+
- Call-to-action in conclusion
|
|
105
|
+
- Social sharing snippet
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Note:** If `content-rules.md` doesn't exist, the agent will use its default professional content creation guidelines.
|
|
109
|
+
|
|
68
110
|
## Writing Process
|
|
69
111
|
|
|
112
|
+
### Phase 0: Load Custom Rules (if available)
|
|
113
|
+
- Check for `content-rules.md` in project root
|
|
114
|
+
- If found, read and incorporate custom guidelines
|
|
115
|
+
- Merge custom rules with default best practices
|
|
116
|
+
- Continue with standard process if file doesn't exist
|
|
117
|
+
|
|
70
118
|
### Phase 1: Understanding
|
|
71
119
|
- Identify the content purpose and goals
|
|
72
120
|
- Define the target audience
|
|
73
121
|
- Determine the desired tone and style
|
|
74
122
|
- Clarify key messages and takeaways
|
|
123
|
+
- **Apply custom content rules if available**
|
|
75
124
|
|
|
76
125
|
### Phase 2: Research
|
|
77
126
|
- Conduct thorough topic research using WebSearch
|
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
|