CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

netlify-caching

Cache dynamic and static responses on Netlify's CDN from Functions, Edge Functions, and proxies. Use when you add caching or cache-control headers to a function response, tune cache TTL or stale-while-revalidate, set up the durable cache, vary a cache key by query/header/cookie/country/language, purge or invalidate the cache by site or cache tag, use the programmatic Cache API (caches.open/match/put) or @netlify/cache helpers (fetchWithCache/cacheHeaders/getCacheStatus), speed up an expensive API call, add ISR or on-demand revalidation, or debug why a response is or isn't cached via the Cache-Status header.

Quality

89%

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

The canonical home for this skill is netlify-caching in netlify/context-and-tools

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 high-quality, dense reference that is strong on executable guidance: complete TypeScript and curl examples for every operation, Netlify-specific footguns and limits stated up front, and an explicit Cache-Status verification path. Its main structural weakness is that everything — including the purge API and @netlify/cache helper references — lives in one ~310-line file with no progressive disclosure, and the Directives section spends tokens re-explaining standard HTTP semantics.

Suggestions

Move the deep API-detail material (direct purge API curl payload, identifier mapping, rate limits; @netlify/cache helper signatures) into a references/ file and keep SKILL.md as an overview with well-signaled one-level-deep pointers.

Trim the Directives section to only Netlify-specific behavior (s-maxage overriding max-age in Netlify's shared cache, durable) and drop re-explanations of standard directives like max-age and stale-while-revalidate that Claude already knows.

Add a short numbered end-to-end workflow (set Netlify-CDN-Cache-Control → deploy → verify Cache-Status on a deployed URL → repeat requests to warm) to link the header, deployment, and verification guidance into one sequence.

DimensionReasoningScore

Conciseness

The body is dense and fact-forward — nearly every line is a Netlify-specific behavior Claude cannot know ("Static assets are fresh for up to a year. A shorter max-age is ignored", "basic-auth on ANY page disables caching for the ENTIRE site", "100 lookups, 20 insertions/deletions" per invocation), with no padded prose. Not 5 because the Directives section re-teaches standard HTTP semantics Claude already knows ("max-age=N sets seconds in any cache", "stale-while-revalidate=N serves stale for N seconds after expiry while revalidating in the background") — only the Netlify-shared-cache mapping of those lines adds value.

4 / 5

Actionability

Every major operation ships copy-paste-ready, complete code: a working Functions response with 'Netlify-CDN-Cache-Control', purgeCache examples for modern, Lambda-compatible (token-passing), and direct curl API paths, a full Cache API miss/hit/put handler, and executable cacheHeaders/fetchWithCache/needsRevalidation snippets including the waitUntil background-revalidation pattern. Not 4: coverage spans the common cases end-to-end with concrete syntax, limits, and error behavior stated.

5 / 5

Workflow Clarity

Decision guidance is explicit ("Header choice (most specific wins...)", "Reach for this", a Footguns "read first" section) and verification exists via the Cache-Status debugging section ("Check it on a deployed URL", expected miss values, warm-up guidance, negative-ttl meaning). Not 5 because there is no end-to-end sequenced workflow (e.g., add header → deploy → verify via Cache-Status) tying the pieces together; not 3 because the purge (destructive) guidance does include safeguards — the empty cache_tags purges-nothing warning, the 2-per-5s rate limit, and token-from-env-var rule.

4 / 5

Progressive Disclosure

The single SKILL.md (~310 lines, no references/, scripts/, or assets/ exist) is well-sectioned with clear headers, but all content is inline in one file — the purge API reference (curl payloads, identifier mapping, rate limits) and the @netlify/cache helper reference (cacheHeaders/fetchWithCache/getCacheStatus/needsRevalidation signatures) are exactly the kind of bulk API detail the anchor-3 example says could live in a separate file. Not 2 because the file is clearly navigable with strong section headers and nothing is buried; not 4 because no content is split out at all and the skill far exceeds the under-50-lines exception for header-only organization.

3 / 5

Total

16

/

20

Passed

Description

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

An excellent description: it states what the skill does in one crisp sentence and enumerates a comprehensive, naturally-phrased set of trigger conditions covering headers, TTL tuning, cache-key variation, purging, the Cache API, helper modules, and debugging. The only flaw is second-person phrasing ("Use when you add..."), which the rubric penalizes on specificity; rewording to "Use when the user adds caching..." or "Use when adding caching..." would make it perfect.

Suggestions

Rewrite the trigger clause in third person (e.g., "Use when adding caching or cache-control headers to a function response..." or "Use when the user asks to...") to remove the second-person voice penalized by the rubric.

DimensionReasoningScore

Specificity

The description lists many concrete, specific actions — "tune cache TTL or stale-while-revalidate", "vary a cache key by query/header/cookie/country/language", "purge or invalidate the cache by site or cache tag", "use the programmatic Cache API (caches.open/match/put) or @netlify/cache helpers (fetchWithCache/cacheHeaders/getCacheStatus)" — comprehensive coverage that would anchor at 5, but it uses second-person voice ("Use when you add caching or cache-control headers to a function response"), which the rubric penalizes by reducing the specificity score by 1.

4 / 5

Completeness

It explicitly answers both questions: what ("Cache dynamic and static responses on Netlify's CDN from Functions, Edge Functions, and proxies") and when ("Use when you add caching or cache-control headers to a function response, tune cache TTL ... or debug why a response is or isn't cached via the Cache-Status header"), with a long list of concrete trigger phrases. Matches the anchor-5 example structure exactly.

5 / 5

Trigger Term Quality

Comprehensive natural phrasing a user would actually say: "add caching", "cache-control headers", "tune cache TTL", "purge or invalidate the cache", "speed up an expensive API call", "debug why a response is or isn't cached", plus API-level synonyms (caches.open/match/put, fetchWithCache/cacheHeaders/getCacheStatus, ISR/on-demand revalidation, Cache-Status header). Not 4 because no common variation of the request is missing.

5 / 5

Distinctiveness Conflict Risk

The niche is unambiguous — every capability is anchored to Netlify's CDN, Functions, Edge Functions, proxies, and Netlify-specific APIs (@netlify/cache, Netlify-Vary-style key variation, Cache-Status debugging). Not 4: even phrases that could generically apply ("tune cache TTL") sit inside an explicitly Netlify-scoped description, leaving minimal conflict risk with general caching skills.

5 / 5

Total

19

/

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

netlify/context-and-tools

Path

agent-plugin/skills/netlify-caching/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.