Implement Customer.io rate limiting and backoff. Use when handling high-volume API calls, implementing retry logic, or hitting 429 errors. Trigger: "customer.io rate limit", "customer.io throttle", "customer.io 429", "customer.io backoff", "customer.io too many requests".
80
77%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./plugins/saas-packs/customerio-pack/skills/customerio-rate-limits/SKILL.mdQuality
Discovery
89%Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.
This is a well-structured skill description with strong trigger term coverage and clear 'what/when' guidance. The explicit listing of trigger phrases with the Customer.io qualifier makes it highly distinctive. The main weakness is that the specificity of concrete actions could be improved — it could mention specific techniques like exponential backoff, queue management, or rate limit header parsing.
Suggestions
Add more specific concrete actions such as 'implements exponential backoff', 'parses rate limit headers', or 'manages request queues' to improve specificity.
| Dimension | Reasoning | Score |
|---|---|---|
Specificity | Names the domain (Customer.io rate limiting and backoff) and some actions (handling high-volume API calls, implementing retry logic), but doesn't list multiple concrete actions like specific implementation details or techniques. | 2 / 3 |
Completeness | Clearly answers both 'what' (implement Customer.io rate limiting and backoff) and 'when' (handling high-volume API calls, retry logic, 429 errors) with explicit trigger terms listed separately. | 3 / 3 |
Trigger Term Quality | Excellent coverage of natural trigger terms including 'customer.io rate limit', 'customer.io 429', 'customer.io throttle', 'customer.io backoff', and 'customer.io too many requests' — these are terms users would naturally use when encountering these issues. | 3 / 3 |
Distinctiveness Conflict Risk | Highly distinctive — scoped specifically to Customer.io rate limiting, which is a clear niche unlikely to conflict with generic rate limiting skills or other API-specific skills due to the Customer.io qualifier on every trigger term. | 3 / 3 |
Total | 11 / 12 Passed |
Implementation
64%Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
This is a solid, highly actionable skill with complete, executable TypeScript implementations for Customer.io rate limiting. Its main weaknesses are the monolithic structure (all implementation code inline with no bundle files for separation) and the lack of explicit validation/verification steps for the bulk import and queue-based workflows. Minor verbosity in explanatory text and repetitive wrapper methods could be trimmed.
Suggestions
Add explicit validation checkpoints to Step 5 (bulk import), such as a post-import verification query or a retry queue for failed users, to strengthen the feedback loop for destructive/batch operations.
Extract the full class implementations (TokenBucket, withBackoff, RateLimitedCioClient) into bundle files and reference them from SKILL.md, keeping only usage examples and key patterns inline.
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | The content is mostly efficient with executable code examples, but includes some unnecessary explanation (e.g., 'These are approximate. Customer.io uses sliding window rate limiting.' and the overview paragraph restating what the skill does). The rate limit table and error handling table are useful, but some wrapper methods in Step 3 are repetitive boilerplate that Claude could generate from a pattern. | 2 / 3 |
Actionability | Fully executable TypeScript code throughout — token bucket implementation, backoff with jitter, rate-limited client wrapper, p-queue integration, and bulk import script are all copy-paste ready with proper imports, types, and realistic defaults. The error handling table maps specific scenarios to concrete strategies. | 3 / 3 |
Workflow Clarity | Steps are clearly sequenced and build on each other (limiter → backoff → client → queue → bulk import), but there are no explicit validation checkpoints. For batch/bulk operations (Step 5), there's no verification step to confirm data integrity after import, and no feedback loop for retrying failed users. The error handling table helps but doesn't constitute an explicit validation workflow. | 2 / 3 |
Progressive Disclosure | The content is well-structured with clear sections and a reference table, but at ~180 lines of code-heavy content, some components (e.g., the full TokenBucket class, the backoff utility, the queued client) could be split into referenced files. No bundle files exist to offload this detail, making the skill monolithic for its complexity level. | 2 / 3 |
Total | 9 / 12 Passed |
Validation
81%Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.
Validation — 9 / 11 Passed
Validation for skill structure
| Criteria | Description | Result |
|---|---|---|
allowed_tools_field | 'allowed-tools' contains unusual tool name(s) | Warning |
frontmatter_unknown_keys | Unknown frontmatter key(s) found; consider removing or moving to metadata | Warning |
Total | 9 / 11 Passed | |
3a2d27d
Table of Contents
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.