CtrlK
BlogDocsLog inGet started
Tessl Logo

paddle-subscription-sync

Mirror Paddle subscription and customer state into your database via webhooks — schema, upsert pattern, status semantics, scheduled changes, and access gating.

63

Quality

75%

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-sync/SKILL.md

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

SKILL.md
Quality
Evals
Security

Quality

Content

75%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, information-dense skill body: executable SQL and TypeScript throughout, precise Paddle status semantics, and a genuinely useful pitfalls section. The main gaps are minor — an incomplete placeholder in the backfill script, no verification checkpoint for the batch backfill, and MCP tool semantics inlined in the main file.

Suggestions

Complete the backfill script's `update: { /* same fields */ }` placeholder with the actual field list and show (or link) the `get-paddle-instance` helper so the code is copy-paste ready.

Add a verification step for the batch backfill (e.g. compare row counts against the Paddle dashboard, or spot-check a known customer) before flipping access gating to read from the database.

Move the embedded MCP tool-semantics blockquote (50-call cap, pagination shape, casing rules) into a `references/paddle-mcp.md` file and link to it, slimming the main SKILL.md.

DimensionReasoningScore

Conciseness

The body is dense with non-obvious domain knowledge (service-role key/RLS gotcha, `canceled` as terminal state, the 50-call MCP cap, out-of-order event handling) with almost no padding; minor prose like "Why mirror state at all?" could be trimmed, keeping it just below the lean level-5 anchor.

4 / 5

Actionability

The SQL schema, TypeScript webhook handlers, access-gate and UI-state functions are concrete and executable, and both backfill paths are shown; the backfill script ships a literal `update: { /* same fields */ }` placeholder and relies on an unshown `get-paddle-instance` helper, so it is not quite copy-paste ready per the level-5 anchor.

4 / 5

Workflow Clarity

A clear sequence (prerequisites, schema, handlers, status semantics, scheduled changes, queries, backfill, pitfalls) plus an explicit "Verify the integration" section with concrete checks; the backfill is a batch operation with no verification checkpoint of its own and no fix-and-retry loop, which the rubric's batch-operation guidance counts as a validation gap capping it below 5.

4 / 5

Progressive Disclosure

A well-sectioned single file with clearly signaled external links and no nested references; the embedded MCP tool-semantics blockquote and the ~330-line monolith are content a separate reference file could absorb, so it falls between the well-placed level 4 and the cleanly split level 5.

4 / 5

Total

16

/

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 description that names concrete capabilities and the platform niche precisely. Its one material weakness is the missing "when to use" trigger clause, which caps completeness and slightly weakens trigger discoverability.

Suggestions

Append an explicit trigger clause, e.g. "Use when syncing Paddle billing state to a local database, gating features by subscription status, or building account/billing pages without live Paddle API reads."

Include common user synonyms such as "billing" or "sync" so the description matches how users naturally phrase the need.

Clarify the sibling-skill boundary (e.g. "the `webhooks` skill covers signature verification") in the description to further reduce overlap risk.

DimensionReasoningScore

Specificity

The description lists multiple concrete actions — "schema, upsert pattern, status semantics, scheduled changes, and access gating" — comprehensively covering the skill, matching the level-5 anchor rather than level 4, which allows for coverage gaps.

5 / 5

Completeness

The "what" is clear (mirror subscription/customer state, schema, upsert pattern, status semantics, access gating) but there is no "Use when..." clause or equivalent trigger guidance, which the rubric explicitly caps at 3; the "when" is absent, not merely under-specified as at level 4.

3 / 5

Trigger Term Quality

"Paddle", "subscription", "customer", "webhooks", and "database" are natural terms users would say, giving good keyword coverage; common synonyms like "billing", "sync", or "payments" are missing, keeping it below level 5.

4 / 5

Distinctiveness Conflict Risk

"Mirror Paddle subscription and customer state into your database via webhooks" carves a clear niche with minimal conflict risk — only other Paddle skills could overlap, and "mirror into your database" distinguishes it from the sibling `webhooks` skill.

5 / 5

Total

17

/

20

Passed

Validation

93%

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

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

referenced_paths_exist

Referenced path issues: 1 missing

Warning

Total

15

/

16

Passed

Repository
PaddleHQ/paddle-agent-skills
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.