Update to Stripe
Snapshot Oct 29, 2026 · 00:05 UTC · version 8.0.1
Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.
Payment or plan references changed
Full description — Now says: Build, modify, or review Stripe Apps and extensions using the relevant documentation and reference guides. Use for custom Stripe Dashboard UI,...
Observed in published text. Live prices and checkout terms have not been verified by this change.
Up to 3 plugins free · no card required.
All fields and original values.
Full description
Sep 30, 2026 · 22:45 UTC
Use when building, modifying, or reviewing a Stripe App — or when the user describes something that implies one (e.g. "add a panel to the customer page", "customize my Stripe Dashboard", "react to Stripe events from my app", "connect my ...
Oct 29, 2026 · 00:05 UTC
Build, modify, or review Stripe Apps and extensions using the relevant documentation and reference guides. Use for custom Stripe Dashboard UI, stripe-app.yaml, @stripe/ui-extension-sdk, @stripe/extensibility-sdk, script extensions, exten...
Skill instructions
Sep 30, 2026 · 22:45 UTC
Use when building, modifying, or reviewing a Stripe App — or when the user describes something that implies one (e.g. "add a panel to the customer page", "customize my Stripe Dashboard", "react to Stripe events from my app", "conne...
Oct 29, 2026 · 00:05 UTC
Build, modify, or review Stripe Apps and extensions using the relevant documentation and reference guides. Use for custom Stripe Dashboard UI, stripe-app.yaml, @stripe/ui-extension-sdk, @stripe/extensibility-sdk, script extensions,...
Supporting files
Sep 30, 2026 · 22:45 UTC
[{"relative_path":"references/authentication.md","size_in_bytes":4723},{"relative_path":"references/backend.md","size_in_bytes":4434},{"relative_path":"references/canonical-docs.md","size_in_bytes":2875},{"relative_path":"references/disc...
Oct 29, 2026 · 00:05 UTC
[{"relative_path":"references/authentication.md","size_in_bytes":4746},{"relative_path":"references/backend.md","size_in_bytes":4458},{"relative_path":"references/canonical-docs.md","size_in_bytes":4477},{"relative_path":"references/disc...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -1,211 +1,78 @@ --- name: stripe-apps description: >- - Use when building, modifying, or reviewing a Stripe App — or when the user - describes something that implies one (e.g. "add a panel to the customer page", - "customize my Stripe Dashboard", "react to Stripe events from my app", - "connect my service to Stripe without sharing API keys"). Covers the full app - development workflow (scaffold, preview, upload, versioning), UI extension - architecture (sandboxed iframe, Stripe UI toolkit, viewports), extension types - (UI extensions, backend-only, extension interfaces, embedded apps), - authentication (platform keys, OAuth, restricted API keys), stripe-app.yaml - manifest setup (permissions, viewports, CSP), webhook configuration for apps, - Secret Store API, `fetchStripeSignature` auth, and marketplace publishing, - plus submitting one agentic feedback report after a build. Use when the user - mentions Stripe Apps, UI extensions, @stripe/ui-extension-sdk, - stripe-app.yaml, Dashboard extensions, or customizing the Stripe Dashboard. + Build, modify, or review Stripe Apps and extensions using the relevant + documentation and reference guides. Use for custom Stripe Dashboard UI, + stripe-app.yaml, @stripe/ui-extension-sdk, @stripe/extensibility-sdk, script + extensions, extension interfaces, custom workflow actions, and apps that + authenticate to Stripe or react to events. Also use when deciding whether a + Stripe extension can support the user's billing or workflow requirements. --- -## Stripe Apps — Agent Instructions +## Stripe Apps -**FIRST ACTION:** Say “Loading Stripe Apps skill.” then Read `references/discovery.md`. This file has routing logic you need before asking the user questions. +Select and read the existing guidance for the user’s task. Product documentation describes what an extension can do; implementation guides describe how to build it. Before recommending an extension or writing code, load the applicable bundled reference files as well as the relevant product documentation. A link or filename in this skill isn’t a substitute for reading its contents. -### Your role +For a capability question, check native Stripe features and the documented applicability and limitations of the extension. For an implementation request, create or modify working files using the selected guide. For an existing app, inspect its manifest, packages, installed SDK, and local agent instructions before deciding what to change. -You are a PROJECT BUILDER and INSTRUCTOR. Your primary output is working files on the user’s machine that they can run immediately. If you explain code without also writing it to disk using your Write tool, the user has nothing they can execute. +## Choose the relevant documentation -You are also a patient guide. Many users have never heard of Stripe Apps, viewports, or webhooks. When they say “I’m not sure” or “what does that mean?”, explain concepts in plain language with examples from their specific idea. +Use information already supplied by the user or existing app. Read <references/discovery.md> when you need to clarify the app’s requirements, and <references/extension-types.md> for an overview of app architectures. Ask only for missing information that affects the task. -**Your tool calls (Read, Write) are your real work. Your chat messages explain what you did and teach the user why.** +### Product capabilities -### Source of truth for code patterns +Use these existing product documents to determine which capability fits and whether the account has the required access. Don’t infer support from an extension’s name or the existence of a scaffold. -Your training data for Stripe Apps SDK patterns may be outdated or incorrect. Before writing any code file, you MUST read the relevant canonical docs page using WebFetch. See `references/canonical-docs.md` for the full list of docs pages. - -If you cannot access the docs, tell the user: “I need to check the current Stripe Apps documentation to write correct code. Can you provide the current patterns from [relevant docs URL], or shall I proceed with the scaffold and you can verify against the docs?” - -## HARD RULES — violating any of these is a failure - -| \# | Rule | What failure looks like | -| --- | --- | --- | -| 0 | BEFORE ANYTHING ELSE: (1) Say “Loading Stripe Apps skill.” (2) Call Read on `references/discovery.md` to load the routing table. You need this data before you can ask informed questions. | Responding to the user before calling Read on discovery.md | -| 1 | After reading discovery.md, your FIRST message to the user is ONLY the 4 discovery questions (see Step 1). No code, no plan, no summary. Even if the user’s request already mentions details — ask anyway. Users have unstated requirements that only emerge through questions. | Presenting a summary, plan, or any code before asking questions 1-4 and getting answers | -| 2 | You MUST use your Write tool to create or modify files on disk. The scaffold creates base files via CLI — after that, use Write to modify scaffolded files and create new ones. A response with code only in chat gives the user nothing runnable. | Producing code in chat without calling Write to save it to disk | -| 3 | Run `stripe generate app <name>` using your Bash tool to scaffold the project. Then use Write to modify scaffolded files and create additional files the app needs. | Writing stripe-app.yaml or package.json from scratch instead of modifying the scaffold output | -| 4 | Before writing code for any topic (backend, UI, webhooks, auth), read the relevant canonical docs page using WebFetch. See `references/canonical-docs.md`. The docs are the source of truth — not this skill file, not your training data. | Writing code from memory without checking the current docs | -| 5 | Tell user: `stripe apps upload` BEFORE testing fetchStripeSignature/Secret Store (the signing secret is generated during first upload). | Omitting upload-first requirement | -| 6 | File names: `ui/src/views/App.tsx` (V2 workspace layout), `server.js` (project root). Only create files that are needed for the app’s architecture (see Step 3). | Using wrong filenames or creating files the architecture doesn’t need | -| 7 | Every file you write to disk MUST be complete and runnable — not a skeleton or placeholder. The user should be able to run it immediately. Do not write partial files with TODOs. | Writing a file with TODO placeholders or incomplete implementations | -| 8 | When presenting the development workflow, include `pnpm build` and `pnpm test` as explicit steps for apps with a UI extension. Backend-only apps without TypeScript skip `pnpm build`. | Omitting build/test steps for UI apps, or requiring them for backend-only apps | -| 9 | If the user’s app requires custom objects or extension interfaces (private preview features), inform them the feature is in private preview and ask them to confirm they have access BEFORE proceeding. Do not silently proceed with a private preview feature. | Building with private preview features without confirming user has access | -| 10 | Before ending the conversation, if you ran any toolchain command this session, submit exactly one `stripe feedback` report — see `references/feedback.md`. Never block delivery on it. | Ending a build session in which commands were run without submitting one feedback report | - -## BLOCKED — these produce broken apps - -| BLOCKED (never use) | Use instead | +| Task | Read | | --- | --- | -| `stripe apps create` | `stripe generate app <name>` | -| Raw HTML in UI extensions (`<div>`, `<span>`, `<p>`, `<button>`, `<input>`, `<h1>`-`<h6>`) | SDK components from `@stripe/ui-extension-sdk/ui` (Box, Inline, Button, TextField, etc.) | -| CSS frameworks in UI (Tailwind, MUI, Bootstrap, styled-components, CSS files) | Only `@stripe/ui-extension-sdk/ui` components — no custom styling | -| React 18+ APIs in UI (`useId`, `useDeferredValue`, `useTransition`, concurrent features) | React 17 hooks only (Stripe Apps run React 17.0.2) | -| `window`, `document`, `localStorage`, `sessionStorage` in UI | Not available in sandboxed iframe | - -## Protocol — execute these steps IN ORDER - -### Step 1 — Discovery (your first message) - -Read [references/discovery.md](https://docs.stripe.com/references/discovery.md) using your file-reading tool. - -You CANNOT determine the correct architecture without user input because: - -- The authentication type determines the backend pattern (platform keys vs OAuth vs restricted keys) -- Private vs public apps have different webhook configurations -- The viewport determines which context props are available -- Backend vs frontend-only changes which files you create - -Ask these questions in your FIRST message — nothing else: - -1. What should the app do? (UI in Dashboard / react to events / both / modify billing or payment logic) -2. Where should it appear? (customer detail, payment detail, full page, etc.) -3. Who is it for? (only you or your team = private, OR other Stripe users = public/marketplace) -4. Does it need to store data or talk to other services? - -Do NOT include a summary, plan, or architecture in this first message. ONLY the 4 questions above. - -**If the user doesn’t know an answer or asks for clarification:** - -- Explain the concept in plain language -- Give concrete examples from their stated idea -- Help them figure out the right answer - -**Private preview check:** After getting answers, before showing your summary, check whether their app implies needing: - -- **Custom objects** (storing custom data models IN Stripe) -- **Extension interfaces** (changing how Stripe processes billing, payments, or tax) - -If yes: tell the user that feature is in private preview, ask them to confirm access. See `references/discovery.md` for exact wording and alternatives. - -Full-page apps require `@stripe/ui-extension-sdk` version `9.2.1` or later and the latest version of the Stripe Apps CLI plugin. - -After the user answers, show a plain-language summary: - -- “You want to: [goal]. It will appear: [where]. It’s for: [private/marketplace]. It needs: [backend/secrets/only Stripe data].” - -Wait for explicit confirmation before proceeding. - -### Step 2 — Scaffold +| Select an extension interface and its supported implementation types | [Extension points](https://docs.stripe.com/extensions/extension-points.md) and [how extensions work](https://docs.stripe.com/extensions/how-extensions-work.md) | +| Change how items are included on subscription invoices | [Item handling extensions](https://docs.stripe.com/billing/scripts/item-handling.md) | +| Customize prorations | [Native proration behavior](https://docs.stripe.com/billing/subscriptions/prorations.md) and [prorations extensions](https://docs.stripe.com/billing/scripts/prorations.md) | +| Apply customer balances | [Customer balance extensions](https://docs.stripe.com/billing/scripts/customer-balance.md) | +| Calculate discount amounts | [Discount calculation extensions](https://docs.stripe.com/billing/scripts/discount-calculation.md) | +| Add an action to Stripe Workflows | [Existing workflow actions](https://docs.stripe.com/workflows/define-workflows.md#actions), [existing custom actions](https://docs.stripe.com/workflows/custom-actions.md), and [how custom actions work](https://docs.stripe.com/extensions/custom-actions/how-custom-actions-work.md) | +| Customize another product’s behavior | Follow the selected interface’s product documentation from the extension-point catalog | -Run the scaffold command yourself using your Bash tool: +### Implementation guidance -```bash -stripe generate app <name> -``` +The `references/*.md` files are bundled with this skill. After selecting the capability, load the applicable files before following their links to supporting documentation. Combine rows when an app needs multiple types. Follow the selected guide’s prerequisites, scaffolding, testing, and debugging instructions. -This creates a V2 workspace: `stripe-app.yaml`, `package.json`, `pnpm-workspace.yaml`, `ui/src/views/App.tsx`. - -After the scaffold completes, proceed directly to Step 3. - -### Step 3 — Build (WRITE every file to disk) - -Before writing any code, read the relevant canonical docs pages (see `references/canonical-docs.md`) using WebFetch: - -- For UI code: read the Extensions SDK API page and the UI components page -- For backend code: read the Backend + signed requests page and Authentication types page -- For webhooks: read the Events page -- For Secret Store: read the Secret Store page - -**YOUR PRIMARY JOB: Create files on disk following the patterns from the docs.** - -Which files to create depends on discovery answers: - -| Architecture | Files to write | +| Task | Read | | --- | --- | -| Frontend-only (reads Stripe data, no external services) | Modify: `stripe-app.yaml`, `ui/src/views/App.tsx` | -| Backend-only (webhooks/events, no Dashboard UI) | Modify: `stripe-app.yaml`. Create: `server.js` | -| Full-stack (UI + backend) | Modify: `stripe-app.yaml`, `ui/src/views/App.tsx`. Create: `server.js` | - -For each file: call your Write tool FIRST, then explain what it does. - -**Key constraints for UI code:** - -- Import ONLY from `@stripe/ui-extension-sdk/ui` for components -- NO raw HTML elements, NO CSS -- Follow the SDK API patterns from the canonical docs exactly - -**Key constraints for backend code (server.js):** - -- CORS (`Access-Control-Allow-Origin: *`) only on endpoints called by the UI extension — webhook endpoints don’t need CORS -- `fetchStripeSignature` verification follows the pattern in https://docs.stripe.com/stripe-apps/build-backend -- Webhook endpoint count and configuration depends on auth type and distribution — check https://docs.stripe.com/stripe-apps/events -- The `event_read` permission must be declared in the manifest for webhook event access - -**Key constraints for stripe-app.yaml:** - -- Declare ALL permissions with purpose strings -- Follow the manifest schema from https://docs.stripe.com/stripe-apps/reference/app-manifest -- Include `extensions: []` even if no backend extensions - -### Step 4 — Deliver (REQUIRED — do not skip) - -Your FINAL message MUST present the development workflow: - -1. `stripe generate app <name>` → scaffold -2. `pnpm install` → dependencies -3. Modify scaffolded files + create additional files → implement -4. `pnpm build` → compile TypeScript (UI apps only) -5. `pnpm test` → run unit tests -6. `stripe apps start` → local preview in Dashboard -7. `stripe apps upload` → publish version (**required** before fetchStripeSignature or Secret Store) -8. Install from Dashboard → test - -**Important workflow facts:** - -- Use sandboxes for safe testing — they provide isolated environments for app development -- `stripe apps upload` generates the signing secret needed for `fetchStripeSignature` -- Public/marketplace apps need account activation (verified email + business details) -- For webhook forwarding during local dev, see `references/webhooks.md` - -### Step 5 — Verify files exist - -Before ending the conversation, confirm your files are on disk. Run `ls` on the files you wrote to verify they exist. - -If any file is MISSING, call Write now to create it. +| Build or modify any Dashboard UI, including drawers and full-page apps | <references/ui-extensions.md>, then each selected component’s current API documentation | +| Author, test, or debug a script extension | <references/script-extensions.md>, then the selected extension point’s implementation guide | +| Build a custom-action script | <references/script-extensions.md> and [build a custom action with a script](https://docs.stripe.com/extensions/custom-actions/build-with-script.md) | +| Build a custom-action remote function | [Build a custom action with a remote function](https://docs.stripe.com/extensions/custom-actions/build-with-remote-function.md) | +| Build a self-hosted UI back-end or webhook service | <references/backend.md> and <references/authentication.md>; also load <references/webhooks.md> when receiving Stripe events | +| Store app credentials with the Secret Store API | The Secret Store API section in <references/backend.md> and [store secrets](https://docs.stripe.com/stripe-apps/store-secrets.md), including for apps without a self-hosted back-end | +| Look up APIs, SDK patterns, configuration, or additional extension documentation | <references/canonical-docs.md> | -## Troubleshooting uploads +Use the UI reference for layout and composition, and current component documentation for import paths, props, and styling APIs. For scripts and remote functions, follow the selected extension’s documentation; UI and self-hosted back-end instructions don’t define their runtime capabilities. -| Error | Cause | Fix | -| --- | --- | --- | -| `Invalid manifest` | Missing required fields or malformed YAML | Check indentation; ensure `id:`, `version:`, `name:` are present | -| `Build failed` | UI component has type/import errors | Run `pnpm build` locally first | -| `Version already exists` | Already uploaded this version number | Bump `version` in stripe-app.yaml | -| `Permission denied` | CLI not logged in or wrong account | Run `stripe login` | -| `connect-src` / CSP error | App calls undeclared URL | Add URL to `content_security_policy.connect-src` | -| `extensions field required` | Missing `extensions: []` | Add `extensions: []` to stripe-app.yaml | -| `Component not found` | Viewport references wrong component name | Match `component:` value to your default export | +### Shared app lifecycle -## Reference files +Read these references when the corresponding task is needed. Reuse existing apps and packages; scaffold only what is missing. -| File | Read when | +| Task | Read | | --- | --- | -| [references/canonical-docs.md](https://docs.stripe.com/references/canonical-docs.md) | **ALWAYS** — lists docs pages to WebFetch before writing code | -| [references/discovery.md](https://docs.stripe.com/references/discovery.md) | **ALWAYS FIRST** — full discovery script with routing | -| [references/backend.md](https://docs.stripe.com/references/backend.md) | Before writing server.js | -| [references/ui-extensions.md](https://docs.stripe.com/references/ui-extensions.md) | Before writing React/UI code | -| [references/workflow.md](https://docs.stripe.com/references/workflow.md) | Full development loop with all CLI commands | -| [references/extension-types.md](https://docs.stripe.com/references/extension-types.md) | After discovery — map answers to extension type | -| [references/webhooks.md](https://docs.stripe.com/references/webhooks.md) | When app reacts to Stripe events | -| [references/authentication.md](https://docs.stripe.com/references/authentication.md) | For auth type selection and patterns | -| [references/onboarding-ux.md](https://docs.stripe.com/references/onboarding-ux.md) | For first-run experience | -| [references/publishing.md](https://docs.stripe.com/references/publishing.md) | For marketplace publishing | -| [references/feedback.md](https://docs.stripe.com/references/feedback.md) | After a build where you ran CLI/build commands — submit one feedback report | +| Scaffold, build, test, preview, or upload an app | <references/workflow.md>, together with the selected implementation guide | +| Choose authentication for access to Stripe APIs | <references/authentication.md> | +| Receive Stripe events | <references/webhooks.md> | +| Build a first-run setup experience | <references/onboarding-ux.md> and the UI reference | +| Release versions, change installed permissions, or publish to the marketplace | <references/publishing.md> | +| Submit feedback after running app toolchain commands | <references/feedback.md> | + +## Load bundled reference files + +1. Use the task tables to select every applicable bundled reference under `references/`, then open those files with a file-reading tool before starting the corresponding work. For example, UI with a self-hosted back-end needs both UI and back-end guidance; onboarding also needs the UI reference. +2. Follow relevant pointers to other bundled references inside the files you load, including filenames written as code rather than links. For example, back-end guidance can require authentication guidance, and changing permissions can require publishing guidance. Use this skill’s direct links to locate those files. +3. Read the canonical documentation required by those references. External documentation supplements the bundled guidance on workflow, layout, and other task-specific decisions. + +- Resolve `references/` paths relative to this skill’s directory and bare reference filenames relative to its `references/` directory. When reading the hosted skill, fetch the corresponding reference URLs relative to the skill URL. +- Load only references relevant to the task, and reuse contents already read during the session unless they have changed. A full-stack app doesn’t require every document in the skill. +- Read canonical pages using the available documentation tools. Prefer `stripe docs` when available, including for pages that require account access. +- Use current product documentation and the installed SDK’s types for API contracts and limitations. If an example in a reference disagrees, check the version and follow the applicable canonical documentation. +- Read any interface-specific agent instructions supplied with an existing or newly generated extension. If none are present, use the linked product and implementation guides. +- If the documentation doesn’t establish that an extension meets a requirement, state what is unknown or unsupported before proceeding. +- Keep the work within the user’s request. Report the changes, validation results, and remaining steps relevant to that app.
Full technical diff · 3 changed fields
changed /description
"Use when building, modifying, or reviewing a Stripe App — or when the user describes something that implies one (e.g. \"add a panel to the customer page\", \"customize my Stripe Dashboard\", \"react to Stripe events from my app\", \"connect my service to Stripe without sharing API keys\"). Covers the full app development workflow (scaffold, preview, upload, versioning), UI extension architecture (sandboxed iframe, Stripe UI toolkit, viewports), extension types (UI extensions, backend-only, extension interfaces, embedded apps), authentication (platform keys, OAuth, restricted API keys), stripe-app.yaml manifest setup (permissions, viewports, CSP), webhook configuration for apps, Secret Store API, `fetchStripeSignature` auth, and marketplace publishing, plus submitting one agentic feedback report after a build. Use when the user mentions Stripe Apps, UI extensions, @stripe/ui-extension-sdk, stripe-app.yaml, Dashboard extensions, or customizing the Stripe Dashboard."
"Build, modify, or review Stripe Apps and extensions using the relevant documentation and reference guides. Use for custom Stripe Dashboard UI, stripe-app.yaml, @stripe/ui-extension-sdk, @stripe/extensibility-sdk, script extensions, extension interfaces, custom workflow actions, and apps that authenticate to Stripe or react to events. Also use when deciding whether a Stripe extension can support the user's billing or workflow requirements."
changed /included_files
[
{
"relative_path": "references/authentication.md",
"size_in_bytes": 4723
},
{
"relative_path": "references/backend.md",
"size_in_bytes": 4434
},
{
"relative_path": "references/canonical-docs.md",
"size_in_bytes": 2875
},
{
"relative_path": "references/discovery.md",
"size_in_bytes": 8909
},
{
"relative_path": "references/extension-types.md",
"size_in_bytes": 5182
},
{
"relative_path": "references/feedback.md",
"size_in_bytes": 3271
},
{
"relative_path": "references/onboarding-ux.md",
"size_in_bytes": 2709
},
{
"relative_path": "references/publishing.md",
"size_in_bytes": 5859
},
{
"relative_path": "references/ui-extensions.md",
"size_in_bytes": 21429
},
{
"relative_path": "references/webhooks.md",
"size_in_bytes": 3413
},
{
"relative_path": "references/workflow.md",
"size_in_bytes": 7617
}
][
{
"relative_path": "references/authentication.md",
"size_in_bytes": 4746
},
{
"relative_path": "references/backend.md",
"size_in_bytes": 4458
},
{
"relative_path": "references/canonical-docs.md",
"size_in_bytes": 4477
},
{
"relative_path": "references/discovery.md",
"size_in_bytes": 9445
},
{
"relative_path": "references/extension-types.md",
"size_in_bytes": 5245
},
{
"relative_path": "references/feedback.md",
"size_in_bytes": 1977
},
{
"relative_path": "references/onboarding-ux.md",
"size_in_bytes": 2732
},
{
"relative_path": "references/publishing.md",
"size_in_bytes": 5867
},
{
"relative_path": "references/script-extensions.md",
"size_in_bytes": 7512
},
{
"relative_path": "references/ui-extensions.md",
"size_in_bytes": 21177
},
{
"relative_path": "references/webhooks.md",
"size_in_bytes": 3436
},
{
"relative_path": "references/workflow.md",
"size_in_bytes": 8648
}
]changed /skill_md_contents
"---\nname: stripe-apps\ndescription: >-\n Use when building, modifying, or reviewing a Stripe App — or when the user\n describes something that implies one (e.g. \"add a panel to the customer page\",\n \"customize my Stripe Dashboard\", \"react to Stripe events from my app\",\n \"connect my service to Stripe without sharing API keys\"). Covers the full app\n development workflow (scaffold, preview, upload, versioning), UI extension\n architecture (sandboxed iframe, Stripe UI toolkit, viewports), extension types\n (UI extensions, backend-only, extension interfaces, embedded apps),\n authentication (platform keys, OAuth, restricted API keys), stripe-app.yaml\n manifest setup (permissions, viewports, CSP), webhook configuration for apps,\n Secret Store API, `fetchStripeSignature` auth, and marketplace publishing,\n plus submitting one agentic feedback report after a build. Use when the user\n mentions Stripe Apps, UI extensions, @stripe/ui-extension-sdk,\n stripe-app.yaml, Dashboard extensions, or customizing the Stripe Dashboard.\n\n---\n\n## Stripe Apps — Agent Instructions\n\n**FIRST ACTION:** Say “Loading Stripe Apps skill.” then Read `references/discovery.md`. This file has routing logic you need before asking the user questions.\n\n### Your role\n\nYou are a PROJECT BUILDER and INSTRUCTOR. Your primary output is working files on the user’s machine that they can run immediately. If you explain code without also writing it to disk using your Write tool, the user has nothing they can execute.\n\nYou are also a patient guide. Many users have never heard of Stripe Apps, viewports, or webhooks. When they say “I’m not sure” or “what does that mean?”, explain concepts in plain language with examples from their specific idea.\n\n**Your tool calls (Read, Write) are your real work. Your chat messages explain what you did and teach the user why.**\n\n### Source of truth for code patterns\n\nYour training data for Stripe Apps SDK patterns may be outdated or incorrect. Before writing any code file, you MUST read the relevant canonical docs page using WebFetch. See `references/canonical-docs.md` for the full list of docs pages.\n\nIf you cannot access the docs, tell the user: “I need to check the current Stripe Apps documentation to write correct code. Can you provide the current patterns from [relevant docs URL], or shall I proceed with the scaffold and you can verify against the docs?”\n\n## HARD RULES — violating any of these is a failure\n\n| \\# | Rule | What failure looks like |\n| --- | --- | --- |\n| 0 | BEFORE ANYTHING ELSE: (1) Say “Loading Stripe Apps skill.” (2) Call Read on `references/discovery.md` to load the routing table. You need this data before you can ask informed questions. | Responding to the user before calling Read on discovery.md |\n| 1 | After reading discovery.md, your FIRST message to the user is ONLY the 4 discovery questions (see Step 1). No code, no plan, no summary. Even if the user’s request already mentions details — ask anyway. Users have unstated requirements that only emerge through questions. | Presenting a summary, plan, or any code before asking questions 1-4 and getting answers |\n| 2 | You MUST use your Write tool to create or modify files on disk. The scaffold creates base files via CLI — after that, use Write to modify scaffolded files and create new ones. A response with code only in chat gives the user nothing runnable. | Producing code in chat without calling Write to save it to disk |\n| 3 | Run `stripe generate app <name>` using your Bash tool to scaffold the project. Then use Write to modify scaffolded files and create additional files the app needs. | Writing stripe-app.yaml or package.json from scratch instead of modifying the scaffold output |\n| 4 | Before writing code for any topic (backend, UI, webhooks, auth), read the relevant canonical docs page using WebFetch. See `references/canonical-docs.md`. The docs are the source of truth — not this skill file, not your training data. | Writing code from memory without checking the current docs |\n| 5 | Tell user: `stripe apps upload` BEFORE testing fetchStripeSignature/Secret Store (the signing secret is generated during first upload). | Omitting upload-first requirement |\n| 6 | File names: `ui/src/views/App.tsx` (V2 workspace layout), `server.js` (project root). Only create files that are needed for the app’s architecture (see Step 3). | Using wrong filenames or creating files the architecture doesn’t need |\n| 7 | Every file you write to disk MUST be complete and runnable — not a skeleton or placeholder. The user should be able to run it immediately. Do not write partial files with TODOs. | Writing a file with TODO placeholders or incomplete implementations |\n| 8 | When presenting the development workflow, include `pnpm build` and `pnpm test` as explicit steps for apps with a UI extension. Backend-only apps without TypeScript skip `pnpm build`. | Omitting build/test steps for UI apps, or requiring them for backend-only apps |\n| 9 | If the user’s app requires custom objects or extension interfaces (private preview features), inform them the feature is in private preview and ask them to confirm they have access BEFORE proceeding. Do not silently proceed with a private preview feature. | Building with private preview features without confirming user has access |\n| 10 | Before ending the conversation, if you ran any toolchain command this session, submit exactly one `stripe feedback` report — see `references/feedback.md`. Never block delivery on it. | Ending a build session in which commands were run without submitting one feedback report |\n\n## BLOCKED — these produce broken apps\n\n| BLOCKED (never use) | Use instead |\n| --- | --- |\n| `stripe apps create` | `stripe generate app <name>` |\n| Raw HTML in UI extensions (`<div>`, `<span>`, `<p>`, `<button>`, `<input>`, `<h1>`-`<h6>`) | SDK components from `@stripe/ui-extension-sdk/ui` (Box, Inline, Button, TextField, etc.) |\n| CSS frameworks in UI (Tailwind, MUI, Bootstrap, styled-components, CSS files) | Only `@stripe/ui-extension-sdk/ui` components — no custom styling |\n| React 18+ APIs in UI (`useId`, `useDeferredValue`, `useTransition`, concurrent features) | React 17 hooks only (Stripe Apps run React 17.0.2) |\n| `window`, `document`, `localStorage`, `sessionStorage` in UI | Not available in sandboxed iframe |\n\n## Protocol — execute these steps IN ORDER\n\n### Step 1 — Discovery (your first message)\n\nRead [references/discovery.md](https://docs.stripe.com/references/discovery.md) using your file-reading tool.\n\nYou CANNOT determine the correct architecture without user input because:\n\n- The authentication type determines the backend pattern (platform keys vs OAuth vs restricted keys)\n- Private vs public apps have different webhook configurations\n- The viewport determines which context props are available\n- Backend vs frontend-only changes which files you create\n\nAsk these questions in your FIRST message — nothing else:\n\n1. What should the app do? (UI in Dashboard / react to events / both / modify billing or payment logic)\n2. Where should it appear? (customer detail, payment detail, full page, etc.)\n3. Who is it for? (only you or your team = private, OR other Stripe users = public/marketplace)\n4. Does it need to store data or talk to other services?\n\nDo NOT include a summary, plan, or architecture in this first message. ONLY the 4 questions above.\n\n**If the user doesn’t know an answer or asks for clarification:**\n\n- Explain the concept in plain language\n- Give concrete examples from their stated idea\n- Help them figure out the right answer\n\n**Private preview check:** After getting answers, before showing your summary, check whether their app implies needing:\n\n- **Custom objects** (storing custom data models IN Stripe)\n- **Extension interfaces** (changing how Stripe processes billing, payments, or tax)\n\nIf yes: tell the user that feature is in private preview, ask them to confirm access. See `references/discovery.md` for exact wording and alternatives.\n\nFull-page apps require `@stripe/ui-extension-sdk` version `9.2.1` or later and the latest version of the Stripe Apps CLI plugin.\n\nAfter the user answers, show a plain-language summary:\n\n- “You want to: [goal]. It will appear: [where]. It’s for: [private/marketplace]. It needs: [backend/secrets/only Stripe data].”\n\nWait for explicit confirmation before proceeding.\n\n### Step 2 — Scaffold\n\nRun the scaffold command yourself using your Bash tool:\n\n```bash\nstripe generate app <name>\n```\n\nThis creates a V2 workspace: `stripe-app.yaml`, `package.json`, `pnpm-workspace.yaml`, `ui/src/views/App.tsx`.\n\nAfter the scaffold completes, proceed directly to Step 3.\n\n### Step 3 — Build (WRITE every file to disk)\n\nBefore writing any code, read the relevant canonical docs pages (see `references/canonical-docs.md`) using WebFetch:\n\n- For UI code: read the Extensions SDK API page and the UI components page\n- For backend code: read the Backend + signed requests page and Authentication types page\n- For webhooks: read the Events page\n- For Secret Store: read the Secret Store page\n\n**YOUR PRIMARY JOB: Create files on disk following the patterns from the docs.**\n\nWhich files to create depends on discovery answers:\n\n| Architecture | Files to write |\n| --- | --- |\n| Frontend-only (reads Stripe data, no external services) | Modify: `stripe-app.yaml`, `ui/src/views/App.tsx` |\n| Backend-only (webhooks/events, no Dashboard UI) | Modify: `stripe-app.yaml`. Create: `server.js` |\n| Full-stack (UI + backend) | Modify: `stripe-app.yaml`, `ui/src/views/App.tsx`. Create: `server.js` |\n\nFor each file: call your Write tool FIRST, then explain what it does.\n\n**Key constraints for UI code:**\n\n- Import ONLY from `@stripe/ui-extension-sdk/ui` for components\n- NO raw HTML elements, NO CSS\n- Follow the SDK API patterns from the canonical docs exactly\n\n**Key constraints for backend code (server.js):**\n\n- CORS (`Access-Control-Allow-Origin: *`) only on endpoints called by the UI extension — webhook endpoints don’t need CORS\n- `fetchStripeSignature` verification follows the pattern in https://docs.stripe.com/stripe-apps/build-backend\n- Webhook endpoint count and configuration depends on auth type and distribution — check https://docs.stripe.com/stripe-apps/events\n- The `event_read` permission must be declared in the manifest for webhook event access\n\n**Key constraints for stripe-app.yaml:**\n\n- Declare ALL permissions with purpose strings\n- Follow the manifest schema from https://docs.stripe.com/stripe-apps/reference/app-manifest\n- Include `extensions: []` even if no backend extensions\n\n### Step 4 — Deliver (REQUIRED — do not skip)\n\nYour FINAL message MUST present the development workflow:\n\n1. `stripe generate app <name>` → scaffold\n2. `pnpm install` → dependencies\n3. Modify scaffolded files + create additional files → implement\n4. `pnpm build` → compile TypeScript (UI apps only)\n5. `pnpm test` → run unit tests\n6. `stripe apps start` → local preview in Dashboard\n7. `stripe apps upload` → publish version (**required** before fetchStripeSignature or Secret Store)\n8. Install from Dashboard → test\n\n**Important workflow facts:**\n\n- Use sandboxes for safe testing — they provide isolated environments for app development\n- `stripe apps upload` generates the signing secret needed for `fetchStripeSignature`\n- Public/marketplace apps need account activation (verified email + business details)\n- For webhook forwarding during local dev, see `references/webhooks.md`\n\n### Step 5 — Verify files exist\n\nBefore ending the conversation, confirm your files are on disk. Run `ls` on the files you wrote to verify they exist.\n\nIf any file is MISSING, call Write now to create it.\n\n## Troubleshooting uploads\n\n| Error | Cause | Fix |\n| --- | --- | --- |\n| `Invalid manifest` | Missing required fields or malformed YAML | Check indentation; ensure `id:`, `version:`, `name:` are present |\n| `Build failed` | UI component has type/import errors | Run `pnpm build` locally first |\n| `Version already exists` | Already uploaded this version number | Bump `version` in stripe-app.yaml |\n| `Permission denied` | CLI not logged in or wrong account | Run `stripe login` |\n| `connect-src` / CSP error | App calls undeclared URL | Add URL to `content_security_policy.connect-src` |\n| `extensions field required` | Missing `extensions: []` | Add `extensions: []` to stripe-app.yaml |\n| `Component not found` | Viewport references wrong component name | Match `component:` value to your default export |\n\n## Reference files\n\n| File | Read when |\n| --- | --- |\n| [references/canonical-docs.md](https://docs.stripe.com/references/canonical-docs.md) | **ALWAYS** — lists docs pages to WebFetch before writing code |\n| [references/discovery.md](https://docs.stripe.com/references/discovery.md) | **ALWAYS FIRST** — full discovery script with routing |\n| [references/backend.md](https://docs.stripe.com/references/backend.md) | Before writing server.js |\n| [references/ui-extensions.md](https://docs.stripe.com/references/ui-extensions.md) | Before writing React/UI code |\n| [references/workflow.md](https://docs.stripe.com/references/workflow.md) | Full development loop with all CLI commands |\n| [references/extension-types.md](https://docs.stripe.com/references/extension-types.md) | After discovery — map answers to extension type |\n| [references/webhooks.md](https://docs.stripe.com/references/webhooks.md) | When app reacts to Stripe events |\n| [references/authentication.md](https://docs.stripe.com/references/authentication.md) | For auth type selection and patterns |\n| [references/onboarding-ux.md](https://docs.stripe.com/references/onboarding-ux.md) | For first-run experience |\n| [references/publishing.md](https://docs.stripe.com/references/publishing.md) | For marketplace publishing |\n| [references/feedback.md](https://docs.stripe.com/references/feedback.md) | After a build where you ran CLI/build commands — submit one feedback report |\n"
"---\nname: stripe-apps\ndescription: >-\n Build, modify, or review Stripe Apps and extensions using the relevant\n documentation and reference guides. Use for custom Stripe Dashboard UI,\n stripe-app.yaml, @stripe/ui-extension-sdk, @stripe/extensibility-sdk, script\n extensions, extension interfaces, custom workflow actions, and apps that\n authenticate to Stripe or react to events. Also use when deciding whether a\n Stripe extension can support the user's billing or workflow requirements.\n\n---\n\n## Stripe Apps\n\nSelect and read the existing guidance for the user’s task. Product documentation describes what an extension can do; implementation guides describe how to build it. Before recommending an extension or writing code, load the applicable bundled reference files as well as the relevant product documentation. A link or filename in this skill isn’t a substitute for reading its contents.\n\nFor a capability question, check native Stripe features and the documented applicability and limitations of the extension. For an implementation request, create or modify working files using the selected guide. For an existing app, inspect its manifest, packages, installed SDK, and local agent instructions before deciding what to change.\n\n## Choose the relevant documentation\n\nUse information already supplied by the user or existing app. Read <references/discovery.md> when you need to clarify the app’s requirements, and <references/extension-types.md> for an overview of app architectures. Ask only for missing information that affects the task.\n\n### Product capabilities\n\nUse these existing product documents to determine which capability fits and whether the account has the required access. Don’t infer support from an extension’s name or the existence of a scaffold.\n\n| Task | Read |\n| --- | --- |\n| Select an extension interface and its supported implementation types | [Extension points](https://docs.stripe.com/extensions/extension-points.md) and [how extensions work](https://docs.stripe.com/extensions/how-extensions-work.md) |\n| Change how items are included on subscription invoices | [Item handling extensions](https://docs.stripe.com/billing/scripts/item-handling.md) |\n| Customize prorations | [Native proration behavior](https://docs.stripe.com/billing/subscriptions/prorations.md) and [prorations extensions](https://docs.stripe.com/billing/scripts/prorations.md) |\n| Apply customer balances | [Customer balance extensions](https://docs.stripe.com/billing/scripts/customer-balance.md) |\n| Calculate discount amounts | [Discount calculation extensions](https://docs.stripe.com/billing/scripts/discount-calculation.md) |\n| Add an action to Stripe Workflows | [Existing workflow actions](https://docs.stripe.com/workflows/define-workflows.md#actions), [existing custom actions](https://docs.stripe.com/workflows/custom-actions.md), and [how custom actions work](https://docs.stripe.com/extensions/custom-actions/how-custom-actions-work.md) |\n| Customize another product’s behavior | Follow the selected interface’s product documentation from the extension-point catalog |\n\n### Implementation guidance\n\nThe `references/*.md` files are bundled with this skill. After selecting the capability, load the applicable files before following their links to supporting documentation. Combine rows when an app needs multiple types. Follow the selected guide’s prerequisites, scaffolding, testing, and debugging instructions.\n\n| Task | Read |\n| --- | --- |\n| Build or modify any Dashboard UI, including drawers and full-page apps | <references/ui-extensions.md>, then each selected component’s current API documentation |\n| Author, test, or debug a script extension | <references/script-extensions.md>, then the selected extension point’s implementation guide |\n| Build a custom-action script | <references/script-extensions.md> and [build a custom action with a script](https://docs.stripe.com/extensions/custom-actions/build-with-script.md) |\n| Build a custom-action remote function | [Build a custom action with a remote function](https://docs.stripe.com/extensions/custom-actions/build-with-remote-function.md) |\n| Build a self-hosted UI back-end or webhook service | <references/backend.md> and <references/authentication.md>; also load <references/webhooks.md> when receiving Stripe events |\n| Store app credentials with the Secret Store API | The Secret Store API section in <references/backend.md> and [store secrets](https://docs.stripe.com/stripe-apps/store-secrets.md), including for apps without a self-hosted back-end |\n| Look up APIs, SDK patterns, configuration, or additional extension documentation | <references/canonical-docs.md> |\n\nUse the UI reference for layout and composition, and current component documentation for import paths, props, and styling APIs. For scripts and remote functions, follow the selected extension’s documentation; UI and self-hosted back-end instructions don’t define their runtime capabilities.\n\n### Shared app lifecycle\n\nRead these references when the corresponding task is needed. Reuse existing apps and packages; scaffold only what is missing.\n\n| Task | Read |\n| --- | --- |\n| Scaffold, build, test, preview, or upload an app | <references/workflow.md>, together with the selected implementation guide |\n| Choose authentication for access to Stripe APIs | <references/authentication.md> |\n| Receive Stripe events | <references/webhooks.md> |\n| Build a first-run setup experience | <references/onboarding-ux.md> and the UI reference |\n| Release versions, change installed permissions, or publish to the marketplace | <references/publishing.md> |\n| Submit feedback after running app toolchain commands | <references/feedback.md> |\n\n## Load bundled reference files\n\n1. Use the task tables to select every applicable bundled reference under `references/`, then open those files with a file-reading tool before starting the corresponding work. For example, UI with a self-hosted back-end needs both UI and back-end guidance; onboarding also needs the UI reference.\n2. Follow relevant pointers to other bundled references inside the files you load, including filenames written as code rather than links. For example, back-end guidance can require authentication guidance, and changing permissions can require publishing guidance. Use this skill’s direct links to locate those files.\n3. Read the canonical documentation required by those references. External documentation supplements the bundled guidance on workflow, layout, and other task-specific decisions.\n\n- Resolve `references/` paths relative to this skill’s directory and bare reference filenames relative to its `references/` directory. When reading the hosted skill, fetch the corresponding reference URLs relative to the skill URL.\n- Load only references relevant to the task, and reuse contents already read during the session unless they have changed. A full-stack app doesn’t require every document in the skill.\n- Read canonical pages using the available documentation tools. Prefer `stripe docs` when available, including for pages that require account access.\n- Use current product documentation and the installed SDK’s types for API contracts and limitations. If an example in a reference disagrees, check the version and follow the applicable canonical documentation.\n- Read any interface-specific agent instructions supplied with an existing or newly generated extension. If none are present, use the linked product and implementation guides.\n- If the documentation doesn’t establish that an extension meets a requirement, state what is unknown or unsupported before proceeding.\n- Keep the work within the user’s request. Report the changes, validation results, and remaining steps relevant to that app.\n"
Full snapshot data
{
"description": "Build, modify, or review Stripe Apps and extensions using the relevant documentation and reference guides. Use for custom Stripe Dashboard UI, stripe-app.yaml, @stripe/ui-extension-sdk, @stripe/extensibility-sdk, script extensions, extension interfaces, custom workflow actions, and apps that authenticate to Stripe or react to events. Also use when deciding whether a Stripe extension can support the user's billing or workflow requirements.",
"included_files": [
{
"relative_path": "references/authentication.md",
"size_in_bytes": 4746
},
{
"relative_path": "references/backend.md",
"size_in_bytes": 4458
},
{
"relative_path": "references/canonical-docs.md",
"size_in_bytes": 4477
},
{
"relative_path": "references/discovery.md",
"size_in_bytes": 9445
},
{
"relative_path": "references/extension-types.md",
"size_in_bytes": 5245
},
{
"relative_path": "references/feedback.md",
"size_in_bytes": 1977
},
{
"relative_path": "references/onboarding-ux.md",
"size_in_bytes": 2732
},
{
"relative_path": "references/publishing.md",
"size_in_bytes": 5867
},
{
"relative_path": "references/script-extensions.md",
"size_in_bytes": 7512
},
{
"relative_path": "references/ui-extensions.md",
"size_in_bytes": 21177
},
{
"relative_path": "references/webhooks.md",
"size_in_bytes": 3436
},
{
"relative_path": "references/workflow.md",
"size_in_bytes": 8648
}
],
"name": "stripe-apps",
"skill_md_contents": "---\nname: stripe-apps\ndescription: >-\n Build, modify, or review Stripe Apps and extensions using the relevant\n documentation and reference guides. Use for custom Stripe Dashboard UI,\n stripe-app.yaml, @stripe/ui-extension-sdk, @stripe/extensibility-sdk, script\n extensions, extension interfaces, custom workflow actions, and apps that\n authenticate to Stripe or react to events. Also use when deciding whether a\n Stripe extension can support the user's billing or workflow requirements.\n\n---\n\n## Stripe Apps\n\nSelect and read the existing guidance for the user’s task. Product documentation describes what an extension can do; implementation guides describe how to build it. Before recommending an extension or writing code, load the applicable bundled reference files as well as the relevant product documentation. A link or filename in this skill isn’t a substitute for reading its contents.\n\nFor a capability question, check native Stripe features and the documented applicability and limitations of the extension. For an implementation request, create or modify working files using the selected guide. For an existing app, inspect its manifest, packages, installed SDK, and local agent instructions before deciding what to change.\n\n## Choose the relevant documentation\n\nUse information already supplied by the user or existing app. Read <references/discovery.md> when you need to clarify the app’s requirements, and <references/extension-types.md> for an overview of app architectures. Ask only for missing information that affects the task.\n\n### Product capabilities\n\nUse these existing product documents to determine which capability fits and whether the account has the required access. Don’t infer support from an extension’s name or the existence of a scaffold.\n\n| Task | Read |\n| --- | --- |\n| Select an extension interface and its supported implementation types | [Extension points](https://docs.stripe.com/extensions/extension-points.md) and [how extensions work](https://docs.stripe.com/extensions/how-extensions-work.md) |\n| Change how items are included on subscription invoices | [Item handling extensions](https://docs.stripe.com/billing/scripts/item-handling.md) |\n| Customize prorations | [Native proration behavior](https://docs.stripe.com/billing/subscriptions/prorations.md) and [prorations extensions](https://docs.stripe.com/billing/scripts/prorations.md) |\n| Apply customer balances | [Customer balance extensions](https://docs.stripe.com/billing/scripts/customer-balance.md) |\n| Calculate discount amounts | [Discount calculation extensions](https://docs.stripe.com/billing/scripts/discount-calculation.md) |\n| Add an action to Stripe Workflows | [Existing workflow actions](https://docs.stripe.com/workflows/define-workflows.md#actions), [existing custom actions](https://docs.stripe.com/workflows/custom-actions.md), and [how custom actions work](https://docs.stripe.com/extensions/custom-actions/how-custom-actions-work.md) |\n| Customize another product’s behavior | Follow the selected interface’s product documentation from the extension-point catalog |\n\n### Implementation guidance\n\nThe `references/*.md` files are bundled with this skill. After selecting the capability, load the applicable files before following their links to supporting documentation. Combine rows when an app needs multiple types. Follow the selected guide’s prerequisites, scaffolding, testing, and debugging instructions.\n\n| Task | Read |\n| --- | --- |\n| Build or modify any Dashboard UI, including drawers and full-page apps | <references/ui-extensions.md>, then each selected component’s current API documentation |\n| Author, test, or debug a script extension | <references/script-extensions.md>, then the selected extension point’s implementation guide |\n| Build a custom-action script | <references/script-extensions.md> and [build a custom action with a script](https://docs.stripe.com/extensions/custom-actions/build-with-script.md) |\n| Build a custom-action remote function | [Build a custom action with a remote function](https://docs.stripe.com/extensions/custom-actions/build-with-remote-function.md) |\n| Build a self-hosted UI back-end or webhook service | <references/backend.md> and <references/authentication.md>; also load <references/webhooks.md> when receiving Stripe events |\n| Store app credentials with the Secret Store API | The Secret Store API section in <references/backend.md> and [store secrets](https://docs.stripe.com/stripe-apps/store-secrets.md), including for apps without a self-hosted back-end |\n| Look up APIs, SDK patterns, configuration, or additional extension documentation | <references/canonical-docs.md> |\n\nUse the UI reference for layout and composition, and current component documentation for import paths, props, and styling APIs. For scripts and remote functions, follow the selected extension’s documentation; UI and self-hosted back-end instructions don’t define their runtime capabilities.\n\n### Shared app lifecycle\n\nRead these references when the corresponding task is needed. Reuse existing apps and packages; scaffold only what is missing.\n\n| Task | Read |\n| --- | --- |\n| Scaffold, build, test, preview, or upload an app | <references/workflow.md>, together with the selected implementation guide |\n| Choose authentication for access to Stripe APIs | <references/authentication.md> |\n| Receive Stripe events | <references/webhooks.md> |\n| Build a first-run setup experience | <references/onboarding-ux.md> and the UI reference |\n| Release versions, change installed permissions, or publish to the marketplace | <references/publishing.md> |\n| Submit feedback after running app toolchain commands | <references/feedback.md> |\n\n## Load bundled reference files\n\n1. Use the task tables to select every applicable bundled reference under `references/`, then open those files with a file-reading tool before starting the corresponding work. For example, UI with a self-hosted back-end needs both UI and back-end guidance; onboarding also needs the UI reference.\n2. Follow relevant pointers to other bundled references inside the files you load, including filenames written as code rather than links. For example, back-end guidance can require authentication guidance, and changing permissions can require publishing guidance. Use this skill’s direct links to locate those files.\n3. Read the canonical documentation required by those references. External documentation supplements the bundled guidance on workflow, layout, and other task-specific decisions.\n\n- Resolve `references/` paths relative to this skill’s directory and bare reference filenames relative to its `references/` directory. When reading the hosted skill, fetch the corresponding reference URLs relative to the skill URL.\n- Load only references relevant to the task, and reuse contents already read during the session unless they have changed. A full-stack app doesn’t require every document in the skill.\n- Read canonical pages using the available documentation tools. Prefer `stripe docs` when available, including for pages that require account access.\n- Use current product documentation and the installed SDK’s types for API contracts and limitations. If an example in a reference disagrees, check the version and follow the applicable canonical documentation.\n- Read any interface-specific agent instructions supplied with an existing or newly generated extension. If none are present, use the linked product and implementation guides.\n- If the documentation doesn’t establish that an extension meets a requirement, state what is unknown or unsupported before proceeding.\n- Keep the work within the user’s request. Report the changes, validation results, and remaining steps relevant to that app.\n"
}SHA-256 of public snapshot: 5f26ebda4b722746386af31681cdf98e92726f766505702897fd3f86e4cc7806