← Manohar Papasani · AI R&D

How an AI workforce runs itself

Thirty-six agents write, check and publish four posts a day on five platforms. Every team has its own clock, re-runs itself if a post does not go out, and is tested agent by agent every week.

36agents in the content workforce
7independent schedulers
4posts a day
5platforms per post
01 · SYSTEM MAP

Seven silos, and no row calls another

Each team has its own exact-time trigger on Cloudflare, its own workflow on GitHub Actions and its own agents. If one team breaks, the other six do not notice.

When (IST) Clock · Cloudflare Worker Run · GitHub Actions Agents · LangGraph Output 8:00 AMLeadership ace-leadership-trigger motivation-daily.yml Leadership team 12:00 PMAI interview Q&A ace-interview-trigger interview.yml Interview team 4:00 PMAI news digest lbe-trigger daily.yml News pipeline + Haiku gate 11:30 PMTech learning ace-learning-trigger motivation.yml Learning team LinkedIn 4 posts a day 5:35 AMMon and Thu ace-brand-analytics-… brand-analytics.yml Brand analytics agents Website metrics 9:00 AMOperations ace-operations-trigger cost-report · anomalyweekly-evals (Sun) Cost, anomaly, eval agents Reports and alerts +10 to +90 minAfter every slot promo-trigger distribute.yml Promotion engine X Bluesky Facebook Dev.to same post, read-only, staggered Shared by no one: each row has its own Worker, timer, workflow, self-heal and alerts. A GitHub watchdog checks all of them on a separate clock. No post is scheduled by GitHub cron: Cloudflare fires on the minute, GitHub only runs the work.
Seven pipelines, one per row. The amber lines are the four daily posts; the blue line is cross-posting, the only link between rows, and it only reads post records.
02 · INSIDE A POST TEAM

Every post is written, checked and either published or dropped

The leadership team as it runs in code: a LangGraph state graph. Routing is decided in code, not by the model, so a weak post is skipped instead of published.

quote not verified: find another fails review: one rewrite, at most Briefinsights Plannerpicks the theme Quote scoutfinds a quote Verifierchecks Wikiquote Writerowner's voice Poster scoutmakes the card Criticfour judges Publishexactly once pass Critic's judges Fact-checker Technical reviewer Consistency Generic-voice check Skip nothing strong enough, quote unverifiable, or second review failed: the slot heals or stays empty, never weak
Same writer, critic and publisher in every team. The interview team swaps the first three steps for an interview scout that finds a real reported question; the news team swaps them for a news scout.
03 · ONE DAY

Fixed slots, then a calm ripple to every platform

Each post goes to LinkedIn on the minute. The other platforms follow one at a time, at the same offsets every day, and never as a burst of old posts.

24 hours, IST 00 06 12 18 24 8:00 Leadership 12:00 Interview 16:00 AI news 23:30 Learning 5:35 analytics (Mon, Thu) 9:00 cost and anomaly checks 23:45 billing Every slot, zoomed in: minutes after the post LinkedIn+0 X+10 Bluesky+25 Facebook+50 Dev.to+90 At least 45 minutes between two posts on one platform · posts older than 12 hours are never sent
Four slots, five platforms, twenty posts a day. Every post carries the same six follow links: LinkedIn, GitHub, Bluesky, X, Dev.to and Facebook. On X the links are written as handles, because X posts carry no links.
04 · SELF-HEALING

A missed slot repairs itself within minutes

After each slot the team's own Worker checks every five minutes. If no run has succeeded and none is running, it starts another. Alerts fire only if healing has not worked.

Minutes after the slot Trigger on the minute a check every 5 minutes from +5 +30 alert +60 alert +90 final alert Heal only when no run succeeded and none is running · at most 4 healing runs · posted exactly once, recorded in a ledger GitHub watchdog checks every pipeline on GitHub's own clock, so a Cloudflare problem cannot hide itself
Measured on 3 November: the 12 PM post fired at 12:00:54 and the 4 PM post at 4:01, and every platform followed at its exact offset.
05 · QUALITY LOOP

Every agent is tested on its own, every week

Each judge runs with its production prompt on planted mistakes and on clean answers. It must catch real faults without crying wolf, or the owner is alerted.

Per-agent testsSundays, 2:00 AMplanted faults + clean cases Score each agentcatches ≥ 75% of faultsfalse alarms ≤ 34% Fix on a branchprompt, schema or modelfallback CI gatelint, types, 228 tests,scheduler tests Merge, then tag stablebackup tag before every change,one-click rollback next Sunday, the fixed agent is measured again First finding, 3 November: the interview reviewer flagged both clean answers. After the fix: no false alarms in three runs, both planted faults still caught.
Measured, not claimed. A judge that crashes counts as a false alarm, so a broken agent can never pass its test.