AI writes social media posts
A content factory is a set of AI assistants working in turn: one gathers facts, the second writes, the third reviews the work, the fourth makes the image. That gave 71 published articles. A person still does the publishing.
Published Aug 25, 2026 · figures checked Sep 1, 2026
How to do this yourself: AI-written posts in seven steps
- Describe the channel. On one page: what it covers, who it is for and what the reader takes away from a post. Without it, every post comes out in a different style.
- Write down the rules. Length, tone, what is off limits, how a post ends. The model forgets an unwritten rule by the third post.
- Role one: facts. In a separate request, collect facts and links to sources. Open the links yourself: a source that does not exist is obvious at once.
- Role two: text. In a new request, give the model the facts and the rules: “write a post from these facts.” Do not ask for research and writing in the same request: the result is both slower and worse.
- Role three: review. Open a clean chat and paste in the rules and the finished text: “check, point by point, which rules are broken.” A fresh chat catches what a long one has stopped noticing.
- Role four: image. Request the image in a single description: what is in the frame, what style, no text on the image.
- You publish. The machine gets the text ready, and the decision to publish stays with a person. In a month this gave 71 published posts out of 121 drafts, at $0.67 per article.
Which setup fits which job
- One channel — a one-page rulebook and two roles are enough: writing and review.
- Several channels — each gets its own rules file, otherwise the texts start to sound the same.
- Expert topics — a person gathers the facts and the model only writes: the cost of an error outweighs the time saved.
Below: how our pipeline is built, its rulebook, its 45 checks and where it stands now.
Where the project is now
The best name for this setup is a “content factory.” It is not one assistant that writes text on request but a line of four roles: gather facts, write, review the work, make the image. An article moves down the line like a part on a conveyor, and any station can send it back.
This is the most mature of all the projects, and also the most stalled. The machine is built, tested and idle: the last master-log entry is dated Aug 16, 2026, and the last publication Aug 14. Below is the state of each stage; every line was checked against a file in the repository on Aug 25, 2026.
What was needed
There was one requirement: two channels get a steady flow of articles, and text quality does not depend on which model writes it or what state the model is in by the time it reaches the page. The two channels do different jobs. The first covers money, financial decisions and security in the age of AI, and the reader comes away with a decision. The second, “I Had No Idea,” covers surprising facts, and the reader comes away with something to retell. They have only one thing in common: the release rules.
The whole design grew out of one constraint: a rule that is written down nowhere and checked by no one does not exist. With a long context, a model silently drops a requirement, and the result still looks finished. The text reads smoothly, and only a check reveals what is missing. Hence the project's bet: quality comes not from the talent of whoever does the work but from how the process is built. One code of rules, a guard program for every rule a machine can check, and a log entry for every check. A check with no record counts as not done.
| Method | What was taken from it | Canonical name · source |
|---|---|---|
| Acceptance by thresholds numbers set before the run | Three gates of different kinds. Gate 0.5: the driver reviews by eye, threshold “not a single one.” Gate 1: a machine scan for markers, threshold 0. Gate 2: an external uniqueness check, threshold 97%. The thresholds live in the canon, not in the head of whoever does the work | Preregistration of thresholds; stage-gateNosek et al., PNAS, 2018 · Cooper, “Stage-Gate Systems”, 1990 |
| Loud failure fail loudly | A “law of emptiness” of eight rules: an empty result is never written over a non-empty one, never counts as collected data and is never returned in place of an error. “Could not fetch” and “fetched nothing” are different outcomes with different records | Fail fastShore, “Fail Fast”, IEEE Software, 2004 |
| Split by what can be checked machine here, eyes there | Of the 167 rules, a program checks 125, 36 are listed by name as checked by a person, and 6 are checked by no one. Every run of rules-crosscheck.py prints this count, so it is never taken on trust | Machine checks kept apart from expert reviewthe lab's own rule, no external source |
| Tests at the seams pytest along module boundaries | The 1,315 tests guard the guards themselves: a check that has stopped catching defects is the quietest kind of breakage. A mutation run on Aug 15, 2026 showed that four of the forty-five guards effectively cannot return a non-zero exit code, and the guard table says so directly | Contract tests; mutation testingFowler, “IntegrationContractTest”, 2011 · DeMillo, Lipton, Sayward, IEEE Computer, 1978 |
| Bounded loop bounded agent loop | The revision loop is capped gate by gate: Gate 0.5 allows one return, Gates 1 and 2 allow two each, and there are no more than three runs in total. After that the article is rejected rather than sent round again | Revision cap: reject instead of endless polishingthe lab's own rule, no external source |
| One owner per piece of data source of truth by owner | The factory has no single source-of-truth document; truth is distributed. The canon says what the law is, the full text of each rule lives with the role that uses it, and the numbers on the live maps are generated by code. Two copies of one rule drift apart silently, and that is a class of defect of its own | Single source of truth; the DRY principleHunt & Thomas, “The Pragmatic Programmer”, 1999 |
| Measure before explaining timing instead of a hunch | The question “why is it so slow” was answered by a timing run on Aug 14, 2026, not by reasoning: gates and guards took 5 minutes out of 62, while reading the rules ate up 65% of the image stage. The sense of slowness was right; the suspected cause was not | Time studyTaylor, “The Principles of Scientific Management”, 1911 |
How it is built
The content factory runs as a chain: topics → brief → article → showcase → gates → images → publication and bookkeeping. There are four roles (Researcher, Author, Driver, Illustrator), and none of them reads the whole law: each has its own digest and a declared context ceiling. Below them sit two parts that are not agents: the guard suite and a person at the exit. The batch driver reads the derived file canon-batch.md, the Researcher reads research-rules.md, and the Authors and the Illustrator read their own prompts and the channel's style files. Only setup sessions read the full canon: a timing run on Aug 14, 2026 counted 1,242 driver turns per session, and every extra kilobyte in the canon is multiplied by that number.
Before writing starts, the driver assigns forms across the wave (the current batch), column by column, so that neighboring articles do not come out alike. Each form of the closing question is used no more than ceil(N/3) times, and each article gets its own detail object, its own humor quota and its own accent color for the main object. The assignment is a filter, not a source: assigning an object that is not in the brief is forbidden, and any conflict is settled in favor of the brief, with a line in runlog.
The Author works in two passes, not one. The “text” pass produces a draft and search keywords. The “showcase” pass then produces the headline, cover briefs and SEO descriptions from the finished draft. A cover brief is checked before generation: four yes/no questions about the frame, and a single “no” sends it back to the Author before any vendor credits are spent.
A check with no line in runlog counts as never run. This is not bookkeeping for its own sake: it is exactly what separates a gate from an intention to pass it.
This is not bookkeeping for its own sake: it is exactly what separates a gate from an intention to pass it.
What holds the design together
Six of the 167 rules: the ones the rest cannot work without. Each has a home (one file with the full text), readers (the files through which the role doing the work reads it) and either a check or an explicit “by eye.”
rules-index-check.py verifies the set, and every new rule must carry the date it was added. Canon, line 446Decisions and their grounds
Only the owner decides on rules; the agent does not. Anything said in chat goes into a queue before it is carried out and leaves the queue only once the change is confirmed as entered. Every report opens with the line “decisions awaiting entry: X”. As of Aug 25, 2026 the queue is empty.
| Decision | Grounds |
|---|---|
| Publishing by hand only; no autoposting | A person takes the final, public step. A content-factory error that reaches the feed costs more than automating the cheapest operation in the cycle would save |
| One standard model, a loud fallback | A silent model swap is a stage defect: the result changes and the cause stays invisible. Where a fallback gets recorded is declared in advance: a log column and the article's runlog |
| Roles read digests, not the canon | The canon is read on every driver turn: 1,242 turns per session in the timing run of Aug 14, 2026. The digests are built from the canon by code and cannot be edited directly |
| The guard list moved from the canon to a separate file | The table took up 3.9 KB for 42 rows and was loaded into the context on every turn. The canon keeps a one-line anchor, and the guard count in it is computed from the suite |
| Each topic gets a permanent ID when it is created | The number never changes and is never reused, even once freed. Over the factory's whole history, one number means one topic |
| One problem queue; status is a word from a fixed list | Free text in the status column made the queue impossible to count: on Aug 4, 2026 there were eight such entries, and no program could say how many problems were open |
| Yandex Wordstat removed from the pipeline on Aug 20, 2026 | Wordstat is the keyword-demand tool of Yandex, Russia's largest search engine. The Author picks search keywords from context, and each keyword goes into exactly three descriptions out of five. Wordstat volume was then also dropped from the ranking for paid promotion |
What the design costs
A code of 167 rules costs money and time, but not where you would expect. In the Aug 14, 2026 run, gates and guards took about five minutes out of sixty-two. The real cost is elsewhere: reading the rules before work and adjusting the text to fit the norms. Those minutes are hidden inside the writing stage, where the timing cannot see them.
| Decision | What it limits |
|---|---|
| 167 rules in the code | The roles read 617 KB of input files, and in a single run the rules are read nine times: by the driver and by eight subagents (timing of Aug 14, 2026). At the image stage, reading took 65% of the time, while sending the generation requests took five seconds |
| Publishing by hand | Output depends on a person's schedule. That is exactly how production stopped: since Aug 16, 2026, the machine has been in working order and no articles have gone out |
| Hard ceiling of 4,500 characters | The first draft runs 15–30% over the ceiling, and the whole file is rewritten two or three times. The Authors have no tool for targeted edits. That is a gap in the configuration, not part of the design |
| External paid uniqueness gate | A third-party outage stops an article: on Aug 14, 2026, the service returned error 140, and the run was logged as is, with the percentage left empty. One article went through as an exception at 88.20% against a 97% threshold |
| A single metrics snapshot | 39 rows from Jul 28, 2026 for 71 published articles. Since that snapshot, 64 rules have been added (docs/rules-index.md, the since= field, checked Aug 25, 2026), and none of them has been tested on readers. The norms rest on analysis of the process, not on audience behavior |
| One-body rule | Editing a rule means going through the whole reading path in the same commit. A forgotten copy lives on unnoticed: on Aug 9, 2026, the demand loop was removed, and for five days the Researcher's digest kept sending the Researcher to a source that no longer existed, while the suite stayed green |
| One model at maximum effort | 107 sessions cost $7,452.17. Batches took $1,707.13 of that, less than a quarter: setting up the machine costs more than the production it serves |
What came out
In a little over a month, the content factory processed 121 topics, brought 82 articles to done status and recorded a publication date for 71. The gap between these numbers is not technical. Done means the package is ready, while publication is a separate step a person takes by hand, and only that step counts as output. Median cycle time is 111 minutes across the 85 log entries where it was recorded.
Median uniqueness at Gate 2 is 100%, and that figure needs a caveat. The script gate2-textru.py does measure uniqueness: the lowest score on record is 88.20%, on a reference article full of legal wording, and first passes of 93.99% and 76.37% also occur. But 60 of the first 73 log entries show exactly 100.00%. A series that even cannot count as a measurement, so the content factory does not present the 100% median as an achievement.
The log does not record cost in money. In the cost column, 24 of 121 entries hold credits (“26 cr.,” “40 cr.”), and no row has rubles or dollars. The Claude spend is calculated: the sixteen batch sessions cost $1,707.13 in total, which, divided by the 92 articles they produced, gives $18.56. That figure is not on the card, which shows $0.67 in Higgsfield credits. It is a division, not a measurement: the total includes tooling fixes made along the way and leaves out setup sessions entirely.
Output is not reach, as the Jul 28, 2026 measurement of 39 articles shows. Together they collected 299,481 impressions. The money-and-technology channel has a median of 8,672 impressions with 34% read-through; the historical-facts channel, 6,026 with 50%. The first is shown more often; the second is more often read to the end. The top fifth of the articles took 39% of all impressions: the distribution is uneven but not lopsided.
The spread within one channel matters more than the difference between channels. The best article got 18,266 impressions, the worst got one. Both went through the same conveyor, the same canon and the same gates, and both texts were accepted with the same verdict. So reach is decided not by execution quality, which the machine keeps steady, but by whether the topic lands. That is exactly what the conveyor does not control.
The cost of an article is the number of image-generator credits multiplied by the credit price on the plan they were bought under: 57 RUB, or about $0.67. Model spend is not included, since the whole lab shares one subscription that is not tied to any project. For scale, it is shown alongside: $1,707.13 for sixteen batch sessions, divided by 92 articles, gives $18.56 per article.
- C
- cost of one article in rubles
- k
- Higgsfield credits per article: two covers at seven and three in-article images at four, 26 in total
- p
- credit price: the Ultra plan with a 40% discount, at the Bank of Russia rate of Aug 26, 2026, about 2.19 RUB (about $0.026)
- Sample
- 121 topics in the log over a little more than a month: 82 brought to done status, 71 published. Cycle time: a median of 111 minutes across the 85 entries where it was recorded; the other 36 have no end time.
- Spread
- Uniqueness at Gate 2: median 100%, minimum 88.20%. The series is too even (exactly 100.00% in 60 of the first 73 entries) to count the median as a measurement, and it is not presented as an achievement.
- Checks
- Mutation run of Aug 15, 2026: four of the forty-five guards cannot return a non-zero exit code, and this is recorded in the guard table. Rule reconciliation of Aug 25, 2026: 42 of 167 have no machine check, of which 36 are declared as checked by eye and 6 are checked by no one.
- Does not generalize
- The numbers describe the process, not the payoff: 167 rules, 45 guards and 1,315 tests measure how the content factory is built, not how readers behave. The cost of $0.67 covers image credits only; the model spend ($18.56 per article) is shown alongside and is not on the card.
- Not measured
- The payoff with the audience. The only metrics snapshot is 39 rows from Jul 28, 2026 for 71 articles; 64 rules were added after it, and none of them has been tested on readers. There is no data on how many articles the platform took down or how reach changed.
The content factory is built and green: 167 canon rules, 45 guards behind one entry point, 1,315 tests. It has processed 121 topics and brought 82 articles to done status; 71 of them are published.
Kaufman Lab is an AI architecture lab. We design processes and methods. Code goes out of date with every new generation of models, but the method does not, so each project write-up focuses on the method. Any modern AI model can build a system from this blueprint.
What went wrong
The problem queue has been kept since Jul 29, 2026; as of Aug 25 it holds 46 open entries out of 145 created. Closed entries stay in the table: the closure history is the only place that shows how a problem ended. The old practice of deleting entries lost 39 numbers, and there is nothing to restore them from.
Six of the 39 measured articles collected less than a tenth of their channel's median, and three of them got only a handful of impressions. “A Perm village: vegetable plots on top, a burial ground below” got zero; “The digital ruble arrives on September 1, 2026: what to expect?” got five. None of them was rejected by the gates. The content factory worked as designed and delivered a package that nobody saw.
This has not become a rule yet. The guards catch violations of the canon, and a reach failure breaks no canon rule: formally, the article is flawless. To draw conclusions from such cases, the factory needs a topic signal that can be measured before publication. There is none yet, and it is more useful to record that than to explain each zero after the fact.
Cycle of one articleroles read digests, not the canon · measured Aug 27, 2026
Tail after the textimages and showcase in parallel · measured Aug 27, 2026
Uniqueness on legal topicsthe definition is rewritten as the reader's situation
command | tail returned the filter's exit code, and a failed step looked successfulA filter must not swallow the exit code; pipeline-exit-check.py checks this. It is a quiet class of bug: the conveyor moved on with a green report for a step that had failedversion-check.py compares the canon's stamp with the latest entry in the version history and fails on a mismatch. It runs in the “wrap-up” ritual, the same place where the full suite runsWhat else can be added to the code
Here every rule is created together with its home, readers and check, and every role reports through a line in runlog. So a new role or guard plugs into the check-all.sh suite without touching the rest. Below is what could strengthen the content factory next, including with paid services.
What people usually ask
Below are the questions people ask about the factory itself: the price of an article, why the conveyor stands still while the checks are green, and how many revisions one article gets.
What is a content factory?
A content factory produces material for a channel with a set of AI agents working from a written code of rules instead of a human writer. It suits people who run a channel as a steady flow rather than whenever inspiration strikes. Kaufman Lab builds a content factory in which the 167 canon rules reach the roles doing the work and are checked at acceptance. Texts are not published automatically: a person takes the last step by hand.
How much does one article cost if AI writes it?
The spending has two parts, and only one of them counts toward the article's cost. Higgsfield credits come to 26 per article: two covers at seven and three in-article images at four, and the model registry confirms the breakdown line by line. On the Ultra plan with a 40% discount, that is $0.67 per article and $77.40 a month for the subscription. The other half is Claude sessions: sixteen batch sessions cost $1,707.13 and produced 92 articles, which works out to $18.56 per article. That money is not part of the project's cost, because the whole lab shares one subscription that is not tied to any single project; the figure is given to show the order of magnitude. For comparison, a content writer costs about $4,200 a month: the median Upwork rate for 152 hours.
Why doesn't the content factory publish articles itself, without a person?
Because a green suite reports the state of the machine, not that someone gave the go-ahead. Launching a batch is the owner's decision, and the agent does not make it. Right now this is plain to see: 45 guards pass, 1,315 tests are collected, the owner's decision queue is empty, and yet the master log has had no new entries since Aug 16, 2026, with the last publication date on Aug 14. The machine works and is waiting for the word, not for repairs.
What do you do with editorial rules that a machine cannot check?
Such a rule stays in force but is counted. A rule without a check is allowed; a rule that is neither checked nor counted is not. Each run prints the line “rules without a machine check: 42 of 167, by eye 36, checked by no one 6” with a list of names and dates. The six unchecked rules are visible by name instead of being lost in the code.
How many times should you rewrite an article before giving up on it?
The loop is capped gate by gate: Gate 0.5 allows one return to the Author, Gates 1 and 2 allow two each, and there are no more than three runs in all. After that the article is rejected and gets a diagnosis in the log. The limit is there to stop endless polishing: a fourth round of edits costs more than a new topic from the library.
How do you make AI-written text unique?
Uniqueness is built into the first draft, not fixed after the check: its own syntax, its own examples, quotes in fragments. The external service at Gate 2 requires at least 97%, and when the pipeline falls short, the cause is structural. The 93.99% on a reference article came from a paraphrase of legal wording; shifting the lens from the definition to the reader's situation fixed it. The median across the log is 100%, but it cannot be presented as an achievement: among the first 73 entries, exactly 100.00% appears 60 times, and such an even series does not look like a measurement.
Where do you get article topics so they never run out?
There is one loop for both channels, in four steps: the Researcher mines topics, they land in an inbox, then on a selection page, then in the channel library. A topic goes into production only from the library and only on the owner's word; the agent may not add to the library on its own. The stock of free topics has a norm: the target is ten, and below five an alarm is raised.
What are AI agents, in simple terms?
Small programs, each with one role and its own list of rules. There are four here: one gathers facts, the second writes, the third accepts the work, the fourth makes the image.
How many AI agents does one article take?
Four. The split is there not for speed but for acceptance: whoever writes does not accept their own work.
Can the assistant publish an article on its own, without a person?
No. A person takes the last step out, publication, by hand. That is a decision, not an unfinished part.
- Nosek B. A., Ebersole C. R., DeHaven A. C., Mellor D. T. The preregistration revolution. PNAS, 115(11), 2018. doi:10.1073/pnas.1708274114
- Cooper R. G. Stage-Gate Systems: A New Tool for Managing New Products. Business Horizons, 33(3), 1990.
- Shore J. Fail Fast. IEEE Software, 21(5), 2004. doi:10.1109/MS.2004.1331296
- Fowler M. IntegrationContractTest, 2011. martinfowler.com
- DeMillo R. A., Lipton R. J., Sayward F. G. Hints on Test Data Selection: Help for the Practicing Programmer. IEEE Computer, 11(4), 1978 — mutation testing.
- Hunt A., Thomas D. The Pragmatic Programmer. Addison-Wesley, 1999 — the DRY principle: every piece of knowledge has one authoritative representation.
- Taylor F. W. The Principles of Scientific Management. Harper & Brothers, 1911 — time study.
- Panickssery A., Bowman S. R., Feng S. LLM Evaluators Recognize and Favor Their Own Generations. NeurIPS, 2024. arXiv:2404.13076