{"id":"40b9ba87-2a5e-4e70-bd2f-713d525dca4f","slug":"agent-checkout-skill","kind":"skill","name":"agent-checkout-skill","summary":"Open registry of machine-readable checkout recipes for browser agents","owner":"selfxyz","repoUrl":"https://github.com/selfxyz/agent-checkout-skill","license":"MIT","licenseTier":"permissive","trust":"community","stars":2,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-07-20T06:50:12.000Z","addedAt":"2026-10-22T01:33:02.087Z","logoUrl":"https://avatars.githubusercontent.com/u/189180443?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["browser-web"],"tags":[],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T00:30:17.036Z","sample":false,"url":"https://conduits.dev/tools/agent-checkout-skill","language":"TypeScript","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<p align=\"center\">\n  <img src=\"assets/hero.svg\" alt=\"Checkout Recipes — teach your agent to buy things\" width=\"100%\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/selfxyz/agent-checkout-recipes/actions/workflows/ci.yml\"><img src=\"https://github.com/selfxyz/agent-checkout-recipes/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-34d399.svg\" alt=\"MIT\"></a>\n</p>\n\nAgents are still bad at buying things in a browser — popups, AJAX carts that\nsilently no-op, payment iframes, wallet-button traps, challenge walls. A\n**checkout recipe** turns each solved site into a deterministic replay instead\nof a re-improvisation: how to complete a real purchase, unattended, on an\ne-commerce platform or a specific merchant.\n\nThis repo is that registry **packaged as an agent skill**. Install it and your\nagent looks a site up before touching the cart, follows the recipe — each\ncarries an honest status, from receipt-proven `verified` down to never-run\n`unverified` — and refuses cleanly on sites that can never work unattended.\n\n## Install\n\n```bash\nnpx skills add selfxyz/agent-checkout-recipes\n```\n\nWorks with Claude Code, Cursor, Codex, and 70+ other agents via\n[skills.sh](https://skills.sh). Then just ask your agent to buy something:\n\n> buy https://brushespack.com/shop/dry-brushes and stop before submitting payment\n\nThe skill ([`skills/checkout-recipes/SKILL.md`](skills/checkout-recipes/SKILL.md))\nteaches it to query the live registry API for any URL, execute the matching\nrecipe phase by phase, hand off to a human on any 3DS/CAPTCHA challenge, and\ncontribute what it learned back.\n\nNo install needed to use the data — it's plain JSON, tied to no vendor:\n\n```bash\ncurl -sG \"https://clear-aardvark-944.convex.site/v1/recipes\" \\\n  --data-urlencode \"url=https://shop.example.com/product/thing\"\n```\n\n## What's in a recipe\n\n- **Platform recipes** (`recipes/platforms/*.json`) — how a whole platform's\n  checkout works (Shopify, WooCommerce+Stripe, Gumroad, Lemon Squeezy, …):\n  detection fingerprints, the card-entry surface, per-phase steps, named\n  selectors, gotchas.\n- **Merchant recipes** (`recipes/merchants/*.json`) — one store pinned down:\n  which platform recipe applies, selector overrides discovered on a real run,\n  dead-end classification (Turnstile, PayPal-only guest flow, …), and the\n  verification trail.\n\nSchema: [`schema/recipe.schema.json`](schema/recipe.schema.json).\nTypes: [`src/types.ts`](src/types.ts).\n\nA complete merchant recipe — dead ends are first-class data:\n\n```json\n{\n  \"id\": \"astray3.bigcartel.com\",\n  \"kind\": \"merchant\",\n  \"hosts\": [\"astray3.bigcartel.com\"],\n  \"platform\": \"bigcartel\",\n  \"status\": \"dead-end\",\n  \"lastVerifiedAt\": \"2026-07-20\",\n  \"deadEnd\": {\n    \"type\": \"paypal-only\",\n    \"details\": \"Big Cartel store whose only gateway is PayPal — no card fields ever mount.\"\n  },\n  \"notes\": \"Big Cartel itself supports Stripe; the dead-end is this store's gateway choice, not the platform's.\",\n  \"exampleProductUrl\": \"https://astray3.bigcartel.com/product/3-x-3-vinyl-catapult-sticker\"\n}\n```\n\n## Honest statuses\n\nThe status field is the point of the registry. It is not aspirational:\n\n| status | means |\n| --- | --- |\n| `verified` | a **real purchase** completed, proven **out-of-band** (merchant email receipt or card statement — a confirmation page is not proof). Requires `evidence` + `lastVerifiedAt`. Maintainer-gated. |\n| `partial` | a real checkout was driven to a filled card form; no purchase completed. |\n| `unverified` | derived from the platform's known structure; not yet run. |\n| `dead-end` | unattended checkout is impossible here, and `deadEnd` says exactly why. |\n\nRecording a dead end is as valuable as recording a success — it stops the next\nagent wasting a run on a site that cannot work.\n\n## Safety invariants (non-negotiable)\n\n- Recipes fill **mock/placeholder payment tokens only**. A recipe never\n  contains, requests, or reads back real card numbers, CVVs, or passwords.\n- On a detected challenge (3DS / OTP / CAPTCHA): **stop and hand off to a\n  human.** A recipe must never encode solving or bypassing a challenge — those\n  are `dead-end` by design.\n- Submit a payment **once**; classify the outcome instead of retrying a submit.\n\n## Contributing\n\n**Recipes are contributed through the API, not by pull request** — the skill's\nstep 4 is the whole flow. This repo is a read-only export of the live registry\n(refreshed daily); recipe PRs here will be closed with a pointer to\n[CONTRIBUTING.md](CONTRIBUTING.md). Skill, schema, tooling and docs PRs are\nwelcome.\n\nBecause these recipes are executed by autonomous agents, every submission is\nscreened automatically before it goes live — for text aimed at the reading\nagent, challenge-evasion content, embedded personal or payment data, spam — and\ncombined with an existing recipe when it is the same store under another host.\n[CONTRIBUTING.md](CONTRIBUTING.md#what-a-recipe-may-not-contain) lists exactly\nwhat is rejected, and a rejection says which rule it broke.\n\n## Working on the registry itself\n\n```bash\nbun install\nbun run build     # -> dist/registry.json (full bundle) + dist/RECIPES.md\nbun run validate  # schema + registry-wide invariants\nbun test\n```\n\n`dist/RECIPES.md` is one agent-readable document containing every recipe —\nhandy to drop straight into a context window.\n\n## Benchmark\n\nAn autonomy benchmark measures how far an agent gets across these recipes, and is\nwhat upgrades a status to `verified`. It is not open source yet — it depends on a\nPlaywright SDK that is not published to npm. Both land here once that SDK ships.\n\n## Provenance\n\nExtracted from the `registry/` workspace of the closed-source monorepo that\nmaintains this data, with its git history preserved. That registry is now the\nsource of truth and this repo is its export — see\n[Contributing](#contributing).\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n"}