CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

paddle-subscription-cancel

Cancel a Paddle subscription from a Next.js Server Action — auth, ownership check, safe `effectiveFrom` default, revalidation, and the `canceled` vs `scheduledChange` distinction.

Quality

85%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Medium

Suggest reviewing before use

The canonical home for this skill is paddle-subscription-cancel in PaddleHQ/paddle-agent-skills

SKILL.md
Quality
Evals
Security

Quality

Content

88%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

An exemplary single-file skill: executable, well-sequenced code with explicit security checks, error recovery, and a verification checklist that includes negative tests, all dense with non-obvious Paddle-specific facts. The only improvements are trimming the Supabase boilerplate/pitfall redundancy and splitting setup material into a reference file to slim the main body.

Suggestions

Move the two Supabase client helpers and the prerequisites env-var block into a references/setup.md (one level deep, linked from Prerequisites) — this would serve both conciseness and progressive disclosure.

Trim the overlap between the inline code comments and the "Common pitfalls" section by keeping the rationale in pitfalls and shortening the comments to just the action.

DimensionReasoningScore

Conciseness

Nearly every section carries Paddle/Next.js-specific knowledge Claude cannot be assumed to know (effectiveFrom semantics, paused-subscription 400, the 30-minute renewal lock, canceled vs scheduledChange, event ordering), and the Supabase block is explicitly justified ("if your project already has equivalent helpers, use those instead"). It is not 5 because the ~70 lines of Supabase client boilerplate and the partial overlap between the pitfalls list and the inline code comments (e.g., ownership check explained twice) could be trimmed; it is well above 3 since no section explains generic concepts Claude already knows.

4 / 5

Actionability

The full `cancelSubscription` Server Action is copy-paste ready with numbered steps, concrete env vars, a specific error-code map (`subscription_locked_renewal`, `subscription_locked_pending_changes`), and a slim DTO return shape. The two deliberate abbreviations — the undo action's "Run the same auth and ownership checks" and the imported `getPaddleInstance` — are explicitly signaled and backed by the linked starter kit, so the guidance remains fully executable for the common cases; this matches anchor 5 rather than anchor 4's "minor gaps".

5 / 5

Workflow Clarity

The action is sequenced 1–6 (auth → ownership → cancel → revalidate → DTO → error handling) with explicit validation: ApiError handling with recovery messaging per code, the paused-status branch, and a 7-step "Verify the integration" checklist including negative tests (logged-out request, forged subscriptionId) with expected return values. Since this destructive-capable operation has thorough validation and feedback loops, it satisfies anchor 5; the anchor-4 profile ("minor validation gaps") does not apply.

5 / 5

Progressive Disclosure

The body is well-organized with clear headers (When to use, Prerequisites, How it works, Full action, Undo, Pitfalls, Verify, Related docs) and clearly signals sibling skills and external docs. It is not 5 because this ~250-line SKILL.md is entirely monolithic — the Supabase helper setup and the customer-portal/Retain alternatives are natural candidates for a references/ file — and the guideline's 5-without-bundle-files exception applies only to skills under 50 lines. It is not 3 because structure and navigation are genuinely good, not merely present.

4 / 5

Total

18

/

20

Passed

Description

75%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A highly specific, distinctive, third-person description that names the exact capability set of the skill without fluff or over-claiming. Its one structural weakness is the absence of an explicit 'Use when...' trigger clause, which caps completeness, and it misses a few natural synonyms like "unsubscribe".

Suggestions

Append an explicit trigger clause, e.g. "Use when building a cancel-subscription button or Server Action for Paddle subscriptions in a Next.js app." — this would lift completeness from 3 to 5.

Add one or two natural user phrasings such as "unsubscribe" or "billing/account page cancel button" to broaden trigger-term coverage.

DimensionReasoningScore

Specificity

"Cancel a Paddle subscription from a Next.js Server Action — auth, ownership check, safe `effectiveFrom` default, revalidation, and the `canceled` vs `scheduledChange` distinction" names the domain plus five concrete capabilities that map exactly to the skill's body sections. Coverage is comprehensive for the skill's scope, matching the anchor-5 example's density of specific actions; it is not score 4 because no capability area of the skill is left uncovered.

5 / 5

Completeness

The "what" is explicit and concrete (cancel via Server Action with auth, ownership check, safe effectiveFrom, revalidation, status distinction), but there is no "Use when..." clause or equivalent explicit trigger guidance — the "when" is only weakly implied by "from a Next.js Server Action". Per the rubric guideline, a missing 'Use when' clause caps completeness at 3, which fits anchor 3 (clear 'what', weakly implied 'when') exactly; it cannot be 4 without explicit trigger phrasing.

3 / 5

Trigger Term Quality

Natural terms a user would say are present: "Cancel a Paddle subscription", "Next.js Server Action", "auth", "revalidation". It is not 5 because common user phrasings like "unsubscribe", "end/cancel my subscription button", or "billing page" are absent; it is not 3 because the core natural vocabulary ("cancel subscription", "Paddle", "Next.js") is fully covered rather than only partially.

4 / 5

Distinctiveness Conflict Risk

"Paddle subscription" + "Next.js Server Action" + "cancel" is a clear niche with distinct triggers and minimal conflict risk; even sibling Paddle skills (sync, webhooks, portal) would not be wrongly triggered by a cancel request. It clearly matches anchor 5 rather than anchor 4, which implies residual overlap risk with closely related skills.

5 / 5

Total

17

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

PaddleHQ/paddle-agent-skills

Path

providers/cursor/plugin/skills/subscription-cancel/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.