Browse guides
Back to Guides
IntermediateAdvanced TopicsOpenClaw

Build a Content Operations Pipeline with OpenClaw

Build a content operations pipeline with OpenClaw: automated research, AI-assisted drafting, multi-pass editing, CMS publishing, and social cross-posting.

Sam Okafor30 minutes

#Overview: The Modern Content Pipeline

Content creation in 2026 does not have to be a manual grind. With OpenClaw, you can build an end-to-end content pipeline that handles everything from topic research to publication and social media distribution, running autonomously on a schedule you define.

The pipeline follows four phases:

  1. Research: discover trending topics, monitor competitors, gather source material
  2. Draft: generate content in your voice using SOUL.md-trained writing style
  3. Edit: multi-pass editing for quality, SEO, and readability
  4. Publish: push to your CMS and cross-post to social media channels

Each phase can run independently or chain together into a fully automated workflow. You can be as hands-on or hands-off as you like, review every draft before publishing, or let the pipeline run unattended.

This guide assumes you have OpenClaw installed and running with at least one messaging channel configured. You will also need several skills installed throughout the guide. We will call out each skill as it becomes relevant.


#Required Skills

Before building the pipeline, install these skills:

$openclaw skills install notion-sync deep-research workflow-builder

Depending on your publishing targets, you will also need:

$openclaw skills install ghost-publisher wordpress-bridge

For social media distribution:

$openclaw skills install social-scheduler

#Skill Overview

SkillPurpose in Pipeline
deep-researchPhase 1: Topic discovery and source gathering
notion-syncPhase 2-4: Content calendar, drafts database, publishing tracker
workflow-builderOrchestrate multi-phase pipeline execution
ghost-publisherPhase 4: Publish to Ghost CMS
wordpress-bridgePhase 4: Publish to WordPress
social-schedulerPhase 4: Cross-post to Twitter/X, LinkedIn, Threads

#Phase 1: Research

The research phase finds topics worth writing about and gathers source material. This runs daily (or on whatever cadence you choose) and populates your content ideas database.

Configure your agent to monitor multiple sources for trending topics in your niche:

json
{
"content_pipeline": {
"research": {
"sources": {
"hacker_news": {
"enabled": true,
"min_points": 150,
"categories": ["AI", "developer tools", "startups"]
},
"reddit": {
"enabled": true,
"subreddits": ["r/programming", "r/artificial", "r/SaaS"],
"min_upvotes": 100,
"time_filter": "day"
},
"web_search": {
"enabled": true,
"queries": [
"AI agents trending topics this week",
"developer productivity tools 2026",
"autonomous AI latest developments"
]
},
"twitter": {
"enabled": true,
"lists": ["tech-influencers"],
"min_engagement": 500
}
},
"output": {
"database": "notion",
"database_id": "your-content-ideas-database-id"
}
}
}
}

#Setting Up the Research Cron Job

$openclaw cron add "Research trending topics for content pipeline and add top 5 to the Content Ideas Notion database" --schedule "0 7 * * *" --model claude-sonnet-4-6-20260217

This runs every morning at 7:00 AM. The agent:

  1. Searches Hacker News for AI and developer tool stories with 150+ points
  2. Checks configured subreddits for high-engagement posts
  3. Runs web searches for your target keywords
  4. Deduplicates and ranks topics by relevance and trending velocity
  5. Adds the top 5 topics to your Notion Content Ideas database with source links

#Research Output Format

Each topic added to Notion includes:

markdown
## Topic: [Title]
**Trend Score:** 8.5/10
**Sources:** HN (342 points), Reddit r/programming (289 upvotes)
**Angle:** [Suggested unique angle for your blog]
**Key Points:**
- Point 1 with source citation
- Point 2 with source citation
- Point 3 with source citation
**Competitor Coverage:** [Links to existing articles on this topic]
**Freshness:** Published within last 24 hours

Add a "Content Gap" field to your research output. Have the agent identify what existing articles on the topic are missing, this gives you a built-in unique angle for every piece of content.


#Phase 2: Drafting

The drafting phase takes a researched topic and produces a complete first draft in your writing voice. This is where SOUL.md becomes critical.

#Training Your Writing Voice

Your SOUL.md should include a dedicated writing style section. Add this to ~/.openclaw/workspace/SOUL.md:

markdown
## Writing Style
When writing blog posts and articles:
- Write in first person. Use "I" and "we" naturally.
- Keep paragraphs short — 2-3 sentences maximum.
- Start articles with a hook: a surprising stat, a provocative question,
or a relatable problem statement. Never start with "In this article..."
- Use concrete examples over abstract explanations. Show, don't tell.
- Maintain a conversational but authoritative tone. Imagine explaining
something to a smart friend over coffee.
- Include code examples where relevant, always with comments.
- End every article with a clear takeaway and a call to action.
- Target 1,200-1,800 words for standard posts, 2,500-3,500 for deep dives.
- Use subheadings every 200-300 words. Readers scan before they read.
- Avoid jargon unless your audience expects it. When you must use
technical terms, define them inline.

#Blog Post Templates

Create a template that the agent uses for consistent structure. Save this as a skill or include it in your pipeline configuration:

yaml
blog_post_template:
structure:
- hook: "Opening paragraph that grabs attention (2-3 sentences)"
- context: "Why this topic matters right now (1 paragraph)"
- body:
- section_1: "Core concept or problem statement"
- section_2: "Solution or approach with examples"
- section_3: "Implementation details or step-by-step"
- section_4: "Results, benchmarks, or proof points"
- conclusion: "Key takeaway and next steps"
- cta: "Call to action (newsletter signup, related post, product link)"
metadata:
- title: "SEO-optimized, under 60 characters"
- meta_description: "Compelling summary, 150-160 characters"
- tags: "3-5 relevant tags"
- featured_image_prompt: "Describe the ideal featured image"

#Draft Generation Cron Job

$openclaw cron add "Check the Content Ideas database for approved topics. For the highest-priority approved topic, write a complete blog post draft following the blog post template. Save the draft to the Drafts database in Notion." --schedule "0 10 * * 1-5" --model claude-sonnet-4-6-20260217

This runs at 10:00 AM on weekdays. The workflow:

  1. Agent checks Notion for topics with status "Approved"
  2. Picks the highest-priority approved topic
  3. Gathers the research notes from Phase 1
  4. Writes a complete draft following your template and SOUL.md voice
  5. Saves the draft to your Notion Drafts database
  6. Notifies you via Telegram that a new draft is ready for review

Always review drafts before publishing, especially when you are first setting up the pipeline. The agent will improve over time as you provide feedback, but early drafts may need significant editing. Use the editing phase (Phase 3) to systematically improve quality.


#Phase 3: Editing

The editing phase applies multiple passes to improve draft quality. Each pass focuses on a different aspect of the content.

#Multi-Pass Editing Workflow

Configure a three-pass editing process:

json
{
"content_pipeline": {
"editing": {
"passes": [
{
"name": "structural_edit",
"model": "claude-opus-4-6-20260217",
"instructions": "Review the draft for logical flow, argument structure, and completeness. Check that every section serves the overall narrative. Flag sections that are weak, redundant, or out of order. Suggest additions for gaps in the argument."
},
{
"name": "seo_optimization",
"model": "claude-sonnet-4-6-20260217",
"instructions": "Optimize for search engines without sacrificing readability. Check: target keyword in title, first paragraph, and 2-3 subheadings. Meta description is compelling and includes the keyword. Internal links to 2-3 related posts. External links to 1-2 authoritative sources. Image alt text suggestions."
},
{
"name": "readability_polish",
"model": "claude-sonnet-4-6-20260217",
"instructions": "Final polish for readability. Target a Flesch reading score of 60-70. Simplify complex sentences. Remove filler words. Ensure consistent tense and voice. Check for grammar and spelling. Verify all code examples are syntactically correct."
}
],
"between_passes": "save_to_notion",
"final_status": "Ready for Review"
}
}
}

#SEO Checklist

The SEO pass checks these specific elements:

ElementTargetExample
Title tagUnder 60 chars, includes primary keyword"How to Build AI Agents with OpenClaw"
Meta description150-160 chars, includes keyword, has CTA"Learn how to build autonomous AI agents..."
H1Matches title, one per pageSame as title
H2/H3Include secondary keywords naturally"Setting Up Your First Agent"
Keyword density1-2% for primary keywordNatural usage, not stuffed
Internal links2-3 links to related contentLinks to other guides
External links1-2 authoritative sourcesLinks to official docs
Image alt textDescriptive, includes keyword when natural"OpenClaw dashboard showing agent configuration"
URL slugShort, includes keyword, hyphenated/build-ai-agents-openclaw

#Readability Targets

MetricTarget RangeTool
Flesch Reading Ease60-70 (conversational)Built-in analysis
Average sentence length15-20 wordsBuilt-in analysis
Paragraph length2-4 sentencesStructural check
Passive voiceUnder 10% of sentencesGrammar check
Subheading frequencyEvery 200-300 wordsStructural check

#Phase 4: Publishing

The publishing phase pushes approved content to your CMS and distributes it across social media channels.

#CMS Publishing

#Ghost CMS

json
{
"content_pipeline": {
"publishing": {
"ghost": {
"api_url": "https://your-blog.ghost.io",
"admin_api_key": "your-ghost-admin-api-key",
"default_status": "draft",
"default_tags": ["ai", "technology"],
"auto_schedule": true,
"schedule_time": "09:00",
"schedule_timezone": "America/New_York"
}
}
}
}

#WordPress

json
{
"content_pipeline": {
"publishing": {
"wordpress": {
"site_url": "https://your-blog.com",
"username": "your-username",
"app_password": "xxxx xxxx xxxx xxxx",
"default_status": "draft",
"default_category": "Technology",
"featured_image": true,
"image_generation": "dall-e-3"
}
}
}
}

#Notion as CMS

If you use Notion as your public blog (via Super, Potion, or similar):

json
{
"content_pipeline": {
"publishing": {
"notion": {
"database_id": "your-published-posts-database-id",
"status_field": "Status",
"publish_status": "Published",
"date_field": "Publish Date",
"auto_set_date": true
}
}
}
}

#Publishing Cron Job

$openclaw cron add "Check the Drafts database for posts with status Ready to Publish. For each one, publish to Ghost CMS as a scheduled post for tomorrow at 9 AM. Update the status to Published in Notion." --schedule "0 16 * * *" --model claude-sonnet-4-6-20260217

Set default_status to "draft" rather than "published" when you first set up the pipeline. This gives you a final review in your CMS before content goes live. Once you trust the pipeline quality, switch to "scheduled" for fully automated publishing.


#Social Media Distribution

After publishing, automatically distribute content across social media platforms.

#Social Media Cross-Posting Configuration

json
{
"content_pipeline": {
"social_media": {
"twitter": {
"enabled": true,
"api_key": "your-twitter-api-key",
"api_secret": "your-twitter-api-secret",
"access_token": "your-access-token",
"access_secret": "your-access-secret",
"post_format": "thread",
"max_tweets_in_thread": 5,
"include_link": true,
"auto_reply_to_comments": true,
"reply_model": "claude-haiku-4-20260210"
},
"linkedin": {
"enabled": true,
"access_token": "your-linkedin-token",
"post_format": "article_summary",
"include_hashtags": true,
"max_hashtags": 5,
"audience": "professional"
},
"threads": {
"enabled": true,
"access_token": "your-threads-token",
"post_format": "casual_summary",
"max_length": 500
}
}
}
}

#Platform-Specific Content Adaptation

The agent adapts your content for each platform:

PlatformFormatToneLength
Twitter/XThread (3-5 tweets)Punchy, hook-driven280 chars per tweet
LinkedInProfessional summaryAuthoritative, insight-focused1,300 chars
ThreadsCasual summaryConversational, personal500 chars
MastodonBrief summary with linkCommunity-friendly500 chars

#Auto-Tweet New Posts

$openclaw cron add "Check for new published blog posts. For each new post published today, create a Twitter thread summarizing key points and linking to the full article. Also post a LinkedIn summary and a Threads post." --schedule "0 11 * * *" --model claude-sonnet-4-6-20260217

#Social Media Engagement

Configure the agent to monitor and respond to social media comments:

json
{
"content_pipeline": {
"engagement": {
"monitor_replies": true,
"monitor_interval_minutes": 30,
"auto_respond": true,
"response_model": "claude-haiku-4-20260210",
"response_guidelines": "Be helpful and genuine. Thank people for thoughtful comments. Answer questions with specifics. Never be defensive about criticism — acknowledge valid points.",
"escalate_to_human": ["complaints", "partnership requests", "media inquiries"],
"like_positive_mentions": true
}
}
}

Auto-responding to social media comments carries reputation risk. Start with auto_respond set to false and manually review the agent's suggested responses for the first 2-3 weeks. Once you are confident in the response quality, enable auto-respond with clear escalation rules.


#Complete Pipeline Cron Schedule

Here is a complete cron configuration for a daily content pipeline:

json
{
"cron": {
"jobs": [
{
"id": 101,
"task": "Research trending topics in AI, developer tools, and startups. Check Hacker News (150+ points), Reddit (r/programming, r/artificial), and Twitter tech lists. Add top 5 topics to the Content Ideas Notion database with research notes and suggested angles.",
"schedule": "0 7 * * *",
"model": "claude-sonnet-4-6-20260217",
"channel": "telegram",
"enabled": true
},
{
"id": 102,
"task": "Check the Content Ideas database for approved topics. Write a complete blog post draft for the highest-priority approved topic. Follow the blog post template and SOUL.md writing style. Save to Drafts database with status 'In Editing'.",
"schedule": "0 10 * * 1-5",
"model": "claude-sonnet-4-6-20260217",
"channel": "telegram",
"enabled": true
},
{
"id": 103,
"task": "Run the three-pass editing pipeline on any drafts with status 'In Editing'. Pass 1: structural edit. Pass 2: SEO optimization. Pass 3: readability polish. Update status to 'Ready for Review' when complete.",
"schedule": "0 13 * * 1-5",
"model": "claude-sonnet-4-6-20260217",
"channel": "telegram",
"enabled": true
},
{
"id": 104,
"task": "Check for drafts with status 'Ready to Publish'. Publish to Ghost CMS scheduled for tomorrow at 9 AM. Update Notion status to 'Published'. Generate social media posts for each platform.",
"schedule": "0 16 * * *",
"model": "claude-sonnet-4-6-20260217",
"channel": "telegram",
"enabled": true
},
{
"id": 105,
"task": "Post social media threads and summaries for any blog posts published today. Twitter thread, LinkedIn summary, Threads post. Include links to full articles.",
"schedule": "0 11 * * *",
"model": "claude-sonnet-4-6-20260217",
"channel": "telegram",
"enabled": true
},
{
"id": 106,
"task": "Monitor social media replies and mentions. Respond to genuine questions and comments. Escalate complaints, partnership requests, and media inquiries to me directly.",
"schedule": "0 */2 * * *",
"model": "claude-haiku-4-20260210",
"channel": "telegram",
"enabled": true
},
{
"id": 107,
"task": "Weekly content review: summarize this week's published content, engagement metrics (if available), top-performing posts, and content calendar status for next week. Send a comprehensive report.",
"schedule": "0 18 * * 5",
"model": "claude-sonnet-4-6-20260217",
"channel": "telegram",
"enabled": true
}
],
"timezone": "America/New_York",
"max_concurrent": 1,
"retry_on_failure": true,
"retry_delay_minutes": 10
}
}

#Pipeline Timing Visual

7:00 AM ── Research trending topics
│
10:00 AM ── Draft blog post from approved topic
│
1:00 PM ── Multi-pass editing pipeline
│
4:00 PM ── Publish to CMS (scheduled for next morning)
│
11:00 AM ── Social media distribution (next day)
│
Every 2h ── Social media engagement monitoring
│
6:00 PM ── Friday: Weekly content review

#Advanced: Content Repurposing

One blog post should not live in just one format. Configure your agent to automatically repurpose content:

#Blog Post to Twitter Thread

yaml
repurpose:
blog_to_thread:
trigger: "on_publish"
steps:
- extract_key_points: 5
- format_as_thread:
hook_tweet: "Start with the most surprising insight"
body_tweets: "One key point per tweet with examples"
closing_tweet: "Link to full article with CTA"
- schedule_post:
delay_hours: 2
platform: "twitter"

#Blog Post to Newsletter

yaml
repurpose:
blog_to_newsletter:
trigger: "weekly"
schedule: "0 10 * * 4"
steps:
- collect_posts: "published this week"
- generate_newsletter:
intro: "Personal note about the week"
post_summaries: "2-3 sentence summaries with links"
bonus_content: "One exclusive insight not in the blog posts"
- send_via: "agentmail"
- recipients: "newsletter-list"

#Blog Post to LinkedIn Article

yaml
repurpose:
blog_to_linkedin:
trigger: "on_publish"
steps:
- adapt_tone: "professional and insight-focused"
- shorten_to: 1300
- add_hashtags: 5
- add_question: "End with an engaging question for comments"
- schedule_post:
delay_hours: 4
platform: "linkedin"

#Advanced: A/B Testing Headlines

Test different headlines to see which performs better:

json
{
"content_pipeline": {
"ab_testing": {
"enabled": true,
"test_element": "headline",
"variants": 3,
"test_duration_hours": 24,
"winning_metric": "click_through_rate",
"auto_select_winner": true,
"notification": "telegram"
}
}
}

How it works:

  1. Generate headline variants

    When publishing a post, the agent generates 3 headline variants with different angles: curiosity-driven, benefit-driven, and urgency-driven.

  2. Deploy the test

    The first headline is used for the initial publication. Social media posts use different variants across platforms to test engagement.

  3. Monitor performance

    Over 24 hours, the agent tracks click-through rates, social shares, and engagement metrics for each variant.

  4. Select the winner

    After the test period, the agent updates the blog post title to the winning headline and notifies you of the results.


#Advanced: Engagement Tracking

Set up a weekly engagement report to track content performance:

$openclaw cron add "Generate a weekly content performance report. Include: posts published this week, total views (if analytics connected), social media engagement per post, top-performing content, and recommendations for next week topics based on what resonated." --schedule "0 10 * * 1" --model claude-sonnet-4-6-20260217

#Connecting Analytics

If your CMS supports API access to analytics (Ghost, WordPress with Jetpack):

json
{
"content_pipeline": {
"analytics": {
"ghost": {
"api_url": "https://your-blog.ghost.io",
"content_api_key": "your-content-api-key"
},
"track_metrics": ["views", "reading_time", "scroll_depth"],
"report_frequency": "weekly",
"report_channel": "telegram"
}
}
}

#Cost Estimation

Here is what a typical content pipeline costs in API usage:

PhaseModelFrequencyEst. Cost/Month
ResearchSonnet 4.6Daily$8-12
DraftingSonnet 4.65x/week$15-25
Editing (3 passes)Sonnet 4.6 + Opus 4.65x/week$20-35
PublishingSonnet 4.65x/week$3-5
Social mediaSonnet 4.6 + Haiku 4Daily + every 2h$10-15
Weekly reviewSonnet 4.6Weekly$2-3
Total$58-95/month

To reduce costs, use Sonnet 4.6 for all passes instead of Opus for the structural edit. The quality difference is modest for most content, and you save roughly $15-20/month. Reserve Opus for premium or long-form content where structural quality matters most.


#Troubleshooting

#Drafts are off-topic or low quality

  • Review and refine your SOUL.md writing style section
  • Add more specific examples of your preferred writing style
  • Use Opus 4.6 for drafting (higher quality, higher cost)
  • Add a "reference posts" section to your template with links to your best existing content

#Social media posts feel robotic

  • Add a social media personality section to SOUL.md
  • Include examples of your actual tweets and LinkedIn posts
  • Set a brief delay before posting to simulate natural behavior
  • Use Haiku 4 for engagement responses (it tends to be more concise and natural)

#Pipeline steps are failing silently

  • Check cron execution history with openclaw cron runs <job-id> --limit 50, since there is no cron history subcommand and no --last flag
  • Enable workflow logging: set logging: true in workflow-builder config
  • Check that all required skills are installed and enabled
  • Verify API tokens for each service have not expired

#Notion sync is slow or missing data

  • Verify the Notion API key has access to all databases used in the pipeline
  • Check that database field names match exactly what the agent expects
  • Increase sync_interval_minutes if you are hitting Notion rate limits

#Next Steps

Sources

  1. OpenClaw: Where things live on disk
  2. OpenClaw: Agent workspace
  3. OpenClaw: Automations (cron)

Skip the trial and error

ClawDocx members get 500+ tested prompts, ready-to-install SKILL.md files, SOUL.md and CLAUDE.md templates, and an MCP server so your agent can pull all of it directly while it works.