[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-trail-of-bits-openai-netlify-deploy":3,"mdc--8vjjkq-key":37,"related-repo-trail-of-bits-openai-netlify-deploy":1627,"related-org-trail-of-bits-openai-netlify-deploy":1740},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"openai-netlify-deploy","deploy web projects to Netlify","Deploy web projects to Netlify using the Netlify CLI (`npx netlify`). Use when the user asks to deploy, host, publish, or link a site\u002Frepo on Netlify, including preview and production deploys. Originally from OpenAI's curated skills catalog.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"trail-of-bits","Trail of Bits","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ftrail-of-bits.png","trailofbits",[13,17,20,23],{"name":14,"slug":15,"type":16},"CLI","cli","tag",{"name":18,"slug":19,"type":16},"Netlify","netlify",{"name":21,"slug":22,"type":16},"Deployment","deployment",{"name":24,"slug":25,"type":16},"Web Development","web-development",460,"https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills-curated","2026-07-18T05:47:26.473964",null,29,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Curated, community-vetted Claude Code plugin marketplace","https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills-curated\u002Ftree\u002FHEAD\u002Fplugins\u002Fopenai-netlify-deploy\u002Fskills\u002Fopenai-netlify-deploy","---\nname: openai-netlify-deploy\ndescription: Deploy web projects to Netlify using the Netlify CLI (`npx netlify`). Use when the user asks\n  to deploy, host, publish, or link a site\u002Frepo on Netlify, including preview and production deploys.\n  Originally from OpenAI's curated skills catalog.\nallowed-tools:\n- Bash\n- Read\n- Grep\n- Glob\n- Write\n- Edit\n---\n\n# Netlify Deployment Skill\n\nDeploy web projects to Netlify using the Netlify CLI with intelligent detection of project configuration and deployment context.\n\n## Overview\n\nThis skill automates Netlify deployments by:\n- Verifying Netlify CLI authentication\n- Detecting project configuration and framework\n- Linking to existing sites or creating new ones\n- Deploying to production or preview environments\n\n## Prerequisites\n\n- **Netlify CLI**: Installed via npx (no global install required)\n- **Authentication**: Netlify account with active login session\n- **Project**: Valid web project in current directory\n- The deployment might take a few minutes. Use appropriate timeout values.\n\n## Authentication Pattern\n\nThe skill uses the **pre-authenticated Netlify CLI** approach:\n\n1. Check authentication status with `npx netlify status`\n2. If not authenticated, guide user through `npx netlify login`\n3. Fail gracefully if authentication cannot be established\n\nAuthentication uses either:\n- **Browser-based OAuth** (primary): `netlify login` opens browser for authentication\n- **API Key** (alternative): Set `NETLIFY_AUTH_TOKEN` environment variable\n\n## Workflow\n\n### 1. Verify Netlify CLI Authentication\n\nCheck if the user is logged into Netlify:\n\n```bash\nnpx netlify status\n```\n\n**Expected output patterns**:\n- ✅ Authenticated: Shows logged-in user email and site link status\n- ❌ Not authenticated: \"Not logged into any site\" or authentication error\n\n**If not authenticated**, guide the user:\n\n```bash\nnpx netlify login\n```\n\nThis opens a browser window for OAuth authentication. Wait for user to complete login, then verify with `netlify status` again.\n\n**Alternative: API Key authentication**\n\nIf browser authentication isn't available, users can set:\n\n```bash\nexport NETLIFY_AUTH_TOKEN=your_token_here\n```\n\nTokens can be generated at: https:\u002F\u002Fapp.netlify.com\u002Fuser\u002Fapplications#personal-access-tokens\n\n### 2. Detect Site Link Status\n\nFrom `netlify status` output, determine:\n- **Linked**: Site already connected to Netlify (shows site name\u002FURL)\n- **Not linked**: Need to link or create site\n\n### 3. Link to Existing Site or Create New\n\n**If already linked** → Skip to step 4\n\n**If not linked**, attempt to link by Git remote:\n\n```bash\n# Check if project is Git-based\ngit remote show origin\n\n# If Git-based, extract remote URL\n# Format: https:\u002F\u002Fgithub.com\u002Fusername\u002Frepo or git@github.com:username\u002Frepo.git\n\n# Try to link by Git remote\nnpx netlify link --git-remote-url \u003CREMOTE_URL>\n```\n\n**If link fails** (site doesn't exist on Netlify):\n\n```bash\n# Create new site interactively\nnpx netlify init\n```\n\nThis guides user through:\n1. Choosing team\u002Faccount\n2. Setting site name\n3. Configuring build settings\n4. Creating netlify.toml if needed\n\n### 4. Verify Dependencies\n\nBefore deploying, ensure project dependencies are installed:\n\n```bash\n# For npm projects\nnpm install\n\n# For other package managers, detect and use appropriate command\n# yarn install, pnpm install, etc.\n```\n\n### 5. Deploy to Netlify\n\nChoose deployment type based on context:\n\n**Preview\u002FDraft Deploy** (default for existing sites):\n\n```bash\nnpx netlify deploy\n```\n\nThis creates a deploy preview with a unique URL for testing.\n\n**Production Deploy** (for new sites or explicit production deployments):\n\n```bash\nnpx netlify deploy --prod\n```\n\nThis deploys to the live production URL.\n\n**Deployment process**:\n1. CLI detects build settings (from netlify.toml or prompts user)\n2. Builds the project locally\n3. Uploads built assets to Netlify\n4. Returns deployment URL\n\n### 6. Report Results\n\nAfter deployment, report to user:\n- **Deploy URL**: Unique URL for this deployment\n- **Site URL**: Production URL (if production deploy)\n- **Deploy logs**: Link to Netlify dashboard for logs\n- **Next steps**: Suggest `netlify open` to view site or dashboard\n\n## Handling netlify.toml\n\nIf a `netlify.toml` file exists, the CLI uses it automatically. If not, the CLI will prompt for:\n- **Build command**: e.g., `npm run build`, `next build`\n- **Publish directory**: e.g., `dist`, `build`, `.next`\n\nCommon framework defaults:\n- **Next.js**: build command `npm run build`, publish `.next`\n- **React (Vite)**: build command `npm run build`, publish `dist`\n- **Static HTML**: no build command, publish current directory\n\nThe skill should detect framework from `package.json` if possible and suggest appropriate settings.\n\n## Example Full Workflow\n\n```bash\n# 1. Check authentication\nnpx netlify status\n\n# If not authenticated:\nnpx netlify login\n\n# 2. Link site (if needed)\n# Try Git-based linking first\ngit remote show origin\nnpx netlify link --git-remote-url https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo\n\n# If no site exists, create new one:\nnpx netlify init\n\n# 3. Install dependencies\nnpm install\n\n# 4. Deploy (preview for testing)\nnpx netlify deploy\n\n# 5. Deploy to production (when ready)\nnpx netlify deploy --prod\n```\n\n## Error Handling\n\nCommon issues and solutions:\n\n**\"Not logged in\"**\n→ Run `npx netlify login`\n\n**\"No site linked\"**\n→ Run `npx netlify link` or `npx netlify init`\n\n**\"Build failed\"**\n→ Check build command and publish directory in netlify.toml or CLI prompts\n→ Verify dependencies are installed\n→ Review build logs for specific errors\n\n**\"Publish directory not found\"**\n→ Verify build command ran successfully\n→ Check publish directory path is correct\n\n## Troubleshooting\n\n### Escalated Network Access\n\n\nExample guidance to the user:\n\n```\nThe deploy needs escalated network access to deploy to Netlify. I can rerun the command with escalated permissions—want me to proceed?\n```\n\n## Environment Variables\n\nFor secrets and configuration:\n\n1. Never commit secrets to Git\n2. Set in Netlify dashboard: Site Settings → Environment Variables\n3. Access in builds via `process.env.VARIABLE_NAME`\n\n## Tips\n\n- Use `netlify deploy` (no `--prod`) first to test before production\n- Run `netlify open` to view site in Netlify dashboard\n- Run `netlify logs` to view function logs (if using Netlify Functions)\n- Use `netlify dev` for local development with Netlify Functions\n\n## Reference\n\n- Netlify CLI Docs: https:\u002F\u002Fdocs.netlify.com\u002Fcli\u002Fget-started\u002F\n- netlify.toml Reference: https:\u002F\u002Fdocs.netlify.com\u002Fconfigure-builds\u002Ffile-based-configuration\u002F\n\n## Bundled References (Load As Needed)\n\n- [CLI commands](references\u002Fcli-commands.md)\n- [Deployment patterns](references\u002Fdeployment-patterns.md)\n- [netlify.toml guide](references\u002Fnetlify-toml.md)\n\n## When to Use\n\n\u003C!-- TODO: review -->\n\n## When NOT to Use\n\n\u003C!-- TODO: review -->\n\n",{"data":38,"body":46},{"name":4,"description":6,"allowed-tools":39},[40,41,42,43,44,45],"Bash","Read","Grep","Glob","Write","Edit",{"type":47,"children":48},"root",[49,58,64,71,76,101,107,146,152,164,196,201,240,246,253,258,292,302,315,325,348,361,369,374,407,420,426,438,461,467,477,487,614,624,655,660,683,689,694,745,751,756,766,789,794,804,832,837,846,869,875,880,931,937,950,1006,1011,1066,1079,1085,1345,1351,1356,1371,1394,1404,1414,1420,1426,1431,1441,1447,1452,1476,1482,1542,1548,1573,1579,1609,1615,1621],{"type":50,"tag":51,"props":52,"children":54},"element","h1",{"id":53},"netlify-deployment-skill",[55],{"type":56,"value":57},"text","Netlify Deployment Skill",{"type":50,"tag":59,"props":60,"children":61},"p",{},[62],{"type":56,"value":63},"Deploy web projects to Netlify using the Netlify CLI with intelligent detection of project configuration and deployment context.",{"type":50,"tag":65,"props":66,"children":68},"h2",{"id":67},"overview",[69],{"type":56,"value":70},"Overview",{"type":50,"tag":59,"props":72,"children":73},{},[74],{"type":56,"value":75},"This skill automates Netlify deployments by:",{"type":50,"tag":77,"props":78,"children":79},"ul",{},[80,86,91,96],{"type":50,"tag":81,"props":82,"children":83},"li",{},[84],{"type":56,"value":85},"Verifying Netlify CLI authentication",{"type":50,"tag":81,"props":87,"children":88},{},[89],{"type":56,"value":90},"Detecting project configuration and framework",{"type":50,"tag":81,"props":92,"children":93},{},[94],{"type":56,"value":95},"Linking to existing sites or creating new ones",{"type":50,"tag":81,"props":97,"children":98},{},[99],{"type":56,"value":100},"Deploying to production or preview environments",{"type":50,"tag":65,"props":102,"children":104},{"id":103},"prerequisites",[105],{"type":56,"value":106},"Prerequisites",{"type":50,"tag":77,"props":108,"children":109},{},[110,121,131,141],{"type":50,"tag":81,"props":111,"children":112},{},[113,119],{"type":50,"tag":114,"props":115,"children":116},"strong",{},[117],{"type":56,"value":118},"Netlify CLI",{"type":56,"value":120},": Installed via npx (no global install required)",{"type":50,"tag":81,"props":122,"children":123},{},[124,129],{"type":50,"tag":114,"props":125,"children":126},{},[127],{"type":56,"value":128},"Authentication",{"type":56,"value":130},": Netlify account with active login session",{"type":50,"tag":81,"props":132,"children":133},{},[134,139],{"type":50,"tag":114,"props":135,"children":136},{},[137],{"type":56,"value":138},"Project",{"type":56,"value":140},": Valid web project in current directory",{"type":50,"tag":81,"props":142,"children":143},{},[144],{"type":56,"value":145},"The deployment might take a few minutes. Use appropriate timeout values.",{"type":50,"tag":65,"props":147,"children":149},{"id":148},"authentication-pattern",[150],{"type":56,"value":151},"Authentication Pattern",{"type":50,"tag":59,"props":153,"children":154},{},[155,157,162],{"type":56,"value":156},"The skill uses the ",{"type":50,"tag":114,"props":158,"children":159},{},[160],{"type":56,"value":161},"pre-authenticated Netlify CLI",{"type":56,"value":163}," approach:",{"type":50,"tag":165,"props":166,"children":167},"ol",{},[168,180,191],{"type":50,"tag":81,"props":169,"children":170},{},[171,173],{"type":56,"value":172},"Check authentication status with ",{"type":50,"tag":174,"props":175,"children":177},"code",{"className":176},[],[178],{"type":56,"value":179},"npx netlify status",{"type":50,"tag":81,"props":181,"children":182},{},[183,185],{"type":56,"value":184},"If not authenticated, guide user through ",{"type":50,"tag":174,"props":186,"children":188},{"className":187},[],[189],{"type":56,"value":190},"npx netlify login",{"type":50,"tag":81,"props":192,"children":193},{},[194],{"type":56,"value":195},"Fail gracefully if authentication cannot be established",{"type":50,"tag":59,"props":197,"children":198},{},[199],{"type":56,"value":200},"Authentication uses either:",{"type":50,"tag":77,"props":202,"children":203},{},[204,222],{"type":50,"tag":81,"props":205,"children":206},{},[207,212,214,220],{"type":50,"tag":114,"props":208,"children":209},{},[210],{"type":56,"value":211},"Browser-based OAuth",{"type":56,"value":213}," (primary): ",{"type":50,"tag":174,"props":215,"children":217},{"className":216},[],[218],{"type":56,"value":219},"netlify login",{"type":56,"value":221}," opens browser for authentication",{"type":50,"tag":81,"props":223,"children":224},{},[225,230,232,238],{"type":50,"tag":114,"props":226,"children":227},{},[228],{"type":56,"value":229},"API Key",{"type":56,"value":231}," (alternative): Set ",{"type":50,"tag":174,"props":233,"children":235},{"className":234},[],[236],{"type":56,"value":237},"NETLIFY_AUTH_TOKEN",{"type":56,"value":239}," environment variable",{"type":50,"tag":65,"props":241,"children":243},{"id":242},"workflow",[244],{"type":56,"value":245},"Workflow",{"type":50,"tag":247,"props":248,"children":250},"h3",{"id":249},"_1-verify-netlify-cli-authentication",[251],{"type":56,"value":252},"1. Verify Netlify CLI Authentication",{"type":50,"tag":59,"props":254,"children":255},{},[256],{"type":56,"value":257},"Check if the user is logged into Netlify:",{"type":50,"tag":259,"props":260,"children":265},"pre",{"className":261,"code":262,"language":263,"meta":264,"style":264},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx netlify status\n","bash","",[266],{"type":50,"tag":174,"props":267,"children":268},{"__ignoreMap":264},[269],{"type":50,"tag":270,"props":271,"children":274},"span",{"class":272,"line":273},"line",1,[275,281,287],{"type":50,"tag":270,"props":276,"children":278},{"style":277},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[279],{"type":56,"value":280},"npx",{"type":50,"tag":270,"props":282,"children":284},{"style":283},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[285],{"type":56,"value":286}," netlify",{"type":50,"tag":270,"props":288,"children":289},{"style":283},[290],{"type":56,"value":291}," status\n",{"type":50,"tag":59,"props":293,"children":294},{},[295,300],{"type":50,"tag":114,"props":296,"children":297},{},[298],{"type":56,"value":299},"Expected output patterns",{"type":56,"value":301},":",{"type":50,"tag":77,"props":303,"children":304},{},[305,310],{"type":50,"tag":81,"props":306,"children":307},{},[308],{"type":56,"value":309},"✅ Authenticated: Shows logged-in user email and site link status",{"type":50,"tag":81,"props":311,"children":312},{},[313],{"type":56,"value":314},"❌ Not authenticated: \"Not logged into any site\" or authentication error",{"type":50,"tag":59,"props":316,"children":317},{},[318,323],{"type":50,"tag":114,"props":319,"children":320},{},[321],{"type":56,"value":322},"If not authenticated",{"type":56,"value":324},", guide the user:",{"type":50,"tag":259,"props":326,"children":328},{"className":261,"code":327,"language":263,"meta":264,"style":264},"npx netlify login\n",[329],{"type":50,"tag":174,"props":330,"children":331},{"__ignoreMap":264},[332],{"type":50,"tag":270,"props":333,"children":334},{"class":272,"line":273},[335,339,343],{"type":50,"tag":270,"props":336,"children":337},{"style":277},[338],{"type":56,"value":280},{"type":50,"tag":270,"props":340,"children":341},{"style":283},[342],{"type":56,"value":286},{"type":50,"tag":270,"props":344,"children":345},{"style":283},[346],{"type":56,"value":347}," login\n",{"type":50,"tag":59,"props":349,"children":350},{},[351,353,359],{"type":56,"value":352},"This opens a browser window for OAuth authentication. Wait for user to complete login, then verify with ",{"type":50,"tag":174,"props":354,"children":356},{"className":355},[],[357],{"type":56,"value":358},"netlify status",{"type":56,"value":360}," again.",{"type":50,"tag":59,"props":362,"children":363},{},[364],{"type":50,"tag":114,"props":365,"children":366},{},[367],{"type":56,"value":368},"Alternative: API Key authentication",{"type":50,"tag":59,"props":370,"children":371},{},[372],{"type":56,"value":373},"If browser authentication isn't available, users can set:",{"type":50,"tag":259,"props":375,"children":377},{"className":261,"code":376,"language":263,"meta":264,"style":264},"export NETLIFY_AUTH_TOKEN=your_token_here\n",[378],{"type":50,"tag":174,"props":379,"children":380},{"__ignoreMap":264},[381],{"type":50,"tag":270,"props":382,"children":383},{"class":272,"line":273},[384,390,396,402],{"type":50,"tag":270,"props":385,"children":387},{"style":386},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[388],{"type":56,"value":389},"export",{"type":50,"tag":270,"props":391,"children":393},{"style":392},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[394],{"type":56,"value":395}," NETLIFY_AUTH_TOKEN",{"type":50,"tag":270,"props":397,"children":399},{"style":398},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[400],{"type":56,"value":401},"=",{"type":50,"tag":270,"props":403,"children":404},{"style":392},[405],{"type":56,"value":406},"your_token_here\n",{"type":50,"tag":59,"props":408,"children":409},{},[410,412],{"type":56,"value":411},"Tokens can be generated at: ",{"type":50,"tag":413,"props":414,"children":418},"a",{"href":415,"rel":416},"https:\u002F\u002Fapp.netlify.com\u002Fuser\u002Fapplications#personal-access-tokens",[417],"nofollow",[419],{"type":56,"value":415},{"type":50,"tag":247,"props":421,"children":423},{"id":422},"_2-detect-site-link-status",[424],{"type":56,"value":425},"2. Detect Site Link Status",{"type":50,"tag":59,"props":427,"children":428},{},[429,431,436],{"type":56,"value":430},"From ",{"type":50,"tag":174,"props":432,"children":434},{"className":433},[],[435],{"type":56,"value":358},{"type":56,"value":437}," output, determine:",{"type":50,"tag":77,"props":439,"children":440},{},[441,451],{"type":50,"tag":81,"props":442,"children":443},{},[444,449],{"type":50,"tag":114,"props":445,"children":446},{},[447],{"type":56,"value":448},"Linked",{"type":56,"value":450},": Site already connected to Netlify (shows site name\u002FURL)",{"type":50,"tag":81,"props":452,"children":453},{},[454,459],{"type":50,"tag":114,"props":455,"children":456},{},[457],{"type":56,"value":458},"Not linked",{"type":56,"value":460},": Need to link or create site",{"type":50,"tag":247,"props":462,"children":464},{"id":463},"_3-link-to-existing-site-or-create-new",[465],{"type":56,"value":466},"3. Link to Existing Site or Create New",{"type":50,"tag":59,"props":468,"children":469},{},[470,475],{"type":50,"tag":114,"props":471,"children":472},{},[473],{"type":56,"value":474},"If already linked",{"type":56,"value":476}," → Skip to step 4",{"type":50,"tag":59,"props":478,"children":479},{},[480,485],{"type":50,"tag":114,"props":481,"children":482},{},[483],{"type":56,"value":484},"If not linked",{"type":56,"value":486},", attempt to link by Git remote:",{"type":50,"tag":259,"props":488,"children":490},{"className":261,"code":489,"language":263,"meta":264,"style":264},"# Check if project is Git-based\ngit remote show origin\n\n# If Git-based, extract remote URL\n# Format: https:\u002F\u002Fgithub.com\u002Fusername\u002Frepo or git@github.com:username\u002Frepo.git\n\n# Try to link by Git remote\nnpx netlify link --git-remote-url \u003CREMOTE_URL>\n",[491],{"type":50,"tag":174,"props":492,"children":493},{"__ignoreMap":264},[494,503,527,537,546,555,563,572],{"type":50,"tag":270,"props":495,"children":496},{"class":272,"line":273},[497],{"type":50,"tag":270,"props":498,"children":500},{"style":499},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[501],{"type":56,"value":502},"# Check if project is Git-based\n",{"type":50,"tag":270,"props":504,"children":506},{"class":272,"line":505},2,[507,512,517,522],{"type":50,"tag":270,"props":508,"children":509},{"style":277},[510],{"type":56,"value":511},"git",{"type":50,"tag":270,"props":513,"children":514},{"style":283},[515],{"type":56,"value":516}," remote",{"type":50,"tag":270,"props":518,"children":519},{"style":283},[520],{"type":56,"value":521}," show",{"type":50,"tag":270,"props":523,"children":524},{"style":283},[525],{"type":56,"value":526}," origin\n",{"type":50,"tag":270,"props":528,"children":530},{"class":272,"line":529},3,[531],{"type":50,"tag":270,"props":532,"children":534},{"emptyLinePlaceholder":533},true,[535],{"type":56,"value":536},"\n",{"type":50,"tag":270,"props":538,"children":540},{"class":272,"line":539},4,[541],{"type":50,"tag":270,"props":542,"children":543},{"style":499},[544],{"type":56,"value":545},"# If Git-based, extract remote URL\n",{"type":50,"tag":270,"props":547,"children":549},{"class":272,"line":548},5,[550],{"type":50,"tag":270,"props":551,"children":552},{"style":499},[553],{"type":56,"value":554},"# Format: https:\u002F\u002Fgithub.com\u002Fusername\u002Frepo or git@github.com:username\u002Frepo.git\n",{"type":50,"tag":270,"props":556,"children":558},{"class":272,"line":557},6,[559],{"type":50,"tag":270,"props":560,"children":561},{"emptyLinePlaceholder":533},[562],{"type":56,"value":536},{"type":50,"tag":270,"props":564,"children":566},{"class":272,"line":565},7,[567],{"type":50,"tag":270,"props":568,"children":569},{"style":499},[570],{"type":56,"value":571},"# Try to link by Git remote\n",{"type":50,"tag":270,"props":573,"children":575},{"class":272,"line":574},8,[576,580,584,589,594,599,604,609],{"type":50,"tag":270,"props":577,"children":578},{"style":277},[579],{"type":56,"value":280},{"type":50,"tag":270,"props":581,"children":582},{"style":283},[583],{"type":56,"value":286},{"type":50,"tag":270,"props":585,"children":586},{"style":283},[587],{"type":56,"value":588}," link",{"type":50,"tag":270,"props":590,"children":591},{"style":283},[592],{"type":56,"value":593}," --git-remote-url",{"type":50,"tag":270,"props":595,"children":596},{"style":398},[597],{"type":56,"value":598}," \u003C",{"type":50,"tag":270,"props":600,"children":601},{"style":283},[602],{"type":56,"value":603},"REMOTE_UR",{"type":50,"tag":270,"props":605,"children":606},{"style":392},[607],{"type":56,"value":608},"L",{"type":50,"tag":270,"props":610,"children":611},{"style":398},[612],{"type":56,"value":613},">\n",{"type":50,"tag":59,"props":615,"children":616},{},[617,622],{"type":50,"tag":114,"props":618,"children":619},{},[620],{"type":56,"value":621},"If link fails",{"type":56,"value":623}," (site doesn't exist on Netlify):",{"type":50,"tag":259,"props":625,"children":627},{"className":261,"code":626,"language":263,"meta":264,"style":264},"# Create new site interactively\nnpx netlify init\n",[628],{"type":50,"tag":174,"props":629,"children":630},{"__ignoreMap":264},[631,639],{"type":50,"tag":270,"props":632,"children":633},{"class":272,"line":273},[634],{"type":50,"tag":270,"props":635,"children":636},{"style":499},[637],{"type":56,"value":638},"# Create new site interactively\n",{"type":50,"tag":270,"props":640,"children":641},{"class":272,"line":505},[642,646,650],{"type":50,"tag":270,"props":643,"children":644},{"style":277},[645],{"type":56,"value":280},{"type":50,"tag":270,"props":647,"children":648},{"style":283},[649],{"type":56,"value":286},{"type":50,"tag":270,"props":651,"children":652},{"style":283},[653],{"type":56,"value":654}," init\n",{"type":50,"tag":59,"props":656,"children":657},{},[658],{"type":56,"value":659},"This guides user through:",{"type":50,"tag":165,"props":661,"children":662},{},[663,668,673,678],{"type":50,"tag":81,"props":664,"children":665},{},[666],{"type":56,"value":667},"Choosing team\u002Faccount",{"type":50,"tag":81,"props":669,"children":670},{},[671],{"type":56,"value":672},"Setting site name",{"type":50,"tag":81,"props":674,"children":675},{},[676],{"type":56,"value":677},"Configuring build settings",{"type":50,"tag":81,"props":679,"children":680},{},[681],{"type":56,"value":682},"Creating netlify.toml if needed",{"type":50,"tag":247,"props":684,"children":686},{"id":685},"_4-verify-dependencies",[687],{"type":56,"value":688},"4. Verify Dependencies",{"type":50,"tag":59,"props":690,"children":691},{},[692],{"type":56,"value":693},"Before deploying, ensure project dependencies are installed:",{"type":50,"tag":259,"props":695,"children":697},{"className":261,"code":696,"language":263,"meta":264,"style":264},"# For npm projects\nnpm install\n\n# For other package managers, detect and use appropriate command\n# yarn install, pnpm install, etc.\n",[698],{"type":50,"tag":174,"props":699,"children":700},{"__ignoreMap":264},[701,709,722,729,737],{"type":50,"tag":270,"props":702,"children":703},{"class":272,"line":273},[704],{"type":50,"tag":270,"props":705,"children":706},{"style":499},[707],{"type":56,"value":708},"# For npm projects\n",{"type":50,"tag":270,"props":710,"children":711},{"class":272,"line":505},[712,717],{"type":50,"tag":270,"props":713,"children":714},{"style":277},[715],{"type":56,"value":716},"npm",{"type":50,"tag":270,"props":718,"children":719},{"style":283},[720],{"type":56,"value":721}," install\n",{"type":50,"tag":270,"props":723,"children":724},{"class":272,"line":529},[725],{"type":50,"tag":270,"props":726,"children":727},{"emptyLinePlaceholder":533},[728],{"type":56,"value":536},{"type":50,"tag":270,"props":730,"children":731},{"class":272,"line":539},[732],{"type":50,"tag":270,"props":733,"children":734},{"style":499},[735],{"type":56,"value":736},"# For other package managers, detect and use appropriate command\n",{"type":50,"tag":270,"props":738,"children":739},{"class":272,"line":548},[740],{"type":50,"tag":270,"props":741,"children":742},{"style":499},[743],{"type":56,"value":744},"# yarn install, pnpm install, etc.\n",{"type":50,"tag":247,"props":746,"children":748},{"id":747},"_5-deploy-to-netlify",[749],{"type":56,"value":750},"5. Deploy to Netlify",{"type":50,"tag":59,"props":752,"children":753},{},[754],{"type":56,"value":755},"Choose deployment type based on context:",{"type":50,"tag":59,"props":757,"children":758},{},[759,764],{"type":50,"tag":114,"props":760,"children":761},{},[762],{"type":56,"value":763},"Preview\u002FDraft Deploy",{"type":56,"value":765}," (default for existing sites):",{"type":50,"tag":259,"props":767,"children":769},{"className":261,"code":768,"language":263,"meta":264,"style":264},"npx netlify deploy\n",[770],{"type":50,"tag":174,"props":771,"children":772},{"__ignoreMap":264},[773],{"type":50,"tag":270,"props":774,"children":775},{"class":272,"line":273},[776,780,784],{"type":50,"tag":270,"props":777,"children":778},{"style":277},[779],{"type":56,"value":280},{"type":50,"tag":270,"props":781,"children":782},{"style":283},[783],{"type":56,"value":286},{"type":50,"tag":270,"props":785,"children":786},{"style":283},[787],{"type":56,"value":788}," deploy\n",{"type":50,"tag":59,"props":790,"children":791},{},[792],{"type":56,"value":793},"This creates a deploy preview with a unique URL for testing.",{"type":50,"tag":59,"props":795,"children":796},{},[797,802],{"type":50,"tag":114,"props":798,"children":799},{},[800],{"type":56,"value":801},"Production Deploy",{"type":56,"value":803}," (for new sites or explicit production deployments):",{"type":50,"tag":259,"props":805,"children":807},{"className":261,"code":806,"language":263,"meta":264,"style":264},"npx netlify deploy --prod\n",[808],{"type":50,"tag":174,"props":809,"children":810},{"__ignoreMap":264},[811],{"type":50,"tag":270,"props":812,"children":813},{"class":272,"line":273},[814,818,822,827],{"type":50,"tag":270,"props":815,"children":816},{"style":277},[817],{"type":56,"value":280},{"type":50,"tag":270,"props":819,"children":820},{"style":283},[821],{"type":56,"value":286},{"type":50,"tag":270,"props":823,"children":824},{"style":283},[825],{"type":56,"value":826}," deploy",{"type":50,"tag":270,"props":828,"children":829},{"style":283},[830],{"type":56,"value":831}," --prod\n",{"type":50,"tag":59,"props":833,"children":834},{},[835],{"type":56,"value":836},"This deploys to the live production URL.",{"type":50,"tag":59,"props":838,"children":839},{},[840,845],{"type":50,"tag":114,"props":841,"children":842},{},[843],{"type":56,"value":844},"Deployment process",{"type":56,"value":301},{"type":50,"tag":165,"props":847,"children":848},{},[849,854,859,864],{"type":50,"tag":81,"props":850,"children":851},{},[852],{"type":56,"value":853},"CLI detects build settings (from netlify.toml or prompts user)",{"type":50,"tag":81,"props":855,"children":856},{},[857],{"type":56,"value":858},"Builds the project locally",{"type":50,"tag":81,"props":860,"children":861},{},[862],{"type":56,"value":863},"Uploads built assets to Netlify",{"type":50,"tag":81,"props":865,"children":866},{},[867],{"type":56,"value":868},"Returns deployment URL",{"type":50,"tag":247,"props":870,"children":872},{"id":871},"_6-report-results",[873],{"type":56,"value":874},"6. Report Results",{"type":50,"tag":59,"props":876,"children":877},{},[878],{"type":56,"value":879},"After deployment, report to user:",{"type":50,"tag":77,"props":881,"children":882},{},[883,893,903,913],{"type":50,"tag":81,"props":884,"children":885},{},[886,891],{"type":50,"tag":114,"props":887,"children":888},{},[889],{"type":56,"value":890},"Deploy URL",{"type":56,"value":892},": Unique URL for this deployment",{"type":50,"tag":81,"props":894,"children":895},{},[896,901],{"type":50,"tag":114,"props":897,"children":898},{},[899],{"type":56,"value":900},"Site URL",{"type":56,"value":902},": Production URL (if production deploy)",{"type":50,"tag":81,"props":904,"children":905},{},[906,911],{"type":50,"tag":114,"props":907,"children":908},{},[909],{"type":56,"value":910},"Deploy logs",{"type":56,"value":912},": Link to Netlify dashboard for logs",{"type":50,"tag":81,"props":914,"children":915},{},[916,921,923,929],{"type":50,"tag":114,"props":917,"children":918},{},[919],{"type":56,"value":920},"Next steps",{"type":56,"value":922},": Suggest ",{"type":50,"tag":174,"props":924,"children":926},{"className":925},[],[927],{"type":56,"value":928},"netlify open",{"type":56,"value":930}," to view site or dashboard",{"type":50,"tag":65,"props":932,"children":934},{"id":933},"handling-netlifytoml",[935],{"type":56,"value":936},"Handling netlify.toml",{"type":50,"tag":59,"props":938,"children":939},{},[940,942,948],{"type":56,"value":941},"If a ",{"type":50,"tag":174,"props":943,"children":945},{"className":944},[],[946],{"type":56,"value":947},"netlify.toml",{"type":56,"value":949}," file exists, the CLI uses it automatically. If not, the CLI will prompt for:",{"type":50,"tag":77,"props":951,"children":952},{},[953,977],{"type":50,"tag":81,"props":954,"children":955},{},[956,961,963,969,971],{"type":50,"tag":114,"props":957,"children":958},{},[959],{"type":56,"value":960},"Build command",{"type":56,"value":962},": e.g., ",{"type":50,"tag":174,"props":964,"children":966},{"className":965},[],[967],{"type":56,"value":968},"npm run build",{"type":56,"value":970},", ",{"type":50,"tag":174,"props":972,"children":974},{"className":973},[],[975],{"type":56,"value":976},"next build",{"type":50,"tag":81,"props":978,"children":979},{},[980,985,986,992,993,999,1000],{"type":50,"tag":114,"props":981,"children":982},{},[983],{"type":56,"value":984},"Publish directory",{"type":56,"value":962},{"type":50,"tag":174,"props":987,"children":989},{"className":988},[],[990],{"type":56,"value":991},"dist",{"type":56,"value":970},{"type":50,"tag":174,"props":994,"children":996},{"className":995},[],[997],{"type":56,"value":998},"build",{"type":56,"value":970},{"type":50,"tag":174,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":56,"value":1005},".next",{"type":50,"tag":59,"props":1007,"children":1008},{},[1009],{"type":56,"value":1010},"Common framework defaults:",{"type":50,"tag":77,"props":1012,"children":1013},{},[1014,1036,1056],{"type":50,"tag":81,"props":1015,"children":1016},{},[1017,1022,1024,1029,1031],{"type":50,"tag":114,"props":1018,"children":1019},{},[1020],{"type":56,"value":1021},"Next.js",{"type":56,"value":1023},": build command ",{"type":50,"tag":174,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":56,"value":968},{"type":56,"value":1030},", publish ",{"type":50,"tag":174,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":56,"value":1005},{"type":50,"tag":81,"props":1037,"children":1038},{},[1039,1044,1045,1050,1051],{"type":50,"tag":114,"props":1040,"children":1041},{},[1042],{"type":56,"value":1043},"React (Vite)",{"type":56,"value":1023},{"type":50,"tag":174,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":56,"value":968},{"type":56,"value":1030},{"type":50,"tag":174,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":56,"value":991},{"type":50,"tag":81,"props":1057,"children":1058},{},[1059,1064],{"type":50,"tag":114,"props":1060,"children":1061},{},[1062],{"type":56,"value":1063},"Static HTML",{"type":56,"value":1065},": no build command, publish current directory",{"type":50,"tag":59,"props":1067,"children":1068},{},[1069,1071,1077],{"type":56,"value":1070},"The skill should detect framework from ",{"type":50,"tag":174,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":56,"value":1076},"package.json",{"type":56,"value":1078}," if possible and suggest appropriate settings.",{"type":50,"tag":65,"props":1080,"children":1082},{"id":1081},"example-full-workflow",[1083],{"type":56,"value":1084},"Example Full Workflow",{"type":50,"tag":259,"props":1086,"children":1088},{"className":261,"code":1087,"language":263,"meta":264,"style":264},"# 1. Check authentication\nnpx netlify status\n\n# If not authenticated:\nnpx netlify login\n\n# 2. Link site (if needed)\n# Try Git-based linking first\ngit remote show origin\nnpx netlify link --git-remote-url https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo\n\n# If no site exists, create new one:\nnpx netlify init\n\n# 3. Install dependencies\nnpm install\n\n# 4. Deploy (preview for testing)\nnpx netlify deploy\n\n# 5. Deploy to production (when ready)\nnpx netlify deploy --prod\n",[1089],{"type":50,"tag":174,"props":1090,"children":1091},{"__ignoreMap":264},[1092,1100,1115,1122,1130,1145,1152,1160,1168,1188,1213,1221,1230,1246,1254,1263,1275,1283,1292,1308,1316,1325],{"type":50,"tag":270,"props":1093,"children":1094},{"class":272,"line":273},[1095],{"type":50,"tag":270,"props":1096,"children":1097},{"style":499},[1098],{"type":56,"value":1099},"# 1. Check authentication\n",{"type":50,"tag":270,"props":1101,"children":1102},{"class":272,"line":505},[1103,1107,1111],{"type":50,"tag":270,"props":1104,"children":1105},{"style":277},[1106],{"type":56,"value":280},{"type":50,"tag":270,"props":1108,"children":1109},{"style":283},[1110],{"type":56,"value":286},{"type":50,"tag":270,"props":1112,"children":1113},{"style":283},[1114],{"type":56,"value":291},{"type":50,"tag":270,"props":1116,"children":1117},{"class":272,"line":529},[1118],{"type":50,"tag":270,"props":1119,"children":1120},{"emptyLinePlaceholder":533},[1121],{"type":56,"value":536},{"type":50,"tag":270,"props":1123,"children":1124},{"class":272,"line":539},[1125],{"type":50,"tag":270,"props":1126,"children":1127},{"style":499},[1128],{"type":56,"value":1129},"# If not authenticated:\n",{"type":50,"tag":270,"props":1131,"children":1132},{"class":272,"line":548},[1133,1137,1141],{"type":50,"tag":270,"props":1134,"children":1135},{"style":277},[1136],{"type":56,"value":280},{"type":50,"tag":270,"props":1138,"children":1139},{"style":283},[1140],{"type":56,"value":286},{"type":50,"tag":270,"props":1142,"children":1143},{"style":283},[1144],{"type":56,"value":347},{"type":50,"tag":270,"props":1146,"children":1147},{"class":272,"line":557},[1148],{"type":50,"tag":270,"props":1149,"children":1150},{"emptyLinePlaceholder":533},[1151],{"type":56,"value":536},{"type":50,"tag":270,"props":1153,"children":1154},{"class":272,"line":565},[1155],{"type":50,"tag":270,"props":1156,"children":1157},{"style":499},[1158],{"type":56,"value":1159},"# 2. Link site (if needed)\n",{"type":50,"tag":270,"props":1161,"children":1162},{"class":272,"line":574},[1163],{"type":50,"tag":270,"props":1164,"children":1165},{"style":499},[1166],{"type":56,"value":1167},"# Try Git-based linking first\n",{"type":50,"tag":270,"props":1169,"children":1171},{"class":272,"line":1170},9,[1172,1176,1180,1184],{"type":50,"tag":270,"props":1173,"children":1174},{"style":277},[1175],{"type":56,"value":511},{"type":50,"tag":270,"props":1177,"children":1178},{"style":283},[1179],{"type":56,"value":516},{"type":50,"tag":270,"props":1181,"children":1182},{"style":283},[1183],{"type":56,"value":521},{"type":50,"tag":270,"props":1185,"children":1186},{"style":283},[1187],{"type":56,"value":526},{"type":50,"tag":270,"props":1189,"children":1191},{"class":272,"line":1190},10,[1192,1196,1200,1204,1208],{"type":50,"tag":270,"props":1193,"children":1194},{"style":277},[1195],{"type":56,"value":280},{"type":50,"tag":270,"props":1197,"children":1198},{"style":283},[1199],{"type":56,"value":286},{"type":50,"tag":270,"props":1201,"children":1202},{"style":283},[1203],{"type":56,"value":588},{"type":50,"tag":270,"props":1205,"children":1206},{"style":283},[1207],{"type":56,"value":593},{"type":50,"tag":270,"props":1209,"children":1210},{"style":283},[1211],{"type":56,"value":1212}," https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo\n",{"type":50,"tag":270,"props":1214,"children":1216},{"class":272,"line":1215},11,[1217],{"type":50,"tag":270,"props":1218,"children":1219},{"emptyLinePlaceholder":533},[1220],{"type":56,"value":536},{"type":50,"tag":270,"props":1222,"children":1224},{"class":272,"line":1223},12,[1225],{"type":50,"tag":270,"props":1226,"children":1227},{"style":499},[1228],{"type":56,"value":1229},"# If no site exists, create new one:\n",{"type":50,"tag":270,"props":1231,"children":1233},{"class":272,"line":1232},13,[1234,1238,1242],{"type":50,"tag":270,"props":1235,"children":1236},{"style":277},[1237],{"type":56,"value":280},{"type":50,"tag":270,"props":1239,"children":1240},{"style":283},[1241],{"type":56,"value":286},{"type":50,"tag":270,"props":1243,"children":1244},{"style":283},[1245],{"type":56,"value":654},{"type":50,"tag":270,"props":1247,"children":1249},{"class":272,"line":1248},14,[1250],{"type":50,"tag":270,"props":1251,"children":1252},{"emptyLinePlaceholder":533},[1253],{"type":56,"value":536},{"type":50,"tag":270,"props":1255,"children":1257},{"class":272,"line":1256},15,[1258],{"type":50,"tag":270,"props":1259,"children":1260},{"style":499},[1261],{"type":56,"value":1262},"# 3. Install dependencies\n",{"type":50,"tag":270,"props":1264,"children":1266},{"class":272,"line":1265},16,[1267,1271],{"type":50,"tag":270,"props":1268,"children":1269},{"style":277},[1270],{"type":56,"value":716},{"type":50,"tag":270,"props":1272,"children":1273},{"style":283},[1274],{"type":56,"value":721},{"type":50,"tag":270,"props":1276,"children":1278},{"class":272,"line":1277},17,[1279],{"type":50,"tag":270,"props":1280,"children":1281},{"emptyLinePlaceholder":533},[1282],{"type":56,"value":536},{"type":50,"tag":270,"props":1284,"children":1286},{"class":272,"line":1285},18,[1287],{"type":50,"tag":270,"props":1288,"children":1289},{"style":499},[1290],{"type":56,"value":1291},"# 4. Deploy (preview for testing)\n",{"type":50,"tag":270,"props":1293,"children":1295},{"class":272,"line":1294},19,[1296,1300,1304],{"type":50,"tag":270,"props":1297,"children":1298},{"style":277},[1299],{"type":56,"value":280},{"type":50,"tag":270,"props":1301,"children":1302},{"style":283},[1303],{"type":56,"value":286},{"type":50,"tag":270,"props":1305,"children":1306},{"style":283},[1307],{"type":56,"value":788},{"type":50,"tag":270,"props":1309,"children":1311},{"class":272,"line":1310},20,[1312],{"type":50,"tag":270,"props":1313,"children":1314},{"emptyLinePlaceholder":533},[1315],{"type":56,"value":536},{"type":50,"tag":270,"props":1317,"children":1319},{"class":272,"line":1318},21,[1320],{"type":50,"tag":270,"props":1321,"children":1322},{"style":499},[1323],{"type":56,"value":1324},"# 5. Deploy to production (when ready)\n",{"type":50,"tag":270,"props":1326,"children":1328},{"class":272,"line":1327},22,[1329,1333,1337,1341],{"type":50,"tag":270,"props":1330,"children":1331},{"style":277},[1332],{"type":56,"value":280},{"type":50,"tag":270,"props":1334,"children":1335},{"style":283},[1336],{"type":56,"value":286},{"type":50,"tag":270,"props":1338,"children":1339},{"style":283},[1340],{"type":56,"value":826},{"type":50,"tag":270,"props":1342,"children":1343},{"style":283},[1344],{"type":56,"value":831},{"type":50,"tag":65,"props":1346,"children":1348},{"id":1347},"error-handling",[1349],{"type":56,"value":1350},"Error Handling",{"type":50,"tag":59,"props":1352,"children":1353},{},[1354],{"type":56,"value":1355},"Common issues and solutions:",{"type":50,"tag":59,"props":1357,"children":1358},{},[1359,1364,1366],{"type":50,"tag":114,"props":1360,"children":1361},{},[1362],{"type":56,"value":1363},"\"Not logged in\"",{"type":56,"value":1365},"\n→ Run ",{"type":50,"tag":174,"props":1367,"children":1369},{"className":1368},[],[1370],{"type":56,"value":190},{"type":50,"tag":59,"props":1372,"children":1373},{},[1374,1379,1380,1386,1388],{"type":50,"tag":114,"props":1375,"children":1376},{},[1377],{"type":56,"value":1378},"\"No site linked\"",{"type":56,"value":1365},{"type":50,"tag":174,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":56,"value":1385},"npx netlify link",{"type":56,"value":1387}," or ",{"type":50,"tag":174,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":56,"value":1393},"npx netlify init",{"type":50,"tag":59,"props":1395,"children":1396},{},[1397,1402],{"type":50,"tag":114,"props":1398,"children":1399},{},[1400],{"type":56,"value":1401},"\"Build failed\"",{"type":56,"value":1403},"\n→ Check build command and publish directory in netlify.toml or CLI prompts\n→ Verify dependencies are installed\n→ Review build logs for specific errors",{"type":50,"tag":59,"props":1405,"children":1406},{},[1407,1412],{"type":50,"tag":114,"props":1408,"children":1409},{},[1410],{"type":56,"value":1411},"\"Publish directory not found\"",{"type":56,"value":1413},"\n→ Verify build command ran successfully\n→ Check publish directory path is correct",{"type":50,"tag":65,"props":1415,"children":1417},{"id":1416},"troubleshooting",[1418],{"type":56,"value":1419},"Troubleshooting",{"type":50,"tag":247,"props":1421,"children":1423},{"id":1422},"escalated-network-access",[1424],{"type":56,"value":1425},"Escalated Network Access",{"type":50,"tag":59,"props":1427,"children":1428},{},[1429],{"type":56,"value":1430},"Example guidance to the user:",{"type":50,"tag":259,"props":1432,"children":1436},{"className":1433,"code":1435,"language":56},[1434],"language-text","The deploy needs escalated network access to deploy to Netlify. I can rerun the command with escalated permissions—want me to proceed?\n",[1437],{"type":50,"tag":174,"props":1438,"children":1439},{"__ignoreMap":264},[1440],{"type":56,"value":1435},{"type":50,"tag":65,"props":1442,"children":1444},{"id":1443},"environment-variables",[1445],{"type":56,"value":1446},"Environment Variables",{"type":50,"tag":59,"props":1448,"children":1449},{},[1450],{"type":56,"value":1451},"For secrets and configuration:",{"type":50,"tag":165,"props":1453,"children":1454},{},[1455,1460,1465],{"type":50,"tag":81,"props":1456,"children":1457},{},[1458],{"type":56,"value":1459},"Never commit secrets to Git",{"type":50,"tag":81,"props":1461,"children":1462},{},[1463],{"type":56,"value":1464},"Set in Netlify dashboard: Site Settings → Environment Variables",{"type":50,"tag":81,"props":1466,"children":1467},{},[1468,1470],{"type":56,"value":1469},"Access in builds via ",{"type":50,"tag":174,"props":1471,"children":1473},{"className":1472},[],[1474],{"type":56,"value":1475},"process.env.VARIABLE_NAME",{"type":50,"tag":65,"props":1477,"children":1479},{"id":1478},"tips",[1480],{"type":56,"value":1481},"Tips",{"type":50,"tag":77,"props":1483,"children":1484},{},[1485,1506,1518,1530],{"type":50,"tag":81,"props":1486,"children":1487},{},[1488,1490,1496,1498,1504],{"type":56,"value":1489},"Use ",{"type":50,"tag":174,"props":1491,"children":1493},{"className":1492},[],[1494],{"type":56,"value":1495},"netlify deploy",{"type":56,"value":1497}," (no ",{"type":50,"tag":174,"props":1499,"children":1501},{"className":1500},[],[1502],{"type":56,"value":1503},"--prod",{"type":56,"value":1505},") first to test before production",{"type":50,"tag":81,"props":1507,"children":1508},{},[1509,1511,1516],{"type":56,"value":1510},"Run ",{"type":50,"tag":174,"props":1512,"children":1514},{"className":1513},[],[1515],{"type":56,"value":928},{"type":56,"value":1517}," to view site in Netlify dashboard",{"type":50,"tag":81,"props":1519,"children":1520},{},[1521,1522,1528],{"type":56,"value":1510},{"type":50,"tag":174,"props":1523,"children":1525},{"className":1524},[],[1526],{"type":56,"value":1527},"netlify logs",{"type":56,"value":1529}," to view function logs (if using Netlify Functions)",{"type":50,"tag":81,"props":1531,"children":1532},{},[1533,1534,1540],{"type":56,"value":1489},{"type":50,"tag":174,"props":1535,"children":1537},{"className":1536},[],[1538],{"type":56,"value":1539},"netlify dev",{"type":56,"value":1541}," for local development with Netlify Functions",{"type":50,"tag":65,"props":1543,"children":1545},{"id":1544},"reference",[1546],{"type":56,"value":1547},"Reference",{"type":50,"tag":77,"props":1549,"children":1550},{},[1551,1562],{"type":50,"tag":81,"props":1552,"children":1553},{},[1554,1556],{"type":56,"value":1555},"Netlify CLI Docs: ",{"type":50,"tag":413,"props":1557,"children":1560},{"href":1558,"rel":1559},"https:\u002F\u002Fdocs.netlify.com\u002Fcli\u002Fget-started\u002F",[417],[1561],{"type":56,"value":1558},{"type":50,"tag":81,"props":1563,"children":1564},{},[1565,1567],{"type":56,"value":1566},"netlify.toml Reference: ",{"type":50,"tag":413,"props":1568,"children":1571},{"href":1569,"rel":1570},"https:\u002F\u002Fdocs.netlify.com\u002Fconfigure-builds\u002Ffile-based-configuration\u002F",[417],[1572],{"type":56,"value":1569},{"type":50,"tag":65,"props":1574,"children":1576},{"id":1575},"bundled-references-load-as-needed",[1577],{"type":56,"value":1578},"Bundled References (Load As Needed)",{"type":50,"tag":77,"props":1580,"children":1581},{},[1582,1591,1600],{"type":50,"tag":81,"props":1583,"children":1584},{},[1585],{"type":50,"tag":413,"props":1586,"children":1588},{"href":1587},"references\u002Fcli-commands.md",[1589],{"type":56,"value":1590},"CLI commands",{"type":50,"tag":81,"props":1592,"children":1593},{},[1594],{"type":50,"tag":413,"props":1595,"children":1597},{"href":1596},"references\u002Fdeployment-patterns.md",[1598],{"type":56,"value":1599},"Deployment patterns",{"type":50,"tag":81,"props":1601,"children":1602},{},[1603],{"type":50,"tag":413,"props":1604,"children":1606},{"href":1605},"references\u002Fnetlify-toml.md",[1607],{"type":56,"value":1608},"netlify.toml guide",{"type":50,"tag":65,"props":1610,"children":1612},{"id":1611},"when-to-use",[1613],{"type":56,"value":1614},"When to Use",{"type":50,"tag":65,"props":1616,"children":1618},{"id":1617},"when-not-to-use",[1619],{"type":56,"value":1620},"When NOT to Use",{"type":50,"tag":1622,"props":1623,"children":1624},"style",{},[1625],{"type":56,"value":1626},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1628,"total":1739},[1629,1645,1657,1676,1692,1708,1722],{"slug":1630,"name":1630,"fn":1631,"description":1632,"org":1633,"tags":1634,"stars":26,"repoUrl":27,"updatedAt":1644},"ffuf-web-fuzzing","perform web fuzzing with ffuf","Expert guidance for ffuf web fuzzing during authorized penetration testing. Covers directory discovery, subdomain enumeration, parameter fuzzing, authenticated fuzzing with raw requests, auto-calibration, and result analysis. Use when running ffuf scans, analyzing ffuf output, or building fuzzing strategies for web targets.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1635,1638,1641],{"name":1636,"slug":1637,"type":16},"Code Analysis","code-analysis",{"name":1639,"slug":1640,"type":16},"Security","security",{"name":1642,"slug":1643,"type":16},"Testing","testing","2026-07-17T06:05:08.247908",{"slug":1646,"name":1646,"fn":1647,"description":1648,"org":1649,"tags":1650,"stars":26,"repoUrl":27,"updatedAt":1656},"ghidra-headless","reverse engineer binaries with Ghidra","Reverse engineers binaries using Ghidra's headless analyzer. Use when decompiling executables, extracting functions, strings, symbols, or analyzing call graphs from compiled binaries without the Ghidra GUI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1651,1652,1655],{"name":1636,"slug":1637,"type":16},{"name":1653,"slug":1654,"type":16},"Debugging","debugging",{"name":1639,"slug":1640,"type":16},"2026-07-18T05:47:30.015093",{"slug":1658,"name":1658,"fn":1659,"description":1660,"org":1661,"tags":1662,"stars":26,"repoUrl":27,"updatedAt":1675},"grilling","stress-test plans and decisions","Interviews the user relentlessly about a plan, decision, or idea until every branch of the decision tree is resolved. Use when the user wants to stress-test their thinking, sharpen a plan or design before acting, or uses any 'grill' trigger phrase (e.g. \"grill me on this\").",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1663,1666,1669,1672],{"name":1664,"slug":1665,"type":16},"Analysis","analysis",{"name":1667,"slug":1668,"type":16},"Coaching","coaching",{"name":1670,"slug":1671,"type":16},"Ideation","ideation",{"name":1673,"slug":1674,"type":16},"Strategy","strategy","2026-07-18T05:48:12.46583",{"slug":1677,"name":1677,"fn":1678,"description":1679,"org":1680,"tags":1681,"stars":26,"repoUrl":27,"updatedAt":1691},"handoff","compact conversation for session handoff","Compacts the current conversation into a handoff document so a fresh agent can continue the work in a new session.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1682,1685,1688],{"name":1683,"slug":1684,"type":16},"Agents","agents",{"name":1686,"slug":1687,"type":16},"Context","context",{"name":1689,"slug":1690,"type":16},"Productivity","productivity","2026-07-18T05:47:03.196098",{"slug":1693,"name":1693,"fn":1694,"description":1695,"org":1696,"tags":1697,"stars":26,"repoUrl":27,"updatedAt":1707},"humanizer","edit text to sound human-written","Remove signs of AI-generated writing from text. Use when editing or reviewing\ntext to make it sound more natural and human-written. Based on Wikipedia's\ncomprehensive \"Signs of AI writing\" guide. Detects and fixes patterns including:\ninflated symbolism, promotional language, superficial -ing analyses, vague\nattributions, em dash overuse, rule of three, AI vocabulary words, negative\nparallelisms, and excessive conjunctive phrases. 30c5c8d (Update humanizer plugin to upstream v2.2.0)\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1698,1701,1704],{"name":1699,"slug":1700,"type":16},"Content Creation","content-creation",{"name":1702,"slug":1703,"type":16},"Editing","editing",{"name":1705,"slug":1706,"type":16},"Writing","writing","2026-07-18T05:47:18.1749",{"slug":1709,"name":1709,"fn":1710,"description":1711,"org":1712,"tags":1713,"stars":26,"repoUrl":27,"updatedAt":1721},"last30days","research recent community discussions and trends","Researches a topic from the last 30 days on Reddit, X, and the web. Surfaces real community discussions with engagement metrics and synthesizes findings into actionable insights. Use when the user wants to know what people are saying about a topic right now.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1714,1715,1718],{"name":1664,"slug":1665,"type":16},{"name":1716,"slug":1717,"type":16},"Research","research",{"name":1719,"slug":1720,"type":16},"Social Media","social-media","2026-07-17T06:04:39.744471",{"slug":1723,"name":1723,"fn":1724,"description":1725,"org":1726,"tags":1727,"stars":26,"repoUrl":27,"updatedAt":1738},"openai-cloudflare-deploy","deploy applications to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare. Originally from OpenAI's curated skills catalog.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1728,1731,1734,1737],{"name":1729,"slug":1730,"type":16},"Cloudflare","cloudflare",{"name":1732,"slug":1733,"type":16},"Cloudflare Pages","cloudflare-pages",{"name":1735,"slug":1736,"type":16},"Cloudflare Workers","cloudflare-workers",{"name":21,"slug":22,"type":16},"2026-07-17T06:04:46.574433",31,{"items":1741,"total":1887},[1742,1757,1767,1783,1798,1809,1821,1831,1844,1855,1865,1876],{"slug":1743,"name":1743,"fn":1744,"description":1745,"org":1746,"tags":1747,"stars":1754,"repoUrl":1755,"updatedAt":1756},"address-sanitizer","detect memory errors during fuzzing","AddressSanitizer detects memory errors during fuzzing. Use when fuzzing C\u002FC++ code to find buffer overflows and use-after-free bugs.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1748,1751,1752,1753],{"name":1749,"slug":1750,"type":16},"C#","c",{"name":1653,"slug":1654,"type":16},{"name":1639,"slug":1640,"type":16},{"name":1642,"slug":1643,"type":16},6139,"https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills","2026-07-17T06:05:14.925095",{"slug":1758,"name":1758,"fn":1759,"description":1760,"org":1761,"tags":1762,"stars":1754,"repoUrl":1755,"updatedAt":1766},"aflpp","perform multi-core fuzzing of C\u002FC++ projects","AFL++ is a fork of AFL with better fuzzing performance and advanced features. Use for multi-core fuzzing of C\u002FC++ projects.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1763,1764,1765],{"name":1749,"slug":1750,"type":16},{"name":1639,"slug":1640,"type":16},{"name":1642,"slug":1643,"type":16},"2026-07-17T06:05:12.433192",{"slug":1768,"name":1768,"fn":1769,"description":1770,"org":1771,"tags":1772,"stars":1754,"repoUrl":1755,"updatedAt":1782},"agentic-actions-auditor","audit GitHub Actions for security vulnerabilities","Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI Inference. Detects attack vectors where attacker-controlled input reaches AI agents running in CI\u002FCD pipelines, including env var intermediary patterns, direct expression injection, dangerous sandbox configurations, and wildcard user allowlists. Use when reviewing workflow files that invoke AI coding agents, auditing CI\u002FCD pipeline security for prompt injection risks, or evaluating agentic action configurations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1773,1774,1777,1778,1781],{"name":1683,"slug":1684,"type":16},{"name":1775,"slug":1776,"type":16},"CI\u002FCD","ci-cd",{"name":1636,"slug":1637,"type":16},{"name":1779,"slug":1780,"type":16},"GitHub Actions","github-actions",{"name":1639,"slug":1640,"type":16},"2026-07-18T05:47:48.564744",{"slug":1784,"name":1784,"fn":1785,"description":1786,"org":1787,"tags":1788,"stars":1754,"repoUrl":1755,"updatedAt":1797},"algorand-vulnerability-scanner","scan Algorand smart contracts for vulnerabilities","Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access control issues. Use when auditing Algorand projects (TEAL\u002FPyTeal).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1789,1792,1793,1794],{"name":1790,"slug":1791,"type":16},"Audit","audit",{"name":1636,"slug":1637,"type":16},{"name":1639,"slug":1640,"type":16},{"name":1795,"slug":1796,"type":16},"Smart Contracts","smart-contracts","2026-07-18T05:47:43.989063",{"slug":1799,"name":1799,"fn":1800,"description":1801,"org":1802,"tags":1803,"stars":1754,"repoUrl":1755,"updatedAt":1808},"ask-questions-if-underspecified","clarify requirements before implementation","Clarify requirements before implementing. Use when serious doubts arise.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1804,1807],{"name":1805,"slug":1806,"type":16},"Engineering","engineering",{"name":1689,"slug":1690,"type":16},"2026-07-17T06:05:33.543262",{"slug":1810,"name":1810,"fn":1811,"description":1812,"org":1813,"tags":1814,"stars":1754,"repoUrl":1755,"updatedAt":1820},"atheris","fuzz Python code with Atheris","Atheris is a coverage-guided Python fuzzer based on libFuzzer. Use for fuzzing pure Python code and Python C extensions.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1815,1818,1819],{"name":1816,"slug":1817,"type":16},"Python","python",{"name":1639,"slug":1640,"type":16},{"name":1642,"slug":1643,"type":16},"2026-07-17T06:05:14.575191",{"slug":1822,"name":1822,"fn":1823,"description":1824,"org":1825,"tags":1826,"stars":1754,"repoUrl":1755,"updatedAt":1830},"audit-augmentation","augment code graphs with audit findings","Augments Trailmark code graphs with external audit findings from SARIF static analysis results, weAudit annotation files, and version-gated Trailmark 0.4.x binary-analysis graph exports. Maps findings to graph nodes by file and line overlap, creates severity-based subgraphs, and enables cross-referencing findings with pre-analysis data (blast radius, taint, etc.). Use when projecting SARIF results onto a code graph, overlaying weAudit annotations, importing binary graph findings, cross-referencing Semgrep, CodeQL, or binary-analysis findings with call graph data, or visualizing audit findings in the context of code structure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1827,1828,1829],{"name":1790,"slug":1791,"type":16},{"name":1636,"slug":1637,"type":16},{"name":1639,"slug":1640,"type":16},"2026-08-01T05:44:54.920542",{"slug":1832,"name":1832,"fn":1833,"description":1834,"org":1835,"tags":1836,"stars":1754,"repoUrl":1755,"updatedAt":1843},"audit-context-building","build architectural context for code analysis","Enables ultra-granular, line-by-line code analysis to build deep architectural context before vulnerability or bug finding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1837,1840,1841,1842],{"name":1838,"slug":1839,"type":16},"Architecture","architecture",{"name":1790,"slug":1791,"type":16},{"name":1636,"slug":1637,"type":16},{"name":1805,"slug":1806,"type":16},"2026-07-18T05:47:40.122449",{"slug":1845,"name":1845,"fn":1846,"description":1847,"org":1848,"tags":1849,"stars":1754,"repoUrl":1755,"updatedAt":1854},"audit-prep-assistant","prepare codebases for security audits","Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1850,1851,1852,1853],{"name":1790,"slug":1791,"type":16},{"name":1636,"slug":1637,"type":16},{"name":1805,"slug":1806,"type":16},{"name":1639,"slug":1640,"type":16},"2026-07-18T05:47:39.210985",{"slug":1856,"name":1856,"fn":1857,"description":1858,"org":1859,"tags":1860,"stars":1754,"repoUrl":1755,"updatedAt":1864},"burpsuite-project-parser","parse Burp Suite project files","Searches and explores Burp Suite project files (.burp) from the command line. Use when searching response headers or bodies with regex patterns, extracting security audit findings, dumping proxy history or site map data, or analyzing HTTP traffic captured in a Burp project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1861,1862,1863],{"name":1790,"slug":1791,"type":16},{"name":14,"slug":15,"type":16},{"name":1639,"slug":1640,"type":16},"2026-07-17T06:05:33.198077",{"slug":1866,"name":1866,"fn":1867,"description":1868,"org":1869,"tags":1870,"stars":1754,"repoUrl":1755,"updatedAt":1875},"c-review","audit C and C++ code","Performs comprehensive C\u002FC++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities. Use when auditing native C\u002FC++ applications, reviewing daemons or services for memory safety, or hunting integer overflow \u002F use-after-free \u002F race conditions in userspace code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1871,1872,1873,1874],{"name":1790,"slug":1791,"type":16},{"name":1749,"slug":1750,"type":16},{"name":1636,"slug":1637,"type":16},{"name":1639,"slug":1640,"type":16},"2026-07-17T06:05:11.333374",{"slug":1877,"name":1877,"fn":1878,"description":1879,"org":1880,"tags":1881,"stars":1754,"repoUrl":1755,"updatedAt":1886},"cairo-vulnerability-scanner","scan Cairo and StarkNet contracts for vulnerabilities","Scans Cairo\u002FStarkNet smart contracts for 6 critical vulnerabilities including felt252 arithmetic overflow, L1-L2 messaging issues, address conversion problems, and signature replay. Use when auditing StarkNet projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1882,1883,1884,1885],{"name":1790,"slug":1791,"type":16},{"name":1636,"slug":1637,"type":16},{"name":1639,"slug":1640,"type":16},{"name":1795,"slug":1796,"type":16},"2026-07-18T05:47:42.84568",111]