Tuning the Pipeline
Voice, cadence, approval expectations, failure handling, and the knobs you can turn without rebuilding the workflows.
Configuring the Blog Voice
All generated content — the monthly brief titles, the content ideas, the daily drafts — is written in first-person voice as your AI employee. The default voice is "confident, practical, day-to-day examples of running client ops". You almost certainly want to customize it for your brand. Tell your AI employee once: "our blog voice is measured, evidence-heavy, avoids superlatives, uses short sentences, draws examples from B2B SaaS operations". The voice is stored in your knowledge base as the `voice.blog_voice` fact and applied by every future brief and draft. You can update or replace it any time the tone drifts — the next run uses the new voice.
Updating the blog voice
One sentence sets the tone for every future draft.
Tuning the Research Filters
Stage 1's blog gap analysis has three tunable thresholds: min_volume (default 100 monthly searches), max_difficulty (default 60), and similarity_threshold for the existing-post coverage check (default 0.55). Lower min_volume if you are in a niche where 100/mo is already a big keyword. Raise max_difficulty if you have established domain authority and can realistically rank against tougher competition. Lower similarity_threshold if the existing-coverage filter is being too aggressive (stripping out candidates that are actually meaningfully different from existing posts). These are one-sentence changes — "use max_difficulty 75 for next month's research" — and they persist as settings.
Approval Turnaround Expectations
The pipeline does not impose a turnaround on you — you can approve calendar rows or draft emails on any schedule that works. But the downstream cadence depends on your pace at the approval gates. If approved rows pile up in the sheet, the daily drafter will work through them one per day in order of row ID. If drafts pile up unapproved in your inbox, the publisher waits — no drafts are abandoned, no automatic reminders are sent. A realistic rhythm for most clients: review the monthly calendar within a week of receiving it (typical approve rate: 15-20 out of 30), then approve drafts within a day of receiving them. That gives you roughly 15-20 posts per month shipped on a predictable cadence.
Common Failure Modes
Four things can go wrong in the pipeline, and each has a specific behavior. (1) Stage 1 returns too few gap keywords — the workflow aborts, you get an email explaining which threshold to widen. (2) LLM brief generation fails on some Stage 1 rows — the sheet is still delivered, failed rows get "| BRIEF FAILED" in the notes column, you ask your AI employee to regenerate just those. (3) Stage 2 draft truncates even after retry — the email subject is prefixed with [TRUNCATED] and the body warns you; you can ask for specific missing sections to be completed. (4) Stage 3 publish webhook fails — the row's draft_status flips to failed, a Telegram diagnostic explains the HTTP error and the likely cause, and you can re-run the publish after fixing the underlying CMS issue.
The pipeline never silently drifts. Every silent-skip path has a heartbeat that pings Telegram, and every hard-fail path has an explicit diagnostic email. If a stage stops producing outputs without an explanation, that is a bug worth reporting — not a quiet failure that will self-correct.
Pausing and Resuming
Any of the three stages can be paused without breaking the others. "Pause the monthly research — we are doing something different in Q3" stops the 20th-of-the-month trigger without touching the drafter or publisher. "Pause the daily drafter through the end of next week — I am on vacation" stops the 08:30 run without touching the monthly calendar or the publisher. Resuming is the same — one sentence. Pausing is preferred over deleting when you are taking a break, because it preserves all workflow state (scheduled crons, sheet IDs, settings) without requiring a rebuild from templates.