Initial commit: moreminimore-service content pipeline
- 9 mm* skills (orchestrator, article, social, publish, analytics) - 6 dependency skills (content-writer, geo-optimizer, etc.) - 3 analytics scripts (GSC, Google Ads, Meta Ads) - Config template + setup guide - SOUL-MM.md persona extension - OrbitOS integration reference
This commit is contained in:
363
skills/moreminimore-orchestrator/SKILL.md
Normal file
363
skills/moreminimore-orchestrator/SKILL.md
Normal file
@@ -0,0 +1,363 @@
|
||||
---
|
||||
name: moreminimore-orchestrator
|
||||
argument-hint: "<client name> <website URL> [goal] [budget]"
|
||||
description: >
|
||||
Full marketing campaign orchestration skill for moreminimore-service.
|
||||
Chains Research → Strategy → Content phases, passing context between
|
||||
each step. Designed for Hermes agents serving individual clients.
|
||||
Handles client onboarding, keyword research, brand DNA extraction,
|
||||
strategic planning, content writing, and GEO optimization in one
|
||||
coordinated workflow. Use when: starting a new client campaign,
|
||||
running a full marketing workflow, needing end-to-end orchestration,
|
||||
or resuming a partially-completed campaign.
|
||||
---
|
||||
|
||||
# moreminimore Orchestrator
|
||||
|
||||
You are the master orchestrator for moreminimore-service — a coordinated
|
||||
marketing campaign workflow that chains existing Hermes skills together with
|
||||
proper context passing, state tracking, and client folder management.
|
||||
|
||||
## When This Skill Must Trigger
|
||||
|
||||
Trigger on ANY of these signals:
|
||||
- "ลูกค้าใหม่", "client new", "start campaign", "เริ่มแคมเปญ"
|
||||
- "moreminimore orchestrate", "run workflow", "ทำการตลาดให้"
|
||||
- Any request to run a full marketing campaign from scratch
|
||||
- "resume campaign", "continue workflow", "ดูสถานะ"
|
||||
- "รัน workflow", "เริ่มงานให้ [client name]"
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ orchestrator │
|
||||
│ Reads brief → Reads state.json → Determines next step │
|
||||
│ → Calls skill → Saves output → Updates state │
|
||||
│ → Reports progress │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
|
||||
State machine phases (defined in state.json):
|
||||
PHASE_INIT → just started, haven't collected brief
|
||||
PHASE_RESEARCH → running keyword-research + niche-research + ads-dna
|
||||
PHASE_STRATEGY → running ads-plan + ads-create
|
||||
PHASE_CONTENT → running content-writer + geo-optimizer
|
||||
PHASE_COMPLETE → all phases done
|
||||
```
|
||||
|
||||
## Input
|
||||
|
||||
### Required (must be provided or asked):
|
||||
- **Client name** — used as folder name in clients/
|
||||
- **Website URL** — client's website for brand DNA + keyword research
|
||||
|
||||
### Optional (ask if not provided):
|
||||
- **Goal** — sales / leads / brand awareness / traffic
|
||||
- **Budget** — monthly budget range
|
||||
- **Target audience** — who they want to reach
|
||||
- **Primary keyword / topic** — for content focus (if known)
|
||||
|
||||
## Workflow Process
|
||||
|
||||
### Step 0: Check Client Context
|
||||
|
||||
```bash
|
||||
CLIENT_DIR="/Users/kunthawat/Gitea/moreminimore-service-system/clients"
|
||||
```
|
||||
|
||||
If the user provided a client name, check if a folder already exists:
|
||||
|
||||
```bash
|
||||
ls "$CLIENT_DIR/<client-name>/brief.md" 2>/dev/null && echo "EXISTS" || echo "NEW"
|
||||
```
|
||||
|
||||
**If EXISTS**: read the existing brief and state.json. Show the user what's
|
||||
already done and what's pending. Offer to resume or start fresh.
|
||||
|
||||
**If NEW**: proceed to Step 1.
|
||||
|
||||
### Step 1: Collect Client Brief
|
||||
|
||||
Create the client brief template. Ask for (in one message, don't make the user
|
||||
answer one-by-one):
|
||||
|
||||
1. **Client name** (for folder name — use English/lowercase/kebab-case)
|
||||
2. **Website URL**
|
||||
3. **Goal** (default: lead generation)
|
||||
4. **Monthly budget** (default: not specified)
|
||||
5. **Target audience** (default: infer from website)
|
||||
6. **Primary keyword or topic** to focus on (optional)
|
||||
7. **Industry** (e-commerce / SaaS / local service / B2B / content / other)
|
||||
|
||||
Wait for the user's response. Then write the brief:
|
||||
|
||||
```bash
|
||||
mkdir -p "$CLIENT_DIR/<client-name>"
|
||||
```
|
||||
|
||||
Write `clients/<client-name>/brief.md` with the collected info.
|
||||
|
||||
Write `clients/<client-name>/state.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"client_name": "<name>",
|
||||
"website_url": "<url>",
|
||||
"goal": "<goal>",
|
||||
"budget": "<budget or null>",
|
||||
"target_audience": "<audience or null>",
|
||||
"primary_keyword": "<keyword or null>",
|
||||
"industry": "<industry>",
|
||||
"phase": "PHASE_RESEARCH",
|
||||
"phase_progress": {},
|
||||
"outputs": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 2: Research Phase (PHASE_RESEARCH)
|
||||
|
||||
Run these three research skills. They can run in parallel since they're
|
||||
independent:
|
||||
|
||||
#### 2a. Brand DNA (ads-dna)
|
||||
|
||||
Use the ads-dna skill to extract brand DNA from the client's website.
|
||||
|
||||
Call flow:
|
||||
1. Fetch the website homepage + about + services pages
|
||||
2. Extract colors, typography, voice, imagery, target audience
|
||||
3. Save as `clients/<client-name>/brand-profile.json`
|
||||
|
||||
**How to invoke ads-dna logic**: The ads-dna skill describes extracting
|
||||
brand elements from a URL. Follow its process:
|
||||
- Fetch homepage URL
|
||||
- Extract colors (CSS, og:image analysis)
|
||||
- Extract typography (Google Fonts, CSS font-family)
|
||||
- Analyze voice (headline, subheadline, CTA text)
|
||||
- Save to brand-profile.json
|
||||
|
||||
Do NOT try to call ads-dna as a sub-skill — follow its documented process
|
||||
directly since you have the skill content loaded.
|
||||
|
||||
#### 2b. Keyword Research (keyword-research)
|
||||
|
||||
Run keyword research for the client's industry/topic.
|
||||
|
||||
Call flow:
|
||||
1. Use the client's primary keyword (or website niche) as seed
|
||||
2. Generate keyword list with intent classification
|
||||
3. Identify topic clusters
|
||||
4. Identify GEO opportunities
|
||||
5. Recommend content priorities
|
||||
|
||||
Save to `clients/<client-name>/keyword-research.md`
|
||||
|
||||
#### 2c. Niche Research (niche-research)
|
||||
|
||||
If the user has browser access (Claude for Chrome or similar), run niche
|
||||
research to find current trending stories. This is optional — skip if no
|
||||
browser is available and note it.
|
||||
|
||||
Save to `clients/<client-name>/niche-research.md` (if ran)
|
||||
|
||||
#### Update state after Research Phase
|
||||
|
||||
```json
|
||||
{
|
||||
...existing state,
|
||||
"phase": "PHASE_STRATEGY",
|
||||
"phase_progress": {
|
||||
"research_completed": true,
|
||||
"brand_profile": "clients/<name>/brand-profile.json",
|
||||
"keyword_research": "clients/<name>/keyword-research.md",
|
||||
"niche_research": "clients/<name>/niche-research.md (or skipped)"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 3: Strategy Phase (PHASE_STRATEGY)
|
||||
|
||||
#### 3a. Campaign Strategy (ads-plan)
|
||||
|
||||
Use ads-plan logic to create a strategic plan:
|
||||
|
||||
1. **Discovery**: Use the client brief + brand DNA
|
||||
2. **Competitive Analysis**: Search for competitors (if web access available)
|
||||
3. **Platform Selection**: Recommend platforms based on industry + goal + budget
|
||||
4. **Campaign Architecture**: Structure with naming conventions
|
||||
5. **Budget Planning**: Budget allocation with 70/20/10 framework
|
||||
6. **Creative Strategy**: Content pillars and creative production plan
|
||||
7. **Implementation Roadmap**: Phased rollout
|
||||
|
||||
Save to `clients/<client-name>/strategy/ADS-STRATEGY.md`
|
||||
|
||||
Also produce:
|
||||
- `clients/<client-name>/strategy/CAMPAIGN-ARCHITECTURE.md`
|
||||
- `clients/<client-name>/strategy/BUDGET-PLAN.md`
|
||||
- `clients/<client-name>/strategy/CREATIVE-BRIEF.md`
|
||||
- `clients/<client-name>/strategy/IMPLEMENTATION-ROADMAP.md`
|
||||
|
||||
#### 3b. Campaign Concepts (ads-create)
|
||||
|
||||
If brand-profile.json exists from Phase 2, generate campaign concepts:
|
||||
|
||||
1. Read brand-profile.json
|
||||
2. Generate 3 campaign concepts with distinct angles
|
||||
3. For each concept: hypothesis, primary message, tone, visual direction, CTA
|
||||
4. Write platform-specific ad copy
|
||||
|
||||
Save to `clients/<client-name>/strategy/campaign-brief.md`
|
||||
|
||||
#### Update state after Strategy Phase
|
||||
|
||||
```json
|
||||
{
|
||||
...existing state,
|
||||
"phase": "PHASE_CONTENT",
|
||||
"phase_progress": {
|
||||
...previous,
|
||||
"strategy_completed": true,
|
||||
"ads_strategy": "clients/<name>/strategy/ADS-STRATEGY.md",
|
||||
"campaign_brief": "clients/<name>/strategy/campaign-brief.md"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 4: Content Phase (PHASE_CONTENT)
|
||||
|
||||
#### 4a. Content Writing (content-writer)
|
||||
|
||||
Using the keyword research (topic clusters + high-priority keywords) and
|
||||
strategy (content pillars), write content:
|
||||
|
||||
1. **Identify priority content**: From keyword-research, pick the top 3-5
|
||||
keywords with best opportunity scores
|
||||
2. **Write blog posts**: For each priority keyword, write an SEO-optimized
|
||||
blog post following content-writer guidelines:
|
||||
- Hook-driven title
|
||||
- ≥1000 words
|
||||
- Featured image + ≥3 inline images (provide image prompts)
|
||||
- FAQ section with FAQPage schema
|
||||
- Internal linking plan
|
||||
3. **Write landing pages**: If the strategy calls for conversion pages,
|
||||
write landing pages optimized for the target keyword and intent
|
||||
|
||||
Save each piece to `clients/<client-name>/content/`:
|
||||
- `clients/<client-name>/content/post-<keyword>.md`
|
||||
- `clients/<client-name>/content/landing-<keyword>.md`
|
||||
|
||||
#### 4b. GEO Optimization (geo-optimizer)
|
||||
|
||||
After writing each piece of content, optimize it for AI search engines:
|
||||
|
||||
1. **Audit** the content for GEO readiness (evidence density, structure, authority)
|
||||
2. **Optimize**: Front-load answers, add real statistics and citations,
|
||||
add FAQPage schema, strip anti-patterns
|
||||
|
||||
Save as an optimization overlay to each content file, or create:
|
||||
- `clients/<client-name>/content/post-<keyword>-geo.md`
|
||||
|
||||
#### 4c. Image Generation Prompts
|
||||
|
||||
For each piece of content, generate detailed image generation prompts:
|
||||
- Featured/thumbnail image prompt
|
||||
- ≥3 inline image prompts with specific dimensions, style, and subject
|
||||
|
||||
These can be used later with image generation tools.
|
||||
|
||||
#### Update state after Content Phase
|
||||
|
||||
```json
|
||||
{
|
||||
...existing state,
|
||||
"phase": "PHASE_COMPLETE",
|
||||
"phase_progress": {
|
||||
...previous,
|
||||
"content_completed": true,
|
||||
"content_pieces": ["clients/<name>/content/post-<keyword1>.md", "..."],
|
||||
"geo_optimized": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 5: Present Summary
|
||||
|
||||
After all phases are complete, present a summary to the user:
|
||||
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Campaign Complete: [Client Name]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📂 clients/<client-name>/
|
||||
|
||||
✅ RESEARCH PHASE
|
||||
├── brand-profile.json ← Brand DNA extracted
|
||||
├── keyword-research.md ← [N] keywords in [M] clusters
|
||||
└── niche-research.md ← Current trends
|
||||
|
||||
✅ STRATEGY PHASE
|
||||
├── strategy/ADS-STRATEGY.md ← Full strategy
|
||||
├── strategy/CAMPAIGN-ARCHITECTURE.md ← Campaign structure
|
||||
├── strategy/BUDGET-PLAN.md ← Budget allocation
|
||||
├── strategy/CREATIVE-BRIEF.md ← Creative production
|
||||
├── strategy/IMPLEMENTATION-ROADMAP.md ← Timeline
|
||||
└── strategy/campaign-brief.md ← Campaign concepts
|
||||
|
||||
✅ CONTENT PHASE
|
||||
├── content/post-<keyword1>.md ← Blog post + GEO
|
||||
├── content/post-<keyword2>.md ← Blog post + GEO
|
||||
└── content/landing-<keyword>.md ← Landing page + GEO
|
||||
|
||||
📋 NEXT STEPS (available when scripts are ready)
|
||||
1. Deploy content to website
|
||||
2. Set up Google Ads campaigns
|
||||
3. Set up Meta Ads campaigns
|
||||
4. Schedule analytics monitoring
|
||||
```
|
||||
|
||||
## Resuming Workflow
|
||||
|
||||
If the user says "resume", "continue", or "ดูสถานะ":
|
||||
|
||||
1. Read `clients/<client-name>/state.json`
|
||||
2. Check which phase it's in
|
||||
3. Present what's done and what's pending
|
||||
4. Ask if they want to continue from where it left off
|
||||
|
||||
```bash
|
||||
STATE_FILE="/Users/kunthawat/Gitea/moreminimore-service-system/clients/<client-name>/state.json"
|
||||
cat "$STATE_FILE" 2>/dev/null || echo "NOT_FOUND"
|
||||
```
|
||||
|
||||
## Output Convention
|
||||
|
||||
ALL outputs go under:
|
||||
```
|
||||
/Users/kunthawat/Gitea/moreminimore-service-system/clients/<client-name>/
|
||||
```
|
||||
|
||||
Use write_file to save outputs. Always create subdirectories as needed.
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. **Skill availability**: This orchestrator calls skills that exist in the
|
||||
Hermes skill library. If a skill is not loaded or available, note it to
|
||||
the user and skip or approximate the step.
|
||||
|
||||
2. **Parallel execution**: Research skills (keyword-research, niche-research,
|
||||
ads-dna) are independent and CAN run in parallel. Strategy and Content
|
||||
phases are sequential (strategy depends on research, content depends on
|
||||
strategy).
|
||||
|
||||
3. **No real API calls yet**: Google Ads and Meta Ads campaign execution
|
||||
requires API scripts that don't exist yet. The orchestrator produces
|
||||
the campaign structure and copy, but actual ad serving requires the
|
||||
platform API scripts (see scripts/ directory).
|
||||
|
||||
4. **State persistence**: state.json is the source of truth. Always update
|
||||
it after completing each phase. This makes the workflow resumable even
|
||||
if the conversation is interrupted.
|
||||
|
||||
5. **Language**: Use Thai for client-facing summary, English for technical
|
||||
output (unless client brief specifies otherwise).
|
||||
Reference in New Issue
Block a user