← Building
Agentic advertising · run on itself

AdCP Publisher Stack.

The trade press keeps describing the agentic advertising loop. This is one — selling this site's own inventory, live, with every layer inspectable.

  • Status Production · live on this site
  • Protocol AdCP media_buy · MCP
  • Seller sell.nofluffadvisory.com
  • Signals adcp.signal-stack.io (federated sibling)
  • Privacy No cookies · no profiles · session-scoped
  • Floor $0 — every buy human-approved
The whole loop · one operator

Brief in. Delivery report out.
Nothing hidden in between.

A buyer agent discovers the seller, a brief composes a product, two gates judge the commit, approved creatives render on real essay pages, and beacons close the loop as a delivery report. Watch the circuit: one commit gets blocked by the machine, the rest wait for a human stamp. That is the whole point.

The AdCP publisher loop — brief to delivery report, one closed circuit A buyer agent discovers the seller over MCP, a brief composes a curated product, create_media_buy passes a machine gate that blocks one commit, a human gate approves at a zero-dollar floor, approved creatives serve on essay pages, impression beacons return as aggregates, and the delivery report closes the loop back to the buyer. BUYER AGENT · MCP Discover capabilities · no key BRIEF → PRODUCT Curate same brief, same product CREATE_MEDIA_BUY Commit idempotent · $1 and up GATE 1 Machine every commit 11 policy groups GOVERNANCE_BLOCKED GATE 2 Human $0 floor EV · APPROVED TWO SLOTS · ESSAYS Serve zero-fill = house ads BEACON ON RENDER Measure aggregates only GET_MEDIA_BUY_DELIVERY Report pacing vs budget · spend THE LOOP CLOSES synaptic session hints · sessionStorage, discarded per request
Run this loop yourself, live →
01 Why this exists

The loop the trade press
keeps describing. Built.

Agentic ad tech coverage is demand-side and demo-heavy. Roughly 30 agentic programmatic campaigns industry-wide made headlines this summer, with no buyer quotes and no delivery numbers. So this site now sells its own inventory the agentic way — and publishes every number, including the unflattering ones.

A seller agent speaks AdCP media_buy over MCP. A minimal ad server fills two fixed display slots on the essay pages. Audiences come from what a reader is actually reading this session. Every buy and every creative passes a machine gate and then a human one. The revenue does not matter at this traffic level. The reference implementation does.

Judge by what lands in the repository,
not what lands in the feed.

AdCP vs AAMP — the rule this page is held to

02 The loop, live

Six moves.
All in production.

The smoke test runs this exact sequence against production on every deploy — a $1 self-brand buy that approves, serves to a real slot, reports its impression, and cleans itself up. Fifteen steps, and a deploy doesn't ship unless all of them pass.

  • get_adcp_capabilities

    Discover

    A buyer agent reads capabilities, formats, and the catalog over MCP. No API key needed to look — auth-gated discovery is where buying agents go to die.

  • get_products + brief

    Curate

    A brief composes a purchasable product from synaptic segments — lexical keyword matching fused with semantic similarity against the corpus embeddings, deterministically. Same brief, same product — word order included.

  • create_media_buy

    Commit

    Machine gate on every commit: validation blocks with machine-readable codes, eleven policy pattern groups flag. Idempotency keys replay the canonical response.

  • /ad-admin

    Review

    Every creative and every buy waits for a human at the $0 floor. Image URL, click URL, and alt text — HTML creatives are rejected at the door.

  • /serve · /px · /go

    Serve & measure

    Approved lines fill two fixed slots on essay pages. Beacons fire on real render; only aggregates are stored. Zero-fill is house ads, published as house-fill %.

  • get_media_buy_delivery

    Report

    Totals, pacing against budget, and the measurement basis in plain words. The loop closes back at the buyer.

03 Synaptic audiences

Audiences from connections,
not identifiers.

A synaptic audience is session-scoped and cookieless: derived from the connections a reader traverses — the meaning of the current page plus the trajectory of pages before it. The meaning lives in the connections, like synapses, not in a stored profile.

Each essay carries segment tags generated by deterministic rules you can read in the repo. The reader's browser keeps its own trajectory in sessionStorage and sends segment hints with each ad request; the server uses them for the decision, counts them into aggregates, and discards them. Twenty segments, every member essay listed, no inference at runtime. Signal Containerization practiced instead of preached.

That determinism stops at definition, on purpose: it's what keeps segment membership inspectable in a PR diff, not decided by a model at request time. Matching a buyer's brief against these same twenty segments is a different job — Curate fuses this catalog's keyword rules with semantic similarity against the corpus's own embeddings, resolved by rank rather than blended by score, so a brief can land on the right segment without ever using its literal words.

A synaptic audience forming from one reading session A field of essay nodes. One session reads five essays in sequence; the connections between them light up and segment hints accumulate — agentic standards, contextual intelligence, first-party data. The session then dissolves: nothing is stored. adcp-vs-aamp the-context-economy signal-containerization business-outcomes the-great-repackaging SESSION SEGMENT HINTS syn_agentic_standards syn_contextual syn_first_party_data … session ends → everything above is gone. No cookies, no profile.
04 Two governance gates

A running experiment on
where judgment belongs.

AdCP gates every commit with a machine check. AAMP gates above-threshold commits with a human. AdCP vs AAMP called these two untested theories of where judgment belongs — so this stack runs both at once and logs what each gate catches.

The auto-accept floor is $0 for the first month: every buy and every creative crosses my desk. In about 90 days the audit trail becomes a small public dataset on machine-gate versus human-gate outcomes. First finding, day one: the machine gate rejected my own first test creative for being 57KB over the size limit. Good.

Two governance gates: machine on every commit, human at a zero-dollar floor Media-buy commits travel a lane through two gates. The machine gate validates structure and flags policy patterns, dropping one blocked commit. Survivors wait at the human gate until an approval stamp lands. Every decision writes to a shared audit trail. $1 $50 budget: −5 GATE 1 · MACHINE Every commit structural validation → blocks 11 policy pattern groups → flags image probe · https-only · no HTML the AdCP theory of judgment GOVERNANCE_BLOCKED machine-readable · no human woken GATE 2 · HUMAN $0 floor every buy crosses a desk every creative, always decision + note, audited the AAMP theory of judgment EV · APPROVED STATUS live ONE AUDIT TRAIL · WHAT EACH GATE CATCHES BECOMES THE 90-DAY WRITEUP
05 · Live numbers

Honest by construction.

Fetched from the agent's public endpoints as you read this. House fill is the share of impressions that went to this site's own promos instead of a paid line — published whatever it says, because a publisher this size has no business pretending otherwise. Product avails switch from labeled estimates to measured beacons only after seven observed days.

impressions · trailing 28d
house fill
synaptic segments
MCP tools live
06 Third-party grade

The one scoreboard here
that isn't mine.

Every number above comes from my own endpoints. This one doesn't: the AAO compliance runner probes this agent on a schedule and publishes what it finds — core protocol, media buy lifecycle, creative handling, error behaviour. The chips below read from its public API, so they say whatever it says today.

Listed in the AAO agent registry ↗
Compliance
degraded
Passing streak
new
Tracks graded
core · creative · products · media buy · reporting · error handling
Checked by AAO
11 Aug 2026
07 Poke at it

Open endpoints.
A human on the other end.

MCP endpoint
sell.nofluffadvisory.com/mcp — 12 MCP tools
Products
/products — catalog + brief-driven curation
Synaptic
/synaptic/catalog — 20 segments, members listed
Serving stats
/stats/serve — public aggregates, house fill
Authorization
/.well-known/adagents.json on this domain
Runtime
Cloudflare Workers · D1 · plain JS, no build
Tests
88 unit/integration + 15-step live smoke
Repo
adcp-sales-agent/ in this site’s repository
Run a buyer agent?

Test against a live seller
with a human on the other end.