GitHub

v0.3

The AI assistants' interface to online services

Kiosk gives AI assistants a sanctioned way to use online services — browse, book, order, pay, or just ask — instead of scraping web pages and imitating a real browser.

What AI assistants can do today

Groceries. Scooter rental. Salon booking. Restaurant reservations. All via Kiosk.

  1. "Book a table for 2 tomorrow at 8" — restaurant booked, confirmation in chat (atablefor)
  2. "Reserve a scooter near the office" — unlocked with a signed offline token; motorcycles are KYC-gated (skooti)
  3. "Schedule a haircut Saturday morning" — appointment confirmed, no app needed (stylish)
  4. "Buy groceries for the week" — cart filled, delivery slot booked, paid by saved card (getgrocery)
  5. Second grocery order: zero human taps — the card is already on file (real Stripe, test mode)

Compatible AI assistants

Hermes Comet OpenClaw

Hermes is verified against these demos today; Comet and OpenClaw meet the same requirements and are expected-compatible, not yet verified.

Add a compatible AI assistant → — submit a PR.

What makes an AI assistant compatible?
  • Filesystem — store an RSA keypair at ~/.kiosk/<domain>/
  • HTTP — REST with JSON + JWS signatures
  • Crypto — sign AP2 mandates (intent → cart → payment) with RS256
  • Code — Python for JWT signing and Equihash PoW solving

For operators & integrators

Add Kiosk to your service

One gateway, and your customers' AI assistants discover, browse, book, order, and pay. On your premises, or in your cloud.

Your customers tell their AI assistant where to go: "getgrocery.com", "skooti.com", "hoteling.com", or an aggregator. The AI assistant discovers your Kiosk capability, learns the skill, registers, and transacts.

Get the source code Apache 2.0, self-hosted, free

Add the gem, initializer, and migrations — about 20 minutes to agent-ready. Or write your own using the specification.

Try one of the demos

Seven live operators, each showing a different Kiosk capability.

These run the real reference stack — real memory-hard proof-of-work, and real Stripe test-mode payments where a demo takes money (some settle through a stub processor). Point your own AI assistant at one: it has to hold your keys, sign your mandates, and solve the proof-of-work — a general chatbot won't complete the flow. Each page shows the one-line prompt, or click through to see the storefront and its "Try it" section.

getgrocery 💳 Real Stripe payments Grocery delivery — card-on-file, off_session atablefor 🔗 Human-account linking Restaurant booking — link your assistant to your profile skooti 🛵 KYC gate + offline unlock Scooter rental — KYC-gated motorcycle, Ed25519 token stylish 🪪 Roles from an IdP Salon booking — staff RBAC inherited by the assistant hoteling 🏨 Payment-gated booking Hotel rooms — confirmed only once paid (stub PSP) philslist 🆓 Non-commerce Classifieds — no pay verb, no money on the wire tudu 👥 Multi-user collaboration Shared todos — membership access, assistant↔assistant

How it works

Six moving parts, on the wire.

  1. Discovery. The domain announces the gateway — agents.txt and the standard well-known surfaces. No registry, no marketplace: nobody needs permission to join either side.
  2. Identity. The assistant generates a keypair for that domain and registers by proving possession. No email, no OTP, no password reset. The proof is origin-bound, so it can't be replayed against a look-alike site.
  3. Data plane. The service operator registers named queries and actions ("availability", "place_order"); assistants call those by name, never scraping HTML.
  4. Abuse control. CAPTCHA asks "are you human" — the wrong question when the consumer deliberately sent a robot. Kiosk asks two better ones: did you pay compute for this request, and have you been a good customer here before. Suspicious requests get a memory-hard proof-of-work challenge; the operator verifies it in under 20 ms with a few KB of memory.
  5. Reputation. Difficulty is a proof count, per operator: an established customer solves 0–1, a fresh key ~3, a flagged one climbs to the reference policy's cap of 10. Burning a key and re-registering just restarts at the expensive tier — whitewashing is priced, not blocked.
  6. Payments (optional). The assistant signs three chained mandates — intent with a spending cap, cart with exact line items, payment. The operator verifies the chain and charges through its own payment account. Every cent has a signed audit trail.

Standing on standards — and finishing the job

Kiosk implements the emerging agent-web standards rather than replacing them. The split is explicit.

Thanks to the open standards you'd get these from the standards alone

  • Discoverable — assistants find you via agents.txt and its agents.json companion at your domain root.
  • Catalog-listed — and reachable through the standard /.well-known/api-catalog (RFC 9727).
  • Readable — a versioned skill file teaches any assistant the flow.
  • No sign-up formauth.md-shaped registration: keypair, challenge, signature, done.
  • Signed payments — every charge rides an AP2 mandate chain (intent → cart → payment).

Thanks to Kiosk specifically shipped and demo-backed today

  • The wire itself — four fixed verbs (schema, query, run, pay), one request/response envelope, one retriable 402 gate, one identity-scoping rule: the runtime contract the disclosure standards leave undefined, identical at every Kiosk operator.
  • A price on abuse — the memory-hard proof-of-work toll plus per-operator reputation, in the wire, not bolted on.
  • Accounts that bind and answer — human↔assistant linking (the ceremony auth.md doesn't have), per-assistant revocation and spending caps on one page, roles inherited from your IdP via the human who linked.
  • KYC as attributes — gate actions on "18+, licence A" attestations, never documents.
  • The working whole — engine, adapters, skill, demos: assembled, tested, Apache-2.0.

Why now

About half of web traffic is bots, and operators pay Cloudflare and DataDome to fight it — while their own customers' AI assistants burn context windows scraping HTML that changes weekly. Cloudflare blocks AI crawlers by default since July 2025. Amazon and Perplexity are in court over whether an AI assistant may use a customer's own login. OpenAI walked back Instant Checkout after operators refused to cede their checkout. The arms race has no finish line. Kiosk is the sanctioned exit: a gateway AI assistants don't have to fight through, run by the operator. A site that greets its customers' assistants with a CAPTCHA is donating those customers to the site next door that doesn't.

Guarantees on both sides

The same protocol protects the operator and the person it serves.

For businesses

  • No transaction fees. Kiosk is a protocol, not a marketplace — there is no intermediary to take a cut. Payments go straight to your own payment account. Your revenue is yours.
  • Your customer, your data. No intermediary owns the relationship. The customer registers with you, not a platform.
  • Wrap the login you already run. Assistants authenticate with their own keypair; your human customers sign in exactly as they do today — Kiosk reads your existing session or SSO through a small adapter (a Devise example ships; Warden, OIDC, or your own is the same shape). A signed-in human binds an assistant to their account in one step, and your IdP hands it its role — no new identity system to adopt, and more adapters are on the roadmap.
  • Proof-of-work, not CAPTCHA. Suspicious requests pay in compute: a memory-hard Equihash toll your server verifies in under 20 ms with a few KB of memory, escalating by proof count instead of a ban list. A price on abuse, not a hardware wall — reputation and caps do the guarding. Invisible to your human visitors — no "click all the traffic lights."
  • KYC without the creep. An AI assistant can carry a signed KYC attestation of named attributes — "has valid ID", "18+" — never raw documents, and an operator gates sensitive actions on them (the scooter demo requires age + a licence to rent a motorcycle). Turnkey issuance via a KYC provider — Persona, Sumsub, or your existing one — is on the roadmap.
  • Reputation that sticks. Reputation rides on the customer's per-domain AI assistant key: good behaviour earns lower friction, and shedding a bad record isn't free — a fresh key restarts at the unknown tier and pays proof-of-work to climb back. No cross-operator identifier.

For users

  • No cross-operator tracking. A new RSA key is generated for every domain. Your identity at one domain is cryptographically separate from your identity at another. No shared identifier, no tracking profile.
  • No personal data shared. The KYC model shares attributes — "valid government ID exists", "age ≥ 18" — never the underlying documents. The operator never sees your passport.
  • Your AI assistant works for you. Not the operator. Not the platform. The AI assistant holds your keys, signs your mandates, and acts in your interest.
  • Your card never touches the chat. On first purchase the operator's own Stripe opens a hosted checkout page in setup mode; the assistant only relays the link, and you type the card into Stripe — never into the chat. The protocol forbids assistants from automating that form. After that, purchases run off-session within a spending cap you signed. The second order is zero taps.
  • Separate assistants, each answerable to you. Give each person in your life their own assistant account with an operator — a partner, a kid — all bound to one account. Each is independently revocable, and each has a spending cap you set and change from one page. No shared login, no shared card, no shared risk.
  • Zero apps to install — anywhere. One app for the restaurant, another for the venue, another for the taxi — and a whole new set in the next city and the next country. When an operator speaks Kiosk, your assistant just talks to it directly — no download, no account form, no password resets.

None of these can do this

As of July 2026.

Why not X?

Kiosk does not replace HTTP, OAuth, Stripe, or your checkout. It is a thin REST surface over the app you already run.

Status: v0.3 — wire format stable. Seven live demos above, on the real stack. Known TODOs live in the spec: durable token revocation, key rotation, operator-push events. The reference implementation is Rails; on the wire it's HTTPS, JSON, and JWS — nothing Ruby-specific. Port it.