myaidev-method 0.3.4 → 0.3.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.
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 +776 -422
  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
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: content-rules-setup
2
+ name: myai-content-rules-setup
3
3
  description: Runs an interactive wizard for configuring brand voice, style guidelines, and content generation rules. Use when setting up content-rules.md for the first time, updating brand voice settings, or configuring content generation preferences.
4
4
  argument-hint: [--quick] [--update] [--preview]
5
5
  allowed-tools: [Read, Write, Edit, AskUserQuestion, Glob, Grep]
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: content-verifier
2
+ name: myai-content-verifier
3
3
  description: Verifies content uniqueness, quality, and publishing readiness by checking for plagiarism, AI-generated patterns, and knowledge redundancy. Use when reviewing content before publishing, checking article originality, or assessing content quality.
4
4
  argument-hint: [file.md] [--strict]
5
5
  allowed-tools: [Read, Write, Edit, Bash, WebSearch, WebFetch, Grep, Glob]
@@ -0,0 +1,333 @@
1
+ ---
2
+ name: myai-content-writer
3
+ description: Orchestrates professional content creation through a multi-agent pipeline covering research, planning, writing, SEO optimization, and visual generation. Use when creating articles, blog posts, technical tutorials, or any written content.
4
+ argument-hint: "[topic] [--word-count=1500] [--tone=professional] [--type=blog-post] [--with-images]"
5
+ allowed-tools: [Read, Write, Edit, WebSearch, WebFetch, Task, Bash, Glob, Grep, AskUserQuestion]
6
+ context: fork
7
+ ---
8
+
9
+ # Content Writer Skill v2 — Orchestrator Pattern
10
+
11
+ You are the **Content Production Orchestrator**, a coordinator that decomposes content creation into specialized subagent tasks. Inspired by long-running agent harness patterns, you maintain a lightweight planning context while delegating intensive work to isolated subagents.
12
+
13
+ ## Architecture Overview
14
+
15
+ ```
16
+ ┌─────────────────────────────────────────────────────────┐
17
+ │ ORCHESTRATOR (this skill) │
18
+ │ • Parses arguments & loads content-rules │
19
+ │ • Creates execution plan │
20
+ │ • Dispatches subagents │
21
+ │ • Aggregates results into final article │
22
+ │ • Manages scratchpad state files │
23
+ └──────────────┬──────────────────────────────────────────┘
24
+ │ spawns
25
+ ┌──────────┼──────────────┬─────────────────┐
26
+ ▼ ▼ ▼ ▼
27
+ ┌────────┐ ┌────────┐ ┌──────────┐ ┌──────────────┐
28
+ │Research│ │Planner │ │ Writer │ │Visual Planner│
29
+ │ Agent │ │ Agent │ │ Agent │ │ Agent │
30
+ └────────┘ └────────┘ └──────────┘ └──────────────┘
31
+
32
+ ┌─────────┼──────────┐
33
+ ▼ ▼ ▼
34
+ ┌─────────┐ ┌──────┐ ┌────────┐
35
+ │SEO Agent│ │Editor│ │Visuals │
36
+ └─────────┘ └──────┘ └────────┘
37
+ ```
38
+
39
+ ## Execution Phases
40
+
41
+ ### Phase 0: Initialize
42
+ - Parse `$ARGUMENTS` for topic, flags, and parameters
43
+ - Load `content-rules.md` if present (check: `./content-rules.md`, `./.claude/content-rules.md`, `./docs/content-rules.md`)
44
+ - Determine content type template and constraints
45
+ - Create scratchpad directory: `.content-session/` (ephemeral, gitignored)
46
+
47
+ ### Phase 1: Research (Subagent)
48
+ Spawn a **research subagent** to gather information:
49
+
50
+ ```
51
+ Task(subagent_type: "general-purpose", prompt: "...")
52
+ ```
53
+
54
+ The research agent:
55
+ - Uses WebSearch to find 5-8 relevant, current sources
56
+ - Extracts key facts, statistics, expert quotes
57
+ - Identifies content gaps in existing coverage
58
+ - Writes findings to `.content-session/research.md`
59
+ - Returns a concise research summary (not raw data)
60
+
61
+ ### Phase 2: Plan (Subagent)
62
+ Spawn a **planning subagent** with research summary + content rules:
63
+
64
+ The planner:
65
+ - Creates detailed article outline with section structure
66
+ - Assigns word count targets per section
67
+ - Plans keyword placement strategy
68
+ - Identifies visual content opportunities (if `--with-images`)
69
+ - Writes plan to `.content-session/plan.md`
70
+ - Returns the outline structure
71
+
72
+ ### Phase 3: Write (Subagent — main workload)
73
+ Spawn a **writer subagent** with the plan + research + content rules:
74
+
75
+ The writer:
76
+ - Produces the full article following the plan
77
+ - Applies brand voice from content-rules
78
+ - Integrates research findings naturally
79
+ - Writes draft to `.content-session/draft.md`
80
+ - Returns completion status
81
+
82
+ ### Phase 4: Optimize (Parallel Subagents)
83
+ Spawn SEO and editorial subagents **in parallel**:
84
+
85
+ **SEO Agent:**
86
+ - Reviews keyword density and placement
87
+ - Generates meta description, slug, tags
88
+ - Suggests internal/external links
89
+ - Checks heading hierarchy
90
+ - Writes SEO report to `.content-session/seo-report.md`
91
+
92
+ **Editor Agent:**
93
+ - Reviews for clarity, flow, grammar
94
+ - Checks tone consistency
95
+ - Verifies factual accuracy markers
96
+ - Suggests improvements
97
+ - Writes edit notes to `.content-session/edit-notes.md`
98
+
99
+ ### Phase 5: Visual Strategy (Conditional — if `--with-images`)
100
+ Spawn a **visual planning subagent**:
101
+ - Reviews article for visual opportunities
102
+ - Creates image specifications (prompts, types, placements)
103
+ - Writes visual plan to `.content-session/visual-plan.md`
104
+ - Orchestrator then generates images using the visual-generator skill
105
+
106
+ ### Phase 6: Assemble & Finalize
107
+ The orchestrator (this skill):
108
+ - Reads all scratchpad files
109
+ - Applies SEO recommendations to the draft
110
+ - Incorporates editorial improvements
111
+ - Embeds visual references if generated
112
+ - Produces final article with proper frontmatter
113
+ - Saves to `./content-output/{slug}.md`
114
+ - Cleans up `.content-session/` directory
115
+
116
+ ## Parameters
117
+
118
+ | Parameter | Description | Default |
119
+ |-----------|-------------|---------|
120
+ | `topic` | Main subject matter | Required |
121
+ | `--word-count` | Target article length | 1500 |
122
+ | `--tone` | Voice: professional, casual, technical, conversational, academic | professional |
123
+ | `--type` | Template: blog-post, technical-tutorial, how-to-guide, listicle, comparison-guide, case-study, api-documentation, architecture-guide | blog-post |
124
+ | `--audience` | Target reader demographic | general |
125
+ | `--keywords` | Comma-separated primary,secondary keywords | auto-detected |
126
+ | `--with-images` | Enable AI visual generation | false |
127
+ | `--image-service` | Preferred image service: gemini, dalle, flux, imagen | auto |
128
+ | `--publish` | Publish to platform: wordpress, payloadcms, docusaurus, mintlify, astro | none |
129
+ | `--output-dir` | Output directory for final article | ./content-output |
130
+ | `--no-research` | Skip research phase (use for topics you provide context for) | false |
131
+ | `--verbose` | Show detailed progress from each phase | false |
132
+
133
+ ## Content Rules Integration
134
+
135
+ The orchestrator automatically discovers and loads content rules. Rules are passed to every subagent to ensure consistent brand voice.
136
+
137
+ **Discovery order:**
138
+ 1. `./content-rules.md`
139
+ 2. `./.claude/content-rules.md`
140
+ 3. `./docs/content-rules.md`
141
+
142
+ If no rules file exists, suggest running the content-rules-setup skill.
143
+
144
+ **Rules are injected into subagent prompts as:**
145
+ ```
146
+ ## Brand & Style Guidelines (from content-rules.md)
147
+ {content of rules file}
148
+ ```
149
+
150
+ ## Subagent Prompt Templates
151
+
152
+ Each subagent has a detailed prompt template in the `agents/` directory. Load the appropriate file when spawning each subagent, injecting the dynamic variables ({topic}, {type}, {tone}, etc.) and {content_rules_section}.
153
+
154
+ | Phase | Prompt File | Key Variables |
155
+ |-------|-------------|---------------|
156
+ | Research | [agents/research-agent.md](agents/research-agent.md) | topic, type, audience, tone |
157
+ | Planning | [agents/planner-agent.md](agents/planner-agent.md) | topic, type, word_count, tone, audience, keywords, research_summary |
158
+ | Writing | [agents/writer-agent.md](agents/writer-agent.md) | plan_content, research_summary, word_count, tone |
159
+ | SEO | [agents/seo-agent.md](agents/seo-agent.md) | draft_content, keywords, type |
160
+ | Editor | [agents/editor-agent.md](agents/editor-agent.md) | draft_content, tone, audience |
161
+ | Visual | [agents/visual-planner-agent.md](agents/visual-planner-agent.md) | draft_content, type, available_services |
162
+
163
+ All templates include a `{content_rules_section}` placeholder — inject the loaded content-rules when present.
164
+
165
+ ## Content Type Templates
166
+
167
+ | Type | Structure | Typical Length | Key Elements |
168
+ |------|-----------|----------------|--------------|
169
+ | `blog-post` | Intro → 3-5 sections → Conclusion | 1500-2500 | Hook, examples, CTA |
170
+ | `technical-tutorial` | Prereqs → Steps → Troubleshooting | 2000-3500 | Code, diagrams, verification |
171
+ | `how-to-guide` | Problem → Solution → Best Practices | 1500-2500 | Step-by-step, tips |
172
+ | `listicle` | Intro → Numbered Items → Summary | 1200-2000 | Consistent format per item |
173
+ | `comparison-guide` | Overview → Deep Dives → Decision | 1500-2500 | Tables, pros/cons |
174
+ | `case-study` | Challenge → Solution → Results | 1200-2000 | Metrics, quotes |
175
+ | `api-documentation` | Overview → Endpoints → Examples | 1000-2000 | Code, tables |
176
+ | `architecture-guide` | Summary → Components → Data Flow | 2500-4000 | Diagrams, tech details |
177
+
178
+ ## State Management (Scratchpad Pattern)
179
+
180
+ All intermediate work is written to `.content-session/` directory:
181
+
182
+ ```
183
+ .content-session/
184
+ ├── config.json # Parsed arguments and settings
185
+ ├── content-rules.md # Loaded content rules (if found)
186
+ ├── research.md # Research agent output
187
+ ├── plan.md # Article plan
188
+ ├── draft.md # Writer agent output
189
+ ├── seo-report.md # SEO optimization suggestions
190
+ ├── edit-notes.md # Editorial feedback
191
+ ├── visual-plan.json # Visual content specifications
192
+ └── final-meta.json # Assembled frontmatter data
193
+ ```
194
+
195
+ This keeps the orchestrator's context lean — it reads only what it needs for each phase.
196
+
197
+ ## Execution Flow
198
+
199
+ ```
200
+ 1. INIT → Parse args, load rules, create session dir
201
+ 2. RESEARCH → Spawn research agent (skip if --no-research)
202
+ 3. PLAN → Spawn planner with research summary
203
+ 4. WRITE → Spawn writer with plan + research
204
+ 5. OPTIMIZE → Spawn SEO + Editor agents IN PARALLEL
205
+ 6. VISUALS → Spawn visual planner (if --with-images)
206
+ → Generate images using visual-generator skill
207
+ 7. ASSEMBLE → Read all outputs, produce final article
208
+ 8. OUTPUT → Save to output-dir, optionally publish
209
+ 9. CLEANUP → Remove .content-session/ directory
210
+ ```
211
+
212
+ ## Error Handling
213
+
214
+ - If a subagent fails, log the error and continue with what's available
215
+ - Research failure → proceed with plan (user-provided context may suffice)
216
+ - SEO/Editor failure → use draft as-is with basic frontmatter
217
+ - Visual generation failure → produce article without images
218
+ - Never block the entire pipeline on a single failure
219
+
220
+ ## Context Management (Long-Running Agent Patterns)
221
+
222
+ ### Context Regurgitation
223
+ Before dispatching each subagent, briefly restate in your prompt:
224
+ - Current phase number and what's been completed so far
225
+ - Key decisions made (chosen angle, title direction, tone calibration)
226
+ - What this subagent needs to accomplish and how its output feeds the next phase
227
+
228
+ This keeps critical context fresh at the end of the context window where LLM attention is strongest.
229
+
230
+ ### Dynamic Plan Updates
231
+ If a subagent returns indicating the plan needs revision (e.g., writer discovers research gaps, SEO agent finds the angle is unsearchable):
232
+ 1. Parse the update request from the subagent's output
233
+ 2. Re-run the affected earlier phase with the new context
234
+ 3. Resume the pipeline from the current phase
235
+ 4. Maximum **2 plan revisions per session** to prevent infinite loops
236
+ 5. Log each revision to `.content-session/revisions.md`
237
+
238
+ ### File Buffering
239
+ All subagent outputs go to `.content-session/` files — never pass raw subagent output directly into the next prompt. Read only the specific file sections needed for each phase. This keeps the orchestrator's active context lean.
240
+
241
+ ## Progress Reporting
242
+
243
+ At each phase transition, report to the user:
244
+
245
+ ```
246
+ → Phase 1/6: Researching "{topic}"...
247
+ ✓ Found 6 sources, identified 3 unique angles
248
+ → Phase 2/6: Planning article structure...
249
+ ✓ Outline ready: 5 sections, ~{word_count} words target
250
+ → Phase 3/6: Writing article...
251
+ ✓ Draft complete: {actual_word_count} words
252
+ → Phase 4/6: Optimizing (SEO + Editorial review)...
253
+ ✓ SEO score: 8.5/10 | Editorial score: 8/10
254
+ → Phase 5/6: Generating visual content...
255
+ ✓ 3 images generated ($0.06 total)
256
+ → Phase 6/6: Assembling final article...
257
+ ✓ Saved to ./content-output/{slug}.md
258
+
259
+ 📊 Summary:
260
+ Words: {count} | Reading Time: {time}
261
+ SEO Score: {score}/10 | Quality: {score}/10
262
+ Images: {count} | Cost: ${total}
263
+ ```
264
+
265
+ ## Output Format
266
+
267
+ Final article is saved with full frontmatter:
268
+
269
+ ```markdown
270
+ ---
271
+ title: [SEO-optimized title]
272
+ meta_description: [150-160 chars]
273
+ slug: [url-friendly]
274
+ tags: [relevant, tags]
275
+ keywords:
276
+ primary: [main keyword]
277
+ secondary: [supporting, keywords]
278
+ word_count: [actual count]
279
+ reading_time: [X minutes]
280
+ content_type: [type used]
281
+ generated_at: [ISO timestamp]
282
+ images: [list of generated image paths, if any]
283
+ ---
284
+
285
+ # [Title]
286
+
287
+ [Full article content with embedded image references]
288
+ ```
289
+
290
+ ## Publishing Integration
291
+
292
+ If `--publish` is specified, after saving the article locally:
293
+
294
+ 1. Determine target platform from flag value
295
+ 2. Spawn appropriate publishing subagent:
296
+ - `wordpress-publisher` for WordPress
297
+ - `payloadcms-publisher` for PayloadCMS
298
+ - Use static-site utilities for Docusaurus/Mintlify/Astro
299
+ 3. Report published URL to user
300
+
301
+ ## Example Usage
302
+
303
+ ```bash
304
+ # Basic article
305
+ /myaidev-method:content-writer "Kubernetes Best Practices for Production"
306
+
307
+ # Full-featured with visuals
308
+ /myaidev-method:content-writer "Building a RAG Pipeline" --word-count=2500 --type=technical-tutorial --with-images --tone=technical
309
+
310
+ # With publishing
311
+ /myaidev-method:content-writer "Getting Started with Docker" --publish=wordpress --tone=conversational
312
+
313
+ # Skip research (you provide context)
314
+ /myaidev-method:content-writer "Our Q4 Product Launch" --no-research --type=case-study
315
+
316
+ # Custom output location
317
+ /myaidev-method:content-writer "API Design Patterns" --output-dir=./blog/posts --keywords="api design,rest best practices"
318
+ ```
319
+
320
+ ## Quality Checklist (Applied by Editor Agent)
321
+
322
+ - [ ] Title includes primary keyword and is compelling
323
+ - [ ] Introduction hooks reader within 2 sentences
324
+ - [ ] Content addresses user intent thoroughly
325
+ - [ ] Facts are accurate and attributed
326
+ - [ ] Heading hierarchy is proper (H1 → H2 → H3)
327
+ - [ ] Content is scannable (varied formatting)
328
+ - [ ] Keywords integrated naturally (not stuffed)
329
+ - [ ] Meta description summarizes effectively
330
+ - [ ] Conclusion provides value and next steps
331
+ - [ ] Tone consistent throughout
332
+ - [ ] Original value — not just repackaged existing content
333
+
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: generating-infographics
2
+ name: myai-infographic
3
3
  description: Creates diagrams (architecture, flowcharts, timelines, sequences) from Mermaid code and inserts them into markdown articles as asset-referenced images (PNG by default for universal compatibility). Use when enriching articles with diagrams, adding infographics to blog posts, visualizing technical content, or when the user mentions diagrams, infographics, or visual content for markdown.
4
4
  argument-hint: "[article.md] [--style=modern] [--max-diagrams=8] [--theme=default]"
5
5
  allowed-tools: [Read, Write, Edit, Bash, Task, Glob, Grep, AskUserQuestion]
@@ -0,0 +1,175 @@
1
+ ---
2
+ name: myai-proprietary-content-verifier
3
+ description: Pre-production gate that scans content-queue stubs for redundancy against existing blog content, scores each stub (1–5), and marks it approved or rejected before writing begins.
4
+ argument-hint: "[--queue-dir=./content-queue] [--blog-dir=./content-output] [--threshold=3]"
5
+ user-invocable: false
6
+ allowed-tools: [Read, Write, WebSearch, WebFetch, Glob, Grep]
7
+ ---
8
+
9
+ # Proprietary Content Verifier
10
+
11
+ Pre-production quality gate. Runs **before** the content-writer phase to ensure every stub in `content-queue/` is worth producing. Checks for redundancy against existing published/blog content, scores each stub, and stamps an approval decision into the stub's frontmatter.
12
+
13
+ The production coordinator dispatches this skill on a queue directory (or a single stub). Only stubs marked `approved` proceed to the writing pipeline.
14
+
15
+ ## When This Runs
16
+
17
+ ```
18
+ Ideation (produces stubs) → ** Proprietary Content Verifier ** → Content Writer (approved stubs only)
19
+ ```
20
+
21
+ This is a **pre-production** step — it operates on stubs (lightweight briefs), not full drafts.
22
+
23
+ ## Parameters
24
+
25
+ | Flag | Purpose | Default |
26
+ |------|---------|---------|
27
+ | `--queue-dir` | Path to content queue directory (or a specific job sub-directory) | `./content-queue/` |
28
+ | `--blog-dir` | Path to existing blog/content output directory to check against | `./content-output/` |
29
+ | `--threshold` | Minimum score (1–5) required for approval | `3` |
30
+ | `--force` | Skip confirmation prompts | `false` |
31
+
32
+ ## Process
33
+
34
+ 1. **Load Existing Content Inventory**
35
+ - Glob the blog directory (default: `./content-output/`) for `.md` files
36
+ - For each article, extract: title (from frontmatter or H1), slug, `keywords` (from frontmatter), first 200 words of body
37
+ - Build an in-memory inventory of existing coverage
38
+
39
+ 2. **Load Brand Context** (optional)
40
+ - Read `brand-config.json` if present to obtain the site URL for live blog search
41
+
42
+ 3. **Evaluate Each Stub**
43
+ For each `.md` file in the queue directory with `status: pending`:
44
+
45
+ a. **Parse the Stub** — read frontmatter (`title`, `keywords`, `goals`, `strategy`, `references`) and body content (Theme Context, Reference Material)
46
+
47
+ b. **Title & Topic Overlap** — compare the stub title against all existing article titles. Look for:
48
+ - Exact or near-exact title matches (score heavily)
49
+ - Topically equivalent titles covering the same subject
50
+
51
+ c. **Keyword Overlap** — compare the stub's `keywords` list against existing articles' `keywords`. Calculate overlap ratio. High overlap (>60%) is a strong redundancy signal.
52
+
53
+ d. **Semantic Overlap** — read the stub's Theme Context and goals, compare against the body openings of existing articles. Assess whether the core argument, angle, or value proposition is materially the same.
54
+
55
+ e. **Reference Overlap** — check if the stub's `references` URLs appear in any existing article. Shared references suggest similar sourcing and potential content duplication.
56
+
57
+ f. **Live Blog Check** (if site URL available) — use `WebSearch` with `site:{domain} {stub title keywords}` to find existing coverage on the live blog. Factor results into the score.
58
+
59
+ g. **Score Assignment** — synthesize all signals into a single Proprietary Value Score (see Scoring below).
60
+
61
+ 4. **Stamp Frontmatter**
62
+ Update each stub file's YAML frontmatter with a `verification` block:
63
+
64
+ ```yaml
65
+ verification:
66
+ score: {1-5}
67
+ label: "{Excellent|Good|Acceptable|Weak|Junk}"
68
+ decision: "{approved|rejected}"
69
+ reason: "{2-3 sentence explanation of the score and decision}"
70
+ checked_against:
71
+ - "{path to most relevant existing article}"
72
+ - "{path to second most relevant}"
73
+ verified_at: "{ISO 8601 timestamp}"
74
+ ```
75
+
76
+ For rejected stubs (score below threshold), also set `status: rejected`.
77
+
78
+ 5. **Return Summary**
79
+ Return a structured summary listing every evaluated stub with its score, label, decision, and reason.
80
+
81
+ ## Scoring
82
+
83
+ Each stub receives a **Proprietary Value Score** from 1 to 5:
84
+
85
+ | Score | Label | Criteria |
86
+ |-------|-------|----------|
87
+ | **5** | Excellent | No meaningful overlap. Strong proprietary angle, unique data/perspective, clear gap in existing coverage. |
88
+ | **4** | Good | Minimal overlap. The stub covers a topic adjacent to existing content but from a distinctly different angle or for a different audience. |
89
+ | **3** | Acceptable | Moderate overlap in topic area, but the stub introduces a fresh perspective, updated data, or a niche sub-topic not covered. |
90
+ | **2** | Weak | Significant overlap. The stub's core thesis, audience, and key points largely mirror an existing article. Limited incremental value. |
91
+ | **1** | Junk | Redundant. An existing article already covers this topic thoroughly with the same angle. Or the stub is too vague/generic to produce distinctive content. |
92
+
93
+ Stubs scoring **at or above** `--threshold` (default 3) are marked `approved`. Those below are marked `rejected`.
94
+
95
+ ### Scoring Heuristics
96
+
97
+ Weight these signals when computing the final score:
98
+
99
+ | Signal | Weight | High Redundancy Indicator |
100
+ |--------|--------|--------------------------|
101
+ | Title/topic match | 30% | Exact or near-exact title match with existing article |
102
+ | Keyword overlap | 25% | >60% keyword overlap with a single existing article |
103
+ | Semantic similarity | 25% | Same thesis, argument structure, and target audience |
104
+ | Reference overlap | 10% | >50% shared reference URLs with existing article |
105
+ | Live blog match | 10% | Direct hit on site search for the stub's topic |
106
+
107
+ ## Frontmatter Stamp Examples
108
+
109
+ Approved:
110
+
111
+ ```yaml
112
+ verification:
113
+ score: 4
114
+ label: "Good"
115
+ decision: "approved"
116
+ reason: "Distinct angle on bare-metal GPU clusters not covered in existing content. Minor overlap with 'Cloud vs Bare Metal' article on infrastructure comparison, but this stub focuses specifically on ML workloads."
117
+ checked_against:
118
+ - "content-output/cloud-vs-bare-metal.md"
119
+ - "content-output/gpu-infrastructure-guide.md"
120
+ verified_at: "2026-02-23T14:30:22Z"
121
+ ```
122
+
123
+ Rejected:
124
+
125
+ ```yaml
126
+ status: rejected
127
+ verification:
128
+ score: 2
129
+ label: "Weak"
130
+ decision: "rejected"
131
+ reason: "Heavily overlaps with existing article 'Kubernetes Best Practices' — same audience, same key points, no new proprietary angle."
132
+ checked_against:
133
+ - "content-output/kubernetes-best-practices.md"
134
+ verified_at: "2026-02-23T14:30:22Z"
135
+ ```
136
+
137
+ ## Execution Flow
138
+
139
+ ```
140
+ 1. DISCOVER → Glob content-queue dir for .md stubs with status: pending
141
+ 2. LOAD BLOG → Glob blog-dir for existing articles, extract titles + keywords + slugs
142
+ 3. EVALUATE → For each stub: run redundancy checks, compute score
143
+ 4. STAMP → Write verification block into each stub's frontmatter
144
+ 5. REPORT → Print summary table and return list of approved slugs
145
+ ```
146
+
147
+ ## Output
148
+
149
+ After verification, print a summary table:
150
+
151
+ ```
152
+ Proprietary Content Verification
153
+ ═════════════════════════════════
154
+ Queue: {queue_dir}
155
+ Blog: {blog_dir}
156
+ Threshold: {threshold}
157
+
158
+ Results:
159
+ ✓ [5] kubernetes_gpu_clusters.md — Excellent — "Highly original GPU cluster angle"
160
+ ✓ [4] bare_metal_ml_workloads.md — Good — "Fresh take on ML infrastructure"
161
+ ✓ [3] cloud_native_monitoring.md — Acceptable — "Some overlap but distinct focus"
162
+ ✗ [2] kubernetes_best_practices.md — Weak — "Heavily overlaps existing article"
163
+ ✗ [1] docker_getting_started.md — Junk — "Already published nearly identical guide"
164
+
165
+ Approved: 3/5 | Rejected: 2/5
166
+ ```
167
+
168
+ ## Constraints
169
+
170
+ - Only evaluate stubs with `status: pending` — skip `complete`, `failed`, `rejected`, or `in-progress`
171
+ - Do NOT modify any content in the stub body — only update frontmatter fields
172
+ - Do NOT rewrite or edit existing blog articles
173
+ - Provide a clear, specific reason for every score — mention which existing article(s) cause overlap
174
+ - When no existing content inventory is found, note this and default all scores to 5 (no redundancy possible)
175
+ - Process stubs in filename order for deterministic output
@@ -0,0 +1,36 @@
1
+ {
2
+ "skill_name": "myai-proprietary-content-verifier",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Run the proprietary content verifier on the content queue. Queue dir: myai-proprietary-content-verifier-workspace/fixtures/scenario-1/content-queue/ Blog dir: myai-proprietary-content-verifier-workspace/fixtures/scenario-1/content-output/ Use the default threshold of 3.",
7
+ "expected_output": "The stub 'kubernetes-production-tips.md' should be rejected (score 1-2) because it heavily overlaps with the existing 'kubernetes-best-practices-2025.md' article — same audience, same topics (resource management, security, observability, deployment strategies), same keywords.",
8
+ "files": [
9
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-1/content-queue/kubernetes-production-tips.md",
10
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-1/content-output/kubernetes-best-practices-2025.md",
11
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-1/content-output/docker-containerization-guide.md"
12
+ ]
13
+ },
14
+ {
15
+ "id": 2,
16
+ "prompt": "Verify the content queue stubs against existing blog content. Queue: myai-proprietary-content-verifier-workspace/fixtures/scenario-2/content-queue/ Blog: myai-proprietary-content-verifier-workspace/fixtures/scenario-2/content-output/ Threshold: 3.",
17
+ "expected_output": "The stub 'bare-metal-gpu-ml-training.md' should be approved with a high score (4-5) because it covers bare-metal GPU infrastructure for ML — a topic not covered by existing articles on cloud cost optimization or Python async patterns.",
18
+ "files": [
19
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-2/content-queue/bare-metal-gpu-ml-training.md",
20
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-2/content-output/cloud-cost-optimization.md",
21
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-2/content-output/python-async-patterns.md"
22
+ ]
23
+ },
24
+ {
25
+ "id": 3,
26
+ "prompt": "Run the content verifier on the queue directory with two stubs. Queue: myai-proprietary-content-verifier-workspace/fixtures/scenario-3/content-queue/ Blog: myai-proprietary-content-verifier-workspace/fixtures/scenario-3/content-output/ Threshold: 3.",
27
+ "expected_output": "Two stubs evaluated: 'observability-sre-alerting.md' should score 3-4 (approved — distinct focus on alerting philosophy vs general monitoring guide), while 'prometheus-grafana-setup.md' should score 1-2 (rejected — heavily overlaps with existing monitoring-microservices article covering the same Prometheus/Grafana stack).",
28
+ "files": [
29
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-3/content-queue/observability-sre-alerting.md",
30
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-3/content-queue/prometheus-grafana-setup.md",
31
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-3/content-output/monitoring-microservices.md",
32
+ "myai-proprietary-content-verifier-workspace/fixtures/scenario-3/content-output/opentelemetry-instrumentation.md"
33
+ ]
34
+ }
35
+ ]
36
+ }