Update Pipeline (Master Orchestrator)
Take a URL of an existing article and produce an updated draft + a side-by-side diff. Chains every update skill in order, saving output at each stage.
Invocation
/update-pipeline <url> [--context "free-form direction"]
Examples:
/update-pipeline https://mybrand.com/blog/keyword-research/update-pipeline https://mybrand.com/blog/link-building --context "Refresh stats only — don't restructure"/update-pipeline https://mybrand.com/blog/seo-basics --context "Add ProductB to the on-page section"
Process
- Parse the input.
- Extract the URL (everything before
--contextif present) - Extract the context string (everything after
--context, if present)
- Extract the URL (everything before
- Slugify the URL. Run
python scripts/slugify.py "<url>"and capture the slug (uses last path segment). - Capture context. If context was provided, write it to
content-pipeline/0-context/{slug}.md. - Check pipeline status. Run
python scripts/pipeline_status.py {slug} --update. If any stages already exist:- Autonomous mode (
BLOG_AGENT_AUTONOMOUS=1): skip stages whose output files exist (resume-from-failure). Only overwrite if--regeneratewas passed. No prompt. - Interactive mode: ask the user whether to skip-or-regenerate.
- Autonomous mode (
- Run the chain in order. Wait for each stage's output file before advancing:
/extract-content <url>→ expectscontent-pipeline/updates/1-extracted/{slug}.md/update-guidance {slug}→ expectscontent-pipeline/updates/0-guidance/{slug}.md- Read the guidance file to determine which audits to run. Skip any audit marked "skip".
/update-claims {slug}(if not skipped) → expectscontent-pipeline/updates/2-update-claims/{slug}.md/update-product-mentions {slug}(if not skipped) → expectscontent-pipeline/updates/3-update-product-mentions/{slug}.md/update-topic-gaps {slug}(if not skipped) → expectscontent-pipeline/updates/4-update-topic-gaps/{slug}.md/update-draft {slug}→ expectscontent-pipeline/updates/7-updated-draft/{slug}.md/update-preview {slug}→ expectscontent-pipeline/updates/5-update-preview/{slug}.html
- On any error, stop and report which stage failed.
- On success, report the slug, stages run, audits skipped (and why), and paths to the diff HTML and updated draft.
Reporting format
✓ Update pipeline complete for "{url}" (slug: {slug})
Stages run:
✓ extract-content → updates/1-extracted/{slug}.md
✓ update-guidance → updates/0-guidance/{slug}.md
✓ update-claims → updates/2-update-claims/{slug}.md
- update-product-mentions → SKIPPED (no missing products per guidance)
✓ update-topic-gaps → updates/4-update-topic-gaps/{slug}.md
✓ update-draft → updates/7-updated-draft/{slug}.md
✓ update-preview → updates/5-update-preview/{slug}.html
Next steps:
1. Open updates/5-update-preview/{slug}.html in your browser to review changes
2. Read updates/7-updated-draft/{slug}.md (specifically the "Editor's notes" section at the bottom)
3. Apply final hand-edits, then run /format-for-publish to package as Strapi-ready markdown + JSON (and optionally direct-publish via Doppler)
Skipping audits per guidance
The update-guidance skill scores each audit high / medium / low / skip. Audits marked skip are omitted from the chain. The orchestrator tells the user which were skipped and why.
This avoids generating empty / noisy audit files when the article doesn't need that audit.
When the article doesn't need updating
If update-guidance scores all three audits skip:
- Autonomous mode: write a
content-pipeline/updates/no-update-needed-{slug}.txtmarker, log the slug as "still healthy", and exit cleanly. The auto-blog-loop reads the marker and moves to the next candidate without dispatchingupdate-draft. - Interactive mode: tell the user the article looks healthy; ask whether to proceed with
update-draftanyway.
Auto-publish vs editor-diff modes
The pipeline's terminus depends on mode:
- Autonomous mode (
BLOG_AGENT_AUTONOMOUS=1): after/update-preview, dispatch/format-for-publish {slug} --auto-publish --update. The--updateflag tellsformat_for_strapi.pyto PATCH the existing Strapi article by slug instead of POSTing a new one. The article goes live with the refreshed content. Then runpython scripts/auto_publish_check.py {slug}to verify the public URL renders. On failure, quarantine tocontent-pipeline/9-needs-review/{slug}.md. - Interactive mode: pipeline ends at the diff for editor review. The editor decides what to keep, edit, or reject. After their pass, run
/format-for-publish {slug}to export the final version — but only after the human review step.