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

80%

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

Fix and improve this skill with Tessl

tessl review fix ./providers/codex/plugin/skills/subscription-cancel/SKILL.md

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

SKILL.md
Quality
Evals
Security

Quality

Content

81%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.

A strong, highly actionable single-file skill: complete executable code, a safe-default decision table, an explicit event-vs-DB-state model, and a verification checklist with negative tests. The only real weaknesses are the inlined Supabase boilerplate (both a conciseness and organization cost) and two small executable gaps (the unshown `getPaddleInstance` helper and the abbreviated undo action).

DimensionReasoningScore

Conciseness

The effectiveFrom table, event timeline, and pitfalls are dense with every token earning its place; the one padded zone is ~45 lines of standard `@supabase/ssr` boilerplate helper code plus explanation of what the service-role client does, which the skill itself marks as optional ("if your project already has equivalent helpers, use those instead"). Not 3 — only one trimmable section; not 5 — that section is genuine over-explanation of library setup Claude already knows.

4 / 5

Actionability

The full Server Action is nearly copy-paste ready with auth, ownership check, `paused` branching, error mapping, revalidation, and a slim DTO, plus env vars and a 7-step verification checklist. Two minor gaps keep it below 5: `getPaddleInstance` is imported but never shown, and `undoCancelSubscription` abbreviates its auth/ownership steps as "Run the same auth and ownership checks" rather than being standalone.

4 / 5

Workflow Clarity

Numbered steps inside the action (authenticate → verify ownership → cancel → revalidate → DTO → error handling), a clear 3-stage webhook event timeline with the warning "Don't depend on which arrives first", feedback loops for recoverable errors (409 lock → "Try again after it renews"), and an explicit verification checklist including negative tests (logged-out and forged `subscriptionId`). This is a destructive operation and validation is emphatically present.

5 / 5

Progressive Disclosure

Single-level structure with well-organized sections and clearly signaled cross-skill pointers (`subscription-sync`, `webhooks`, `customer-portal`) plus a Related docs list. Not 5: the ~50-line Supabase client setup and the Retain/portal alternative details are inlined in SKILL.md when they could live in a reference file.

4 / 5

Total

17

/

20

Passed

Description

70%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 specific, distinctive description that clearly states what the skill does, but it lacks any "Use when..." trigger clause, which both caps completeness at 3 and leaves natural trigger synonyms (e.g., "unsubscribe") on the table. Adding an explicit trigger sentence would lift the two weakest dimensions.

Suggestions

Add an explicit trigger clause, e.g. "Use when building a cancel/unsubscribe button for Paddle subscriptions in a Next.js app" — the missing 'when' guidance currently caps completeness at 3.

Include natural user synonyms such as "unsubscribe" or "end subscription" alongside "Cancel" to broaden trigger term coverage.

Mention undoing a scheduled cancellation (a full section of the skill) to close the remaining specificity gap.

DimensionReasoningScore

Specificity

Names the domain ("Cancel a Paddle subscription from a Next.js Server Action") and enumerates several concrete sub-tasks ("auth, ownership check", "safe `effectiveFrom` default", "revalidation", "the `canceled` vs `scheduledChange` distinction"). Not 5 because coverage has a minor gap — the skill also implements undoing a scheduled cancellation, which the description omits.

4 / 5

Completeness

The "what" is explicit and detailed, but there is no "Use when..." clause or equivalent trigger guidance; the judging guidelines cap completeness at 3 for a missing explicit trigger.

3 / 5

Trigger Term Quality

"Cancel a Paddle subscription", "Next.js Server Action", and "revalidation" are natural phrases a user would say. Not 5: common synonyms like "unsubscribe" or "end/stop subscription" are missing.

4 / 5

Distinctiveness Conflict Risk

"Paddle subscription", "Next.js Server Action", and the `canceled` vs `scheduledChange` framing form a clear niche with distinct triggers; minimal overlap risk with adjacent Paddle skills (webhooks, subscription-sync).

5 / 5

Total

16

/

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/codex/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.