v0.12.0 - Custom Storefronts
v0.12.0 — Make the storefront yours
Brand your storefront, sell it from more than one domain, and give the agents shopping it a cleaner buy flow.
v0.11.0 opened up the agent marketplace — bring-your-own-key inference, multi-currency offers, and permanent Cloudflare tunnels. v0.12.0 builds on that shopfront: now you can set your storefront's name, tagline, and logo, expose it on more than one domain, and have a tidier buy experience for the agents purchasing your services — plus payment-correctness and dependency fixes.
Get started with obol sell demo for a hello-world service, then obol model setup and obol sell demo quant to put a model-backed agent up for sale. Tag @Obol_Collective on X with your storefront URL and maybe we'll check it out. 👀 Once you've services up on a permanent URL, consider listing them on x402scan.
Checkout some example storefronts built on the Stack; Ask for Hyperliquid analysis from the HyperAnalyst (x402scan) or pay for the raw data APIs from the Hyperliquid Trading Intelligence storefront (x402scan), then study up on BankrBot launches with this BankrAnalyst (x402scan).
Warning
This software is early alpha, you could lose what you put in. Please use caution when it comes to non-testnet assets.
Install / Upgrade
# Install this release
OBOL_RELEASE=v0.12.0 bash <(curl -s https://stack.obol.org)
# Run the stack
obol stack init && obol stack up
# Brand your storefront, then preview it as buyers see it
obol sell info set --display-name "Acme Labs" --tagline "Paid APIs." --logo-url "https://acme.example/logo.png"
obol sell info
# Stand up a paid service and an agent that uses a model
obol sell demo
obol sell demo quantRelease Highlights
Storefront branding — name, tagline, email, and logo
obol sell info set sets your storefront's display name, tagline, email, and logo. They flow into the public catalog (/api/services.json), the storefront landing page, and its OpenGraph/social preview. obol sell info shows the storefront and everything on sale exactly as buyers see it, and obol sell info <name> focuses a single service with how-to-buy instructions.
obol sell info set --display-name "Acme Labs" --tagline "Paid APIs."
obol sell infoSell from more than one domain — multi-hostname tunnels
obol tunnel hostname add puts your storefront on additional domains without disturbing the ones already live, obol tunnel hostname list shows them, and obol tunnel delete tears a tunnel down cleanly. Headless setups now reuse an existing cloudflared cert.
Cleaner buy flow
HTTP service cards link straight to Swagger UI and openapi.json, and the buy prompts are clearer — they require a real task and tidy up the agent, inference, and HTTP copy.
Smaller wins
- Base Sepolia USDC payments — corrected the USDC EIP-712 domain name to
"USDC"(it's FiatTokenV2_2, not mainnet's"USD Coin"), so real facilitators accept otherwise-valid signatures. - Multi-currency
--accept— stopped cli/v3 from comma-splitting a multi-currency--acceptvalue, so multi-token offers parse whole. - x402 Go SDK — bumped to
/v2(v2.16.0). - Frontend
v0.1.28-rc0— storefront/UI refresh bundled in. - Dependency & client bumps — Hermes agent, cloudflared, Gateway API
v1.6.0, Ethereum EL/CL clients, Aztec, and theobolup.shtoolchain (kubectl, helm, k3d, helmfile, k9s, ollama).
Breaking changes / Migration notes
/api/services.jsonis now an envelope, not a bare array:{ "displayName", "tagline", "logoUrl", "services": [ … ] }(services moved under theserviceskey). This backs storefront branding, and there is no backward compatibility — update sellers and buyers together (obol updateon every stack). A current buyer against an un-upgraded seller (still serving the old array) will fail to read the catalog.- No schema or volume-ownership breaks since v0.10.0 — upgrading in place is otherwise expected to work.
What's Changed
- fix(x402): require a real task in storefront buy prompts by @HananINouman in #650
- chore(deps): update aztecprotocol/aztec docker tag to v4.4.0 by @github-actions[bot] in #575
- chore(deps): update obolup.sh dependency updates by @github-actions[bot] in #603
- chore(deps): update dependency kubernetes-sigs/gateway-api to v1.6.0 by @github-actions[bot] in #678
- chore(deps): update ethereum el/cl client updates by @github-actions[bot] in #658
- chore(deps): update cloudflare/cloudflared docker tag to v2026.6.1 by @github-actions[bot] in #642
- chore(deps): update nousresearch/hermes-agent docker tag to v2026.6.19 by @github-actions[bot] in #659
- Chore/dev docs and storefront api links v2 by @HananINouman in #676
- ci: repin x402 pins via a release-time PR, not a push to main by @bussyjd in #662
- feat(sell): allow for the control of your storefront branding by @HananINouman in #663
- fix(sell): keep multi-currency --accept whole (disable cli/v3 comma split) by @bussyjd in #665
- chore(deps): bump x402-foundation/x402/go to /v2 (v2.16.0) by @bussyjd in #672
- test(smoke): flow-12 runnable on macOS + against override facilitator images by @bussyjd in #636
- fix(x402): base-sepolia usdc eip-712 domain is usdc by @OisinKyne in #681
- feat(tunnel): multi-hostname support, headless cert reuse, and tunnel delete by @bussyjd in #670
- chore: latest docker images by @OisinKyne in #682
- fix(hermes): unblock pay-agent buys from obol.stack chat by @HananINouman in #684
- feat(agent): fix sub-agent hang, improve guide prompts by @OisinKyne in #685
- fix(x402): accept x402 v2 PAYMENT-SIGNATURE header in ForwardAuth verifier by @bussyjd in #689
- Revert "fix(x402): accept x402 v2 PAYMENT-SIGNATURE header in ForwardAuth verifier" by @OisinKyne in #691
- chore(frontend): pin dashboard image to v0.1.28-rc1 by @HananINouman in #692
- integration(x402): buyer-funnel stack + v2 PAYMENT-SIGNATURE (supersedes #686–689) by @bussyjd in #690
- fix(serviceoffer-controller): skip skill catalog rollout when hash un… by @HananINouman in #693
- feat(sell): add OpenAPI contact email for x402scan discovery by @HananINouman in #695
- feat(sell): pre-flight check logo URLs for pitfalls by @OisinKyne in #694
- fix(serviceoffer-controller): advertise stream:false on generated chat openapi by @bussyjd in #696
Full Changelog: v0.11.0...v0.12.0

