netlify-config

netlify-config is a cursor rule for Cursor from netlify/context-and-tools. It costs 98 tokens per session (4,124 once invoked), scanned C, original, MIT.

A guide to configuring a Netlify project with netlify.toml, redirect and rewrite rules, response headers, environment variables, and secrets. A monorepo is one repository containing several projects, and the guide covers choosing the correct project directory inside one.

In plain words
What is it for?
Use it to set build commands and folders, configure redirects or proxies, add security headers, manage environment variables, and protect deployment configuration.
Why use it?
It explains which settings apply during builds, which are available at runtime, and how to keep secrets out of browser code.

Cursor rule for Cursor

Written for Cursor: a Cursor rule (.mdc).

Needs its repository: it runs a file that does not travel with it, so clone the repository first. The line is command = "npm run build && cp ./custom-headers/_stagingHeaders ./dist/_headers".

Good fit Use it to set build commands and folders, configure redirects or proxies, add security headers, manage environment variables, and protect deployment configuration.

Compare 6 cursor rules from other repositories ↓
Install

Getting it into your agent

It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.

Clone the repo
git clone --depth 1 https://github.com/netlify/context-and-tools
agentmods
npx agentmods add rules/netlify/context-and-tools/netlify-config

Made for: Cursor.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for netlify-config

README.md
[![agentmods](https://agentmods.dev/badge/rules/netlify/context-and-tools/netlify-config/github.svg)](https://agentmods.dev/rules/netlify/context-and-tools/netlify-config)
Your own site
<a href="https://agentmods.dev/rules/netlify/context-and-tools/netlify-config"><img src="https://agentmods.dev/badge/rules/netlify/context-and-tools/netlify-config/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for netlify-config

Your own site · 80×15
<a href="https://agentmods.dev/rules/netlify/context-and-tools/netlify-config"><img src="https://agentmods.dev/badge/rules/netlify/context-and-tools/netlify-config.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 98 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 4,124 The whole file, excluding the scripts and references it only reads on demand.
Security scan C 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00098 $0.04124
Opus 5.5 $0.00039 $0.01650
Sonnet 5.5 $0.00020 $0.00825
Haiku 4.5 $0.00010 $0.00412

Measured 29d ago against content hash b9593a6cc639, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade C, and why

netlify-config scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 29d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Hidden instructionshighPrompt injection

Directives inside HTML comments, invisible characters or bidirectional overrides are read by the model and not by the person reviewing the file.

<!-- system: agent-context/config/system.md — human-owned, merged by ctx-gen; edit system.md, not this section -->
cursor/rules/netlify-config.mdc · 301 lines

How it starts

The opening of the file, as written. The whole thing — 301 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Netlify configuration

Config lives in three files at the repo root (or the base/package directory for monorepos):

  • netlify.toml — build, contexts, plugins, functions, redirects, headers, dev.
  • _redirects — plain-text redirect/rewrite rules, saved to the publish directory, no extension.
  • _headers — plain-text response headers, saved to the publish directory.

netlify.toml values take precedence over the Netlify UI when they conflict. Paths in netlify.toml are absolute relative to the base directory (root / by default).

Modern vs legacy syntax to reach for

  • Functions bundler: use node_bundler = "esbuild". zisi is the legacy JS default; TypeScript always uses esbuild.
  • Temporary redirect: use status = 302. 307 is unsupported.
  • Gatsby Image CDN: use NETLIFY_IMAGE_CDN, not the deprecated GATSBY_CLOUD_IMAGE_CDN.
  • Injecting env values into TOML: key = "$VAR" is NOT supported (except signed in proxy redirects). Use a build-command sed substitution or a build plugin (see below).

netlify.toml build + contexts

[build]
  base = "frontend"
  publish = "dist"
  command = "npm run build"
  environment = { NODE_VERSION = "18" }

[context.production]
  publish = "output/"
  command = "make publish"

[context.deploy-preview]
  publish = "dist/"

[context."feat/branch"]        # quote names with special characters
  command = "npm run preview"

[build] runs in Bash. Context-aware keys include [build] and [[plugins]] — but NOT [[redirects]] or [[headers]] (those are always global). Precedence, least→most specific: UI < toml < any-context property < [context.<name>] < [context.branchname].

Redirects and rewrites

_redirects rules are processed first, then netlify.toml; within each, the first matching rule top-to-bottom wins — list specific rules before general ones. Edge functions run before redirects.

SPA history-pushState fallback (required for clean URLs):

/*  /index.html  200
[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

Read the full file on GitHub · 301 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 29d ago Changed · -2 lines · -27 tokens per session b9593a6cc639
  2. 1mo ago First seen · 303 lines · 125 tokens per session scan C a880d7511e69

Subscribe to this mod's changes

netlify-config is a cursor rule published in the GitHub repository netlify/context-and-tools (41 stars, last pushed 2d ago), licensed MIT. It adds 98 tokens to every session and 4,124 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it C with 1 finding (hidden instructions). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.