CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

rc-one-time-products

Use this skill when selling one time products on Android with RevenueCat. Covers fetching offerings, running awaitPurchase on a non subscription package, and relying on the SDK to acknowledge or consume automatically.

Quality

85%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

78%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 well-structured, token-efficient skill with executable Kotlin examples, a clear phased workflow, and explicit edge-case and verification guidance. The main gaps are a pseudocode placeholder in the error-handling block, an undefined userFacingMessage helper, and a version-number dependency that will age.

Suggestions

Replace the `try { /* awaitPurchase */ }` placeholder in Phase 4 with the actual awaitPurchase call so the error-handling example is copy-paste ready, and define or inline the userFacingMessage mapping (or make the rc-error-handling reference explicit at first use).

Move the "RevenueCat 10.x" purchase-option behavior into a version-scoped or compatibility note so the guidance does not silently become stale as the SDK major version changes.

Add a pre-launch validation step (e.g., testing with Google Play license testers and a pending-payment test track) to the Verify phase to complete the workflow's validation checkpoints.

DimensionReasoningScore

Conciseness

The body is lean and assumes Claude's competence (never explains what RevenueCat or BillingClient is), but the version-specific "RevenueCat 10.x sells only that purchase option" statement sits outside any old-patterns/deprecated section, and the acknowledge/consume prohibition is stated in both Phase 1 and Phase 3. Efficient with minor trimmable instances, matching anchor 4 rather than the every-token-earns-its-place anchor 5.

4 / 5

Actionability

Three of the four code blocks are concrete, executable Kotlin (awaitOfferings fetch, awaitPurchase launch, entitlement/nonSubscriptionTransactions reads), but Phase 4's `try { /* awaitPurchase */ }` is a placeholder sketch and `userFacingMessage` is referenced but not defined locally. Mostly executable with minor gaps matches anchor 4; not 5 because it is not copy-paste ready throughout, and not 3 since only one block is sketch-like.

4 / 5

Workflow Clarity

A clear five-phase sequence (Scope, Prepare, Execute, Edge Cases, Verify) with an explicit outcome-to-action table for success/cancel/pending/error and a dedicated Verify phase ("Trust `result.customerInfo`... Do not grant access from optimistic local state"). Falls short of anchor 5 because there is no pre-launch testing checkpoint (e.g., Google Play license testers) and no retry guidance after user-facing errors.

4 / 5

Progressive Disclosure

No bundle files exist (no references/, scripts/, or assets/ directories), and none are needed: the skill is self-contained, organized into clear phase sections, inlines nothing that belongs in a separate file, and its single one-level-deep reference (the full-chapter URL) plus the rc-error-handling cross-reference are clearly signaled. Well-organized sections with no external reference needs satisfy the top anchor per the rubric's simple-skill guidance.

5 / 5

Total

17

/

20

Passed

Description

87%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 strong description with an explicit 'Use this skill when...' trigger, concrete capability statements, and a well-delineated niche. Its only weakness is keyword coverage that omits common synonyms like consumable, non-consumable, or in-app purchase.

DimensionReasoningScore

Specificity

Lists three concrete, domain-specific actions ("fetching offerings", "running awaitPurchase on a non subscription package", "relying on the SDK to acknowledge or consume automatically") with minor coverage gaps such as entitlement reads and webhook events. Not 3 (more than 1-2 actions) and not 5 (not comprehensive).

4 / 5

Completeness

Explicitly answers both: "Use this skill when selling one time products on Android with RevenueCat" (when) and "Covers fetching offerings, running awaitPurchase... acknowledge or consume automatically" (what), with concrete trigger phrases. Clearly matches anchor 5 rather than anchor 4, whose 'when' is less specific.

5 / 5

Trigger Term Quality

Natural phrases users would say are present ("selling one time products", "Android", "RevenueCat", "non subscription"), but common synonyms like "in-app purchase", "consumable", "non-consumable", or "lifetime" are missing. Good coverage with a few natural terms missing matches anchor 4, not the comprehensive synonym coverage of anchor 5.

4 / 5

Distinctiveness Conflict Risk

"one time products" + "non subscription" + "Android" + "RevenueCat" carves a clear niche distinct from subscription or iOS sibling skills, with minimal conflict risk. Matches anchor 5 (clear niche with distinct triggers) rather than anchor 4's minor overlap risk.

5 / 5

Total

18

/

20

Passed

Validation

87%

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

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

metadata_field

'metadata' should map string keys to string values

Warning

Total

14

/

16

Passed

Repository

RevenueCat/ai-toolkit

Path

revenuecat-play-billing/skills/rc-one-time-products/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.