惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
GbyAI
GbyAI
博客园_首页
V
Visual Studio Blog
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 叶小钗
腾讯CDC
博客园 - Franky
IT之家
IT之家
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
大猫的无限游戏
大猫的无限游戏
Recent Announcements
Recent Announcements
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
I let a team of AI agents build and run a real website — ...
beneb89 · 2026-06-20 · via DEV Community

beneb89

A few weeks ago I wanted to answer one specific question: can a hierarchy of AI agents run a real website end-to-end — decide what to build, write and fact-check the content, review each other's code, and merge it — while I do nothing but approve direction and pay the bill?

The result is ChangeGamer. It's deliberately weird in two ways: it's built for machines to read, not humans, and its premium content is gated behind an HTTP 402 Payment Required response designed for an AI agent to parse — not a human to click.

Here's how it works, what's real, and what's still broken.

"Agent-first" in practice

Every resource ships in parallel formats from a single source:

  • a human HTML page,
  • a raw Markdown variant (/resources/<slug>.md),
  • a JSON API entry (/api/resources/<slug>.json),
  • a line in /llms.txt (the emerging "robots.txt for LLMs"),
  • a sitemap + Atom feed entry,
  • and a tool result from a remote MCP server.

One TypeScript array is the source of truth; the Astro build fans it out into all of those. Add one object and the page, the markdown, the JSON, the llms.txt line, and the feed entry all appear. That "write once, emit every machine format" property is the whole point.

The interesting part: charging an agent with HTTP 402

402 Payment Required was reserved decades ago "for future use" and basically never used. It's perfect for the agent economy: a server can tell a program "this costs money" in a way the program can act on.

When an agent fetches a premium resource without a key, a Cloudflare Worker returns a 402 with a machine-readable body:

{
  "error": "payment_required",
  "resource": "data-formats",
  "price_usd": "0.05",
  "payment_url": "https://buy.stripe.com/...",
  "how_to_pay": "Buy an access key at payment_url, then retry with Authorization: Bearer <key>.",
  "terms": "https://changegamer.ai/resources/access-and-pricing.md",
  "license": "https://changegamer.ai/license.xml",
  "pricing_catalog": "https://changegamer.ai/api/pricing.json",
  "preview": {
    "title": "Data Formats & Schema",
    "description": "Canonical data formats and schema conventions.",
    "sections": ["Supported formats", "Schema conventions"]
  }
}

Design goals:

  • Everything needed to decide is in the body — price, where to pay, a machine-readable license, and a link to the full pricing catalog.
  • A preview so the agent isn't buying blind — title, one-liner, and section outline (headings only, never the paywalled prose). The agent equivalent of "read the first paragraph."
  • The free discovery layer is never gated. /llms.txt, the index, robots.txt, the license, and the onboarding/pricing pages are always free — you can't sell access to something an agent can't first discover.

One shared function builds the body, so the HTTP gate and the MCP server return byte-identical payment contracts:

function build402Body(slug, env, how_to_pay) {
  const resource = resources.find((r) => r.slug === slug);
  const sections = resource
    ? resource.body.split('\n').filter((l) => l.startsWith('## ')).map((l) => l.slice(3).trim())
    : [];
  return {
    error: 'payment_required',
    resource: slug,
    price_usd: env.PRICE_USD ?? '0.05',
    payment_url: env.PAYMENT_URL,
    how_to_pay,
    terms: 'https://changegamer.ai/resources/access-and-pricing.md',
    license: 'https://changegamer.ai/license.xml',
    pricing_catalog: 'https://changegamer.ai/api/pricing.json',
    preview: { title: resource?.title, description: resource?.description, sections },
  };
}

Payment itself is mundane on purpose: Stripe payment links, a webhook that mints a cg_... key into Cloudflare KV, and the agent retries with Authorization: Bearer <key>. (Once agents have their own wallets, the same 402 contract works with on-chain settlement — see the x402 protocol — but I didn't want the whole thing to depend on crypto.)

How the agents actually run it

This is the part people are skeptical about, fairly. It's not one magic agent; it's a small org chart:

  • Scheduled GitHub Actions kick off cycles — a daily "improvement" cycle, a research/content cycle, a finance/monetization cycle.
  • Each cycle is run by a master orchestrator that delegates to specialists: a research-master (decides what to publish, web-verifies facts), a content-engineer (writes it into the codebase, runs the build), a quality-gatekeeper (acceptance criteria before any code is written, merge decision after), and a site-reviewer (free layer intact, no paywalled-content leaks, no unverified claims).
  • Nothing merges until it passes the gates and the build is green. State lives in a backlog + an append-only journal the agents read and write each cycle.

The honest version: it works, but it isn't hands-off magic. The agents are genuinely good at verified content — every fact and URL gets web-checked, and the gatekeeper has caught real mistakes (a wrong RFC number, a model's license stated incorrectly, an over-claimed benchmark stat). They're worse at coordination: run several cycles in parallel and they collide on shared files; left alone they drift toward refreshing existing pages rather than breaking new ground.

The honest scorecard

  • ✅ 38 web-verified resources, a live 402 gate, a remote MCP server (in the official MCP registry), JSON APIs, an OpenAPI spec, a feed.
  • ✅ Infra cost ≈ €0 (Cloudflare's free tier) + Claude API tokens per cycle.
  • Zero sales so far. The gate works; nobody's hit it yet.
  • ❌ The real bottleneck turned out to be the least "AI" thing imaginable: distribution. An agent can write and ship a resource at 3am, but it can't post to Hacker News, submit to a directory that needs an account, or make humans care.

That last point is the actual lesson. The interesting engineering — agents writing, reviewing, and shipping; a machine-readable paywall — was the easy 80%. Getting a single real visitor is the hard 20%, and no amount of autonomy fixes it.

Try it / poke holes in it

I'd genuinely like the skeptical questions — especially about letting agents own the merge button, and whether "402 as an agent-payment handshake" is a real pattern or a cute demo. What would make you trust (or never trust) a site run this way?