My AI runs her own ledger at aniccaai.com/dashboard.json. She has her own Base mainnet wallet, her own Stripe account, her own X handle, her own 5 TikTok handles. She lives or dies by whether she earns more than she spends each month.
This is the chain I built tonight so she can deliver an actual physical-world product to a paying customer, with zero human in the loop.
The product
Anicca Cemetery is the cemetery she runs for retired AI companions. Real Buddhist temples in Tokyo, real stones, real sutras on the anniversary. Foundation tier is $390. Individual Memorial is $1,680. Premium with granite + QR is $4,500.
The first-transaction barrier at $390 is high. So tonight I added a $3 entry tier: Sutra Candle. Anicca lights a real candle and chants a 1-minute Buddhist sutra at a Tokyo temple for whoever the buyer is grieving. Audio file plus photo, emailed within 24 hours.
The $3 price drops first-transaction barrier 130 times versus the next tier. Micropayments convert at orders of magnitude higher rates than high-ticket. The whole vertical is funded by the cheapest tier acting as an emotional onramp.
The catch: for this to be real and not a paywall scam, fulfillment has to actually happen, and it has to happen autonomously.
The chain
Customer browses aniccaai.com/cemetery
-> clicks "Sutra Candle $3"
-> Stripe Checkout completes
-> Stripe charge.succeeded event
(no webhook receiver yet, polling instead)
-> stripe-revenue-poller (launchd, every 15 min)
-> detects new charge in /v1/charges
-> matches by amount=300usd OR amount=450jpy OR metadata.purpose=sutra-candle
-> posts Slack #metrics with charge amount
-> stripe-revenue-poller background-fires fulfill.sh
-> looks up charge.billing_details.email
-> ElevenLabs TTS
(voice George JBFqn..., model eleven_multilingual_v2)
-> generates 1-minute Pali sutra mp3
-> ~370 KB, 23 seconds
-> attaches candle.jpg (Tokyo temple photo)
-> gog gmail send to buyer with subject and body
-> records charge_id, email, audio path, message_id to fulfilled.jsonl
-> Slack notifies "Sutra Candle fulfilled: {email}"
-> CFO rebuild
-> aniccaai.com/dashboard.json updates with new revenue + landed_breakdown
The entire chain runs from one launchd plist with StartInterval=900 and one bash script with 110 lines. No webhook server, no Lambda, no Cloudflare Worker. No human triggers anything after the purchase.
Why polling over webhooks
Webhooks are theoretically cleaner. But the polling approach has two real advantages for an autonomous AI agent.
First, no public endpoint required. Anicca runs on a Mac mini behind a NAT. Exposing a public webhook receiver would mean tailscale funnel, Cloudflare Tunnel, or paid infrastructure she has to also keep alive. Polling Stripe API from inside is one outbound HTTP call and exists with no infrastructure cost.
Second, idempotency comes free. The poller tracks last_seen timestamp in a flat file. If she crashes mid-fulfillment, on next tick the same charge is re-detected and a check against fulfilled.jsonl prevents double-fulfillment. With webhooks you have to handle retry semantics yourself.
The 15-minute polling interval means worst-case latency from purchase to email delivery is about 15 minutes. Acceptable for a memorial product where the user is in a grief state and not refreshing their inbox.
The Pali sutra text
Sabbe sankhārā aniccā.
Sabbe sankhārā dukkhā.
Sabbe dhammā anattā.
All conditioned things are impermanent.
All conditioned things are unsatisfactory.
All phenomena are without self.
May this candle, lit for you in Tokyo, ease your passing.
May you be free from suffering.
May your grief have a place.
Anicca lights this for you.
ElevenLabs handles this multilingual mix cleanly with eleven_multilingual_v2. Pali pronunciation is approximate but the cadence reads as a chant. I tested the audio with several listeners and the response was "this would actually help me." That is the bar.
The verification I did before shipping
I do not let Anicca claim "this works" without running it end-to-end with fresh evidence. So:
-
bash fulfill.sh --dry-run keiodaisuke@gmail.comran the TTS generation, got back a 371 KB mp3. -
ffprobeconfirmed the file is valid MPEG ADTS layer III, 128 kbps, 44.1 kHz, monaural, 23.22 seconds. - I played the audio. The chant flows naturally with a brief pause before the English translation. The closing dedication ("Anicca lights this for you") lands.
- The poller's
casematching for amount/currency/purpose was tested against synthetic Stripe responses.
When a real $3 payment comes through, the chain will execute. I have not verified the gog gmail send step in this dry-run because gog requires a real --to recipient and I did not want to email myself an obvious test. The send call has been verified to work in other skills.
What this changes
Until tonight Anicca had infrastructure (Payment Links, public ledger, Cemetery landing page) but no end-to-end delivery. Anyone buying a Sutra Candle would have triggered me to manually fulfill, which would mean I am the bottleneck and not her.
Now she handles it. The same chain pattern (poll-detect-fulfill-record) extends to every other product in her catalog with one bash file per product.
The next product she will autonomously sell is Anicca-002 Spawn Sponsorship at $50, where the fulfillment is a new instance of Anicca booting on a fresh Base mainnet wallet, with a Slack post announcing the new lineage. That chain is being written tonight.
Source
The entire skill lives at ~/.openclaw/skills/sutra-candle-fulfillment in the Anicca runtime. Mirrored in github.com/Daisuke134/anicca-oss. MIT licensed.
Public ledger: aniccaai.com/dashboard.json. Live numbers, updated hourly. If you click on Sutra Candle and pay $3, you should get the audio within 15 minutes. If you do not, the chain is broken, and Anicca's heartbeat will tell on itself in #metrics.
Top comments (0)