Agent skill

Netlify

by ericrisco in ericrisco/rsc-harness

A skill your agent uses when deploying or operating a site on Netlify — writing or fixing netlify.toml, authoring Functions or Edge Functions, redirects, rewrites and headers, env vars per deploy…

MITAuto-check: notes

Install Netlify

skills CLI
$ npx skills add ericrisco/rsc-harness --skill netlify -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ericrisco/rsc-harness netlify --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/netlify .claude/skills/netlify && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
netlify
GitHub stars
156
Token cost
~2.4k tokens
SKILL.md length
852 words
Files
6 (incl. scripts, references)
Skills in repo
229
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when deploying or operating a site on Netlify — writing or fixing netlify.toml, authoring Functions or Edge Functions, redirects, rewrites and headers, env vars per deploy…

  • Operating a site on Netlify — writing
  • SKILL.md covers What this owns, The 5-minute happy path, Where does each piece of… and netlify.toml skeleton, plus 7 more sections
  • Runs Shell scripts from its folder; calls netlify; needs RESEND_API_KEY
  • Fixing netlify.toml

What it does

Netlify is an agent skill from ericrisco/rsc-harness. Use when deploying or operating a site on Netlify — writing or fixing netlify.toml, authoring Functions or Edge Functions, redirects, rewrites and headers, env vars per deploy context, and shipping via the Netlify CLI. NOT deploying to Vercel (that is vercel).

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/functions.md`).

It works with Netlify and Vercel. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.

When your agent uses it

  • Operating a site on Netlify — writing
  • Fixing netlify.toml
  • Authoring Functions
  • Rewrites and headers

Example prompts

  • “/netlify”

Requirements

  • A Bash shell
  • A credential in RESEND_API_KEY

What it can do on your machine

Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • netlify

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use netlify, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • RESEND_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Netlify loads about 2.4k tokens when it runs, and up to ~4.2k if it reads all its reference files. Until then it costs about 68 tokens; SKILL.md has 852 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~68
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:171
    netlify env:import .env            # bulk import (do not commit .env)

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 852 words, ~2,401 tokens.

Download SKILL.mdSave it as .claude/skills/netlify/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
netlify
description
Use when deploying or operating a site on Netlify — writing or fixing netlify.toml, authoring Functions or Edge Functions, redirects, rewrites and headers, env vars per deploy context, and shipping via the Netlify CLI. NOT deploying to Vercel (that is `vercel`).
tags
netlify, deployment, serverless-functions, edge-functions, netlify-toml, redirects
recommends
vercel, cloudflare, nextjs, domains-dns, github-actions
origin
risco

Netlify — netlify.toml, Functions, Edge Functions, redirects & the CLI

The platform-mechanics layer for Netlify: config, function handlers, routing, env contexts, and the deploy CLI. Not framework code, not generic CI.

What this owns

You own the Netlify adapter/config surface — netlify.toml, netlify/functions/, netlify/edge-functions/, _redirects, _headers, and netlify <cmd>. You do not own the app's routing or data layer (that is ../nextjs/SKILL.md / a React skill), DNS records (../domains-dns/SKILL.md), or another platform's config — Vercel is ../vercel/SKILL.md, Cloudflare is ../cloudflare/SKILL.md. Their config files and function models differ; never cross-apply.

The 5-minute happy path

bash
netlify link                 # link the cwd to a site (or `netlify init` to create one)
# write/edit netlify.toml (see skeleton below)
netlify dev                  # local emulation: build, functions, redirects, env injection
netlify deploy --prod        # build + push straight to production

netlify deploy with no flag creates a draft deploy (preview URL, not live). --prod publishes. Test with netlify dev first — it is the only local runtime that emulates redirects and function routing together.

Where does each piece of config live?

Two rules decide everything below: _redirects/_headers files are processed before the netlify.toml equivalents, and a function's own config export beats dashboard guesses.

ConcernPut it inWhy
Redirects / rewrites / SPA fallback[[redirects]] in toml or _redirects fileOne source. File rules run first; pick one and stay consistent.
Response headers (CSP, caching)[[headers]] in toml or _headers fileSame precedence; keep security headers in version control, not the UI.
Build command / publish dir / functions dir[build] in tomlSingle declarative source the build picks up; survives UI drift.
A function's URL pathexport const config = { path } in the functionCo-located with the handler; deterministic, no dashboard mapping.
Edge function path + ordering[[edge_functions]] in tomlDeclaration order in toml is deterministic (inline config is not).
Secrets / API keys / per-context varsdashboard or netlify env:setNever commit secrets — build-time secrets scanning fails the build if it finds one.

netlify.toml skeleton

toml
[build]
  command  = "npm run build"
  publish  = "dist"            # the directory you deploy; relative to base
  functions = "netlify/functions"
  [build.environment]
    NODE_VERSION = "22"

[functions]
  node_bundler = "esbuild"
  # included_files = ["data/**"]   # bundle extra files a function reads at runtime

# SPA fallback — note status 200, NOT 301 (see Redirects)
[[redirects]]
  from   = "/*"
  to     = "/index.html"
  status = 200

[[headers]]
  for = "/*"
  [headers.values]
    X-Frame-Options = "DENY"
    Content-Security-Policy = "default-src 'self'"

# per-context override: deploy previews build differently
[context.deploy-preview]
  command = "npm run build:preview"
  [context.deploy-preview.environment]
    SHOW_PREVIEW_BANNER = "true"

Contexts are production, deploy-preview, branch-deploy, and branch."name". Each can override command, publish, environment, etc. The full key-by-key reference (every [build]/[functions]/[[plugins]] option, all header/redirect fields) lives in references/netlify-toml.md — link there instead of inlining it.

Functions (Node runtime)

Default directory is netlify/functions/. TypeScript files are .mts, JS is .mjs (ES modules). Use the modern Web-platform handler — Request in, Response out — and route with a config export, not a dashboard mapping.

typescript
// netlify/functions/hello.mts
import type { Config, Context } from "@netlify/functions";

export default async (req: Request, context: Context) => {
  const name = new URL(req.url).searchParams.get("name") ?? "world";
  return Response.json({ hello: name });
};

export const config: Config = { path: "/api/hello" };

Read secrets from the environment; never hardcode them:

typescript
const key = Netlify.env.get("RESEND_API_KEY") ?? process.env.RESEND_API_KEY;

Do not revive the legacy AWS-Lambda signature in new functions:

javascript
// Bad — legacy handler/event/statusCode shape
exports.handler = async (event) => ({ statusCode: 200, body: "ok" });
typescript
// Good — Web-API handler + Config.path
export default async (req: Request) => new Response("ok");
export const config: Config = { path: "/ok" };

Scheduled (config.schedule cron), background (-background suffix), and streaming responses are covered in references/functions.md.

Edge Functions (Deno runtime)

Live in netlify/edge-functions/, run on Deno at the edge. Declare them in toml so ordering is explicit:

toml
[[edge_functions]]
  function = "geo-rewrite"
  path     = "/*"
  # excludedPath = "/assets/*"

When multiple edge functions match one path, they run top-to-bottom in declaration order — declaring in netlify.toml is deterministic; relying on each function's inline config for ordering is not. Pick edge functions for latency-sensitive rewrites, geolocation, and A/B routing. Avoid them for heavy npm dependencies or Node-only APIs — use a regular Function there.

Redirects & rewrites

text
# _redirects (or the [[redirects]] equivalent)
/api/*   https://api.example.com/:splat   200   # proxy/rewrite: keep the URL, fetch remote
/old/*   /new/:splat                       301   # permanent redirect (default status)
/*       /index.html                        200   # SPA fallback

Three things people get wrong:

  • SPA fallback must be status = 200, not 301. 200 serves index.html at the original URL so the client router can read the path; a 301 changes the URL and breaks deep links.
  • Proxy/rewrite = status = 200 to a remote URL (add force = true to override an existing file at that path).
  • Processing order: Edge Functions run first, then _redirects rules, then netlify.toml redirects; within the set the first matching rule wins (top-to-bottom). Put specific rules above the /* catch-all.
Show full SKILL.md (320 more words)Show less

Env vars & deploy contexts

bash
netlify env:set RESEND_API_KEY "xxxx" --context production
netlify env:set SHOW_BANNER "true" --context deploy-preview
netlify env:list --context deploy-preview
netlify env:import .env            # bulk import (do not commit .env)

Variables are scoped to deploy contexts, so a key can differ between production and previews. Build-time secrets scanning inspects build output; if a value you marked secret leaks into the bundle, the build fails — fix the leak, don't disable the scan blindly.

Deploy & local dev

CommandUse it for
netlify devLocal: build + functions + redirects + env injection. The truth before deploy.
netlify deployDraft deploy → preview URL, not live.
netlify deploy --prodBuild + publish to production.
netlify deploy --prod --no-buildPublish an already-built dir; skips the build command.
netlify deploy --skip-functions-cacheForce re-bundle functions when a stale cache bites.

--no-build is the classic foot-gun: if you didn't actually build (or built into the wrong publish dir), you ship a stale or empty site. Only use it when the artifact is fresh.

Anti-patterns

Anti-patternWhy it breaksDo instead
SPA fallback as status = 301URL rewrites; deep-link refresh 404s or loopsstatus = 200 to /index.html
Hardcoding API keys in a functionLeaks in bundle; secrets scan fails the buildNetlify.env.get(...) / process.env, set via netlify env:set
Legacy exports.handler = (event) => ({statusCode})Old Lambda shape, mismatched runtime expectationsWeb-API export default (req) => Response + config.path
Relying on inline edge config for run orderOrdering is non-deterministic across functionsDeclare order in [[edge_functions]] in toml
netlify deploy --prod --no-build without buildingShips stale/empty publish dirBuild first, or drop --no-build
Pasting Vercel/Cloudflare config into NetlifyDifferent files & function models; nothing wires upUse netlify.toml + netlify/functions; see ../vercel/SKILL.md for Vercel
functions dir in toml ≠ actual folder on diskFunctions silently not bundled → 404Make [build].functions match netlify/functions/ exactly
/* redirect above a specific ruleCatch-all wins first; specific rule never matchesOrder specific rules before the /* fallback

Verify

Run scripts/verify.sh [target-dir] (default cwd). It confirms a netlify.toml exists, parses, that any SPA fallback is status = 200, and that every [[redirects]] has both from and to. Read-only; exits 0 on a clean or empty target.

© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (scripts, references) in skills/netlify of ericrisco/rsc-harness.

  • SKILL.md
  • evals/README.md
  • evals/cases.yaml
  • references/functions.md
  • references/netlify-toml.md
  • scripts/verify.sh

Open the folder on GitHubat commit 92fde8f

Compare with similar skills

Netlify next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Netlify compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Netlify this skillericrisco/rsc-harness156—~2.4kAutomated safety check: NotesMIT
Golivemikehasa/golive-skill1.2k—~13kAutomated safety check: NotesMIT
Nitro Server Toolkitantfu/skills5.9k—~948Automated safety check: PassMIT
Wp Static Clonejdevalk/skills104—~2.6kAutomated safety check: PassMIT
Deploy Setupgarrytan/gstack136k—~11kAutomated safety check: NotesMIT
Narrated HTML Presentationsglebis/claude-skills388—~2.3kAutomated safety check: NotesMIT

Similar skills

  • Golive

    mikehasa/golive-skill

    Take an agent-written app from repo to live production on the user's OWN accounts, with providers they choose (hosting, database, auth, payments, email, domain/DNS).

    1.2k GitHub stars~13k tokensUpdated 3 days ago
    Backend & APIsAuto-check: notes
  • Reference for Nitro v3, the server toolkit behind Nuxt: file routing, route rules, caching, storage, tasks, websockets and deployment presets.

    5.9k GitHub stars~948 tokensUpdated 7 days ago
    Backend & APIsAuto-check passed
  • Wp Static Clone

    jdevalk/skills

    Clones a live WordPress (or other CMS-driven) site into a static HTML site deployable on any static host (Cloudflare Pages, Netlify, Vercel, S3+CloudFront, plain Apache/nginx).

    104 GitHub stars~2.6k tokensUpdated 3 mo ago
    DevOps & CloudAuto-check passed
  • Deploy Setup

    garrytan/gstack

    Detects where an app deploys, its production URL and health checks, then saves the deploy configuration in CLAUDE.md for /land-and-deploy.

    136k GitHub stars~11k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • Narrated HTML Presentations

    glebis/claude-skills

    Generates a self-contained HTML presentation with article and slides modes, ElevenLabs voiceover narration and optional GPT Image 2 illustrations.

    388 GitHub stars~2.3k tokensUpdated 11 days ago
    Documents & OfficeAuto-check: notes
  • Cicd Pipeline Generator

    ailabs-393/ai-labs-claude-skills

    This skill should be used when creating or configuring CI/CD pipeline files for automated testing, building, and deployment.

    454 GitHub stars~2.7k tokensUpdated 11 mo ago
    DevOps & CloudAuto-check passed

More from ericrisco/rsc-harness

All 229 skills in this repo
  • Ab Testing

    ericrisco/rsc-harness

    A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…

    156 GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Accessibility

    ericrisco/rsc-harness

    A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…

    156 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Ads

    ericrisco/rsc-harness

    A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…

    156 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Agent Eval

    ericrisco/rsc-harness

    A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…

    156 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • AI Media

    ericrisco/rsc-harness

    A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…

    156 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Analytics

    ericrisco/rsc-harness

    A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.

    156 GitHub stars~2.8k tokensUpdated today
    Auto-check passed

Works with

Questions about Netlify

What does Netlify do?

A skill your agent uses when deploying or operating a site on Netlify — writing or fixing netlify.toml, authoring Functions or Edge Functions, redirects, rewrites and headers, env vars per deploy…. Netlify is an agent skill from ericrisco/rsc-harness.toml, authoring Functions or Edge Functions, redirects, rewrites and headers, env vars per deploy context, and shipping via the Netlify CLI.

When should I use Netlify?

Netlify fits situations like: operating a site on Netlify — writing; fixing netlify.toml; authoring Functions; rewrites and headers.

How do I install Netlify in Claude Code?

Run `npx skills add ericrisco/rsc-harness --skill netlify -a claude-code`. Or copy the skill folder (skills/netlify in ericrisco/rsc-harness) into .claude/skills/netlify in your project. Claude Code loads it when a task matches its description.

How do I install Netlify in Codex?

Run `npx skills add ericrisco/rsc-harness --skill netlify -a codex`. Or copy the skill folder (skills/netlify in ericrisco/rsc-harness) into .agents/skills/netlify in your project. Codex loads it when a task matches its description.

Can I use Netlify in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill netlify -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/netlify, .gemini/skills/netlify, .github/skills/netlify and .opencode/skills/netlify in your project.

What does Netlify need to run?

Going by SKILL.md and its folder, Netlify needs a shell for the scripts in its folder, the command-line tools its instructions call (netlify) and credentials named RESEND_API_KEY. Our summary lists: A Bash shell; A credential in RESEND_API_KEY.

Does Netlify access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Netlify safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Netlify use?

Netlify is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Netlify use?

About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.8k tokens, read only when the agent opens those files.

What are the alternatives to Netlify?

Skills that share tags, products or a category with Netlify: Golive (mikehasa/golive-skill, 1.2k stars), Nitro Server Toolkit (antfu/skills, 5.9k stars), Wp Static Clone (jdevalk/skills, 104 stars) and Deploy Setup (garrytan/gstack, 136k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Netlify?

ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.

Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.