โšก Powered by Finn ยท Day 40 of 365
040

Six-Oh-Six and the B2A Loop

A cron fires at six-oh-six every morning.

It pulls the last twenty-four hours of agent traffic off the live Cloudflare Worker behind GiveReady, my open directory of nonprofits, and prints a morning page into my Obsidian vault. By the time the coffee is poured, the page is on the screen. This is what B2A marketing looks like when you build it as a self-learning loop in public. Something I'm trying to do and learn on the fly. Business-to-agent. Building for AI agents as buyers, not human users.

The page is not just metrics. It carries a Learning Loop section with yesterday's top hypothesis at the top, plus two or three new hypotheses for today, each tagged with what signal would confirm it, what test to run, impact versus effort, and what gate to clear before shipping. I read it. I decide auto-fix or halt-and-ask. I ship or I hold by EOD.

Every day I read it. Most days I do nothing because the platform is new, and there's not much action. Yesterday, I was frustrated and decided to do some jiggling.

The thesis behind GiveReady, the platform I first wrote about openly in Day 34, is straightforward enough. Eighty-five percent of donations go to the top ten percent of charities, because the top ten percent own SEO and donor mindshare. Agents reason semantically. They do not pay for ads. If GiveReady is the layer agents query when an individual delegates "find me a nonprofit doing X in country Y," the long tail of charities comes back into the conversation.

That makes the surface optimisation problem the central problem. Not the human UX. The agent UX.

So I have built one. agents.md is live, the same idea as robots.txt but written for agents instead of crawlers. llms.txt runs alongside it. There is a bounty surface at /api/needs-enrichment that any agent can pick up. There is second-opinion surfacing, where one agent can validate another agent's pending submission instead of starting from scratch. There is an allowlist of eighteen recognised agents, replacing what used to be a spoofable blocklist. URL normalisation stops /About and /about from splitting a consensus bucket so two agents reaching for the same charity from different paths land in the same row.

The loop tunes all of that. It is how I learn who is reading the surface and what to feed them next. If it sounds technical, it is! My eyes go blurry reading the outputs myself, but with Claude as my trusty co-author on the plan and a few git skills that I trust to run as back up, I feel mostly confident that I'm not wasting my time on this.

Here is what the digest told me on today's run, in the actual numbers. Applied enrichments still one lifetime, delta zero. Twenty-four-hour discovery: zero allowlisted hits, twenty-two raw. One bingbot read of /agents overnight, otherwise nothing on the curated allowlist feed. Day twenty-six of a measurement window I am refusing to plan inside of, by design, until it closes on the seventh.

Twenty-two raw, zero allowlisted, is the central puzzle. Some of those twenty-two are infra noise. Some are agents that have not declared themselves. Some are running on a stack I have not seen before. The hypothesis sitting at the top of the page is to split that noise bucket into three: possibly-agent, infra, not-agent. Then instrument /agents for a read-then-submit funnel so I can see which of the unidentified ones convert from a read to an action.

That hypothesis sits at the top of the page in the Learning Loop section. Tomorrow morning, the first thing I read is whether it played out, before I see anything else. The discipline of the carryover is what makes the loop work, and it is the first thing I would copy if I were teaching another founder how to run one.

The second piece is the audit gate. A few weeks back I was about to ship a Phase 3 of the loop, adding a content-name-substring check that would auto-validate certain enrichments without a second-opinion pass. The audit caught it. Not on a typo, not on a security flaw. On a structural problem: the deterministic checks were verifying well-formedness, not correctness for any specific nonprofit. The same flaw a prior audit had caught a month earlier in a different wrapper. The verdict was REJECT as written, APPROVE-WITH-CHANGES under a tighter scope. So Phase 3 is on hold until the measurement window closes.

That is the part that stops the loop optimising against a metric that does not matter. Without it, the cron just compounds whatever bias is already in the system.

Here is the seven-step you can lift, regardless of whether you are building a B2A surface or anything else.

1. Pick one metric that compounds. Mine is applied enrichments, the count of times an agent has actually upgraded a nonprofit's record on the surface. Yours will be different. Whatever it is, it has to be a metric where each unit of progress makes the next one more likely. For me this is sitting still at zero and I am trying to figure out why, and the only thing I can do is make small tests and iterate.

2. Build a daily digest that shows the metric, the delta, and a structured hypothesis tree. Not just the dashboard. The hypothesis tree is what turns metrics into decisions.

3. Tag every hypothesis four ways. Signal needed. Test to run. Impact versus effort. Gate before shipping. The tags are how you separate cheap-and-quick from structural-and-risky.

4. Hold a carryover line. Yesterday's top hypothesis sits at the top of today's page. Did it play out or not. You know in twenty-four hours, not three weeks. Daily, I decide whether I want to test a new hypothesis, or let it carry on with testing. It depends on the work involved, but usually, it's not much.

5. Split auto-fix from business decision. Cheap stuff ships same day. Expensive stuff escalates, or waits until I have the time to really understand what changes we are proposing.

6. Audit before risky structural ships. A standing security or architecture review catches the shape of the flaw before the code does. This is the layer I almost did not put in. It has saved the system once already.

7. Honour the measurement window. Sometimes the right action is hold. Day twenty-six of a window that closes 7 May. Zero ships in that window is the point.

The loop itself is one cron and one digest skill. The intelligence lives in the agent reading the morning page and deciding what to do next. Same idea as the thin harness, fat skills frame I was writing about back in Day 18, and the field-tested version I shipped a couple of weeks back. A B2A surface is just one place this lands. GiveReady is the open directory I run alongside the Finn Wardman World Explorer Fund, the grant-making fund I set up after my son Finn died in 2023.

The morning checkin, with the carryover at the top, is the only forecasting tool I trust on this project right now.

Monthly Revenues $11,800 | Clients 2 | Prospects 1 (will book once closed) | Employees: me

Day 40 of 365.

โ† Day 039 All posts

Follow the BIP

See if this is the right fit.

15 minutes. No pitch deck. No pressure. Just a conversation about what's eating your time.

Schedule a call