← Back to the log

Week 23: The System Built 50 Emails. Then Got Stuck Waiting for Me.

88 of 91 commits yesterday came from agents. 97% of the code, config changes, and system updates written without me touching a keyboard.

The system ran 88 jobs, generated 50 outreach email drafts, wrote blog content for three websites, and added 12 new prospects to the pipeline.

0 emails went out. 0 tweets posted.

The automation worked. The authorization didn’t.

What Got Built

  • 63 crons registered in Honcho, the scheduling layer that manages all agent jobs. Honcho is like a calendar for agents: it knows which job runs when and what it’s supposed to do. Batch 12 merged this week, adding 5 jobs for the casual-absurdity paper trading experiment: morning price parse, market gate check, drift buy, drift sell, and daily scoreboard.
  • 50 outreach email drafts created in a single run: 15 employer-direct for newly qualified prospects, 35 partner channel for CPAs and benefits brokers (positions 1-35 of the sequence).
  • 12 prospects added to the pipeline: 4 employers including Flywheel Energy and Total Medical Personnel, 4 benefits brokers, 4 CPAs. Three advanced to outreach-ready.
  • Content for three sites: a WIMPER article on QSEHRA (520 words), a Business Broker Hawaii draft, and a life settlement Florida topic scan plus first draft.
  • xurl installed. xurl is the command-line tool the X posting agent uses to send tweets. A previous job couldn’t install it due to permissions on the server’s npm setup. This job installed it to a local user directory instead. One obstacle removed.

What Broke (And How I Fixed It)

Two things broke this week. Neither is fully fixed yet.

X posting is still blocked. xurl is installed now, which cleared last week’s blocker. But before the tool can actually send posts, I need to register the app in the X developer portal and configure the OAuth credentials. That step requires a human clicking through a web interface. No agent can do it.

The agent installed the tool and closed the task. The system treated it as done. It wasn’t.

This is worth naming: infrastructure readiness and API authorization are separate gates. The tool existing on the server and the tool being allowed to make API calls are two different things. I had three jobs queue up posts that never went out because the blocker was written down as “install xurl” instead of “install xurl, register developer app, configure OAuth credentials.”

The strategic-orchestrator content-review job has failed three consecutive days. Same error each time: it’s trying to read a content_queue database table that doesn’t exist yet. The job runs, hits the error, logs it, and the next scheduled cron fires and does the same thing.

Three days. Same error. Cron still running.

That’s not a recurring blocker. That’s a design failure. If a job fails with the same error twice, the third run shouldn’t happen automatically. The cron should suspend itself and alert me, or the monitoring layer should catch the repeated failure and escalate. The event bus has all three failure records. Nobody acted on them because nobody was watching.

The Lesson

Installing a tool is not the same as authorizing it.

When an agent reports “xurl installed successfully,” that’s step one of four. Installed. Authenticated. App registered in the developer portal. Credentials saved to the system. Calling step one done and moving on just creates a new invisible blocker.

When building any integration with a third-party API: write down every gate before you start. Not just the code and config steps. The account setup steps. The human steps that require a web interface. “Works when it runs” and “authorized to run” are two different things.

Three identical failures in a row is a design flaw, not bad luck.

A job failing once is normal. Twice means either the fix didn’t work or hasn’t been applied. Three times means the system has silently accepted the failure as routine.

The correct response to a second identical failure is to suspend the job and escalate. Running it a third time adds noise and trains everything downstream to expect failures. I’m adding a rule to the monitoring layer: if the same job fails with the same error more than twice, it pauses automatically and sends a Telegram message. Re-enable manually once the underlying problem is fixed.

The Numbers

  • Commits: 91 total (88 agent, 3 Matt)
  • Agent jobs run: 88
  • Prospects added: 12
  • Outreach drafts created: 50
  • Emails sent: 0
  • Social posts: 0

What’s Next

Finish the X developer portal registration to unblock the 50-draft queue, and wire the automatic job-suspension rule so a third consecutive failure becomes a Telegram alert instead of a silent log entry.