Scheduled generation: an engine that never goes stale
The idea: stand up a content presence that runs on a fixed cadence (generating and publishing on schedule, reacting to gaps and wins in your analytics) while staying unmistakably yours and never slipping into repetitive filler.
Most "schedule some posts" tools give you a queue. Reactor gives you an engine: a recurring schedule doesn't queue pre-written posts, it generates fresh, on-brand content each cycle, checks it against everything you've published recently, and only then lays it on the calendar. Hands-off, not robotic.
This workflow lives almost entirely in the MCP tools, so you can wire it up from an agent once and walk away.
Why scheduled AI content usually produces slop, and why this doesn't
The reason scheduled AI content degrades into slop is that each post is generated in isolation from an identical prompt, so the model drifts to its own generic mean and starts repeating structures ("In today's fast-paced world…", the same three-part list, the same hook). Reactor blocks that on two fronts, automatically, on every generation, including the ones fired by a schedule:
- Your writing rules are a first-class, weighted section of the brand engine (
writing_rules). They travel with every prompt, so the model is actively steered away from the patterns you've banned, not just toward a vague "brand voice." - The similarity guard pulls your recent posts for that specific channel into the prompt as "don't echo these," then scores the finished draft against them and regenerates if it's a near duplicate. A daily schedule can't quietly rewrite the same post five ways.
You don't call these. They're on by default. What you do is give them something to work with (a
sharp writing_rules doc) and let the schedule run.
:::tip Tune the writing rules first
Before turning on a daily cadence, spend five minutes on your writing rules via
update_writing_rules. List the openers, transitions, and clichés you never want to see, and the
structural tics to avoid. This single doc does more for scheduled quality than any per-post prompt.
:::
Step 1: make sure the engine is ready
A schedule amplifies whatever the engine already is. Confirm the brand voice, audiences, and rules are in place before you automate.
1. get_engine_config // Confirm voice, writing_rules, platform tones, and active channels
2. update_writing_rules // Sharpen the writing rules (banned openers, structures, clichés)
3. set_platform_tone // Optional: per-channel tone so each platform reads native, not cross-posted
Step 2: create the recurring schedules
A schedule owns a cadence for one channel. It auto-generates a draft each cycle and lays a placeholder
card on the calendar. Set publish_status: "ready" for fully hands-off publishing, or leave it as a
draft for a human to approve.
1. get_posting_recommendations // Best day/hour per platform, learned from your analytics
2. create_schedule // One per channel
// channel_key: "x"
// platform: "x"
// frequency: "weekly"
// day_rules: { "tue": { time: "09:00" }, "thu": { time: "14:00" } }
// topic: "Engineering notes and product updates"
// brief_md: "Angle from the builder's seat; concrete over abstract."
// publish_status: "ready"
3. list_schedules // Confirm each is active with a next_run_at
4. list_cards // Verify placeholder cards appeared on the calendar
Per-day rules let one schedule carry different context on different days (a "teardown" prompt on Tuesdays, a "lesson learned" prompt on Thursdays), which itself keeps the stream varied.
Step 3: layer automation rules so the engine reacts
Schedules give you a steady baseline. Automation rules make the engine opportunistic: it drafts more when you go quiet, and doubles down when something lands.
1. create_automation_rule
// trigger_type: "posting_gap" (e.g. 3 days with nothing on LinkedIn)
// action_type: "create_brief" (auto-draft to close the gap)
2. create_automation_rule
// trigger_type: "engagement_threshold" (a post clears 5% engagement on X)
// action_type: "create_brief" (a follow-up that expands the winning idea)
3. list_automation_rules // Confirm they're active
Because every brief these rules create flows through the same Guard pipeline, "post more" never means "post the same thing more."
Step 4: monitor lightly and tune
A weekly check is enough.
1. list_cards // What's queued and what published this week
2. get_sync_status // Confirm analytics are flowing back
3. get_insights // What the engine noticed: decay alerts, top performers
4. update_schedule // Nudge cadence/topic, or pause with active:false
If a channel's numbers dip, adjust that schedule's topic/brief_md or your writing rules rather
than micromanaging individual posts; you're tuning the engine, not editing output.
The payoff
A handful of create_schedule and create_automation_rule calls buys you a self-sustaining, on-brand
presence across your channels. The schedules keep the lights on; the automation rules chase gaps and
wins; and the Anti-Slop Guard makes sure a month of hands-off publishing
still reads like a person who knows your brand wrote every line. Nothing that fails the Guard
auto-publishes.
Next: point that same engine at every platform at once, or close the loop with research and analytics.