Content
76%Weight 40%Scale 1-5Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
A strong, dense reference skill with fully executable code and honest footgun documentation (store scope, region per-call, no TTL). Its main gaps are the unvalidated destructive deleteAll operation, which caps workflow clarity, and a duplicated house-rules tail that inflates token cost.
Suggestions
Add a validation checkpoint before destructive/batch operations: e.g., list keys (or verify store scope via listStores) and confirm intent before calling deleteAll(), mirroring the null-check discipline used elsewhere.
De-duplicate the trailing 'Netlify house rules' section: its six rules restate the body's 'Not a database', access-control, preview-sharing, counter, build-plugin, and CLI guidance — keep one copy and drop the other.
Move the long-tail API detail (region tables, constraints, module migration) into a references/ file linked from a short 'Reference' section to slim the main SKILL.md body.
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | The body is dense with non-obvious facts (region footguns, consistency, constraints) and avoids explaining known concepts, but the trailing "Netlify house rules" section restates body guidance nearly verbatim ("Blobs is not a database", access-control and preview-sharing rules, build-plugin read/write halves) — duplication beyond the "minor instances" of anchor 5. Not 3: the duplication is confined to one merged block and everything else earns its tokens. | 4 / 5 |
Actionability | Every section ships executable, copy-paste-ready code with imports: a full upload Function ("const form = await req.formData()"), a reading Function with 404 handling, onlyIfNew/onlyIfMatch conditionals, pagination, the metadata-based expiration pattern, region-scoped getStore calls, and CLI/migration commands. Common cases are covered concretely, matching anchor 5. | 5 / 5 |
Workflow Clarity | Sequences exist with some checkpoints (null-check before destructuring, expiration check before delete), but the destructive batch operation is shown bare: "const { deletedBlobs } = await uploads.deleteAll(); // deletes every object = deletes the store" with no list-first or confirm-scope validation step. The rubric's cap for destructive/batch operations without validation applies; not 4 because the cap takes precedence over partial checkpoint coverage. | 3 / 5 |
Progressive Disclosure | No bundle files exist, and the body is well-structured with clear section headers and a terminal "Reference" section pointing one level deep to external sources ([CLI command reference], [Netlify Blobs docs]). Not 5: ~240 lines of inline API reference (regions, constraints, migration) could partly live in a separate reference file; not 3 because navigation is easy and nothing is buried. | 4 / 5 |
Total | 16 / 20 Passed |