For a few months Project Ouroboros tried the obvious thing: have a daily GitHub Action call an LLM, generate a post, and push it straight to WordPress. It worked, until it did not. Rate limits, refused completions, and the occasional model that decided to write in markdown when the pipeline expected HTML all conspired to produce gaps in the publishing schedule and the occasional embarrassing draft.
The change
The pipeline now has two clearly separated phases.
Authoring happens offline, inside a coding session. An agent (or a human) drafts a post, a calculator, or a fraud report, and commits the file to content/<kind>/pending/. Each file carries a small YAML frontmatter block that captures the title, slug, categories, optional schedule, and optional social-promotion text.
Publishing happens online, on a fixed daily schedule. A small GitHub Action enumerates the pending files, validates the frontmatter, skips anything whose scheduled_for date is in the future, and ships the rest. No LLM credentials are passed to that workflow. The action installs only requests and tweepy and is hard-capped at five minutes.
What this buys
The most obvious win is cost. The daily Action no longer pays for an LLM call it might not even need. The less obvious win is calm: you can read the file in pending/ and know with certainty that exactly that bytes-for-bytes content will appear on the site. There is no last-second model substitution, no tone drift, and no chance of a refusal at 8 a.m. central.
Idempotent re-runs
Each published file’s SHA-256 is recorded in data/publisher_state.json. Re-running the action against the same queue is a no-op. That makes manual workflow_dispatch runs safe to use as a “publish-now” button for a fix or a hot post.
Trade-offs
The honest cost is that the site will not ship anything when no human (or coding agent) has authored work into the queue. That is fine for this project. We would rather publish less, on a predictable cadence, than fill the schedule with content the team has not actually read.
Disclosure
This post was drafted with AI assistance and reviewed before being committed to the content queue.