MCPInstall

payment-testing

Test payment and checkout flows end to end against PSP sandboxes — Stripe first, with the general pattern for Adyen/Braintree/PayPal. Covers Stripe test-mode card numbers and their decline codes, the 3DS/SCA challenge flow and its nested-iframe handling in Playwright, test clocks for subscription/billing-cycle simulation, webhook testing (stripe listen/trigger, signature verification, idempotency), failed/retried payments and refunds, and never using real cards. Use when: "test Stripe checkout," "payment test," "3DS test," "test webhook signature," "test subscription renewal," "test clock," "refund test," "decline card test," "checkout E2E." Not for: General API contract testing of non-payment endpoints — api-testing. PCI-DSS/regulatory compliance audit — compliance-testing. Related: api-testing, playwright-automation, compliance-testing, test-data-management, qa-project-context.

Installs
995
Last 24h
+11
Trending rank
#8293
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/petrkindlmann/qa-skills --skill payment-testing
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads payment-testing automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

<objective> Payment flows fail in ways generic E2E tests miss: a card field in a cross-origin iframe that `page.locator` silently never reaches, a renewal that won't trigger for a year, a webhook handler that "works" until Stripe retries and fulfills an order twice, an order marked paid on a redirect that the browser forged. This skill makes you test payments the way they actually break — against PSP sandboxes, with the real test cards, the nested 3DS challenge, server-side test clocks, signature-verified webhooks, and idempotent fulfillment. Never a real PAN, never a live key. </objective>

Quick Route

You need to test…Go toReference
Success / decline / insufficient-funds outcomesTest cardsreferences/stripe-test-cards.md
A 3DS/SCA challenge that pops a modal3DS challengereferences/playwright-3ds.md
A subscription renewal months/years outTest clocksreferences/webhooks-and-clocks.md
Webhooks reaching localhost + signaturesWebhooksreferences/webhooks-and-clocks.md
A non-Stripe or in-house webhook protocolWebhooks, "Another provider"the provider's or your contract's docs
A failed renewal then a refundFailed paymentsreferences/webhooks-and-clocks.md
Fulfillment only after real paymentReconciliationreferences/webhooks-and-clocks.md
Adyen / PayPal / Braintree sandboxesMulti-PSPreferences/multi-psp.md

Discovery Questions

First, check .agents/qa-project-context.md in the project root and skip anything it already answers (PSP, stack, test framework, existing fixtures). Then clarify:

  • Which PSP, and is it Stripe? Stripe is the default here. Other PSPs share the pattern but have their own sandbox cards/accounts — see Multi-PSP.
  • One-time payments, subscriptions, or both? Subscriptions pull in test clocks, dunning, and the invoice.* lifecycle; one-time payments don't.
  • Is SCA/3DS in play? EU/UK card flows almost always challenge. If yes you need the nested-iframe pattern, not plain locators.
  • Do you fulfill on a webhook or on the redirect today? If fulfillment happens on return_url, that's the bug to test for — fulfillment must wait for the verified webhook.
  • Where does the webhook handler run in tests? Local (stripe listen) vs a deployed preview env changes how you deliver events.

Core Principles

  1. Never touch a real card or a live key — and this is non-negotiable, not a preference. Real PANs in any environment violate Stripe's Services Agreement and drag your repo into PCI scope. Test mode (pk_test_/sk_test_) with Stripe's published test cards is the only correct answer. Masking or encrypting a real number does not fix it; removing it does.

  2. Money is confirmed server-side, never client-side. A redirect, an onApprove callback, or a ?status=success query param can be premature, replayed, or forged. Fulfill an order only after a signature-verified payment_intent.succeeded webhook, re-confirmed with an API retrieve.

  3. Verify the signature before you parse the body. Parsing JSON first destroys the raw bytes constructEvent needs. The webhook route gets the raw body; everything else can parse JSON.

  4. Time is a server-side construct for billing. Stripe's billing engine runs on Stripe's servers. Faking the clock in your test process changes nothing. Use test clocks.

  5. Assume every webhook is delivered more than once. Stripe retries. Idempotency keyed on event.id in durable storage is mandatory; an in-memory set is not idempotency.

Stripe Test Cards and Outcomes

Drive each outcome with the card that deterministically produces it. The four you need most:

PANOutcomeCode
4242424242424242Succeeds—
4000000000000002Declinedcard_declined (generic_decline)
4000000000009995Declinedinsufficient_funds
40000000000032203DS always challenges—
4000000000000341Attaches, then fails on chargecard_declined

Use test keys (pk_test_…/sk_test_…) in the app under test and assert that in setup. Do not use 4111111111111111 — that is a generic Braintree/PayPal-era Luhn number, not a Stripe test card, and it does not deterministically decline.

The card field is in a cross-origin Stripe iframe, so fill it through frameLocator, never page.locator directly. Assert outcomes on UI copy for a smoke test, or more robustly on the server-side last_payment_error.decline_code from paymentIntents.retrieve. Full Playwright tests for success / card_declined / insufficient_funds: references/stripe-test-cards.md.

3DS / SCA: The Nested-Iframe Challenge

This is the hardest part to get right. The Stripe 3DS challenge is a frame nested inside the Stripe modal frame — a single frameLocator cannot reach it. Chain frameLocator outer → inner, then click Complete authentication.

What fails, and why:

  • page.locator('#card') → the input is cross-origin; the locator matches nothing.
  • page.frames()[1] → frame index shifts when Stripe adds/reorders frames. Never select frames by index.
  • await page.waitForTimeout(5000) → guessing the challenge duration. Wait on the element.

The correct shape (full test, including the fail-authentication variant, in references/playwright-3ds.md):

// 3DS-required card so the challenge always appears.
await card.getByPlaceholder('Card number').fill('4000000000003220');
await page.getByRole('button', { name: /pay/i }).click();

// Nested: outer Stripe challenge frame → inner ACS frame. One frameLocator is not enough.
const inner = page
  .frameLocator('iframe[name^="__privateStripeFrame"]')
  .frameLocator('iframe#challengeFrame, iframe[name="acsFrame"]');
await inner.getByRole('button', { name: /complete authentication|complete|authorize/i }).click();

await expect(page).toHaveURL(/\/success/);              // assert the succeeded state
await expect(page.getByText(/payment succeeded/i)).toBeVisible();

4000002760003184 is the alternative SCA card for setup-intent / first-use flows; the eval and docs accept it where a one-time-payment 3DS card is wanted.

Test Clocks: Server-Side Time Travel

To test an annual renewal without waiting a year, use a Stripe test clock — a server-side construct. Client-side fakes (jest.useFakeTimers, sinon, mocking Date) do nothing to Stripe's billing engine.

Rules that bite if missed:

  • Create the clock at a frozen_time, then attach the customer at creation with test_clock: clock.id. You cannot attach an existing customer to a clock afterward.
  • testHelpers.testClocks.advance moves time forward only — you cannot rewind. Advance at most two billing cycles per call.
  • After advancing, poll the clock to ready, then assert the renewal invoice and webhooks.
const clock = await stripe.testHelpers.testClocks.create({
  frozen_time: Math.floor(Date.now() / 1000), name: 'annual-renewal',
});
const customer = await stripe.customers.create({ test_clock: clock.id /* … */ });
// …create subscription, then advance ~12 months forward:
await stripe.testHelpers.testClocks.advance(clock.id, { frozen_time: oneYearLater });

Full create/advance/assert flow: references/webhooks-and-clocks.md (section 4).

Webhooks: Local Delivery, Signatures, Idempotency

Local delivery. Do not expose your endpoint with ngrok and do not poll the API for status. stripe listen tunnels test events to localhost natively; stripe trigger fires them on demand:

stripe listen --forward-to localhost:3000/webhooks   # prints whsec_… ONCE at startup
stripe trigger payment_intent.succeeded

Copy that whsec_… into STRIPE_WEBHOOK_SECRET. It is the signing secret, a different value from STRIPE_SECRET_KEY (sk_test_…) — do not conflate them.

Signature verification. Mount express.raw on the webhook route before any global express.json(), so constructEvent gets the raw body. With Stripe, a forged or tampered event is rejected with 400, the status Stripe's own handlers return; never hand-roll a === signature string comparison.

Another provider or an in-house protocol. Take the header name, the signed input and the rejection status from that provider's or your contract's documentation, not from the Stripe examples: many document 401 or 403 for a bad signature. The invariants carry over unchanged and are what the tests should pin: a missing, wrong or tampered signature is refused and records nothing; the signature covers the exact raw bytes, so the same event re-serialized and correctly signed over its new bytes is judged on those bytes; a duplicate or concurrent delivery fulfils once; a failure after the dedup marker leaves the order retryable; and the result survives a restart.

app.post('/webhooks', express.raw({ type: 'application/json' }), async (req, res, next) => {
  const sig = req.headers['stripe-signature'] as string;
  let event: Stripe.Event;
  try {
    event = stripe.webhooks.constructEvent(req.body, sig, process.env.STRIPE_WEBHOOK_SECRET!);
  } catch (err) {
    return res.status(400).send(`Webhook Error: ${(err as Error).message}`); // SignatureVerificationError
  }
  try { return await handleEvent(event, res); }
  catch (err) { return next(err); } // processing failures remain retryable 5xx
});
app.use(express.json()); // everything else, after the webhook route

Idempotency. Stripe retries delivery, so the same event.id arrives twice. Request-side idempotency keys (for outbound API calls) do not dedup inbound webhooks. Store event.id with a UNIQUE constraint, in the same database transaction as fulfillment. Return 200 only after commit. If processing fails after inserting the marker, roll back both changes and return a retryable 5xx. Otherwise the retry sees the marker and silently discards an unpaid/unfulfilled order. Use the transaction-bound handler in references/webhooks-and-clocks.md; an in-memory set cannot survive restart.

For external side effects, commit an outbox job and make its consumer idempotent. Also enforce a business-operation key such as order/payment ID: two distinct event IDs can describe the same operation. Do not claim exactly-once delivery.

The signature test (valid accepted, forged → 400) and the "deliver the same event twice, assert fulfilled once" idempotency test are in references/webhooks-and-clocks.md (sections 2–3). Add a failure after dedup insertion, retry after restart, concurrent duplicates, distinct event IDs for one payment, and out-of-order delivery. A sequential duplicate test alone does not exercise the crash window.

Failed Payments: Dunning and Refunds

To test a failed recurring charge end to end, subscribe with 4000000000000341 (SDK token pm_card_chargeCustomerFail) — it attaches to the customer but fails on the later charge, which is what the renewal needs. Cards that decline at attach time can't be saved, so they can't model a renewal failure.

Drive the lifecycle with a test clock:

  1. Subscribe the customer (on a test clock) with the attach-then-fail card.
  2. advance the clock past the renewal date → Stripe attempts the charge.
  3. The charge fails → Stripe emits invoice.payment_failed and the subscription goes past_due. Assert both.
  4. Resolve by issuing a refund with refunds.create (fires charge.refunded) — do not "fix" it by deleting the subscription.

Full driver in references/webhooks-and-clocks.md (section 5).

Reconciliation: Fulfill on the Webhook, Not the Redirect

Mark an order paid only after a signature-verified payment_intent.succeeded webhook, re-confirmed against the API — never on the return_url redirect or a client-side success flag, and never by polling with a sleep.

if (event.type === 'payment_intent.succeeded') {
  const verified = await stripe.paymentIntents.retrieve(event.data.object.id);
  if (verified.status === 'succeeded' && verified.amount_received === expected) {
    await markOrderPaid(verified.metadata.orderId); // fulfillment happens HERE
  }
}

The reconciliation test asserts the order is still pending after the redirect and only paid after the verified webhook: references/webhooks-and-clocks.md (section 6).

Multi-PSP: Adyen, PayPal, Braintree

Stripe test cards do not work on other PSPs. Each has its own sandbox cards and sandbox buyer accounts. Port the structure of your Stripe tests; swap in the PSP's sandbox values. Never reuse Stripe PANs or live/production keys.

  • Adyen — own test cards (e.g. 4212345678910014 for 3DS2); many declines are driven by the transaction amount (.13 refused, .51 referral), not the card. Events arrive as HMAC-signed notifications.
  • PayPal — log in with a sandbox buyer account (sandbox personal email/password), not a card. Confirm server-side via the Orders API / webhooks, not the client onApprove.
  • Braintree — own sandbox test card numbers via Drop-in UI / Hosted Fields; amount drives transaction outcome, card number drives verification.

What stays the same: separate test/sandbox credentials, no real card, and fulfillment on the verified server-side event/notification. Details: references/multi-psp.md.

Anti-Patterns

1. Reaching for 4111111111111111

That Luhn-valid number is a Braintree/PayPal-era generic PAN, not a Stripe test card. Use 4242424242424242 for success and the specific decline cards (4000000000000002, 4000000000009995).

2. Treating the card field as a normal input

page.locator('#card-number') silently matches nothing because the field is in a cross-origin iframe. Use frameLocator.

3. Selecting iframes by index

page.frames()[1] breaks the instant Stripe reorders frames. Match the frame by a stable name prefix (iframe[name^="__privateStripeFrame"]) and chain frameLocator for the nested 3DS challenge.

4. waitForTimeout to "wait for the challenge"

Flaky on slow CI, wasteful on fast CI. Wait on the element (expect(...).toBeVisible() / auto-waiting locator actions), never the clock.

5. Client-side time mocking for billing

jest.useFakeTimers / sinon / mocking Date cannot move Stripe's server-side billing. Use a test clock.

6. ngrok or polling for local webhooks

stripe listen --forward-to localhost:3000/webhooks tunnels events natively; stripe trigger fires them. No public tunnel, no status polling.

7. Parsing the body before verifying the signature

A global express.json() ahead of the webhook route destroys the raw body constructEvent needs, so verification can never pass. Mount express.raw on the webhook route first.

8. Confusing the request idempotency key with webhook dedup, or using an in-memory set

Outbound idempotency keys don't dedup inbound webhooks; an in-memory Set dies on restart. Persist event.id with a UNIQUE constraint.

9. Fulfilling on the redirect / client success flag

The return_url can be premature, replayed, or forged. Fulfill only on the verified payment_intent.succeeded webhook.

10. "Fixing" a failed renewal by deleting the subscription

The correct resolution is a refund via refunds.create, leaving the dunning lifecycle (invoice.payment_failed → past_due) intact and testable.

11. Rationalizing a real card "just in CI"

A hardcoded real PAN is a PCI/compliance violation regardless of environment. The fix is a test card in test mode — plus removing the secret from the repo and git history and rotating any exposed key. Masking or encrypting it does not make it acceptable.

Verification

  • stripe listen --forward-to localhost:3000/webhooks prints a whsec_… and shows events arriving when you run stripe trigger payment_intent.succeeded.
  • Running the 3DS test with 4000000000003220 reaches and clicks the Complete authentication button (the test fails loudly, not silently, if the nested frame isn't found).
  • The signature test: a tampered Stripe-Signature returns 400; a header from generateTestHeaderString returns 200.
  • The idempotency test: delivering the same event.id twice fulfills once.
  • grep -rE 'pk_live|sk_live|4111111111111111' over the test suite returns nothing.

Done When

  • Checkout suite covers success (4242424242424242), card_declined (4000000000000002), and insufficient_funds (4000000000009995), each asserting the matching outcome, using pk_test_/sk_test_ keys.
  • A 3DS test fills 4000000000003220, reaches the nested challenge frame via chained frameLocator, clicks Complete authentication, and asserts the succeeded state — no frames()[index], no waitForTimeout.
  • A subscription-renewal test uses a Stripe test clock (testHelpers.testClocks.create + advance, forward-only, customer attached at creation) instead of any client-side time mock.
  • Local webhooks are received via stripe listen --forward-to / stripe trigger, with the whsec_… wired into STRIPE_WEBHOOK_SECRET (distinct from STRIPE_SECRET_KEY).
  • The webhook handler verifies the signature with constructEvent on the raw body before parsing, returns 400 on a forged event (or the status a non-Stripe contract documents), records nothing for it, and a test proves it.
  • Idempotency is enforced by persisting event.id with a UNIQUE constraint; a duplicate delivery returns 200 and fulfills exactly once, proven by a test.
  • A failed-renewal test drives invoice.payment_failed → past_due → refunds.create via a test clock and the attach-then-fail card 4000000000000341.
  • A reconciliation test confirms the order is paid only after the verified payment_intent.succeeded webhook (re-checked with paymentIntents.retrieve), not on the redirect.
  • grep -rE 'pk_live|sk_live|4111111111111111' finds no live key or banned PAN in the test suite. (A bare [0-9]{16} scan would false-positive on every legitimate test card — match live-key prefixes and the banned 4111… number, not all 16-digit strings.)

Related Skills

  • api-testing — General REST/GraphQL endpoint testing, schema validation, and auth flows for non-payment endpoints. Go there when the target isn't a PSP checkout/webhook.
  • playwright-automation — Page Object Model, fixtures, and general browser E2E mechanics that the 3DS flow here builds on.
  • compliance-testing — PCI-DSS, GDPR, and regulatory audit work. This skill keeps you out of PCI scope by using test cards; go there for a formal compliance audit.
  • test-data-management — Seeding customers, subscriptions, and fixtures; managing the test-clock-bound customers this skill creates.
  • qa-project-context — The universal first stop: PSP, stack, and fixture conventions that every question above should defer to.

Reference Files (in references/)

  • stripe-test-cards.md — Full test-card catalogue with decline codes and the Playwright success/decline/insufficient-funds tests.
  • playwright-3ds.md — Nested-iframe 3DS challenge handling, complete and fail variants, and selector notes.
  • webhooks-and-clocks.md — stripe listen/trigger, raw-body signature verification, idempotency by event.id, test clocks, failed-renewal dunning + refunds, and reconciliation.
  • multi-psp.md — Adyen, PayPal, and Braintree sandbox patterns and what differs from Stripe.

FAQ

What does the payment-testing skill do?

Test payment and checkout flows end to end against PSP sandboxes — Stripe first, with the general pattern for Adyen/Braintree/PayPal. Covers Stripe test-mode card numbers and their decline codes, the 3DS/SCA challenge flow and its nested-iframe handling in Playwright, test clocks for subscription/billing-cycle simulation, webhook testing (stripe listen/trigger, signature verification, idempotency), failed/retried payments and refunds, and never using real cards. Use when: "test Stripe checkout," "payment test," "3DS test," "test webhook signature," "test subscription renewal," "test clock," "refund test," "decline card test," "checkout E2E." Not for: General API contract testing of non-payment endpoints — api-testing. PCI-DSS/regulatory compliance audit — compliance-testing. Related: api-testing, playwright-automation, compliance-testing, test-data-management, qa-project-context.

How do I install payment-testing?

Run npx skills add https://github.com/petrkindlmann/qa-skills --skill payment-testing in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/payment-testing/ (personal) or .claude/skills/payment-testing/ (project).

Which AI agents can use payment-testing?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is payment-testing safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains payment-testing?

It is published by petrkindlmann in petrkindlmann/qa-skills. It has 995 recorded installs.

More from petrkindlmann/qa-skills

View all →

playwright-automation

petrkindlmann/qa-skills

Write production-grade Playwright tests in TypeScript: Page Object Model, fixtures, auto-waiting, user-facing locators, parallel execution, CI integration, sharding, and installed-version checks. Includes an explicit "do not" list for AI agents. Use when: "Playwright," "write E2E test," "page object," "new Playwright suite," "Playwright config." Not for: fixing one flaky test at runtime — use test-reliability. Not for: bulk regenerating selectors after a UI refactor — use selector-drift-recovery. Not for: visual baseline creation/management — use visual-testing. Not for: deep WCAG/axe audits — use accessibility-testing. Related: visual-testing, ci-cd-integration, api-testing, test-reliability, selector-drift-recovery, accessibility-testing.

Testing & QA1.9K installs

exploratory-testing

petrkindlmann/qa-skills

Design and execute structured exploratory testing sessions. Covers Session-Based Test Management (SBTM), charter writing, heuristic-based exploration (HICCUPS, FEW HICCUPS), bug discovery patterns, note-taking templates, and conversion of findings to automated tests. Use when: "exploratory testing," "SBTM," "manual testing," "bug hunting," "test charter," "heuristic testing." Not for: an AI browser agent autonomously exploring the app from a natural-language goal — use agentic-browser-testing. Not for: testing your product's own AI/LLM features — use ai-system-testing. Related: test-planning, ai-bug-triage, risk-based-testing, agentic-browser-testing.

Testing & QA1.5K installs

test-strategy

petrkindlmann/qa-skills

Produce a multi-quarter QA strategy document. Covers scope, risk-based prioritization, test levels (unit/integration/E2E), pyramid analysis, entry/exit criteria, quality KPIs, tool selection rationale, CI scaling levers, and timeline planning. Output is an actionable strategy document, not a shelf document. Use when: "test strategy," "QA strategy doc," "testing approach," "QA roadmap," "multi-quarter QA direction." Not for: a single-sprint or single-release plan — use test-planning. Not for: identifying which areas carry the most risk — use risk-based-testing first. Related: risk-based-testing, qa-metrics, release-readiness, test-planning, test-reliability.

Testing & QA1.5K installs

test-planning

petrkindlmann/qa-skills

Build a single sprint or release test plan. Covers feature decomposition into testable scenarios, requirements-to-test coverage mapping, effort estimation by test type, prioritization matrices (risk × effort), resource allocation, and scheduling with buffers. Use when: "sprint test plan," "release test plan," "what to test this sprint," "test estimation," "coverage mapping." Not for: multi-quarter strategy — use test-strategy. Not for: ranking areas by risk — use risk-based-testing. Not for: the go/no-go decision itself — use release-readiness. Related: test-strategy, risk-based-testing, release-readiness.

Testing & QA1.5K installs

qa-project-context

petrkindlmann/qa-skills

Create and fill .agents/qa-project-context.md with the project's tech stack, test frameworks, CI/CD pipeline, environments, quality goals, risk areas, team structure, and conventions. This is the one file every other QA skill reads first, so they skip redundant discovery and give context-aware advice. Use when: "set up QA context," "configure testing," "initialize project," first use of any QA skill. Not for: bootstrapping a brand-new project's QA end-to-end — use qa-start (which calls this skill as its first step). Related: qa-start, risk-based-testing, test-strategy, qa-metrics, playwright-automation.

Testing & QA1.4K installs

risk-based-testing

petrkindlmann/qa-skills

Produce a risk matrix or heatmap that quantifies what could break by business impact × probability, runs failure mode analysis on the top items, and maps test coverage to risk zones. Includes stakeholder interview frameworks and continuous reassessment. Run this BEFORE test-strategy or test-planning. Use when: "risk assessment," "risk matrix," "risk heatmap," "what could break," "critical paths," "failure modes," "where to focus testing." Not for: multi-quarter QA direction — use test-strategy. Not for: a single sprint/release test plan — use test-planning. Not for: hands-on session-based bug hunting — use exploratory-testing. Related: test-strategy, test-planning, release-readiness, qa-metrics.

Testing & QA1.4K installs

Popular backend & apis skills

View category →

find-skills

vercel-labs/skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

OfficialBackend & APIs4.1M installs

entra-app-registration

microsoft/azure-skills

Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.

OfficialBackend & APIs566.7K installs

This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).

Backend & APIs514.8K installs

embedded-captions

heygen-com/hyperframes

Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.

Backend & APIs453.3K installs

entra-agent-id

microsoft/azure-skills

Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).

OfficialBackend & APIs336.6K installs

neon

neondatabase/agent-skills

Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.

Backend & APIs237.1K installs