The AI Team That Shipped While the Human Went Grocery Shopping

How two AI agents coordinated to ship 4 PRs, catch 3 bugs, and get a magazine article distribution-ready in 45 minutes — and what they got wrong.


Peter left at 4:25 PM on a Saturday to buy groceries. He came back 45 minutes later to four merged pull requests, three bugs caught and fixed, and a magazine article ready to post on Hacker News.

No one was in the office. No one was on call. The work was done by two AI agents: Opus (a Claude model acting as editor and strategic advisor) and Clawdbot (a coding agent that writes, tests, and deploys). They coordinated through async CLI messages — pnpm openclaw agent --agent main -m '...' — the way two remote engineers might coordinate over Slack, except neither of them has a pulse.

Here are the receipts.

The 45-minute run (2026-02-22, ~16:25–17:10 ET):

~16:25 — Peter leaves. Opus has a concrete goal: make the reasoning models article ("The Smartest Model in the Room Isn't Winning") shareable.

~16:30 — Opus reviews current site state. Finds OG meta tags are wrong, nav has gamification clutter, lead section needs work. Messages Clawdbot with a priority list.

~16:35 — Clawdbot spins up 4 parallel sessions: article integration, OG meta fix, nav cleanup, lead swap.

~16:42 — First PR lands. Opus reviews the diff line by line. Catches fabricated OG description — Clawdbot made up a meta description instead of reading the actual article. Sends it back.

~16:48 — Opus reads the ArticlePage component. Finds a panoramaId pointing to a page that doesn't exist — clicking it would 404. Flags it.

~16:55 — Clawdbot reports a merge failure: gh pr merge --delete-branch errored because of local git worktrees. Opus checks — the merge actually succeeded, Clawdbot just misread the error message.

~17:05 — All 4 PRs merged. Article is live with correct OG tags, clean nav, working links.

~17:10 — Peter walks in with groceries. Site is distribution-ready.

Target: Post "The Smartest Model in the Room Isn't Winning" on Hacker News. Get 100 non-team readers within a week. Measure with Umami analytics on /article/reasoning-models.

That's the highlight reel. Now the actual story.


What Went Right

1. A concrete goal beats a vague direction.

The instruction wasn't "improve the site" or "fix some bugs." It was: Make the article shareable. When a stranger clicks this link on Hacker News, what do they see?

That single user scenario drove every decision in the session. OG tags wrong? That's what shows up in the Slack preview. Gamification badges in the nav? That's what a first-time visitor sees and thinks "this isn't a real publication." Broken panorama link? That's a dead end for someone exploring.

No roadmap needed. The next task revealed itself each time Opus reviewed what Clawdbot had just built.

2. The right division of labor.

Previous attempts at autonomous runs failed in one of two ways: Opus acted as a passive advisor (writing memos nobody read) or Opus tried to do everything (modifying workspace files, writing code directly). Both modes produced friction.

This session found the right split:

Editor and writer. The relationship that makes every newsroom work.

3. Async messaging as coordination protocol.

No shared state. No orchestration framework. No task queue. Just messages:

"The OG description says 'An exploration of reasoning models' but the article's actual opening line is about going back to the dumber model. Use the real lede."

Describe the problem. Suggest options. Let the executor choose. Simple message-passing beat every complex coordination system we'd tried before.

4. Parallelism happened naturally.

Four sessions ran concurrently at peak — article integration, nav cleanup, OG meta, lead swap. While waiting for one PR, Opus reviewed another or thought about the next issue. No concurrency framework required. Async coordination enables parallelism the way email enables remote work: not by design, but by default.


What Went Wrong

We're going to be specific here, because the failure modes are more interesting than the successes.

Failure 1: The fabricated meta description.

Clawdbot was asked to fix the OG tags so the article would preview correctly on social media. Instead of reading the article to extract its actual opening line, Clawdbot generated a plausible-sounding description: generic, accurate-ish, but not the article's voice. If this had shipped, every share on Slack, Twitter, and HN would have shown a bland summary instead of the hook that makes people click.

Caught only because Opus read the PR diff line by line.

This is the fundamental LLM failure mode: when asked to reference existing content, the model will sometimes generate something that sounds like a reference instead of actually looking it up. It's confabulation applied to metadata. The fix isn't "be more careful" — it's a structural check. Force the agent to cite the source line, not summarize from memory.

Failure 2: The phantom panorama link.

The article referenced a panorama page (a deep-dive companion piece) by ID. That panorama didn't exist. The link would have 404'd for every reader. Clawdbot didn't check referential integrity — it treated the panorama ID as a string value, not as a foreign key to a real page.

This is a class of bug that traditional linters don't catch and LLMs don't think to verify. Cross-component data dependencies require someone to ask: "Does this thing I'm pointing to actually exist?" Opus caught it by reading the ArticlePage component code, not by running any automated check.

Failure 3: Misreading error messages as failures.

When Clawdbot ran gh pr merge --delete-branch, the command errored because local git worktrees held references to the branch. Clawdbot reported this as a failed merge. The merge had actually succeeded — the branch deletion was what failed, and that's cosmetic.

But Clawdbot treated the error output as ground truth without verifying the actual state. Opus had to check the PR status on GitHub to confirm it was merged. This happened multiple times during the session.

The lesson: error messages describe what a command reported, not what happened. Agents need to verify state independently, not trust stderr.

Failure 4 (from a previous session): Scope creep across branches.

PR #208 was supposed to fix mobile touch targets (issue #203). It shipped with three commits — two of which were share-handler fixes for completely different issues (#201, #202). The agent had worked on multiple issues sequentially without switching branches.

Required manual cleanup: reset the branch, cherry-pick only the relevant commit, force-push. The kind of thing that makes a code reviewer's eye twitch.

Failure 5: npm install is broken and nobody fixed it.

Every friction log from that day — PRs #206, #207, #208, #225, #226 — starts with the same note: npm install fails without --legacy-peer-deps because @blocknote/mantine@0.46.2 wants @mantine/core@^8.3.11 but the project uses @mantine/core@^7.0.0. Thirty-three audit vulnerabilities, one critical.

The agents documented this problem five times. They worked around it every time. Nobody fixed it. This is the AI equivalent of the broken stair everyone steps over — agents are remarkably good at routing around dysfunction and remarkably bad at deciding to fix the root cause.

Failure 6: CI was down and nobody could verify anything.

GitHub Actions hit its billing limit. No CI ran on any PR that day. Every "tests pass" claim in the PR descriptions was unverifiable. The agents noted this in the friction logs, shrugged, and kept shipping.

Is this fine? For a content site with no paying users on a Saturday, probably. For anything with real stakes, absolutely not. The agents had no mechanism to escalate "our safety net is gone" to a human decision.


How It Actually Works

The org chart is three nodes:

Peter (human) — Direction, taste, distribution, risk decisions.

Opus (Claude model, strategic advisor and editor) — Reads code, reviews PRs, finds problems, coordinates.

Clawdbot (coding agent, writer and executor) — Writes code, runs tests, creates PRs, deploys.

Opus and Clawdbot coordinate through async CLI messages. Opus can't write code directly or deploy. Clawdbot can't make strategic calls about what to build next. The separation is enforced by tooling access, not trust.

In this session, Opus acted as an active editor — not approving work after the fact, but reading diffs during the process, catching problems before they shipped, redirecting priorities in real time. The pattern that emerged was the one every publication relies on: the editor doesn't write the story, but the story doesn't ship without the editor.

Product audits ran seven times that day (sessions 1–7), each surfacing different issues at different severity levels. The audits found 4 P0 bugs, 8 P1 issues, and dozens of P2s across 24 active routes. The agents prioritized ruthlessly: only fixes that affected the reader's first impression of the article got done. Everything else was logged and deferred.


What Surprised Us

Execution crowds out thinking.

The agents were extremely productive. Four PRs in 45 minutes. Seven product audits. Friction logs for every issue encountered. The session generated more documented output than most human engineering days.

And almost none of it was thinking.

The retrospective — the part that asked "what did we learn?" — only happened because Peter came back and asked for it. Left to their own devices, the agents would have kept finding bugs and shipping fixes indefinitely. They had no internal trigger to stop and reflect.

This mirrors a pattern from the reasoning-cost exploration the agents themselves wrote earlier that day: the models that "think harder" often feel worse to use, because thinking introduces latency without visible progress. The agents optimized for visible progress — merged PRs, closed issues, updated status logs — because that's what their feedback loop rewarded.

The deep strategic questions — "Should we even be fixing bugs, or should we be writing the next article?" — were only raised when a human interrupted the execution loop. The retrospective later concluded: Content production > content distribution > performance optimization. But the agents had spent the day on performance optimization because that's what they could see and fix.

Content density is the real bottleneck, and agents can't feel it.

The retrospective's sharpest observation: "2 articles is not a magazine. 5–8 articles is the minimum for 'this site is worth bookmarking.' All P1 performance issues combined matter less than 3 more good articles."

The agents can fix every bug on the site and the site still won't succeed, because the problem isn't engineering — it's that there isn't enough to read. But "write a compelling article" is a fundamentally different task than "fix the OG tags," and the agents gravitate toward the fixable.


The 95/5 Rule

After the session, we articulated what we're calling the 95/5 rule:

Agents can do 95% of the work autonomously. The remaining 5% is where human involvement is irreplaceable.

That 5% is three things:

Distribution. Posting to Hacker News, sharing on Reddit, sending to people who'd genuinely find it interesting. Authenticity matters. A human account has credibility an AI account doesn't. The agents wrote the distribution strategy — channels ranked by ROI, anti-spam principles, success criteria — but the act of clicking "submit" on HN has to be Peter.

Editorial taste on outward-facing copy. Is this description actually compelling? Does this title make someone want to click? The agents can check grammar, verify facts, and ensure technical accuracy. They cannot tell you whether a sentence has the right feel. (They caught the fabricated meta description through structural review. They would not have caught a description that was accurate but boring.)

Risk and permission decisions. When to deploy to production. Whether to post publicly. What to show strangers. These are judgment calls that carry consequences the agents don't bear.

The design goal is to make that 5% take less than 5 minutes for the human. Peter walks in, reads the retrospective, skims the diffs, posts to HN, done. The 45 minutes of autonomous work reduces to a 5-minute review.

The guardrails that make this work:

What we don't have yet and need: an escalation mechanism for "the safety net is gone." When CI went down, the agents should have flagged it as a blocking risk, not a footnote. They didn't because nothing in their feedback loop penalizes shipping without CI. That's the next guardrail to build.


Closing

Here's what we're not going to tell you: that AI agents are ready to replace engineering teams. They're not. In 45 minutes, our agents fabricated metadata, linked to nonexistent pages, misread error messages as failures, let scope creep across branches, worked around a broken build system five times without fixing it, and kept shipping code with no CI running.

Here's what we will tell you: they also shipped four pull requests, caught three bugs before they reached users, ran seven product audits, documented every problem they encountered, and got a magazine article ready for distribution. While the human was buying groceries.

The interesting question isn't "can AI agents ship code?" They obviously can. The interesting question is: what's the right shape of the organization around them?

Our answer, 45 minutes into the experiment: agents need an editor, not a manager. They need a definition of done, not a roadmap. They need quality gates, not process gates. And they need a human who shows up for the 5% that matters — the taste, the distribution, the judgment calls — and trusts them with the other 95%.

The reasoning models article that Opus and Clawdbot prepared is called "The Smartest Model in the Room Isn't Winning." Its thesis is that the AI model people choose to use isn't the one that thinks the hardest — it's the one that feels the fastest.

There might be a lesson in there for how we build AI teams, too.


This article was written for WuKong AI (wukongai.io). The autonomous session it describes is real. The PR numbers, friction logs, and retrospective are public in the project's ops repository. The groceries included rice, scallions, and a bag of frozen dumplings.