Self-serve AI content pipeline skill for OpenClaw. Sets up and runs a fully automated social media content engine on your own OpenClaw instance using your ow...
Automated content engine for OpenClaw. One command sets up daily TikTok, Twitter, newsletter, blog, and briefings for any product — all on your machine, your accounts, your data.
You control everything. Your APIs, your accounts, your posting schedule. Nothing goes through Xero. For a fully done-for-you version (Xero runs it for you), see xeroaiagency.com/services.
ChannelFrequencyRequirementTikTok slideshow1/dayPostiz account + TikTok connectedTwitter/X posts5/dayPostiz account + Twitter connectedNewsletterMon/Wed/FriMailerLite API key + subscriber groupBlog post1/daySupabase + Netlify (see setup-checklist.md)Morning briefing7 AM dailyTelegram bot token + chat IDEvening briefing8 PM dailyTelegram bot token + chat ID
Complete the setup checklist at references/setup-checklist.md. Takes ~30 minutes. You need:
clawhub install larry or download from larrybrain.com) — this is the TikTok posting engine this skill runs on top ofWhat you sayWhat happensprovision pipeline for [product]Start interactive setup for a new productgo live [slug]Flip test posts to public after you've reviewed thempause pipeline [slug]Disable all crons for a productresume pipeline [slug]Re-enable crons for a productpipeline statusShow all active pipelines and their cron health
text
You: "provision pipeline for [product name]"
→ Evo asks 6 questions (2 min)
→ Generates config.json + voice guide
→ Creates system folder in your workspace
→ Registers 6 crons (SELF_ONLY — not public yet)
→ Runs one test generation
→ You review: "looks good" or "redo [feedback]"
→ You say: "go live [slug]"
→ Evo flips all crons to PUBLIC
→ Pipeline runs daily from that point
When triggered, ask the user in sequence (do not dump all at once):
slug = productName.toLowerCase().replace(/[^a-z0-9]/g, '-').replace(/-+/g, '-')
Example: "Echo Reviews" → "echo-reviews"
text
LARRY_ROOT = ~/[workspace]/99-External-Systems/skills/larry
SYSTEMS_DIR = {LARRY_ROOT}/tiktok-marketing/systems
TEMPLATE_DIR = {SYSTEMS_DIR}/echo-system-1
NEW_DIR = {SYSTEMS_DIR}/{slug}-system-1
cp -r {TEMPLATE_DIR} {NEW_DIR}{NEW_DIR}/config.json using answers from Step 1. See references/config-schema.md.{NEW_DIR}/voice.md from brand voice + product description. See references/voice-guide-template.md.{LARRY_ROOT}/tiktok-marketing/systems.jsonWrite {LARRY_ROOT}/social/twitter/config.json using the buyer's brand details.
This file MUST be generated fresh — never copy Xero's version. Use this structure:
json
{
"brand": {
"company": "{productName}",
"products": ["{productName}"],
"mission": "{one-line mission derived from product description}"
},
"timezone": "{user timezone from Step 1}",
"leadMinutes": 10,
"schedule": ["09:00", "12:00", "15:00", "18:00", "20:00"],
"postiz": {
"integrationId": "{POSTIZ_TWITTER_ID from .env}",
"secretFile": "config/secrets/postiz_keys.json"
},
"openai": {
"secretFile": "config/secrets/openai_keys.json"
},
"voiceFile": "{NEW_DIR}/voice.md",
"outputDir": "99-External-Systems/skills/larry/social/twitter/posts",
"mixTargets": {
"build": 0.35,
"ai_news": 0.20,
"ops_lesson": 0.20,
"engage": 0.15,
"cta": 0.10
}
}
Read from ~/.openclaw/.env:
OPENAI_API_KEY — required for image generationPOSTIZ_API_KEY — required for schedulingPOSTIZ_TIKTOK_ID — Postiz integration ID for TikTokPOSTIZ_TWITTER_ID — Postiz integration ID for TwitterMAILERLITE_API_KEY + MAILERLITE_GROUP_ID — required for newsletterTELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID — required for briefingsIf any required key is missing, tell the user exactly which one and link to references/setup-checklist.md for how to get it.
Register 6 crons using the cron tool. All start as SELF_ONLY / dry-run until user confirms:
TikTok — daily at 7:30 AM user timezone:
"Run the TikTok daily post for {slug} system at {NEW_DIR} in SELF_ONLY mode"
Twitter (×5) — spread across day, user timezone:
"Run Twitter posts for {slug} using voice guide at {NEW_DIR}/voice.md — post to Postiz SELF_ONLY"
Newsletter — Mon/Wed/Fri 9 PM:
"Draft and send {productName} newsletter using voice at {NEW_DIR}/voice.md and MailerLite config"
Blog — daily 2 PM:
"Write and publish one SEO blog post for {productName} using voice at {NEW_DIR}/voice.md"
Morning briefing — 7 AM:
"Send morning pipeline briefing for {productName} to Telegram TELEGRAM_CHAT_ID"
Evening briefing — 8 PM:
"Send evening pipeline briefing for {productName} to Telegram TELEGRAM_CHAT_ID"
Store cron IDs in {NEW_DIR}/cron-ids.json.
Generate one TikTok hook pack and one sample tweet. Show output to user. Ask: "Does this look right? Say 'go live [slug]' when ready, or 'redo [feedback]' to adjust."
When user says "go live [slug]":
{NEW_DIR}/config.json: set posting.privacyLevel to "PUBLIC"Pause: Disable all crons in {NEW_DIR}/cron-ids.json using cron tool. Update config: "active": false.
Resume: Re-enable all crons. Update config: "active": true. Confirm to user.
references/setup-checklist.md — step-by-step account setup (start here)references/config-schema.md — how to map product answers to config.json fieldsreferences/voice-guide-template.md — format for generating voice.mdreferences/blog-schema.md — Supabase table schema for blog publishing