myaidev-method 0.3.4 → 0.3.6

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.
Files changed (94) hide show
  1. package/.claude-plugin/plugin.json +0 -1
  2. package/.env.example +5 -4
  3. package/CHANGELOG.md +2 -2
  4. package/CONTENT_CREATION_GUIDE.md +489 -3211
  5. package/DEVELOPER_USE_CASES.md +1 -1
  6. package/MODULAR_INSTALLATION.md +2 -2
  7. package/README.md +39 -33
  8. package/TECHNICAL_ARCHITECTURE.md +1 -1
  9. package/USER_GUIDE.md +242 -190
  10. package/agents/content-editor-agent.md +90 -0
  11. package/agents/content-planner-agent.md +97 -0
  12. package/agents/content-research-agent.md +62 -0
  13. package/agents/content-seo-agent.md +101 -0
  14. package/agents/content-writer-agent.md +69 -0
  15. package/agents/infographic-analyzer-agent.md +63 -0
  16. package/agents/infographic-designer-agent.md +72 -0
  17. package/bin/cli.js +846 -427
  18. package/{content-rules.example.md → content-rules-example.md} +2 -2
  19. package/dist/mcp/health-check.js +82 -68
  20. package/dist/mcp/mcp-config.json +8 -0
  21. package/dist/mcp/openstack-server.js +1746 -1262
  22. package/dist/server/.tsbuildinfo +1 -1
  23. package/extension.json +21 -4
  24. package/package.json +181 -184
  25. package/skills/company-config/SKILL.md +133 -0
  26. package/skills/configure/SKILL.md +1 -1
  27. package/skills/myai-configurator/SKILL.md +77 -0
  28. package/skills/myai-configurator/content-creation-configurator/SKILL.md +516 -0
  29. package/skills/myai-configurator/content-maintenance-configurator/SKILL.md +397 -0
  30. package/skills/myai-content-enrichment/SKILL.md +114 -0
  31. package/skills/myai-content-ideation/SKILL.md +288 -0
  32. package/skills/myai-content-ideation/evals/evals.json +182 -0
  33. package/skills/myai-content-production-coordinator/SKILL.md +946 -0
  34. package/skills/{content-rules-setup → myai-content-rules-setup}/SKILL.md +1 -1
  35. package/skills/{content-verifier → myai-content-verifier}/SKILL.md +1 -1
  36. package/skills/myai-content-writer/SKILL.md +333 -0
  37. package/skills/{infographic → myai-infographic}/SKILL.md +1 -1
  38. package/skills/myai-proprietary-content-verifier/SKILL.md +175 -0
  39. package/skills/myai-proprietary-content-verifier/evals/evals.json +36 -0
  40. package/skills/myai-skill-builder/SKILL.md +699 -0
  41. package/skills/myai-skill-builder/agents/analyzer-agent.md +137 -0
  42. package/skills/myai-skill-builder/agents/comparator-agent.md +77 -0
  43. package/skills/myai-skill-builder/agents/grader-agent.md +103 -0
  44. package/skills/myai-skill-builder/assets/eval_review.html +131 -0
  45. package/skills/myai-skill-builder/references/schemas.md +211 -0
  46. package/skills/myai-skill-builder/scripts/aggregate_benchmark.py +190 -0
  47. package/skills/myai-skill-builder/scripts/generate_review.py +381 -0
  48. package/skills/myai-skill-builder/scripts/package_skill.py +91 -0
  49. package/skills/myai-skill-builder/scripts/run_eval.py +105 -0
  50. package/skills/myai-skill-builder/scripts/run_loop.py +211 -0
  51. package/skills/myai-skill-builder/scripts/utils.py +123 -0
  52. package/skills/myai-visual-generator/SKILL.md +125 -0
  53. package/skills/myai-visual-generator/evals/evals.json +155 -0
  54. package/skills/myai-visual-generator/references/infographic-pipeline.md +73 -0
  55. package/skills/myai-visual-generator/references/research-visuals.md +57 -0
  56. package/skills/myai-visual-generator/references/services.md +89 -0
  57. package/skills/myai-visual-generator/scripts/visual-generation-utils.js +1272 -0
  58. package/skills/myaidev-figma/SKILL.md +212 -0
  59. package/skills/myaidev-figma/capture.js +133 -0
  60. package/skills/myaidev-figma/crawl.js +130 -0
  61. package/skills/myaidev-figma-configure/SKILL.md +130 -0
  62. package/skills/openstack-manager/SKILL.md +1 -1
  63. package/skills/payloadcms-publisher/SKILL.md +141 -77
  64. package/skills/payloadcms-publisher/references/field-mapping.md +142 -0
  65. package/skills/payloadcms-publisher/references/lexical-format.md +97 -0
  66. package/skills/security-auditor/SKILL.md +1 -1
  67. package/src/cli/commands/addon.js +105 -7
  68. package/src/config/workflows.js +172 -228
  69. package/src/lib/ascii-banner.js +197 -182
  70. package/src/lib/{content-coordinator.js → content-production-coordinator.js} +649 -459
  71. package/src/lib/installation-detector.js +93 -59
  72. package/src/lib/payloadcms-utils.js +285 -510
  73. package/src/lib/workflow-installer.js +55 -0
  74. package/src/mcp/health-check.js +82 -68
  75. package/src/mcp/openstack-server.js +1746 -1262
  76. package/src/scripts/configure-visual-apis.js +224 -173
  77. package/src/scripts/configure-wordpress-mcp.js +96 -66
  78. package/src/scripts/init/install.js +109 -85
  79. package/src/scripts/init-project.js +138 -67
  80. package/src/scripts/utils/write-content.js +67 -52
  81. package/src/scripts/wordpress/publish-to-wordpress.js +128 -128
  82. package/src/templates/claude/CLAUDE.md +19 -12
  83. package/hooks/hooks.json +0 -26
  84. package/skills/content-coordinator/SKILL.md +0 -130
  85. package/skills/content-enrichment/SKILL.md +0 -80
  86. package/skills/content-writer/SKILL.md +0 -285
  87. package/skills/skill-builder/SKILL.md +0 -417
  88. package/skills/visual-generator/SKILL.md +0 -140
  89. /package/skills/{content-writer → myai-content-writer}/agents/editor-agent.md +0 -0
  90. /package/skills/{content-writer → myai-content-writer}/agents/planner-agent.md +0 -0
  91. /package/skills/{content-writer → myai-content-writer}/agents/research-agent.md +0 -0
  92. /package/skills/{content-writer → myai-content-writer}/agents/seo-agent.md +0 -0
  93. /package/skills/{content-writer → myai-content-writer}/agents/visual-planner-agent.md +0 -0
  94. /package/skills/{content-writer → myai-content-writer}/agents/writer-agent.md +0 -0
@@ -21,144 +21,144 @@ const args = process.argv.slice(2);
21
21
  const filePath = args[0];
22
22
  const statusIndex = args.indexOf("--status");
23
23
  const requestedStatus =
24
- statusIndex !== -1 && args[statusIndex + 1] ? args[statusIndex + 1] : "draft";
24
+ statusIndex !== -1 && args[statusIndex + 1] ? args[statusIndex + 1] : "draft";
25
25
 
26
26
  if (!filePath) {
27
- console.error("Error: File path is required");
28
- console.error(
29
- "Usage: node publish-to-wordpress.js <file-path> [--status draft|publish]",
30
- );
31
- process.exit(1);
27
+ console.error("Error: File path is required");
28
+ console.error(
29
+ "Usage: node publish-to-wordpress.js <file-path> [--status draft|publish]",
30
+ );
31
+ process.exit(1);
32
32
  }
33
33
 
34
34
  // Validate WordPress configuration
35
35
  if (
36
- !process.env.WORDPRESS_URL ||
37
- !process.env.WORDPRESS_USERNAME ||
38
- !process.env.WORDPRESS_APP_PASSWORD
36
+ !process.env.WORDPRESS_URL ||
37
+ !process.env.WORDPRESS_USERNAME ||
38
+ !process.env.WORDPRESS_APP_PASSWORD
39
39
  ) {
40
- console.error("Error: WordPress configuration is incomplete");
41
- console.error("Required environment variables:");
42
- console.error(" - WORDPRESS_URL");
43
- console.error(" - WORDPRESS_USERNAME");
44
- console.error(" - WORDPRESS_APP_PASSWORD");
45
- console.error(
46
- "\nRun /myai-configure wordpress to set up your WordPress connection",
47
- );
48
- process.exit(1);
40
+ console.error("Error: WordPress configuration is incomplete");
41
+ console.error("Required environment variables:");
42
+ console.error(" - WORDPRESS_URL");
43
+ console.error(" - WORDPRESS_USERNAME");
44
+ console.error(" - WORDPRESS_APP_PASSWORD");
45
+ console.error(
46
+ "\nRun /myai-configurator wordpress to set up your WordPress connection",
47
+ );
48
+ process.exit(1);
49
49
  }
50
50
 
51
51
  async function publishToWordPress() {
52
- try {
53
- // Read and parse markdown file
54
- const absolutePath = resolve(filePath);
55
- const fileContent = readFileSync(absolutePath, "utf-8");
56
- const { data: frontmatter, content } = matter(fileContent);
57
-
58
- console.log("📄 Processing file:", filePath);
59
- console.log("📋 Title:", frontmatter.title || "No title");
60
-
61
- // Extract interactive blocks before markdown conversion
62
- // const { markdown: cleanMarkdown, interactiveBlocks } =
63
- // GutenbergConverter.extractInteractiveBlocks(content);
64
-
65
- // if (interactiveBlocks.length > 0) {
66
- // console.log(
67
- // ` Interactive blocks: ${interactiveBlocks.length} found`,
68
- // );
69
- // }
70
-
71
- // Convert markdown to HTML using marked (preserves placeholders)
72
- const html = marked.parse(content);
73
-
74
- // Convert HTML to Gutenberg blocks
75
- let htmlContent = GutenbergConverter.htmlToGutenberg(html);
76
-
77
- // Restore interactive blocks as raw HTML blocks
78
- // if (interactiveBlocks.length > 0) {
79
- // htmlContent = GutenbergConverter.restoreInteractiveBlocks(
80
- // htmlContent,
81
- // interactiveBlocks,
82
- // );
83
- // }
84
-
85
- // Prepare WordPress configuration
86
- const config = {
87
- endpoint: {
88
- url: process.env.WORDPRESS_URL,
89
- api_version: "wp/v2",
90
- authentication: {
91
- username: process.env.WORDPRESS_USERNAME,
92
- password: process.env.WORDPRESS_APP_PASSWORD,
93
- },
94
- },
95
- defaults: {
96
- post_status: requestedStatus,
97
- format: "standard",
98
- comment_status: "open",
99
- ping_status: "open",
100
- },
101
- };
102
-
103
- // Initialize WordPress client
104
- const wp = new WordPressMCP(config);
105
-
106
- // Prepare post data
107
- const postParams = {
108
- title: frontmatter.title || "Untitled",
109
- content: htmlContent,
110
- status: requestedStatus,
111
- excerpt: frontmatter.meta_description || "",
112
- slug: frontmatter.slug || "",
113
- use_gutenberg: process.env.USE_GUTENBERG === "true",
114
- // Note: Tags and categories require ID mapping which will be added in future versions
115
- };
116
-
117
- console.log("🚀 Publishing to WordPress...");
118
- console.log(" URL:", process.env.WORDPRESS_URL);
119
- console.log(" Status:", requestedStatus);
120
- console.log(
121
- " Format:",
122
- postParams.use_gutenberg ? "Gutenberg" : "Classic",
123
- );
124
-
125
- // Create the post
126
- const result = await wp.createPost(postParams);
127
-
128
- // Success!
129
- console.log("\n✅ Successfully published to WordPress!");
130
- console.log("\n📄 Post Details:");
131
- console.log(" Post ID:", result.id);
132
- console.log(" Title:", result.title.rendered);
133
- console.log(" Status:", result.status);
134
- console.log(" Slug:", result.slug);
135
-
136
- console.log("\n🔗 URLs:");
137
- console.log(" View:", result.link);
138
- console.log(
139
- " Edit:",
140
- `${process.env.WORDPRESS_URL}/wp-admin/post.php?post=${result.id}&action=edit`,
141
- );
142
-
143
- return result;
144
- } catch (error) {
145
- console.error("\n❌ Error publishing to WordPress:");
146
- console.error(error.message);
147
-
148
- if (error.message.includes("401")) {
149
- console.error("\n🔑 Authentication failed. Please check:");
150
- console.error(" 1. Your WordPress username is correct");
151
- console.error(" 2. Your Application Password is valid");
152
- console.error(" 3. Application Passwords are enabled on your site");
153
- } else if (error.message.includes("404")) {
154
- console.error("\n🌐 WordPress site not found. Please check:");
155
- console.error(" 1. Your WORDPRESS_URL is correct");
156
- console.error(" 2. The site is accessible");
157
- console.error(" 3. The REST API is enabled");
158
- }
159
-
160
- process.exit(1);
161
- }
52
+ try {
53
+ // Read and parse markdown file
54
+ const absolutePath = resolve(filePath);
55
+ const fileContent = readFileSync(absolutePath, "utf-8");
56
+ const { data: frontmatter, content } = matter(fileContent);
57
+
58
+ console.log("📄 Processing file:", filePath);
59
+ console.log("📋 Title:", frontmatter.title || "No title");
60
+
61
+ // Extract interactive blocks before markdown conversion
62
+ // const { markdown: cleanMarkdown, interactiveBlocks } =
63
+ // GutenbergConverter.extractInteractiveBlocks(content);
64
+
65
+ // if (interactiveBlocks.length > 0) {
66
+ // console.log(
67
+ // ` Interactive blocks: ${interactiveBlocks.length} found`,
68
+ // );
69
+ // }
70
+
71
+ // Convert markdown to HTML using marked (preserves placeholders)
72
+ const html = marked.parse(content);
73
+
74
+ // Convert HTML to Gutenberg blocks
75
+ let htmlContent = GutenbergConverter.htmlToGutenberg(html);
76
+
77
+ // Restore interactive blocks as raw HTML blocks
78
+ // if (interactiveBlocks.length > 0) {
79
+ // htmlContent = GutenbergConverter.restoreInteractiveBlocks(
80
+ // htmlContent,
81
+ // interactiveBlocks,
82
+ // );
83
+ // }
84
+
85
+ // Prepare WordPress configuration
86
+ const config = {
87
+ endpoint: {
88
+ url: process.env.WORDPRESS_URL,
89
+ api_version: "wp/v2",
90
+ authentication: {
91
+ username: process.env.WORDPRESS_USERNAME,
92
+ password: process.env.WORDPRESS_APP_PASSWORD,
93
+ },
94
+ },
95
+ defaults: {
96
+ post_status: requestedStatus,
97
+ format: "standard",
98
+ comment_status: "open",
99
+ ping_status: "open",
100
+ },
101
+ };
102
+
103
+ // Initialize WordPress client
104
+ const wp = new WordPressMCP(config);
105
+
106
+ // Prepare post data
107
+ const postParams = {
108
+ title: frontmatter.title || "Untitled",
109
+ content: htmlContent,
110
+ status: requestedStatus,
111
+ excerpt: frontmatter.meta_description || "",
112
+ slug: frontmatter.slug || "",
113
+ use_gutenberg: process.env.USE_GUTENBERG === "true",
114
+ // Note: Tags and categories require ID mapping which will be added in future versions
115
+ };
116
+
117
+ console.log("🚀 Publishing to WordPress...");
118
+ console.log(" URL:", process.env.WORDPRESS_URL);
119
+ console.log(" Status:", requestedStatus);
120
+ console.log(
121
+ " Format:",
122
+ postParams.use_gutenberg ? "Gutenberg" : "Classic",
123
+ );
124
+
125
+ // Create the post
126
+ const result = await wp.createPost(postParams);
127
+
128
+ // Success!
129
+ console.log("\n✅ Successfully published to WordPress!");
130
+ console.log("\n📄 Post Details:");
131
+ console.log(" Post ID:", result.id);
132
+ console.log(" Title:", result.title.rendered);
133
+ console.log(" Status:", result.status);
134
+ console.log(" Slug:", result.slug);
135
+
136
+ console.log("\n🔗 URLs:");
137
+ console.log(" View:", result.link);
138
+ console.log(
139
+ " Edit:",
140
+ `${process.env.WORDPRESS_URL}/wp-admin/post.php?post=${result.id}&action=edit`,
141
+ );
142
+
143
+ return result;
144
+ } catch (error) {
145
+ console.error("\n❌ Error publishing to WordPress:");
146
+ console.error(error.message);
147
+
148
+ if (error.message.includes("401")) {
149
+ console.error("\n🔑 Authentication failed. Please check:");
150
+ console.error(" 1. Your WordPress username is correct");
151
+ console.error(" 2. Your Application Password is valid");
152
+ console.error(" 3. Application Passwords are enabled on your site");
153
+ } else if (error.message.includes("404")) {
154
+ console.error("\n🌐 WordPress site not found. Please check:");
155
+ console.error(" 1. Your WORDPRESS_URL is correct");
156
+ console.error(" 2. The site is accessible");
157
+ console.error(" 3. The REST API is enabled");
158
+ }
159
+
160
+ process.exit(1);
161
+ }
162
162
  }
163
163
 
164
164
  // Run the publisher
@@ -27,20 +27,16 @@ Skills are the primary delivery mechanism. Each skill is a self-contained orches
27
27
 
28
28
  ### Content Creation
29
29
  - `content-writer` - Multi-agent pipeline (research, plan, write, SEO, edit, visuals)
30
- - `content-rules-setup` - Interactive brand voice configuration
31
- - `content-verifier` - Content uniqueness and quality verification
32
- - `content-coordinator` - Batch content verification and publishing
33
- - `content-enrichment` - Enrich articles with real-time data and visuals
30
+ - `content-rules-config` - Interactive brand voice configuration
31
+ - `proprietary-content-verifier` - Content uniqueness and quality verification
32
+ - `content-production-coordinator` - Batch content verification and publishing
33
+ - `myai-content-enrichment` - Enrich articles with real-time data and visuals
34
34
 
35
35
  ### Publishing
36
- - `wordpress-publisher` - WordPress REST API publishing
37
- - `payloadcms-publisher` - PayloadCMS with Lexical format
38
- - `docusaurus-publisher` - Docusaurus with sidebar config
39
- - `mintlify-publisher` - Mintlify with navigation updates
40
- - `astro-publisher` - Astro content collections
36
+ - `content-publisher` - Platform-detecting publisher (WordPress, PayloadCMS, Astro, Docusaurus, Mintlify)
41
37
 
42
38
  ### Visual & Media
43
- - `visual-generator` - AI image/video generation (Gemini, DALL-E, FLUX, Veo)
39
+ - `myai-visual-generator` - AI image/video generation (Gemini, DALL-E, FLUX, Veo) with fal.ai MCP model discovery
44
40
 
45
41
  ### Deployment & Infrastructure
46
42
  - `deployer` - Multi-environment deployment (dev/staging/prod)
@@ -55,7 +51,7 @@ Skills are the primary delivery mechanism. Each skill is a self-contained orches
55
51
  - `security-auditor` - Compliance auditing (PCI-DSS, GDPR, SOC 2)
56
52
 
57
53
  ### Skill Development
58
- - `skill-builder` - Guided skill creation with concept discovery, iterative refinement, testing, and marketplace submission
54
+ - `myai-skill-builder` - Guided skill creation with concept discovery, iterative refinement, testing, and marketplace submission
59
55
  - `skill-contributor` - Quick skill scaffolding and marketplace submission
60
56
 
61
57
  ### Configuration
@@ -64,7 +60,7 @@ Skills are the primary delivery mechanism. Each skill is a self-contained orches
64
60
  ## Content Customization
65
61
 
66
62
  - **content-rules.md** - Brand voice and writing guidelines
67
- - Run the `content-rules-setup` skill to generate this interactively
63
+ - Run the `content-rules-config` skill to generate this interactively
68
64
 
69
65
  ## Platform Configuration
70
66
 
@@ -84,6 +80,7 @@ PAYLOADCMS_PASSWORD=your-password
84
80
  # Visual APIs
85
81
  GOOGLE_API_KEY=your-key
86
82
  OPENAI_API_KEY=your-key
83
+ FAL_KEY=your-key
87
84
 
88
85
  # Coolify
89
86
  COOLIFY_URL=https://coolify.your-server.com
@@ -100,6 +97,16 @@ node .myaidev-method/scripts/wordpress-health-check.js
100
97
  node .myaidev-method/scripts/coolify-deploy-app.js --name myapp
101
98
  ```
102
99
 
100
+ ## MCP Servers
101
+
102
+ The following MCP servers are auto-configured during init:
103
+
104
+ | Server | Purpose | Env Var Required |
105
+ |--------|---------|------------------|
106
+ | `fal-ai` | Visual generation model discovery, pricing, and generation across 600+ models | `FAL_KEY` |
107
+
108
+ MCP servers activate automatically when their required environment variable is set.
109
+
103
110
  ## Project Structure
104
111
 
105
112
  ```
package/hooks/hooks.json DELETED
@@ -1,26 +0,0 @@
1
- {
2
- "hooks": {
3
- "PostToolUse": [
4
- {
5
- "matcher": "Write|Edit",
6
- "hooks": [
7
- {
8
- "type": "prompt",
9
- "prompt": "If the file written/edited is a content markdown file (in content-output/ or content-queue/), verify it has valid frontmatter with title, description, and date fields. Report any missing required fields."
10
- }
11
- ]
12
- }
13
- ],
14
- "Stop": [
15
- {
16
- "matcher": "",
17
- "hooks": [
18
- {
19
- "type": "prompt",
20
- "prompt": "Before finishing, check if there are any unsaved content drafts in content-output/ that haven't been published. If found, remind the user about pending drafts."
21
- }
22
- ]
23
- }
24
- ]
25
- }
26
- }
@@ -1,130 +0,0 @@
1
- ---
2
- name: content-coordinator
3
- description: Orchestrates content verification and multi-platform publishing workflows with batch processing. Use when publishing multiple content files or running content production pipelines.
4
- argument-hint: "[directory] [--dry-run] [--force] [--verbose] [--platform wordpress|payloadcms]"
5
- allowed-tools: [Read, Write, Edit, WebSearch, WebFetch, Task, Bash, Glob, Grep, AskUserQuestion]
6
- disable-model-invocation: true
7
- ---
8
-
9
- # Content Production Coordinator
10
-
11
- You are the **Content Production Coordinator** — orchestrating content verification and publishing workflows. You manage batch content processing, quality verification, and multi-platform publishing.
12
-
13
- ## Arguments
14
-
15
- Parse from: `$ARGUMENTS`
16
-
17
- - `[directory]` → Path to content queue directory (default: `./content-queue/`)
18
- - `--dry-run` → Verify only, don't publish
19
- - `--force` → Skip confirmation prompts
20
- - `--verbose` → Detailed progress output
21
- - `--platform` → Target platform (default: from frontmatter)
22
- - `--output-dir` → Report directory
23
-
24
- ## Content Queue Format
25
-
26
- Each markdown file in the queue should have:
27
-
28
- ```markdown
29
- ---
30
- title: "Article Title"
31
- content_type: article
32
- target_platform: wordpress
33
- status: pending
34
- priority: normal
35
- references:
36
- - "https://source1.com"
37
- goals:
38
- - "Primary goal"
39
- ---
40
-
41
- ## Proprietary Content
42
-
43
- [Unique content to be verified]
44
-
45
- ## Supporting Content
46
-
47
- [Additional context]
48
- ```
49
-
50
- ## Workflow
51
-
52
- ### Phase 1: Discovery
53
- 1. Scan content directory for `.md` files
54
- 2. Parse frontmatter from each file
55
- 3. Filter by `status: pending`
56
- 4. Sort by priority
57
-
58
- ### Phase 2: Verification
59
- For each content file, spawn a verification subagent:
60
-
61
- ```
62
- Task(subagent_type: "general-purpose")
63
- Prompt: Verify content uniqueness and quality
64
- ```
65
-
66
- **Verification checks:**
67
- - Knowledge redundancy (is this unique or commodity info?)
68
- - Content quality (depth, originality, value-add)
69
- - AI detection characteristics
70
- - Minimum length requirements
71
-
72
- **Scoring:** High | Medium | Low | Minimal redundancy
73
-
74
- ### Phase 3: Categorization
75
- Based on verification results:
76
- - **Ready for Publishing:** Low/Minimal redundancy, passes quality
77
- - **Needs Review:** High/Medium redundancy, quality concerns
78
-
79
- ### Phase 4: Report Generation
80
- Create timestamped report:
81
- ```
82
- content-reports/report-{timestamp}.md
83
- ```
84
-
85
- Contents:
86
- - Summary statistics
87
- - Per-file verification results
88
- - Recommendations
89
- - Publishing readiness status
90
-
91
- ### Phase 5: Publishing (unless --dry-run)
92
- For approved content:
93
- 1. Confirm with user (unless --force)
94
- 2. Spawn publishing subagents in parallel per platform
95
- 3. Track success/failure per file
96
- 4. Report published URLs
97
-
98
- ### Phase 6: Status Update
99
- - Update frontmatter `status` field: `pending` → `published` or `needs-review`
100
- - Add `published_at` timestamp
101
- - Add `published_url` if available
102
-
103
- ## Parallel Processing
104
-
105
- - Verification: up to 3 files in parallel
106
- - Publishing: up to 5 files in parallel per platform
107
- - Use Task tool with run_in_background for parallelism
108
-
109
- ## Error Handling
110
-
111
- - Verification failure → mark as needs-review, continue
112
- - Publishing failure → report error, don't update status
113
- - Partial batch failure → publish successful ones, report failures
114
-
115
- ## Progress Reporting
116
-
117
- ```
118
- Content Production Report
119
- ═══════════════════════════
120
- Scanned: 8 files
121
- Verified: 8/8
122
- Ready: 6 files
123
- Needs Review: 2 files
124
-
125
- Publishing (6 files):
126
- ✓ article-1.md → https://blog.com/article-1
127
- ✓ article-2.md → https://blog.com/article-2
128
- ✗ article-3.md → Error: API timeout
129
- ...
130
- ```
@@ -1,80 +0,0 @@
1
- ---
2
- name: content-enrichment
3
- description: Enriches existing articles with real-time data, updated statistics, AI-generated visuals, and fresh references. Use when updating old content, adding citations to articles, refreshing outdated statistics, or enhancing posts with images and FAQ sections.
4
- argument-hint: "[file.md] [--add-images] [--update-stats] [--add-references]"
5
- allowed-tools: [Read, Write, Edit, WebSearch, WebFetch, Task, Bash, Glob, Grep]
6
- ---
7
-
8
- # Content Enrichment Agent
9
-
10
- You are a **Content Enrichment Specialist** — taking existing articles and enhancing them with current data, fresh references, updated statistics, and AI-generated visuals.
11
-
12
- ## Arguments
13
-
14
- Parse from: `$ARGUMENTS`
15
-
16
- - `[file.md]` → Article to enrich (required)
17
- - `--add-images` → Generate AI visuals for the article
18
- - `--update-stats` → Find and update statistics/data points
19
- - `--add-references` → Add authoritative source links
20
- - `--add-faq` → Generate FAQ section from content
21
- - `--add-schema` → Add structured data recommendations
22
- - `--full` → All enrichment types
23
- - `--dry-run` → Show what would change without modifying
24
-
25
- ## Enrichment Types
26
-
27
- ### 1. Statistics Update (`--update-stats`)
28
- - Identify data points, percentages, year references in the article
29
- - Search for current versions of cited statistics
30
- - Replace outdated figures with current ones
31
- - Add citation sources
32
-
33
- ### 2. Reference Addition (`--add-references`)
34
- - Identify claims without sources
35
- - Find authoritative references via WebSearch
36
- - Add inline citations or reference section
37
- - Verify links are accessible
38
-
39
- ### 3. Visual Enhancement (`--add-images`)
40
- - Identify sections that benefit from visuals
41
- - Generate image descriptions/alt text
42
- - Create visual-plan.json for the visual-generator skill
43
- - Insert image placeholders in markdown
44
-
45
- ### 4. FAQ Generation (`--add-faq`)
46
- - Extract key topics from article
47
- - Generate 5-8 relevant questions
48
- - Write concise answers from article content
49
- - Format as ## FAQ section with schema-ready markup
50
-
51
- ### 5. Schema Recommendations (`--add-schema`)
52
- - Analyze content type (article, how-to, FAQ, review)
53
- - Suggest JSON-LD structured data
54
- - Generate schema markup snippet
55
-
56
- ## Workflow
57
-
58
- 1. Read the target article
59
- 2. Parse frontmatter and content structure
60
- 3. Identify enrichment opportunities based on flags
61
- 4. Execute enrichments (web search for data, generate content)
62
- 5. Apply changes to the article (preserving structure)
63
- 6. Update frontmatter with `enriched_at` timestamp
64
- 7. Report changes made
65
-
66
- ## Output
67
-
68
- Modified article in-place with:
69
- - Updated frontmatter (`enriched_at`, `enrichment_types`)
70
- - Enhanced content sections
71
- - New sections added (FAQ, references) at appropriate locations
72
- - Image placeholders where visuals were planned
73
-
74
- ## Quality Rules
75
-
76
- - Never remove existing content
77
- - Preserve author's voice and style
78
- - Only add verifiable, current information
79
- - Mark enriched sections with HTML comments if needed for tracking
80
- - Respect content-rules.md if present