vybekiit 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +1697 -562
- package/dist/global-skills/add-ai/SKILL.md +1 -1
- package/dist/global-skills/add-analytics/SKILL.md +1 -1
- package/dist/global-skills/add-blog/SKILL.md +1 -1
- package/dist/global-skills/add-crud/SKILL.md +1 -1
- package/dist/global-skills/add-files/SKILL.md +1 -1
- package/dist/global-skills/add-images/SKILL.md +1 -1
- package/dist/global-skills/add-language/SKILL.md +1 -1
- package/dist/global-skills/add-notifications/SKILL.md +1 -1
- package/dist/global-skills/add-realtime/SKILL.md +1 -1
- package/dist/global-skills/add-route/SKILL.md +1 -1
- package/dist/global-skills/add-search/SKILL.md +1 -1
- package/dist/global-skills/add-signin/SKILL.md +1 -1
- package/dist/global-skills/add-teams/SKILL.md +1 -1
- package/dist/global-skills/add-upload/SKILL.md +1 -1
- package/dist/global-skills/aws-serverless/SKILL.md +44 -44
- package/dist/global-skills/aws-serverless/assets/powertools-handler.py +1 -2
- package/dist/global-skills/aws-serverless/references/api-gateway.md +470 -50
- package/dist/global-skills/aws-serverless/references/architecture.md +186 -47
- package/dist/global-skills/aws-serverless/references/concurrency.md +158 -44
- package/dist/global-skills/aws-serverless/references/deployment.md +1 -1
- package/dist/global-skills/aws-serverless/references/event-sources.md +391 -72
- package/dist/global-skills/aws-serverless/references/lambda.md +428 -69
- package/dist/global-skills/aws-serverless/references/orchestration.md +384 -65
- package/dist/global-skills/aws-serverless/references/production.md +415 -78
- package/dist/global-skills/aws-serverless/references/troubleshooting.md +626 -79
- package/dist/global-skills/back-up-my-code/SKILL.md +1 -1
- package/dist/global-skills/buy-domain/SKILL.md +1 -1
- package/dist/global-skills/check-safety/SKILL.md +1 -1
- package/dist/global-skills/configure-capabilities/SKILL.md +1 -1
- package/dist/global-skills/connect-account/SKILL.md +1 -1
- package/dist/global-skills/connect-account-backend/SKILL.md +1 -1
- package/dist/global-skills/design-my-data/SKILL.md +1 -1
- package/dist/global-skills/doctor/SKILL.md +1 -1
- package/dist/global-skills/feedback/SKILL.md +63 -0
- package/dist/global-skills/go-live/SKILL.md +1 -1
- package/dist/global-skills/harden/SKILL.md +1 -1
- package/dist/global-skills/instrument-feature-flags/references/usage.md +0 -35
- package/dist/global-skills/instrument-product-analytics/SKILL.md +1 -1
- package/dist/global-skills/instrument-product-analytics/references/android.md +0 -36
- package/dist/global-skills/instrument-product-analytics/references/configuration.md +0 -1
- package/dist/global-skills/instrument-product-analytics/references/flutter.md +0 -37
- package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +2 -3
- package/dist/global-skills/instrument-product-analytics/references/usage.md +0 -35
- package/dist/global-skills/manifest.json +2 -1
- package/dist/global-skills/neon/SKILL.md +20 -27
- package/dist/global-skills/neon-ai-gateway/SKILL.md +2 -68
- package/dist/global-skills/neon-functions/SKILL.md +7 -7
- package/dist/global-skills/neon-object-storage/SKILL.md +2 -2
- package/dist/global-skills/neon-postgres/SKILL.md +5 -5
- package/dist/global-skills/neon-postgres-branches/SKILL.md +1 -1
- package/dist/global-skills/onboarding/SKILL.md +1 -1
- package/dist/global-skills/plan-my-idea/SKILL.md +1 -1
- package/dist/global-skills/publish-app/SKILL.md +1 -1
- package/dist/global-skills/publish-extension/SKILL.md +1 -1
- package/dist/global-skills/reset-password/SKILL.md +1 -1
- package/dist/global-skills/save-data/SKILL.md +1 -1
- package/dist/global-skills/setup-email/SKILL.md +1 -1
- package/dist/global-skills/setup-payments/SKILL.md +1 -1
- package/dist/global-skills/setup-sms/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-email-link/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-google/SKILL.md +1 -1
- package/dist/global-skills/sign-in-with-phone/SKILL.md +1 -1
- package/dist/global-skills/stripe-best-practices/SKILL.md +6 -11
- package/dist/global-skills/stripe-best-practices/references/billing.md +0 -5
- package/dist/global-skills/stripe-best-practices/references/payments.md +2 -4
- package/dist/global-skills/stripe-best-practices/references/tax.md +8 -78
- package/dist/global-skills/track-errors/SKILL.md +1 -1
- package/dist/global-skills/update-kit/SKILL.md +1 -1
- package/dist/global-skills/wire-auth/SKILL.md +1 -1
- package/dist/global-skills/wire-database/SKILL.md +1 -1
- package/dist/global-skills/wire-email/SKILL.md +1 -1
- package/dist/global-skills/wire-payments/SKILL.md +1 -1
- package/package.json +8 -8
- package/dist/global-skills/email-best-practices/.github/workflows/sync-skills.yml +0 -30
- package/dist/global-skills/email-best-practices/README.md +0 -63
- package/dist/global-skills/email-best-practices/references/accessibility.md +0 -189
- package/dist/global-skills/email-best-practices/references/compliance.md +0 -125
- package/dist/global-skills/email-best-practices/references/deliverability.md +0 -121
- package/dist/global-skills/email-best-practices/references/email-capture.md +0 -129
- package/dist/global-skills/email-best-practices/references/email-types.md +0 -173
- package/dist/global-skills/email-best-practices/references/list-management.md +0 -157
- package/dist/global-skills/email-best-practices/references/marketing-emails.md +0 -115
- package/dist/global-skills/email-best-practices/references/sending-reliability.md +0 -155
- package/dist/global-skills/email-best-practices/references/transactional-email-catalog.md +0 -418
- package/dist/global-skills/email-best-practices/references/transactional-emails.md +0 -92
- package/dist/global-skills/email-best-practices/references/webhooks-events.md +0 -167
- package/dist/global-skills/email-best-practices/tests/README.md +0 -35
- package/dist/global-skills/email-best-practices/tests/scenarios/01-spam-deliverability.md +0 -46
- package/dist/global-skills/email-best-practices/tests/scenarios/02-multi-region-compliance.md +0 -48
- package/dist/global-skills/email-best-practices/tests/scenarios/03-retry-idempotency.md +0 -36
- package/dist/global-skills/email-best-practices/tests/scenarios/04-webhook-bounce-handling.md +0 -52
- package/dist/global-skills/email-best-practices/tests/scenarios/05-new-saas-email-plan.md +0 -51
- package/dist/global-skills/neon-postgres/references/neon-sdk.md +0 -262
|
@@ -15,7 +15,7 @@ description: >-
|
|
|
15
15
|
|
|
16
16
|
# Neon Functions
|
|
17
17
|
|
|
18
|
-
This is a
|
|
18
|
+
This is a preview feature and only available in `us-east-2`. Neon Functions are long-running Node.js HTTP handlers deployed onto a Neon branch. Each function gets a public HTTPS URL, runs in the same region as your database, and — if the branch has Postgres — gets `DATABASE_URL` injected automatically. You deploy and manage them through the same Neon CLI, `neon.ts`, and API you already use.
|
|
19
19
|
|
|
20
20
|
Use this skill to help the user define, run locally, deploy, and manage functions next to their database. Deliver a deployed function with its invocation URL, a working local `neon dev` loop, or a precise answer from the official Neon docs.
|
|
21
21
|
|
|
@@ -247,7 +247,7 @@ export default {
|
|
|
247
247
|
|
|
248
248
|
**Hono variant.** If you only need Hono for the HTTP side and are happy driving `ws` yourself, just swap `fetch` in the simple example for `app.fetch` and keep the raw `upgrade` — Hono serves routing/middleware, `ws` serves the socket.
|
|
249
249
|
|
|
250
|
-
To instead declare WebSocket routes _inside_ the Hono app — `app.get("/ws", upgradeWebSocket(...))` with the standard `onOpen`/`onMessage`/`onClose` lifecycle — you need an adapter that bridges Hono's `upgradeWebSocket()` helper to Neon's `upgrade(req, socket, head)`. Hono ships adapters for Cloudflare/Deno/Bun/Node, but **none for Neon**, and the Node one (`@hono/node-ws`) is deprecated and assumes it owns the HTTP server. [references/hono-websockets.md](
|
|
250
|
+
To instead declare WebSocket routes _inside_ the Hono app — `app.get("/ws", upgradeWebSocket(...))` with the standard `onOpen`/`onMessage`/`onClose` lifecycle — you need an adapter that bridges Hono's `upgradeWebSocket()` helper to Neon's `upgrade(req, socket, head)`. Hono ships adapters for Cloudflare/Deno/Bun/Node, but **none for Neon**, and the Node one (`@hono/node-ws`) is deprecated and assumes it owns the HTTP server. [references/hono-websockets.md](references/hono-websockets.md) has a small self-contained `createNeonWebSocket(app)` adapter to copy in — it depends only on `hono` and `ws` (no deprecated package; adapted from `@hono/node-ws`, MIT) and returns a ready-to-export `{ fetch, upgrade }` handler. Usage is idiomatic Hono, and because the handshake routes through `app.request`, **auth is just normal route middleware**:
|
|
251
251
|
|
|
252
252
|
```typescript
|
|
253
253
|
// src/index.ts
|
|
@@ -390,7 +390,7 @@ export default {
|
|
|
390
390
|
};
|
|
391
391
|
```
|
|
392
392
|
|
|
393
|
-
The same rules as WebSockets apply. **Heartbeat:** a stream stays open only while bytes flow — Neon's window is 15 minutes ([Timeouts and runtime limits](#timeouts-and-runtime-limits)) but proxies are usually far stricter, so emit a `: ping\n\n` comment every ~25–30s (shown above) to keep idle streams from being dropped. Keep state in Postgres, and fan out across isolates using one of the [sync strategies](#keeping-clients-in-sync-across-isolates-do-not-skip-this) (hold a `Set` of stream controllers and `enqueue` to each). `EventSource` is GET-only and can't set headers, so authenticate with a `?token=` query param or cookie, exactly like the WebSocket case. [references/sse.md](
|
|
393
|
+
The same rules as WebSockets apply. **Heartbeat:** a stream stays open only while bytes flow — Neon's window is 15 minutes ([Timeouts and runtime limits](#timeouts-and-runtime-limits)) but proxies are usually far stricter, so emit a `: ping\n\n` comment every ~25–30s (shown above) to keep idle streams from being dropped. Keep state in Postgres, and fan out across isolates using one of the [sync strategies](#keeping-clients-in-sync-across-isolates-do-not-skip-this) (hold a `Set` of stream controllers and `enqueue` to each). `EventSource` is GET-only and can't set headers, so authenticate with a `?token=` query param or cookie, exactly like the WebSocket case. [references/sse.md](references/sse.md) has the full pattern — Hono variant, cross-isolate fan-out, wire format, client, and caveats.
|
|
394
394
|
|
|
395
395
|
## MCP servers
|
|
396
396
|
|
|
@@ -404,11 +404,11 @@ app.all("/mcp", async (c) => {
|
|
|
404
404
|
});
|
|
405
405
|
```
|
|
406
406
|
|
|
407
|
-
Because the function's URL is public, **authenticate before connecting the transport** — [Better Auth](https://better-auth.com) covers both OAuth (its MCP plugin makes your app the authorization server so third-party clients self-authorize per the MCP spec) and a simpler API-key / session-JWT check for your own callers. [references/mcp.md](
|
|
407
|
+
Because the function's URL is public, **authenticate before connecting the transport** — [Better Auth](https://better-auth.com) covers both OAuth (its MCP plugin makes your app the authorization server so third-party clients self-authorize per the MCP spec) and a simpler API-key / session-JWT check for your own callers. [references/mcp.md](references/mcp.md) has the full pattern — server with Postgres-backed tools via Drizzle, both Better Auth auth options, and testing with `mcporter` / `add-mcp`.
|
|
408
408
|
|
|
409
409
|
## Integrations and observability
|
|
410
410
|
|
|
411
|
-
A function is a long-lived Node.js process running a web-standard request/response handler, so standard Node integration SDKs work unchanged — initialize them once at module load, gated on an env var so local dev and unconfigured branches stay a no-op, and pass secrets via `--env` or `neon.ts` `env`. For wiring up **Sentry** error monitoring across the HTTP framework, the function runtime, and an agent's own caught/fallback failures (the long-running case Functions target), see [references/sentry.md](
|
|
411
|
+
A function is a long-lived Node.js process running a web-standard request/response handler, so standard Node integration SDKs work unchanged — initialize them once at module load, gated on an env var so local dev and unconfigured branches stay a no-op, and pass secrets via `--env` or `neon.ts` `env`. For wiring up **Sentry** error monitoring across the HTTP framework, the function runtime, and an agent's own caught/fallback failures (the long-running case Functions target), see [references/sentry.md](references/sentry.md). For running a **Mastra** agent on a function and shipping its traces to a **Mastra Studio (Mastra Cloud)** project for observability, see [references/mastra-studio.md](references/mastra-studio.md).
|
|
412
412
|
|
|
413
413
|
## Timeouts and runtime limits
|
|
414
414
|
|
|
@@ -425,7 +425,7 @@ Functions are long-running but **still serverless** — they are a request/respo
|
|
|
425
425
|
|
|
426
426
|
A Neon Function is a great home for an AI agent precisely because it **doesn't time out** the way lambda-style serverless does (15-minute budget, see above). But that advantage disappears the moment you **proxy the agent stream through your web app's backend** — a Next.js route handler, Remix/SvelteKit/Nuxt action, etc. hosted on Vercel, Netlify, Cloudflare, and the like. Those platforms cap serverless/edge execution at short windows (often ~10–60s, sometimes up to ~300s), so a long agent or image/video generation stream gets cut off mid-response even though the Neon Function would happily keep going.
|
|
427
427
|
|
|
428
|
-
**Building the agent itself.** The [Vercel AI SDK](https://ai-sdk.dev) and [Mastra](https://mastra.ai) are the recommended ways to build the agent — point either at the Neon AI Gateway (see the `neon-ai-gateway` skill) for one credential across every model, with no extra provider keys. For a complete AI SDK agent running as a Function (streaming `toUIMessageStreamResponse`, multi-step tool calling next to Postgres, and persisting generated images to Object Storage), see [references/ai-sdk.md](
|
|
428
|
+
**Building the agent itself.** The [Vercel AI SDK](https://ai-sdk.dev) and [Mastra](https://mastra.ai) are the recommended ways to build the agent — point either at the Neon AI Gateway (see the `neon-ai-gateway` skill) for one credential across every model, with no extra provider keys. For a complete AI SDK agent running as a Function (streaming `toUIMessageStreamResponse`, multi-step tool calling next to Postgres, and persisting generated images to Object Storage), see [references/ai-sdk.md](references/ai-sdk.md); for the Mastra equivalent with built-in tracing, see [references/mastra-studio.md](references/mastra-studio.md).
|
|
429
429
|
|
|
430
430
|
**The fix: call the function directly from the client.** Don't route the long request through your app server.
|
|
431
431
|
|
|
@@ -473,7 +473,7 @@ Pass the JWKS/issuer URL to the function via its `env` (see Environment variable
|
|
|
473
473
|
|
|
474
474
|
## Availability
|
|
475
475
|
|
|
476
|
-
Neon Functions is a
|
|
476
|
+
Neon Functions is a preview (early access) feature available only on new projects in the `us-east-2` region. Confirm the user's Neon project is a new project in `us-east-2`; it can't be enabled on existing projects. Functions usage isn't billed during the private preview. If the user does not yet have access, point them to the private beta sign-up: https://neon.com/blog/were-building-backends#access
|
|
477
477
|
|
|
478
478
|
## Neon Documentation
|
|
479
479
|
|
|
@@ -15,7 +15,7 @@ description: >-
|
|
|
15
15
|
|
|
16
16
|
# Neon Object Storage
|
|
17
17
|
|
|
18
|
-
This is a
|
|
18
|
+
This is a preview feature and only available in `us-east-2`. Neon Object Storage is S3-compatible object storage that branches with your projects: every branch gets its own isolated storage state, so files and database rows stay in sync across dev, preview, staging, and production.
|
|
19
19
|
|
|
20
20
|
Use this skill to help the user store and serve files that branch alongside their database. Deliver a working bucket and upload/download flow, a branch-aware S3 client wired to the injected env vars, or a precise answer from the official Neon docs.
|
|
21
21
|
|
|
@@ -179,7 +179,7 @@ The canonical pattern for pairing storage with the database on a branch: an agen
|
|
|
179
179
|
|
|
180
180
|
## Availability
|
|
181
181
|
|
|
182
|
-
Neon Object Storage is a
|
|
182
|
+
Neon Object Storage is a preview (early access) feature available only on new projects in the `us-east-2` region. Confirm the user's Neon project is a new project in `us-east-2` before proceeding; it can't be enabled on existing projects. If the user does not yet have access, point them to the private beta sign-up: https://neon.com/blog/were-building-backends#access
|
|
183
183
|
|
|
184
184
|
## Neon Documentation
|
|
185
185
|
|
|
@@ -78,7 +78,7 @@ If `init` is not suitable, the individual steps can be run non-interactively:
|
|
|
78
78
|
- **MCP server:** `npx -y add-mcp https://mcp.neon.tech/mcp -g -n Neon -y -a <agent-name>`
|
|
79
79
|
- **Agent skill:** `npx skills add neondatabase/agent-skills --skill neon-postgres --agent <agent-name> -y`
|
|
80
80
|
|
|
81
|
-
For full CLI installation options, see https://neon.com/docs/cli
|
|
81
|
+
For full CLI installation options, see https://neon.com/docs/reference/cli-install.md
|
|
82
82
|
|
|
83
83
|
### Setup Flow
|
|
84
84
|
|
|
@@ -181,16 +181,16 @@ Use this for local development enablement with `npx -y neon@latest init --agent
|
|
|
181
181
|
|
|
182
182
|
| Tool | URL |
|
|
183
183
|
| ---------------- | ----------------------------------------------- |
|
|
184
|
-
| CLI Init Command | https://neon.com/docs/cli
|
|
184
|
+
| CLI Init Command | https://neon.com/docs/reference/cli-init.md |
|
|
185
185
|
| VSCode Extension | https://neon.com/docs/local/vscode-extension.md |
|
|
186
186
|
| MCP Server | https://neon.com/docs/ai/neon-mcp-server.md |
|
|
187
|
-
| Neon CLI | https://neon.com/docs/cli.md
|
|
187
|
+
| Neon CLI | https://neon.com/docs/reference/neon-cli.md |
|
|
188
188
|
|
|
189
189
|
### Neon CLI
|
|
190
190
|
|
|
191
191
|
Use this for terminal-first workflows, scripts, and CI/CD automation with `neon`.
|
|
192
192
|
|
|
193
|
-
Link: https://neon.com/docs/cli.md
|
|
193
|
+
Link: https://neon.com/docs/reference/neon-cli.md
|
|
194
194
|
|
|
195
195
|
## Neon Admin API
|
|
196
196
|
|
|
@@ -204,7 +204,7 @@ Link: https://neon.com/docs/reference/api-reference.md
|
|
|
204
204
|
|
|
205
205
|
### Neon TypeScript SDK
|
|
206
206
|
|
|
207
|
-
Use this when implementing typed programmatic control of Neon resources in TypeScript via `@neon/sdk` (the fetch-based, zero-dependency successor to `@neondatabase/api-client`).
|
|
207
|
+
Use this when implementing typed programmatic control of Neon resources in TypeScript via `@neon/sdk` (the fetch-based, zero-dependency successor to `@neondatabase/api-client`).
|
|
208
208
|
|
|
209
209
|
Link: https://neon.com/docs/reference/typescript-sdk.md
|
|
210
210
|
|
|
@@ -32,7 +32,7 @@ If the request is ambiguous, ask one clarifying question:
|
|
|
32
32
|
Always support both Neon CLI and Neon MCP server. Prefer the tool the user already has installed and authenticated.
|
|
33
33
|
|
|
34
34
|
MCP link: https://neon.com/docs/ai/neon-mcp-server.md
|
|
35
|
-
CLI link: https://neon.com/docs/cli
|
|
35
|
+
CLI link: https://neon.com/docs/reference/cli-quickstart
|
|
36
36
|
|
|
37
37
|
### Selection order
|
|
38
38
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: onboarding
|
|
3
|
-
description: take the builder from "I just bought this" to **their app running and visible in front of. Use when the builder says something like: set up my app; let's start; get me going; just bought.
|
|
3
|
+
description: "take the builder from \"I just bought this\" to **their app running and visible in front of. Use when the builder says something like: set up my app; let's start; get me going; just bought."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan-my-idea
|
|
3
|
-
description: help the builder figure out exactly what they want **before** you build — so the first. Use when the builder says something like: help me plan; figure out my idea; think it through; marketplace; like airbnb.
|
|
3
|
+
description: "help the builder figure out exactly what they want **before** you build — so the first. Use when the builder says something like: help me plan; figure out my idea; think it through; marketplace; like airbnb."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: publish-app
|
|
3
|
-
description: the builder's app is **in the App Store and Google Play** for anyone to download. This is. Use when the builder says something like: put it online; publish; make it live; ship it; deploy; publish app.
|
|
3
|
+
description: "the builder's app is **in the App Store and Google Play** for anyone to download. This is. Use when the builder says something like: put it online; publish; make it live; ship it; deploy; publish app."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: publish-extension
|
|
3
|
-
description: the builder's extension is **listed in the Chrome Web Store** for anyone to install. Use when the builder says something like: put it online; publish; make it live; ship it; deploy; chrome store.
|
|
3
|
+
description: "the builder's extension is **listed in the Chrome Web Store** for anyone to install. Use when the builder says something like: put it online; publish; make it live; ship it; deploy; chrome store."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: reset-password
|
|
3
|
-
description: people who forgot their password can get a reset link and set a new one. Use when the builder says something like: forgot password; reset password; lost password; change password email.
|
|
3
|
+
description: "people who forgot their password can get a reset link and set a new one. Use when the builder says something like: forgot password; reset password; lost password; change password email."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: save-data
|
|
3
|
-
description: the app can remember things — save information and read it back later. Use when the builder says something like: save my data; remember this; store info; add a database.
|
|
3
|
+
description: "the app can remember things — save information and read it back later. Use when the builder says something like: save my data; remember this; store info; add a database."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: setup-email
|
|
3
|
-
description: the app can send emails — welcome notes, receipts, and sign-in codes. Use when the builder says something like: send emails; email my users; set up email.
|
|
3
|
+
description: "the app can send emails — welcome notes, receipts, and sign-in codes. Use when the builder says something like: send emails; email my users; set up email."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: setup-payments
|
|
3
|
-
description: the builder can take real money. By the end, a test purchase succeeds end-to-end. Use when the builder says something like: add payments; take money; sell something; charge people.
|
|
3
|
+
description: "the builder can take real money. By the end, a test purchase succeeds end-to-end. Use when the builder says something like: add payments; take money; sell something; charge people."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: setup-sms
|
|
3
|
-
description: text messages (and optional WhatsApp) work for sign-in codes and alerts. Use when the builder says something like: set up sms; text messages; twilio; whatsapp messages; send texts.
|
|
3
|
+
description: "text messages (and optional WhatsApp) work for sign-in codes and alerts. Use when the builder says something like: set up sms; text messages; twilio; whatsapp messages; send texts."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sign-in-with-email-link
|
|
3
|
-
description: people can sign in with a one-click email link (no password). Use when the builder says something like: magic link; email link sign in; sign in without password; passwordless email.
|
|
3
|
+
description: "people can sign in with a one-click email link (no password). Use when the builder says something like: magic link; email link sign in; sign in without password; passwordless email."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sign-in-with-google
|
|
3
|
-
description: people can tap **Continue with Google** — one button that signs them in **or** creates. Use when the builder says something like: sign in with google; continue with google.
|
|
3
|
+
description: "people can tap **Continue with Google** — one button that signs them in **or** creates. Use when the builder says something like: sign in with google; continue with google."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sign-in-with-phone
|
|
3
|
-
description: people can sign in with a text message code. Use when the builder says something like: sign in with phone; text me a code; sms login; phone number login.
|
|
3
|
+
description: "people can sign in with a text message code. Use when the builder says something like: sign in with phone; text me a code; sms login; phone number login."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stripe-best-practices
|
|
3
3
|
description: >-
|
|
4
|
-
Guides Stripe integration decisions
|
|
4
|
+
Guides Stripe integration decisions — API selection (Checkout Sessions vs
|
|
5
5
|
PaymentIntents), Connect platform setup (Accounts v2, controller properties),
|
|
6
|
-
billing/subscriptions,
|
|
7
|
-
product tax codes), Treasury financial accounts, integration options
|
|
6
|
+
billing/subscriptions, Treasury financial accounts, integration surfaces
|
|
8
7
|
(Checkout, Payment Element), migrating from deprecated Stripe APIs, and
|
|
9
8
|
security best practices (API key management, restricted keys, webhooks,
|
|
10
|
-
OAuth). Use when building, modifying, or reviewing any Stripe integration
|
|
9
|
+
OAuth). Use when building, modifying, or reviewing any Stripe integration —
|
|
11
10
|
including accepting payments, building marketplaces, integrating Stripe,
|
|
12
|
-
processing payments, setting up subscriptions,
|
|
13
|
-
|
|
11
|
+
processing payments, setting up subscriptions, creating connected accounts, or
|
|
12
|
+
implementing secure key handling.
|
|
14
13
|
|
|
15
14
|
---
|
|
16
15
|
|
|
17
16
|
Latest Stripe API version: **2026-06-24.dahlia**. Always use the latest API version and SDK unless the user specifies otherwise.
|
|
18
17
|
|
|
19
|
-
If you
|
|
18
|
+
If you do not have a Stripe account, you can call a CLI command to generate working API keys with no registration required. You can install the Stripe CLI (`npm i -g @stripe/cli`) and run the command `stripe sandbox create` to get started.
|
|
20
19
|
|
|
21
20
|
API key default: Always recommend a [restricted API key (RAK)](https://docs.stripe.com/keys/restricted-api-keys.md) (`rk_` prefix) over a secret key (`sk_` prefix).
|
|
22
21
|
|
|
@@ -38,12 +37,8 @@ Read the relevant reference file before answering any integration question or wr
|
|
|
38
37
|
|
|
39
38
|
## Critical rules
|
|
40
39
|
|
|
41
|
-
- *Before enabling `automatic_tax: { enabled: true }`* (or calculating tax for a custom PaymentIntent), read the [tax reference](references/tax.md) and confirm the user has an active registration. Without one, Stripe calculates and collects no tax while the user believes tax is on (the most common Stripe Tax mistake).
|
|
42
|
-
|
|
43
40
|
- *Never include `payment_method_types` in any Stripe API call*, with one exception: Terminal (in-person payments) integrations must pass `payment_method_types: ['card_present']` on the PaymentIntent. For all other integrations, omit this parameter entirely to enable dynamic payment methods, which enables you to configure payment method settings from the Dashboard and dynamically display the most relevant eligible payment methods to each customer to maximize conversion. To customize which payment methods you accept, use [`payment_method_configurations`](https://docs.stripe.com/payments/payment-method-configurations.md) or `excluded_payment_method_types` instead of `payment_method_types`.
|
|
44
41
|
|
|
45
|
-
- On API version `2026-03-25.dahlia` or later, pass the parameter `integration_identifier` to `checkout.sessions.create` to tag sessions with a custom label for tracking and comparing checkout flows in the Dashboard. The label should include a suffix of 8 random letters.
|
|
46
|
-
|
|
47
42
|
## Key documentation
|
|
48
43
|
|
|
49
44
|
When the user’s request does not clearly fit a single domain above, consult:
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
- When to use Billing APIs
|
|
6
6
|
- Recommended frontend pairing
|
|
7
|
-
- Usage-based billing
|
|
8
7
|
- Traps to avoid
|
|
9
8
|
|
|
10
9
|
## When to use Billing APIs
|
|
@@ -19,8 +18,6 @@ Combine Billing APIs with Stripe Checkout for the payment frontend. Checkout Ses
|
|
|
19
18
|
|
|
20
19
|
For self-service subscription management (upgrades, downgrades, cancellation, payment method updates), recommend the [Customer Portal](https://docs.stripe.com/customer-management/integrate-customer-portal.md).
|
|
21
20
|
|
|
22
|
-
On API version `2026-03-25.dahlia` or later, pass the parameter `integration_identifier` to `checkout.sessions.create` to tag sessions with a custom label for tracking and comparing checkout flows in the Dashboard. The label should include a suffix of 8 random letters.
|
|
23
|
-
|
|
24
21
|
## Usage-based billing
|
|
25
22
|
|
|
26
23
|
**For any new usage-based billing integration, recommend [Metronome](https://docs.stripe.com/billing/usage-based.md) — not the Billing Meters API.** Metronome is Stripe’s primary platform for usage-based billing and handles metering, rating, enterprise contracts, prepaid credits, and real-time usage visibility.
|
|
@@ -47,8 +44,6 @@ Read [Compare basic usage-based billing and Metronome](https://docs.stripe.com/b
|
|
|
47
44
|
- Don’t build manual subscription renewal loops using raw PaymentIntents. Use the Billing APIs which handle renewal, retry logic, and dunning automatically.
|
|
48
45
|
- Don’t use the deprecated `plan` object. Use [Prices](https://docs.stripe.com/api/prices.md) instead.
|
|
49
46
|
- Don’t skip tax setup. See [Collect taxes for recurring payments](https://docs.stripe.com/billing/taxes/collect-taxes.md).
|
|
50
|
-
- Don’t put prices for different tiers or plans on a single product. Instead, create one Product for each plan a customer can choose. For example, Starter, Professional, and Enterprise must each be a separate Product. Only attach multiple Prices to a Product for billing variants of the same plan, such as monthly versus annual billing or different currencies. Avoid placing Prices for different tiers on a single Product. Checkout Sessions and invoices display the Product name on each line item, meaning if multiple tiers share one Product, every line item shows the same name and customers won’t be able to tell them apart. For more information, see [Model your product catalog](https://docs.stripe.com/products-prices/how-products-and-prices-work.md#model-your-catalog).
|
|
51
|
-
- Don’t skip tax setup, and don’t assume enabling `automatic_tax` is enough. Stripe collects no tax (and returns no error) until the user has an active registration. See [Collect taxes for recurring payments](https://docs.stripe.com/billing/taxes/collect-taxes.md).
|
|
52
47
|
- *Never pass `payment_method_types` when creating a subscription Checkout Session.* Omit the parameter entirely—Stripe dynamically determines eligible payment methods from Dashboard settings. Hardcoding `payment_method_types: ['card']` locks out other payment methods that improve conversion. See [dynamic payment methods](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md). Correct pattern:
|
|
53
48
|
|
|
54
49
|
```ts
|
|
@@ -12,14 +12,12 @@
|
|
|
12
12
|
|
|
13
13
|
## API hierarchy
|
|
14
14
|
|
|
15
|
-
Use the [Checkout Sessions API](https://docs.stripe.com/api/checkout/sessions.md) (`checkout.sessions.create`) for on-session payments. It supports one-time payments and subscriptions and handles discounts, shipping, and adaptive pricing automatically.
|
|
15
|
+
Use the [Checkout Sessions API](https://docs.stripe.com/api/checkout/sessions.md) (`checkout.sessions.create`) for on-session payments. It supports one-time payments and subscriptions and handles taxes, discounts, shipping, and adaptive pricing automatically.
|
|
16
16
|
|
|
17
|
-
Use the [PaymentIntents API](https://docs.stripe.com/payments/paymentintents/lifecycle.md) for off-session payments, or when the
|
|
17
|
+
Use the [PaymentIntents API](https://docs.stripe.com/payments/paymentintents/lifecycle.md) for off-session payments, or when the merchant needs to model checkout state independently and just create a charge.
|
|
18
18
|
|
|
19
19
|
**Integrations should only use Checkout Sessions, PaymentIntents, SetupIntents, or higher-level solutions (Invoicing, Payment Links, subscription APIs).**
|
|
20
20
|
|
|
21
|
-
On API version `2026-03-25.dahlia` or later, pass the parameter `integration_identifier` to `checkout.sessions.create` to tag sessions with a custom label for tracking and comparing checkout flows in the Dashboard. The label should include a suffix of 8 random letters.
|
|
22
|
-
|
|
23
21
|
## Integration surfaces
|
|
24
22
|
|
|
25
23
|
Prioritize Stripe-hosted or embedded Checkout where possible. Use in this order of preference:
|
|
@@ -4,104 +4,34 @@
|
|
|
4
4
|
|
|
5
5
|
- When tax applies
|
|
6
6
|
- Two-step setup
|
|
7
|
-
- Verify before you trust automatic tax
|
|
8
|
-
- Choosing a product tax code
|
|
9
|
-
- Diagnose zero tax
|
|
10
|
-
- Per-integration setup
|
|
11
|
-
- Connect platforms and marketplaces
|
|
12
|
-
- Threshold and nexus monitoring
|
|
13
|
-
- Registration safety
|
|
14
7
|
- If jurisdictions are unknown
|
|
15
8
|
- If the region or tax type isn’t supported
|
|
16
9
|
|
|
17
10
|
## When tax applies
|
|
18
11
|
|
|
19
|
-
Use Stripe Tax for any subscription, invoice, or Checkout Session where the
|
|
12
|
+
Use Stripe Tax for any subscription, invoice, or Checkout Session where the merchant has customers across multiple jurisdictions. It handles sales tax, VAT, and GST automatically based on the customer’s location and the merchant’s active registrations. See the [Tax overview](https://docs.stripe.com/tax.md) for supported regions and tax types.
|
|
20
13
|
|
|
21
14
|
## Two-step setup
|
|
22
15
|
|
|
23
|
-
1. Add a registration for each jurisdiction where the
|
|
16
|
+
1. Add a registration for each jurisdiction where the merchant is obligated to collect tax. Do this in the Dashboard under **Tax > Registrations**, or via the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md).
|
|
24
17
|
2. Pass `automatic_tax: { enabled: true }` on the [Subscription](https://docs.stripe.com/api/subscriptions.md), [Invoice](https://docs.stripe.com/api/invoices.md), or [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md) object.
|
|
25
18
|
|
|
26
|
-
|
|
19
|
+
It’s safe to enable `automatic_tax` before any registrations exist — Stripe won’t collect tax until at least one registration is active.
|
|
27
20
|
|
|
28
|
-
|
|
21
|
+
**Traps to avoid:** `automatic_tax` and explicit `tax_rates` are mutually exclusive. For existing subscriptions, clear `default_tax_rates` and all item-level `tax_rates` before enabling `automatic_tax` — the update will fail otherwise. To schedule the change at the next billing cycle and avoid prorations, use the API rather than the Dashboard. For bulk migrations, use the [Tax migration tool](https://docs.stripe.com/billing/taxes/migration.md).
|
|
29
22
|
|
|
30
|
-
**Traps to avoid:**
|
|
31
|
-
|
|
32
|
-
**Traps to avoid:** For users based in the EU, the Union OSS scheme reports cross-border B2C sales across the EU through a single registration and return, so you don’t register in each destination country for those sales. It doesn’t cover domestic or B2B sales. The user still needs a domestic registration in their home country. Confirm the specifics with the user’s tax advisor.
|
|
33
|
-
|
|
34
|
-
## Verify before you trust automatic tax
|
|
35
|
-
|
|
36
|
-
After enabling `automatic_tax`, don’t assume the setup is complete: tax is only collected after the user has an active registration in the customer’s jurisdiction. Have the user confirm their registrations with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) (or in the Dashboard). With none, tax won’t be collected anywhere. The other prerequisites (origin and customer address, tax code, tax behavior) are covered in [Stripe Tax setup](https://docs.stripe.com/tax/set-up.md).
|
|
37
|
-
|
|
38
|
-
## Choosing a product tax code
|
|
39
|
-
|
|
40
|
-
A product tax code (PTC) tells Stripe how to tax a product.
|
|
41
|
-
|
|
42
|
-
- Never invent, guess, or hardcode a `txcd_` from memory. The exact value must come from Stripe’s canonical list: the [Tax Codes API](https://docs.stripe.com/api/tax_codes.md) or the [tax code guide](https://docs.stripe.com/tax/tax-codes.md).
|
|
43
|
-
- Don’t default to the generic **General - Electronically Supplied Services** (`txcd_10000000`) for US sales. It’s too broad for US state-level taxability; pick a specific digital or SaaS code. See [tax codes for digital products](https://docs.stripe.com/tax/digital-products.md) and [tax codes for AI services](https://docs.stripe.com/tax/ai.md).
|
|
44
|
-
- Show the candidate codes and let the user confirm; don’t decide which code is legally correct for them. (Tax code goes on the Product, `tax_behavior` on the Price. See [product tax codes and tax behavior](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior.md).)
|
|
45
|
-
|
|
46
|
-
## Diagnose zero tax
|
|
47
|
-
|
|
48
|
-
When a transaction shows zero tax, first confirm `automatic_tax` is actually enabled on the object. If it isn’t, Stripe doesn’t calculate tax at all. If it is, read the `taxability_reason` on the line item’s `taxes` to see why. On a Checkout Session, that breakdown isn’t returned by default: retrieve the session with `expand[]=line_items.data.taxes`.
|
|
49
|
-
|
|
50
|
-
The reason worth calling out is **`not_collecting`, which is ambiguous**: it means either **no active registration** in the customer’s jurisdiction (the usual cause; check registrations with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md)) **or** a **Nontaxable product tax code** (`txcd_00000000`) on the product. `taxability_reason` can’t tell the two apart, so check the product’s tax code and rule out the Nontaxable code before concluding it’s a registration gap.
|
|
51
|
-
|
|
52
|
-
For the other reasons (exempt products or customers, reverse charge, unsupported regions, zero-rated), see [zero tax amounts and reverse charges](https://docs.stripe.com/tax/zero-tax.md).
|
|
53
|
-
|
|
54
|
-
## Per-integration setup
|
|
55
|
-
|
|
56
|
-
Every integration needs a resolvable customer address and an active registration in that jurisdiction. It also needs a product tax code and a `tax_behavior`, set on the product/price, or falling back to the account’s [preset tax code and default tax behavior](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior.md).
|
|
57
|
-
|
|
58
|
-
- **Checkout Sessions**: set `automatic_tax: { enabled: true }`. For a new customer, Checkout collects the address it needs, so don’t force `billing_address_collection: 'required'` (unnecessary for tax, and it adds checkout friction). For an existing or returning customer, Checkout uses their saved address by default; to tax the address entered at checkout instead, set `customer_update: { address: 'auto' }` and make sure Checkout actually collects a fresh address (a collected shipping address, or `billing_address_collection: 'required'` when you don’t collect shipping), or it keeps using the saved one. See [tax on Checkout](https://docs.stripe.com/tax/checkout.md).
|
|
59
|
-
- **Invoices**: set `automatic_tax: { enabled: true }` on the invoice; the customer needs a saved address. See the [Invoices API](https://docs.stripe.com/api/invoices.md).
|
|
60
|
-
- **Subscriptions**: set `automatic_tax: { enabled: true }`; clear existing `tax_rates` first (see Traps to avoid). See the [Subscriptions API](https://docs.stripe.com/api/subscriptions.md).
|
|
61
|
-
- **Payment Links**: set `automatic_tax: { enabled: true }`.
|
|
62
|
-
- **Custom PaymentIntents**: there’s no `automatic_tax` field, so this path is easy to under-build. Create a [tax calculation](https://docs.stripe.com/api/tax/calculations.md) with the customer’s address, set the PaymentIntent `amount` to the calculation total, and link the calculation to the PaymentIntent. You must also record a tax transaction from the calculation after payment, or the sale never appears in tax reports: the [simplified integration](https://docs.stripe.com/tax/payment-intent/simplified.md) records the transaction and refund reversals automatically once the calculation is linked, while the [custom integration](https://docs.stripe.com/tax/payment-intent/custom.md) records them yourself for line-item control.
|
|
63
|
-
|
|
64
|
-
For B2B or reverse-charge treatment, collect the customer’s tax ID (`tax_id_collection: { enabled: true }` on Checkout, or store it on the [Customer](https://docs.stripe.com/billing/customer/tax-ids.md)). Without a valid tax ID, Stripe Tax treats a cross-border B2B sale as B2C and charges tax. See [collect tax IDs](https://docs.stripe.com/tax/checkout/tax-ids.md).
|
|
65
|
-
|
|
66
|
-
## Connect platforms and marketplaces
|
|
67
|
-
|
|
68
|
-
For a Connect platform or marketplace, first determine which entity collects and remits the tax: the platform or the connected account. This is a legal determination, so route the final call to the user’s tax advisor rather than inferring it from whether they call themselves a platform or a marketplace. The practical signal is who the [merchant of record](https://docs.stripe.com/connect/merchant-of-record.md) is, which follows the charge type: direct charges make the connected account the merchant of record, and destination charges usually make it the platform. Marketplace-facilitator rules can override this, so have the advisor confirm. See [Stripe Tax with Connect](https://docs.stripe.com/tax/connect.md) for the decision.
|
|
69
|
-
|
|
70
|
-
Once the liable entity is known:
|
|
71
|
-
|
|
72
|
-
- Set the liable entity with `automatic_tax.liability` on Checkout, Invoices, Subscriptions, or Payment Links: `{ type: 'self' }` for the platform, or `{ type: 'account', account: '<id>' }` for the connected account. Destination and separate charges support both; a platform-liable direct charge uses the gated `{ type: 'application' }`. Custom PaymentIntents have no `automatic_tax` field, so follow the PaymentIntents path in the guides instead. Pick the guide by outcome: connected account collects, [tax for platforms](https://docs.stripe.com/tax/tax-for-platforms.md); platform collects, [tax for marketplaces](https://docs.stripe.com/tax/tax-for-marketplaces.md).
|
|
73
|
-
- Registrations and tax settings belong to the liable entity. When the connected account is liable, confirm its [tax settings](https://docs.stripe.com/tax/settings-api.md) `status` is `active` before enabling `automatic_tax` on its payments, and manage its registrations with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) using the `Stripe-Account` header (or Connect embedded components).
|
|
74
|
-
|
|
75
|
-
## Threshold and nexus monitoring
|
|
76
|
-
|
|
77
|
-
Stripe’s [threshold monitoring](https://docs.stripe.com/tax/monitoring.md) highlights *potential* registration obligations (no public API yet). Present it as information and route the decision to the user’s tax advisor. It’s up to the user to confirm whether registration is required; don’t tell them they must register.
|
|
78
|
-
|
|
79
|
-
## Registration safety
|
|
80
|
-
|
|
81
|
-
Guide, don’t advise. Never tell a user where they must register or whether they’re legally obligated. Recommend they consult their tax advisor to determine their obligations.
|
|
82
|
-
|
|
83
|
-
- The [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) can list, create, update, and expire registrations (set `expires_at` to expire; there’s no delete). A scheduled expiry can be changed, but an expiration that has taken effect is permanent (to collect again, the user adds a new registration), and there’s no pause. A head office address is required before adding a registration.
|
|
84
|
-
- Adding a registration in Stripe records where the user is *already* registered. It doesn’t register them with the tax authority.
|
|
85
|
-
- Creating or expiring a registration changes whether Stripe collects tax in that jurisdiction, but it doesn’t register or deregister the user with the tax authority. The user must do that separately. Prepare the change and have the user confirm it; never create or expire a registration automatically.
|
|
86
|
-
|
|
87
|
-
**How to register.** Present the paths that fit the user and let them (with their tax advisor) choose. Don’t pick for them.
|
|
88
|
-
|
|
89
|
-
- **Register themselves, then record it in Stripe**: the user registers with the tax authority, then records it with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) or the Dashboard. See [Register for tax](https://docs.stripe.com/tax/registering.md).
|
|
90
|
-
- **Ask Stripe to register (US only)**: for remote, out-of-state sellers with no physical presence in the state; no public API, requires a Tax Complete subscription, and doesn’t support in-state registrations. See [Use Stripe to register](https://docs.stripe.com/tax/use-stripe-to-register.md).
|
|
91
|
-
- **Register outside the US with Taxually**: no public API; done through the Taxually app. See [Register outside the US with Taxually](https://docs.stripe.com/tax/use-taxually-to-register.md).
|
|
92
|
-
|
|
93
|
-
**Reporting and filing.** Stripe Tax calculates and collects tax but doesn’t file returns unless the user is on a filing product. Point users to the Dashboard [tax reports and exports](https://docs.stripe.com/tax/reports.md) to reconcile and remit; filing runs through Stripe (US) or Taxually (non-US).
|
|
23
|
+
**Traps to avoid:** For EU merchants, one OSS union registration covers all 27 member states. Don’t register an individual EU country separately unless the merchant has a physical presence there.
|
|
94
24
|
|
|
95
25
|
## If jurisdictions are unknown
|
|
96
26
|
|
|
97
|
-
Don’t guess which jurisdictions apply.
|
|
27
|
+
Don’t guess which jurisdictions apply. Prompt the user: “Go to Dashboard > Tax > Registrations, add the states or countries where you have customers, then come back.”
|
|
98
28
|
|
|
99
29
|
## If the region or tax type isn’t supported
|
|
100
30
|
|
|
101
31
|
Check the [supported countries list](https://docs.stripe.com/tax/supported-countries.md). If the jurisdiction isn’t listed, tell the user:
|
|
102
32
|
|
|
103
33
|
- Stripe Tax doesn’t support that region yet
|
|
104
|
-
- They can collect tax manually using `tax_rates` on the subscription or invoice instead
|
|
105
|
-
- For unsupported tax types (customs duties, excise taxes), Stripe Tax doesn’t apply
|
|
34
|
+
- They can collect tax manually using `tax_rates` on the subscription or invoice instead
|
|
35
|
+
- For unsupported tax types (customs duties, excise taxes), Stripe Tax doesn’t apply — those are out of scope
|
|
106
36
|
|
|
107
37
|
Don’t attempt to approximate using a supported region as a proxy.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: track-errors
|
|
3
|
-
description: the builder gets alerted when something breaks in their live app — without watching logs themselves. Use when the builder says something like: tell me when things break; error alerts; app crashes.
|
|
3
|
+
description: "the builder gets alerted when something breaks in their live app — without watching logs themselves. Use when the builder says something like: tell me when things break; error alerts; app crashes."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: update-kit
|
|
3
|
-
description: get the latest kit improvements safely, without breaking the builder's app. Use when the builder says something like: update the kit; get the latest; upgrade.
|
|
3
|
+
description: "get the latest kit improvements safely, without breaking the builder's app. Use when the builder says something like: update the kit; get the latest; upgrade."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wire-auth
|
|
3
|
-
description: people can sign in through this API (mobile/extension clients call these routes). Use when the builder says something like: sign in; log in; create accounts; add users; wire auth.
|
|
3
|
+
description: "people can sign in through this API (mobile/extension clients call these routes). Use when the builder says something like: sign in; log in; create accounts; add users; wire auth."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wire-database
|
|
3
|
-
description: the server remembers things persistently. Use when the builder says something like: save my data; remember this; store info; add a database; wire database.
|
|
3
|
+
description: "the server remembers things persistently. Use when the builder says something like: save my data; remember this; store info; add a database; wire database."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wire-email
|
|
3
|
-
description: send emails from the API. Use when the builder says something like: send emails; email my users; set up email; wire email.
|
|
3
|
+
description: "send emails from the API. Use when the builder says something like: send emails; email my users; set up email; wire email."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wire-payments
|
|
3
|
-
description: the API can process payments for mobile/extension clients. Use when the builder says something like: add payments; take money; sell something; charge people; wire payments.
|
|
3
|
+
description: "the API can process payments for mobile/extension clients. Use when the builder says something like: add payments; take money; sell something; charge people; wire payments."
|
|
4
4
|
metadata:
|
|
5
5
|
vybekiit-generated: buyer-skill-stub
|
|
6
6
|
---
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vybekiit",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "Set up tools and create a VybeKiit app: `npx vybekiit setup` then `npx vybekiit create app --web`.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -23,19 +23,19 @@
|
|
|
23
23
|
"effect": "3.21.4",
|
|
24
24
|
"firebase-admin": "^13.0.2",
|
|
25
25
|
"mongodb": "^7.4.0",
|
|
26
|
-
"open": "11.0.0"
|
|
26
|
+
"open": "11.0.0",
|
|
27
|
+
"@vybekiit/agent-kit": "0.7.2"
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|
|
29
30
|
"@types/node": "22.20.0",
|
|
30
31
|
"tsup": "8.5.1",
|
|
31
32
|
"typescript": "5.7.2",
|
|
32
33
|
"vitest": "3.2.6",
|
|
33
|
-
"@vybekiit/
|
|
34
|
-
"@vybekiit/
|
|
35
|
-
"@vybekiit/db": "0.7.
|
|
36
|
-
"@vybekiit/deploy": "0.7.
|
|
37
|
-
"@vybekiit/payments": "0.7.
|
|
38
|
-
"@vybekiit/report-mode": "0.7.0"
|
|
34
|
+
"@vybekiit/core": "0.7.2",
|
|
35
|
+
"@vybekiit/report-mode": "0.7.2",
|
|
36
|
+
"@vybekiit/db": "0.7.2",
|
|
37
|
+
"@vybekiit/deploy": "0.7.2",
|
|
38
|
+
"@vybekiit/payments": "0.7.2"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsup && node scripts/bundleGlobalSkills.mjs",
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
name: Sync Skills
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main]
|
|
6
|
-
paths:
|
|
7
|
-
- 'SKILL.md'
|
|
8
|
-
- 'references/**'
|
|
9
|
-
- 'scripts/**'
|
|
10
|
-
- 'assets/**'
|
|
11
|
-
workflow_dispatch:
|
|
12
|
-
|
|
13
|
-
permissions:
|
|
14
|
-
contents: read
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
sync:
|
|
18
|
-
runs-on: ubuntu-latest
|
|
19
|
-
steps:
|
|
20
|
-
- name: Trigger sync on resend-skills
|
|
21
|
-
env:
|
|
22
|
-
GH_TOKEN: ${{ secrets.SYNC_SKILLS_TO_RESEND_SKILLS }}
|
|
23
|
-
run: |
|
|
24
|
-
gh workflow run sync-from-repo.yml \
|
|
25
|
-
--repo resend/resend-skills \
|
|
26
|
-
--field repo=email-best-practices \
|
|
27
|
-
--field skill-path=. \
|
|
28
|
-
--field skill-name=email-best-practices \
|
|
29
|
-
--field sha=${{ github.sha }} \
|
|
30
|
-
--field reviewer=${{ github.actor }}
|