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.
#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:
- Research: discover trending topics, monitor competitors, gather source material
- Draft: generate content in your voice using SOUL.md-trained writing style
- Edit: multi-pass editing for quality, SEO, and readability
- 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:
Depending on your publishing targets, you will also need:
For social media distribution:
#Skill Overview
| Skill | Purpose in Pipeline |
|---|---|
deep-research | Phase 1: Topic discovery and source gathering |
notion-sync | Phase 2-4: Content calendar, drafts database, publishing tracker |
workflow-builder | Orchestrate multi-phase pipeline execution |
ghost-publisher | Phase 4: Publish to Ghost CMS |
wordpress-bridge | Phase 4: Publish to WordPress |
social-scheduler | Phase 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.
#Trending Topic Discovery
Configure your agent to monitor multiple sources for trending topics in your niche:
{ "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
This runs every morning at 7:00 AM. The agent:
- Searches Hacker News for AI and developer tool stories with 150+ points
- Checks configured subreddits for high-engagement posts
- Runs web searches for your target keywords
- Deduplicates and ranks topics by relevance and trending velocity
- Adds the top 5 topics to your Notion Content Ideas database with source links
#Research Output Format
Each topic added to Notion includes:
## 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 hoursAdd 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:
## Writing StyleWhen 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:
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
This runs at 10:00 AM on weekdays. The workflow:
- Agent checks Notion for topics with status "Approved"
- Picks the highest-priority approved topic
- Gathers the research notes from Phase 1
- Writes a complete draft following your template and SOUL.md voice
- Saves the draft to your Notion Drafts database
- 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:
{ "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:
| Element | Target | Example |
|---|---|---|
| Title tag | Under 60 chars, includes primary keyword | "How to Build AI Agents with OpenClaw" |
| Meta description | 150-160 chars, includes keyword, has CTA | "Learn how to build autonomous AI agents..." |
| H1 | Matches title, one per page | Same as title |
| H2/H3 | Include secondary keywords naturally | "Setting Up Your First Agent" |
| Keyword density | 1-2% for primary keyword | Natural usage, not stuffed |
| Internal links | 2-3 links to related content | Links to other guides |
| External links | 1-2 authoritative sources | Links to official docs |
| Image alt text | Descriptive, includes keyword when natural | "OpenClaw dashboard showing agent configuration" |
| URL slug | Short, includes keyword, hyphenated | /build-ai-agents-openclaw |
#Readability Targets
| Metric | Target Range | Tool |
|---|---|---|
| Flesch Reading Ease | 60-70 (conversational) | Built-in analysis |
| Average sentence length | 15-20 words | Built-in analysis |
| Paragraph length | 2-4 sentences | Structural check |
| Passive voice | Under 10% of sentences | Grammar check |
| Subheading frequency | Every 200-300 words | Structural check |
#Phase 4: Publishing
The publishing phase pushes approved content to your CMS and distributes it across social media channels.
#CMS Publishing
#Ghost CMS
{ "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
{ "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):
{ "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
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
{ "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:
| Platform | Format | Tone | Length |
|---|---|---|---|
| Twitter/X | Thread (3-5 tweets) | Punchy, hook-driven | 280 chars per tweet |
| Professional summary | Authoritative, insight-focused | 1,300 chars | |
| Threads | Casual summary | Conversational, personal | 500 chars |
| Mastodon | Brief summary with link | Community-friendly | 500 chars |
#Auto-Tweet New Posts
#Social Media Engagement
Configure the agent to monitor and respond to social media comments:
{ "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:
{ "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
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
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
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:
{ "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:
- Generate headline variants
When publishing a post, the agent generates 3 headline variants with different angles: curiosity-driven, benefit-driven, and urgency-driven.
- Deploy the test
The first headline is used for the initial publication. Social media posts use different variants across platforms to test engagement.
- Monitor performance
Over 24 hours, the agent tracks click-through rates, social shares, and engagement metrics for each variant.
- 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:
#Connecting Analytics
If your CMS supports API access to analytics (Ghost, WordPress with Jetpack):
{ "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:
| Phase | Model | Frequency | Est. Cost/Month |
|---|---|---|---|
| Research | Sonnet 4.6 | Daily | $8-12 |
| Drafting | Sonnet 4.6 | 5x/week | $15-25 |
| Editing (3 passes) | Sonnet 4.6 + Opus 4.6 | 5x/week | $20-35 |
| Publishing | Sonnet 4.6 | 5x/week | $3-5 |
| Social media | Sonnet 4.6 + Haiku 4 | Daily + every 2h | $10-15 |
| Weekly review | Sonnet 4.6 | Weekly | $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 nocron historysubcommand and no--lastflag - Enable workflow logging: set
logging: truein 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_minutesif you are hitting Notion rate limits
#Next Steps
- Understanding Skills: how skills power the pipeline
- Heartbeat & Cron Configuration: fine-tune your scheduling
- SOUL.md Mastery: perfect your writing voice
- Cost Optimization: reduce pipeline costs
- Top 20 Skills: other skills to enhance your pipeline