Capture turns calls into insights; this turns the day's strongest insight into a pillar article, runs it
past the customer's eyes and the editor's, derives and edits a LinkedIn post, then makes an on-brand image set (hero + figures). Article-first,
because one good article becomes many platform posts later (LinkedIn, X, newsletter) — write the pillar
once, atomize forever.
-
Orient + find what's new. Read the day's business/ops/nightly-digests/<date>.md. Gather unused
signals — the dated signals/<YYYY-MM-DD>-*.md files with status: new (plus evergreen POVs
not yet drafted into a published pillar); skip used/archived and the meta files (AGENTS.md,
_template.md, _index.md, _archive/ are NOT signals). (content/_work/LAST_DRAFTED is just a
run-log now; per-signal status is the truth.) git log for today.
-
Pick ONE signal — the strongest, most specific unused signal (status: new, or an evergreen POV
not yet published) with a real story / POV from an actual source. Dedup vs content/04-published/ and
existing content/03-drafts/ (never rewrite a published pillar). Carry its source so the draft stays
grounded. Slugify the topic and make the bundle folder content/03-drafts/<YYYY-MM-DD>-<topic-slug>/
(date-first, so drafts/ sorts chronologically).
- Fresh
product-update signals jump the queue. Ingestion writes type: product-update signals
(cited to PRs) from the GitHub capture. Feature news is perishable — announce it while it's new —
so a fresh product-update outranks evergreen insights for tonight's slot; insights fill otherwise.
- Branch on the signal's
type. If it's a product-update, draft with Engine B's
feature-announcement variant (consulting-product-engine — its draft half): ground every claim in the
cited PRs, use the feature-announcement email format, Recoup-customer ICP for the email. Otherwise use
the insight/thought-leadership variant below. Either way the output is the same unified bundle
(article + linkedin + email + images + meta.yml), each text format gated.
-
Write the ARTICLE (the pillar). Read consulting-copy-writer first: voice-principles,
anti-slop, formats §blog/articles, and references/social-article-style.md. Use the social-article
structure by default: thesis first, purpose sentence, thought experiment, fair comparison, pragmatic
verdict. Aim 800–1,400 words. Save as article.md with frontmatter: title, source
(insight/transcript path), audience, status: draft.
-
Reader review (customer POV) + rewrite. Read consulting-copy-reviewer and run it on
article.md: a fresh-context subagent role-plays Sid's ICP customer and returns reader-reaction
notes (unclear jargon, where they tune out, trust, whether they'd share). Rewrite the article from the
accepted notes — clearer, less technical, worth the reader's time, every fact intact. This is the
customer gate; the editor gate is next.
-
Edit the ARTICLE. Read consulting-copy-editor and run its editorial pass on the rewritten
article.md. Implement accepted edits in place. Defer score/report/commit to step 8 because this
parent workflow scores the full bundle once. Use the edited article as the source for every downstream step.
-
Derive + gate the LinkedIn POST. Read consulting-copy-writer §social + consulting-linkedin-post-architect.
Write a stand-alone post that delivers complete value on its own (don't just paste the article intro) —
phone-first formatting, value above the fold. The article link is optional: add it only as a bonus after
an already-complete post, never a forced "read the article" / "link in comments." Save as linkedin.md
(frontmatter: source = the article path, hook, status: draft). Then gate it: consulting-copy-reviewer
(Sid's operator/builder ICP) → rewrite from accepted notes → consulting-copy-editor, edits in place.
-
Derive + gate the EMAIL. From the edited article, write a single-idea broadcast email to the list
(consulting-copy-writer + the routing in email/AGENTS.md) — a one-idea nurture send, not the weekly
newsletter. Lead with the reader's takeaway; one clear CTA; it may lead with the bundle hero (images/image1.png).
Save as email.md (frontmatter: source = the article path, subject, status: draft). Then gate it:
consulting-copy-reviewer (Sid's subscriber/prospect ICP) → rewrite → consulting-copy-editor, edits in place.
-
Illustrate the edited article. Read consulting-article-illustrator (the house article-image skill;
brand taste via consulting-tasteful-design / DESIGN.md). Per its density rule, produce the
hero — saved as images/image1.png and embedded above the first line — plus ~1 inline figure per
major section, saved as images/image2.png, image3.png, … (reading order) and embedded at each
section break (pick the archetype that fits each concept). Hand-drawn whiteboard palette; generate with gpt-image-2 (this
run is a cloud worker with the Higgsfield connector → use the illustrator's Higgsfield gpt-image-2
route). Run the illustrator's bar on each image. If image generation isn't available, stage the
article without figures and flag it in the report — don't block the article.
-
Write the manifest, mark the signal, report, score, commit. Write the bundle meta.yml — the
approval state machine: id (the folder), title, date, engine: A, source (the signal path), a
formats: list (one row per artifact — article/linkedin/email, each with file: + status: draft),
images:, and a gates: field recording reviewer+editor ran on each format. This is the row Sid approves
per format. Then set the consumed signal's status: used + used_by:
the bundle path, and regenerate signals/_index.md (an evergreen insight stays evergreen — append
the bundle to its used_by history instead). Write business/ops/content-reports/<date>.md (Article ·
Article gates · Post · Post gates · Email · Email gates · Hero + figures · Skipped (why) · Needs Sid), run
python evals/content/score_run.py (composite + flags at top), commit each draft why-first, stamp
content/_work/LAST_DRAFTED, then stop.