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).
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…
$ npx skills add ericrisco/rsc-harness --skill netlify -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness netlify --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "netlify" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/netlify into .claude/skills/netlify/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "netlify", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/netlifyType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill netlify -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness netlify --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/netlify .agents/skills/netlify && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "netlify" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/netlify into .agents/skills/netlify/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "netlify", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill netlify -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness netlify --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/netlify .cursor/skills/netlify && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "netlify" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/netlify into .cursor/skills/netlify/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "netlify", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/netlify--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill netlify -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness netlify --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/netlify .gemini/skills/netlify && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "netlify" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/netlify into .gemini/skills/netlify/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "netlify", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness netlifyInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill netlify -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/netlify .github/skills/netlify && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "netlify" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/netlify into .github/skills/netlify/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "netlify", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill netlify -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness netlify --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/netlify .opencode/skills/netlify && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "netlify" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/netlify into .opencode/skills/netlify/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "netlify", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
netlifyA 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. 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.
Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.
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.
Ships 1 file in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
netlifyFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names these keys or tokens, usually read from environment variables:
RESEND_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
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.
The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 852 words, ~2,401 tokens.
.claude/skills/netlify/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.The platform-mechanics layer for Netlify: config, function handlers, routing, env contexts, and the deploy CLI. Not framework code, not generic CI.
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.
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 productionnetlify 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.
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.
| Concern | Put it in | Why |
|---|---|---|
| Redirects / rewrites / SPA fallback | [[redirects]] in toml or _redirects file | One source. File rules run first; pick one and stay consistent. |
| Response headers (CSP, caching) | [[headers]] in toml or _headers file | Same precedence; keep security headers in version control, not the UI. |
| Build command / publish dir / functions dir | [build] in toml | Single declarative source the build picks up; survives UI drift. |
| A function's URL path | export const config = { path } in the function | Co-located with the handler; deterministic, no dashboard mapping. |
| Edge function path + ordering | [[edge_functions]] in toml | Declaration order in toml is deterministic (inline config is not). |
| Secrets / API keys / per-context vars | dashboard or netlify env:set | Never commit secrets — build-time secrets scanning fails the build if it finds one. |
[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.
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.
// 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:
const key = Netlify.env.get("RESEND_API_KEY") ?? process.env.RESEND_API_KEY;Do not revive the legacy AWS-Lambda signature in new functions:
// Bad — legacy handler/event/statusCode shape
exports.handler = async (event) => ({ statusCode: 200, body: "ok" });// 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.
Live in netlify/edge-functions/, run on Deno at the edge. Declare them in toml so ordering
is explicit:
[[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 (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 fallbackThree things people get wrong:
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.status = 200 to a remote URL (add force = true to override an
existing file at that path)._redirects rules, then netlify.toml
redirects; within the set the first matching rule wins (top-to-bottom). Put specific
rules above the /* catch-all.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.
| Command | Use it for |
|---|---|
netlify dev | Local: build + functions + redirects + env injection. The truth before deploy. |
netlify deploy | Draft deploy → preview URL, not live. |
netlify deploy --prod | Build + publish to production. |
netlify deploy --prod --no-build | Publish an already-built dir; skips the build command. |
netlify deploy --skip-functions-cache | Force 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-pattern | Why it breaks | Do instead |
|---|---|---|
SPA fallback as status = 301 | URL rewrites; deep-link refresh 404s or loops | status = 200 to /index.html |
| Hardcoding API keys in a function | Leaks in bundle; secrets scan fails the build | Netlify.env.get(...) / process.env, set via netlify env:set |
Legacy exports.handler = (event) => ({statusCode}) | Old Lambda shape, mismatched runtime expectations | Web-API export default (req) => Response + config.path |
Relying on inline edge config for run order | Ordering is non-deterministic across functions | Declare order in [[edge_functions]] in toml |
netlify deploy --prod --no-build without building | Ships stale/empty publish dir | Build first, or drop --no-build |
| Pasting Vercel/Cloudflare config into Netlify | Different files & function models; nothing wires up | Use netlify.toml + netlify/functions; see ../vercel/SKILL.md for Vercel |
functions dir in toml ≠ actual folder on disk | Functions silently not bundled → 404 | Make [build].functions match netlify/functions/ exactly |
/* redirect above a specific rule | Catch-all wins first; specific rule never matches | Order specific rules before the /* fallback |
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
SKILL.md and 5 other files (scripts, references) in skills/netlify of ericrisco/rsc-harness.
Open the folder on GitHubat commit 92fde8f
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Netlify this skillericrisco/rsc-harness | 156 | — | ~2.4k | Automated safety check: Notes | MIT | |
| Golivemikehasa/golive-skill | 1.2k | — | ~13k | Automated safety check: Notes | MIT | |
| Nitro Server Toolkitantfu/skills | 5.9k | — | ~948 | Automated safety check: Pass | MIT | |
| Wp Static Clonejdevalk/skills | 104 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Deploy Setupgarrytan/gstack | 136k | — | ~11k | Automated safety check: Notes | MIT | |
| Narrated HTML Presentationsglebis/claude-skills | 388 | — | ~2.3k | Automated safety check: Notes | MIT |
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).
antfu/skills
Reference for Nitro v3, the server toolkit behind Nuxt: file routing, route rules, caching, storage, tasks, websockets and deployment presets.
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).
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.
glebis/claude-skills
Generates a self-contained HTML presentation with article and slides modes, ElevenLabs voiceover narration and optional GPT Image 2 illustrations.
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.
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…
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…
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…
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…
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…
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.
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.
Netlify fits situations like: operating a site on Netlify — writing; fixing netlify.toml; authoring Functions; rewrites and headers.
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.
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.
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.
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.
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.
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.
Netlify is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
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.
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.
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.