[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-netlify-netlify-agent-runner":3,"mdc--drju7j-key":33,"related-repo-netlify-netlify-agent-runner":1944,"related-org-netlify-netlify-agent-runner":2046},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":31,"mdContent":32},"netlify-agent-runner","run AI agent tasks on Netlify","Run AI agent tasks remotely on Netlify using Claude, Codex, or Gemini. Use when the user wants to run an AI agent on their site, get a second opinion from another model, or delegate development tasks to run remotely against their repo.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"netlify","Netlify","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnetlify.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"LLM","llm","tag",{"name":17,"slug":18,"type":15},"Automation","automation",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Agents","agents",24,"https:\u002F\u002Fgithub.com\u002Fnetlify\u002Fcontext-and-tools","2026-07-17T05:30:19.462913",null,5,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fnetlify\u002Fcontext-and-tools\u002Ftree\u002FHEAD\u002Fskills\u002Fnetlify-agent-runner","---\nname: netlify-agent-runner\ndescription: Run AI agent tasks remotely on Netlify using Claude, Codex, or Gemini. Use when the user wants to run an AI agent on their site, get a second opinion from another model, or delegate development tasks to run remotely against their repo.\n---\n\n# Netlify Agent Runner\n\nRun AI coding agents (Claude, Codex, Gemini) remotely on Netlify infrastructure to automate development tasks on your site.\n\n## Prerequisites\n\n- The site must be **linked to a Netlify project** (via `netlify link` or `netlify init`).\n- **Or skip linking entirely:** pass `--project \u003Cname>` (a project ID or name) directly to `netlify agents:create` to target any Netlify site without linking first.\n- The Netlify CLI must be installed and authenticated\n- Agent runs **consume plan credits**. If the account has no available credits — or the agent\u002FAI usage limit has been reached — `netlify agents:create` is **blocked** and the run won't start. That's an account\u002Fplan-state issue to surface to the user, not something to work around.\n\n## Use only documented CLI surfaces\n\nInteract with agent tasks only through the documented `netlify agents:*` commands (plus `netlify --help` and the public CLI reference). Do **not** go around the CLI:\n\n- **Do not curl `https:\u002F\u002Fapi.netlify.com\u002F...`** to fetch, create, or stop a task — the endpoint shapes are not part of the public contract.\n- **Do not run `netlify api \u003Cmethod>`** as a recovery hatch when a documented command fails.\n- **Do not read auth tokens** out of `~\u002FLibrary\u002FPreferences\u002Fnetlify\u002Fconfig.json` (or anywhere on disk) to authenticate side-channel calls.\n\nIf a documented command fails, report the exact error and context to the user and stop — don't invent an undocumented way to reach the task.\n\n## How Agent Tasks Run\n\nRead this before creating a task — agent tasks behave differently from running an agent locally, and the differences are easy to miss.\n\n- **Remote, not local.** Tasks run on Netlify infrastructure, not on your machine. They operate on the site's **connected repository**, not your local working tree. The remote agent only sees what has been pushed to the remote — it cannot see uncommitted or unpushed changes.\n- **Branch-based.** By default a task runs against the production branch (`main` or `master`). To choose a different *base* branch for the agent to start from, use `-b \u003Cbranch>` and make sure that branch has been **pushed to the remote first**, or the agent will be working from code that doesn't exist remotely. `-b` sets the base (starting) branch — not where the results are written (see the next bullet).\n- **Output lands on a new branch — not in place.** The agent does **not** commit its changes onto the base branch you selected. It pushes its work to a **new branch** with its own **Deploy Preview**, so your existing branch (or `main`) is never overwritten. Review the task's results on that new branch \u002F Deploy Preview — don't expect the base branch to change directly.\n- **Asynchronous.** `netlify agents:create` returns as soon as the task is queued — it does **not** block until the work is finished. When the command returns, the task is still running remotely.\n- **No webhooks or callbacks.** Nothing notifies you when a task changes state or completes. To find out what's happening, you have to **poll** with `netlify agents:show \u003Ctask-id>` or `netlify agents:list`.\n- **Statuses are terminal or not.** A task moves through `new` → `running` → one of `done`, `error`, or `cancelled`. Keep polling until the status is one of those last three before you act on the results.\n\n### Typical workflow\n\n1. **Create** a task: `netlify agents:create \"\u003Cprompt>\" -a \u003Cagent>`. Note the task ID it returns (use `--json` to capture it reliably).\n2. **Poll** for status: `netlify agents:show \u003Ctask-id>`. Repeat periodically — there is no completion notification — until the status is `done`, `error`, or `cancelled`.\n3. **Review** the results once the task reaches `done` (or inspect the failure on `error`).\n\n## Creating Agent Tasks\n\n```bash\n# Run a prompt with the default agent\nnetlify agents:create \"Add a contact form\"\n\n# Choose a specific agent: claude, codex, or gemini\nnetlify agents:create --prompt \"Add dark mode\" --agent claude\nnetlify agents:create -p \"Update the README\" -a codex\nnetlify agents:create -p \"Write unit tests\" -a gemini\n\n# Target a specific branch\nnetlify agents:create -p \"Fix the login bug\" -a claude -b feature-branch\n\n# Specify a project by name (if not in a linked directory)\nnetlify agents:create \"Add tests\" --project my-site-name\n\n# Output result as JSON\nnetlify agents:create \"Add a footer\" --json\n```\n\n### Options\n\n| Flag | Description |\n|------|-------------|\n| `-a, --agent \u003Cagent>` | Agent type: `claude`, `codex`, or `gemini` |\n| `-p, --prompt \u003Cprompt>` | The prompt for the agent to execute |\n| `-b, --branch \u003Cbranch>` | Git branch to work on |\n| `-m, --model \u003Cmodel>` | Model to use for the agent |\n| `--project \u003Cproject>` | Project ID or name |\n| `--json` | Output result as JSON |\n\n## Managing Agent Tasks\n\nAll `netlify agents:*` commands are **project-scoped** — they operate on a single project (the one your directory is linked to, or the one named with `--project \u003Cname>`), not on your whole team. `netlify agents:list` shows the tasks for that one project only; there is no team-wide command that lists tasks across all your sites. To see a different site's tasks, run from its linked directory or pass `--project \u003Cname>` for it.\n\n### List tasks\n\n```bash\n# List all tasks for the current site\nnetlify agents:list\n\n# Filter by status\nnetlify agents:list --status running\nnetlify agents:list --status done\nnetlify agents:list --status error\n\n# Output as JSON\nnetlify agents:list --json\n```\n\nStatus values: `new`, `running`, `done`, `error`, `cancelled`.\n\n### Show task details\n\n```bash\nnetlify agents:show \u003Ctask-id>\nnetlify agents:show \u003Ctask-id> --json\n```\n\n### Stop a running task\n\n```bash\nnetlify agents:stop \u003Ctask-id>\n```\n\n## Use Cases\n\nSome of the many things you can do with Agent Runners:\n\n| Category | Example prompt |\n|----------|---------------|\n| Prototyping \u002F internal tools | \"Build an internal dashboard for our HR team\" |\n| Code reviews | \"Audit the code with fresh eyes and identify areas for improvement\" |\n| Security audits | \"Do a deep security audit of our codebase to identify any potential issues\" |\n| Feature suggestions | \"Based on our current codebase & docs, what should we build next?\" |\n| Performance improvements | \"Scan our codebase for performance bottlenecks and suggest improvements\" |\n| Telemetry & analytics | \"What analytics things are we not tracking but probably should\" |\n| SEO audit | \"Audit our site for SEO issues — missing meta tags, broken links, slow pages, missing alt text\" |\n| Copy improvements | \"Rewrite our landing page copy to be more compelling and conversion-focused\" |\n| Accessibility | \"Run an accessibility audit and fix all WCAG 2.1 AA violations\" |\n| Mobile responsiveness | \"Improve the mobile responsiveness — audit every page on small viewports\" |\n| End-to-end tests | \"Add end-to-end tests for our critical user flows using Playwright\" |\n| Unit tests | \"Generate unit tests for our untested utility functions\" |\n| Documentation | \"Generate a README and contributing guide based on our codebase\" |\n| Error handling | \"Add proper error boundaries, logging, and user-friendly error states throughout the app\" |\n| UX polish | \"Add loading states, skeleton screens, & transitions to improve perceived performance\" |\n| Form hardening | \"Add form validation, rate limiting, and spam protection to our contact form\" |\n| Edge Functions | \"Add an edge function for A\u002FB testing on our landing page\" |\n\n## Using as an Agent\n\nIf you are an AI agent, you can use `netlify agents:create` to delegate work to an agent running remotely on Netlify — for example, to get a second opinion from a different model.\n\n**IMPORTANT — ask for permission first, as a distinct confirmation step.** Agent tasks run on Netlify infrastructure and cost the user credits, so a real approval gate matters. Get explicit permission before running any `netlify agents:create` command — and treat that as its own turn, separate from the user's original request. A directive-sounding prompt (\"start a task…\", \"use the claude agent and pin it to Opus\") is **not** itself the approval: it tells you what they want, but the billable command still waits for a yes.\n\nMake the permission request a concrete proposal, not a menu:\n\n- **The exact command**, filled in — e.g. `netlify agents:create -p \"\u003Cthe real prompt>\" -a codex` — not a `\u003Cplaceholder>` and not a pick-one list of agents.\n- **One agent, already chosen** — commit to a single `-a` value and say why you picked it (\"codex for a second opinion on the auth logic\"), rather than offering claude\u002Fcodex\u002Fgemini as interchangeable options.\n- **Why**, plus **what happens after \"yes\"**: the run is asynchronous — `agents:create` returns as soon as the task is queued, there's no callback, and you'll poll `netlify agents:show \u003Ctask-id>` for the outcome.\n- **Even if a prerequisite is missing** (not authenticated, not linked to a site, not a git repo yet), still show the exact command and chosen agent you'll run *once it's resolved* — surface the blocker **and** the concrete proposal, rather than collapsing to only describing the blocker.\n\nNever run these commands without the user's approval.\n\nBefore delegating, understand what you're handing off (see [How Agent Tasks Run](#how-agent-tasks-run) above):\n\n- **It runs remotely against the pushed branch — not your local work.** The remote agent only sees code that has been committed and pushed. Do **not** delegate work that depends on your local, in-progress changes; the remote agent can't see them and will work from stale code. If a task needs your current changes, commit and push them first (or finish the work yourself).\n- **It's asynchronous — delegating does not block you.** The task runs remotely while you keep working. But because there are no callbacks, you have to poll (`netlify agents:show \u003Ctask-id>`) to learn the outcome. Don't assume the task is done just because you delegated it — check the status before relying on or describing its results.\n- **It's a separate, self-contained task — not a continuation of your session.** The remote agent starts fresh from the repo and the prompt you give it. It has none of your conversation context, so write a complete, standalone prompt.\n\nUseful for:\n\n- **Cross-validation** — get a second opinion on your implementation from a different model\n- **Edge case discovery** — another model may catch issues you missed\n- **Alternative approaches** — see how a different model would solve the same problem\n- **Parallel work** — kick off an independent task remotely while you continue on other work, then poll for its result\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,46,52,59,151,157,185,238,243,249,254,472,479,567,573,928,934,1083,1089,1129,1135,1269,1304,1310,1382,1388,1423,1429,1434,1677,1683,1695,1718,1723,1826,1831,1844,1890,1895,1938],{"type":39,"tag":40,"props":41,"children":42},"element","h1",{"id":4},[43],{"type":44,"value":45},"text","Netlify Agent Runner",{"type":39,"tag":47,"props":48,"children":49},"p",{},[50],{"type":44,"value":51},"Run AI coding agents (Claude, Codex, Gemini) remotely on Netlify infrastructure to automate development tasks on your site.",{"type":39,"tag":53,"props":54,"children":56},"h2",{"id":55},"prerequisites",[57],{"type":44,"value":58},"Prerequisites",{"type":39,"tag":60,"props":61,"children":62},"ul",{},[63,94,120,125],{"type":39,"tag":64,"props":65,"children":66},"li",{},[67,69,75,77,84,86,92],{"type":44,"value":68},"The site must be ",{"type":39,"tag":70,"props":71,"children":72},"strong",{},[73],{"type":44,"value":74},"linked to a Netlify project",{"type":44,"value":76}," (via ",{"type":39,"tag":78,"props":79,"children":81},"code",{"className":80},[],[82],{"type":44,"value":83},"netlify link",{"type":44,"value":85}," or ",{"type":39,"tag":78,"props":87,"children":89},{"className":88},[],[90],{"type":44,"value":91},"netlify init",{"type":44,"value":93},").",{"type":39,"tag":64,"props":95,"children":96},{},[97,102,104,110,112,118],{"type":39,"tag":70,"props":98,"children":99},{},[100],{"type":44,"value":101},"Or skip linking entirely:",{"type":44,"value":103}," pass ",{"type":39,"tag":78,"props":105,"children":107},{"className":106},[],[108],{"type":44,"value":109},"--project \u003Cname>",{"type":44,"value":111}," (a project ID or name) directly to ",{"type":39,"tag":78,"props":113,"children":115},{"className":114},[],[116],{"type":44,"value":117},"netlify agents:create",{"type":44,"value":119}," to target any Netlify site without linking first.",{"type":39,"tag":64,"props":121,"children":122},{},[123],{"type":44,"value":124},"The Netlify CLI must be installed and authenticated",{"type":39,"tag":64,"props":126,"children":127},{},[128,130,135,137,142,144,149],{"type":44,"value":129},"Agent runs ",{"type":39,"tag":70,"props":131,"children":132},{},[133],{"type":44,"value":134},"consume plan credits",{"type":44,"value":136},". If the account has no available credits — or the agent\u002FAI usage limit has been reached — ",{"type":39,"tag":78,"props":138,"children":140},{"className":139},[],[141],{"type":44,"value":117},{"type":44,"value":143}," is ",{"type":39,"tag":70,"props":145,"children":146},{},[147],{"type":44,"value":148},"blocked",{"type":44,"value":150}," and the run won't start. That's an account\u002Fplan-state issue to surface to the user, not something to work around.",{"type":39,"tag":53,"props":152,"children":154},{"id":153},"use-only-documented-cli-surfaces",[155],{"type":44,"value":156},"Use only documented CLI surfaces",{"type":39,"tag":47,"props":158,"children":159},{},[160,162,168,170,176,178,183],{"type":44,"value":161},"Interact with agent tasks only through the documented ",{"type":39,"tag":78,"props":163,"children":165},{"className":164},[],[166],{"type":44,"value":167},"netlify agents:*",{"type":44,"value":169}," commands (plus ",{"type":39,"tag":78,"props":171,"children":173},{"className":172},[],[174],{"type":44,"value":175},"netlify --help",{"type":44,"value":177}," and the public CLI reference). Do ",{"type":39,"tag":70,"props":179,"children":180},{},[181],{"type":44,"value":182},"not",{"type":44,"value":184}," go around the CLI:",{"type":39,"tag":60,"props":186,"children":187},{},[188,204,220],{"type":39,"tag":64,"props":189,"children":190},{},[191,202],{"type":39,"tag":70,"props":192,"children":193},{},[194,196],{"type":44,"value":195},"Do not curl ",{"type":39,"tag":78,"props":197,"children":199},{"className":198},[],[200],{"type":44,"value":201},"https:\u002F\u002Fapi.netlify.com\u002F...",{"type":44,"value":203}," to fetch, create, or stop a task — the endpoint shapes are not part of the public contract.",{"type":39,"tag":64,"props":205,"children":206},{},[207,218],{"type":39,"tag":70,"props":208,"children":209},{},[210,212],{"type":44,"value":211},"Do not run ",{"type":39,"tag":78,"props":213,"children":215},{"className":214},[],[216],{"type":44,"value":217},"netlify api \u003Cmethod>",{"type":44,"value":219}," as a recovery hatch when a documented command fails.",{"type":39,"tag":64,"props":221,"children":222},{},[223,228,230,236],{"type":39,"tag":70,"props":224,"children":225},{},[226],{"type":44,"value":227},"Do not read auth tokens",{"type":44,"value":229}," out of ",{"type":39,"tag":78,"props":231,"children":233},{"className":232},[],[234],{"type":44,"value":235},"~\u002FLibrary\u002FPreferences\u002Fnetlify\u002Fconfig.json",{"type":44,"value":237}," (or anywhere on disk) to authenticate side-channel calls.",{"type":39,"tag":47,"props":239,"children":240},{},[241],{"type":44,"value":242},"If a documented command fails, report the exact error and context to the user and stop — don't invent an undocumented way to reach the task.",{"type":39,"tag":53,"props":244,"children":246},{"id":245},"how-agent-tasks-run",[247],{"type":44,"value":248},"How Agent Tasks Run",{"type":39,"tag":47,"props":250,"children":251},{},[252],{"type":44,"value":253},"Read this before creating a task — agent tasks behave differently from running an agent locally, and the differences are easy to miss.",{"type":39,"tag":60,"props":255,"children":256},{},[257,274,330,367,390,422],{"type":39,"tag":64,"props":258,"children":259},{},[260,265,267,272],{"type":39,"tag":70,"props":261,"children":262},{},[263],{"type":44,"value":264},"Remote, not local.",{"type":44,"value":266}," Tasks run on Netlify infrastructure, not on your machine. They operate on the site's ",{"type":39,"tag":70,"props":268,"children":269},{},[270],{"type":44,"value":271},"connected repository",{"type":44,"value":273},", not your local working tree. The remote agent only sees what has been pushed to the remote — it cannot see uncommitted or unpushed changes.",{"type":39,"tag":64,"props":275,"children":276},{},[277,282,284,290,291,297,299,305,307,313,315,320,322,328],{"type":39,"tag":70,"props":278,"children":279},{},[280],{"type":44,"value":281},"Branch-based.",{"type":44,"value":283}," By default a task runs against the production branch (",{"type":39,"tag":78,"props":285,"children":287},{"className":286},[],[288],{"type":44,"value":289},"main",{"type":44,"value":85},{"type":39,"tag":78,"props":292,"children":294},{"className":293},[],[295],{"type":44,"value":296},"master",{"type":44,"value":298},"). To choose a different ",{"type":39,"tag":300,"props":301,"children":302},"em",{},[303],{"type":44,"value":304},"base",{"type":44,"value":306}," branch for the agent to start from, use ",{"type":39,"tag":78,"props":308,"children":310},{"className":309},[],[311],{"type":44,"value":312},"-b \u003Cbranch>",{"type":44,"value":314}," and make sure that branch has been ",{"type":39,"tag":70,"props":316,"children":317},{},[318],{"type":44,"value":319},"pushed to the remote first",{"type":44,"value":321},", or the agent will be working from code that doesn't exist remotely. ",{"type":39,"tag":78,"props":323,"children":325},{"className":324},[],[326],{"type":44,"value":327},"-b",{"type":44,"value":329}," sets the base (starting) branch — not where the results are written (see the next bullet).",{"type":39,"tag":64,"props":331,"children":332},{},[333,338,340,344,346,351,353,358,360,365],{"type":39,"tag":70,"props":334,"children":335},{},[336],{"type":44,"value":337},"Output lands on a new branch — not in place.",{"type":44,"value":339}," The agent does ",{"type":39,"tag":70,"props":341,"children":342},{},[343],{"type":44,"value":182},{"type":44,"value":345}," commit its changes onto the base branch you selected. It pushes its work to a ",{"type":39,"tag":70,"props":347,"children":348},{},[349],{"type":44,"value":350},"new branch",{"type":44,"value":352}," with its own ",{"type":39,"tag":70,"props":354,"children":355},{},[356],{"type":44,"value":357},"Deploy Preview",{"type":44,"value":359},", so your existing branch (or ",{"type":39,"tag":78,"props":361,"children":363},{"className":362},[],[364],{"type":44,"value":289},{"type":44,"value":366},") is never overwritten. Review the task's results on that new branch \u002F Deploy Preview — don't expect the base branch to change directly.",{"type":39,"tag":64,"props":368,"children":369},{},[370,375,377,382,384,388],{"type":39,"tag":70,"props":371,"children":372},{},[373],{"type":44,"value":374},"Asynchronous.",{"type":44,"value":376}," ",{"type":39,"tag":78,"props":378,"children":380},{"className":379},[],[381],{"type":44,"value":117},{"type":44,"value":383}," returns as soon as the task is queued — it does ",{"type":39,"tag":70,"props":385,"children":386},{},[387],{"type":44,"value":182},{"type":44,"value":389}," block until the work is finished. When the command returns, the task is still running remotely.",{"type":39,"tag":64,"props":391,"children":392},{},[393,398,400,405,407,413,414,420],{"type":39,"tag":70,"props":394,"children":395},{},[396],{"type":44,"value":397},"No webhooks or callbacks.",{"type":44,"value":399}," Nothing notifies you when a task changes state or completes. To find out what's happening, you have to ",{"type":39,"tag":70,"props":401,"children":402},{},[403],{"type":44,"value":404},"poll",{"type":44,"value":406}," with ",{"type":39,"tag":78,"props":408,"children":410},{"className":409},[],[411],{"type":44,"value":412},"netlify agents:show \u003Ctask-id>",{"type":44,"value":85},{"type":39,"tag":78,"props":415,"children":417},{"className":416},[],[418],{"type":44,"value":419},"netlify agents:list",{"type":44,"value":421},".",{"type":39,"tag":64,"props":423,"children":424},{},[425,430,432,438,440,446,448,454,456,462,464,470],{"type":39,"tag":70,"props":426,"children":427},{},[428],{"type":44,"value":429},"Statuses are terminal or not.",{"type":44,"value":431}," A task moves through ",{"type":39,"tag":78,"props":433,"children":435},{"className":434},[],[436],{"type":44,"value":437},"new",{"type":44,"value":439}," → ",{"type":39,"tag":78,"props":441,"children":443},{"className":442},[],[444],{"type":44,"value":445},"running",{"type":44,"value":447}," → one of ",{"type":39,"tag":78,"props":449,"children":451},{"className":450},[],[452],{"type":44,"value":453},"done",{"type":44,"value":455},", ",{"type":39,"tag":78,"props":457,"children":459},{"className":458},[],[460],{"type":44,"value":461},"error",{"type":44,"value":463},", or ",{"type":39,"tag":78,"props":465,"children":467},{"className":466},[],[468],{"type":44,"value":469},"cancelled",{"type":44,"value":471},". Keep polling until the status is one of those last three before you act on the results.",{"type":39,"tag":473,"props":474,"children":476},"h3",{"id":475},"typical-workflow",[477],{"type":44,"value":478},"Typical workflow",{"type":39,"tag":480,"props":481,"children":482},"ol",{},[483,509,544],{"type":39,"tag":64,"props":484,"children":485},{},[486,491,493,499,501,507],{"type":39,"tag":70,"props":487,"children":488},{},[489],{"type":44,"value":490},"Create",{"type":44,"value":492}," a task: ",{"type":39,"tag":78,"props":494,"children":496},{"className":495},[],[497],{"type":44,"value":498},"netlify agents:create \"\u003Cprompt>\" -a \u003Cagent>",{"type":44,"value":500},". Note the task ID it returns (use ",{"type":39,"tag":78,"props":502,"children":504},{"className":503},[],[505],{"type":44,"value":506},"--json",{"type":44,"value":508}," to capture it reliably).",{"type":39,"tag":64,"props":510,"children":511},{},[512,517,519,524,526,531,532,537,538,543],{"type":39,"tag":70,"props":513,"children":514},{},[515],{"type":44,"value":516},"Poll",{"type":44,"value":518}," for status: ",{"type":39,"tag":78,"props":520,"children":522},{"className":521},[],[523],{"type":44,"value":412},{"type":44,"value":525},". Repeat periodically — there is no completion notification — until the status is ",{"type":39,"tag":78,"props":527,"children":529},{"className":528},[],[530],{"type":44,"value":453},{"type":44,"value":455},{"type":39,"tag":78,"props":533,"children":535},{"className":534},[],[536],{"type":44,"value":461},{"type":44,"value":463},{"type":39,"tag":78,"props":539,"children":541},{"className":540},[],[542],{"type":44,"value":469},{"type":44,"value":421},{"type":39,"tag":64,"props":545,"children":546},{},[547,552,554,559,561,566],{"type":39,"tag":70,"props":548,"children":549},{},[550],{"type":44,"value":551},"Review",{"type":44,"value":553}," the results once the task reaches ",{"type":39,"tag":78,"props":555,"children":557},{"className":556},[],[558],{"type":44,"value":453},{"type":44,"value":560}," (or inspect the failure on ",{"type":39,"tag":78,"props":562,"children":564},{"className":563},[],[565],{"type":44,"value":461},{"type":44,"value":93},{"type":39,"tag":53,"props":568,"children":570},{"id":569},"creating-agent-tasks",[571],{"type":44,"value":572},"Creating Agent Tasks",{"type":39,"tag":574,"props":575,"children":580},"pre",{"className":576,"code":577,"language":578,"meta":579,"style":579},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Run a prompt with the default agent\nnetlify agents:create \"Add a contact form\"\n\n# Choose a specific agent: claude, codex, or gemini\nnetlify agents:create --prompt \"Add dark mode\" --agent claude\nnetlify agents:create -p \"Update the README\" -a codex\nnetlify agents:create -p \"Write unit tests\" -a gemini\n\n# Target a specific branch\nnetlify agents:create -p \"Fix the login bug\" -a claude -b feature-branch\n\n# Specify a project by name (if not in a linked directory)\nnetlify agents:create \"Add tests\" --project my-site-name\n\n# Output result as JSON\nnetlify agents:create \"Add a footer\" --json\n","bash","",[581],{"type":39,"tag":78,"props":582,"children":583},{"__ignoreMap":579},[584,596,627,637,646,686,726,764,772,781,829,837,846,881,889,898],{"type":39,"tag":585,"props":586,"children":589},"span",{"class":587,"line":588},"line",1,[590],{"type":39,"tag":585,"props":591,"children":593},{"style":592},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[594],{"type":44,"value":595},"# Run a prompt with the default agent\n",{"type":39,"tag":585,"props":597,"children":599},{"class":587,"line":598},2,[600,605,611,617,622],{"type":39,"tag":585,"props":601,"children":603},{"style":602},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[604],{"type":44,"value":8},{"type":39,"tag":585,"props":606,"children":608},{"style":607},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[609],{"type":44,"value":610}," agents:create",{"type":39,"tag":585,"props":612,"children":614},{"style":613},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[615],{"type":44,"value":616}," \"",{"type":39,"tag":585,"props":618,"children":619},{"style":607},[620],{"type":44,"value":621},"Add a contact form",{"type":39,"tag":585,"props":623,"children":624},{"style":613},[625],{"type":44,"value":626},"\"\n",{"type":39,"tag":585,"props":628,"children":630},{"class":587,"line":629},3,[631],{"type":39,"tag":585,"props":632,"children":634},{"emptyLinePlaceholder":633},true,[635],{"type":44,"value":636},"\n",{"type":39,"tag":585,"props":638,"children":640},{"class":587,"line":639},4,[641],{"type":39,"tag":585,"props":642,"children":643},{"style":592},[644],{"type":44,"value":645},"# Choose a specific agent: claude, codex, or gemini\n",{"type":39,"tag":585,"props":647,"children":648},{"class":587,"line":27},[649,653,657,662,666,671,676,681],{"type":39,"tag":585,"props":650,"children":651},{"style":602},[652],{"type":44,"value":8},{"type":39,"tag":585,"props":654,"children":655},{"style":607},[656],{"type":44,"value":610},{"type":39,"tag":585,"props":658,"children":659},{"style":607},[660],{"type":44,"value":661}," --prompt",{"type":39,"tag":585,"props":663,"children":664},{"style":613},[665],{"type":44,"value":616},{"type":39,"tag":585,"props":667,"children":668},{"style":607},[669],{"type":44,"value":670},"Add dark mode",{"type":39,"tag":585,"props":672,"children":673},{"style":613},[674],{"type":44,"value":675},"\"",{"type":39,"tag":585,"props":677,"children":678},{"style":607},[679],{"type":44,"value":680}," --agent",{"type":39,"tag":585,"props":682,"children":683},{"style":607},[684],{"type":44,"value":685}," claude\n",{"type":39,"tag":585,"props":687,"children":689},{"class":587,"line":688},6,[690,694,698,703,707,712,716,721],{"type":39,"tag":585,"props":691,"children":692},{"style":602},[693],{"type":44,"value":8},{"type":39,"tag":585,"props":695,"children":696},{"style":607},[697],{"type":44,"value":610},{"type":39,"tag":585,"props":699,"children":700},{"style":607},[701],{"type":44,"value":702}," -p",{"type":39,"tag":585,"props":704,"children":705},{"style":613},[706],{"type":44,"value":616},{"type":39,"tag":585,"props":708,"children":709},{"style":607},[710],{"type":44,"value":711},"Update the README",{"type":39,"tag":585,"props":713,"children":714},{"style":613},[715],{"type":44,"value":675},{"type":39,"tag":585,"props":717,"children":718},{"style":607},[719],{"type":44,"value":720}," -a",{"type":39,"tag":585,"props":722,"children":723},{"style":607},[724],{"type":44,"value":725}," codex\n",{"type":39,"tag":585,"props":727,"children":729},{"class":587,"line":728},7,[730,734,738,742,746,751,755,759],{"type":39,"tag":585,"props":731,"children":732},{"style":602},[733],{"type":44,"value":8},{"type":39,"tag":585,"props":735,"children":736},{"style":607},[737],{"type":44,"value":610},{"type":39,"tag":585,"props":739,"children":740},{"style":607},[741],{"type":44,"value":702},{"type":39,"tag":585,"props":743,"children":744},{"style":613},[745],{"type":44,"value":616},{"type":39,"tag":585,"props":747,"children":748},{"style":607},[749],{"type":44,"value":750},"Write unit tests",{"type":39,"tag":585,"props":752,"children":753},{"style":613},[754],{"type":44,"value":675},{"type":39,"tag":585,"props":756,"children":757},{"style":607},[758],{"type":44,"value":720},{"type":39,"tag":585,"props":760,"children":761},{"style":607},[762],{"type":44,"value":763}," gemini\n",{"type":39,"tag":585,"props":765,"children":767},{"class":587,"line":766},8,[768],{"type":39,"tag":585,"props":769,"children":770},{"emptyLinePlaceholder":633},[771],{"type":44,"value":636},{"type":39,"tag":585,"props":773,"children":775},{"class":587,"line":774},9,[776],{"type":39,"tag":585,"props":777,"children":778},{"style":592},[779],{"type":44,"value":780},"# Target a specific branch\n",{"type":39,"tag":585,"props":782,"children":784},{"class":587,"line":783},10,[785,789,793,797,801,806,810,814,819,824],{"type":39,"tag":585,"props":786,"children":787},{"style":602},[788],{"type":44,"value":8},{"type":39,"tag":585,"props":790,"children":791},{"style":607},[792],{"type":44,"value":610},{"type":39,"tag":585,"props":794,"children":795},{"style":607},[796],{"type":44,"value":702},{"type":39,"tag":585,"props":798,"children":799},{"style":613},[800],{"type":44,"value":616},{"type":39,"tag":585,"props":802,"children":803},{"style":607},[804],{"type":44,"value":805},"Fix the login bug",{"type":39,"tag":585,"props":807,"children":808},{"style":613},[809],{"type":44,"value":675},{"type":39,"tag":585,"props":811,"children":812},{"style":607},[813],{"type":44,"value":720},{"type":39,"tag":585,"props":815,"children":816},{"style":607},[817],{"type":44,"value":818}," claude",{"type":39,"tag":585,"props":820,"children":821},{"style":607},[822],{"type":44,"value":823}," -b",{"type":39,"tag":585,"props":825,"children":826},{"style":607},[827],{"type":44,"value":828}," feature-branch\n",{"type":39,"tag":585,"props":830,"children":832},{"class":587,"line":831},11,[833],{"type":39,"tag":585,"props":834,"children":835},{"emptyLinePlaceholder":633},[836],{"type":44,"value":636},{"type":39,"tag":585,"props":838,"children":840},{"class":587,"line":839},12,[841],{"type":39,"tag":585,"props":842,"children":843},{"style":592},[844],{"type":44,"value":845},"# Specify a project by name (if not in a linked directory)\n",{"type":39,"tag":585,"props":847,"children":849},{"class":587,"line":848},13,[850,854,858,862,867,871,876],{"type":39,"tag":585,"props":851,"children":852},{"style":602},[853],{"type":44,"value":8},{"type":39,"tag":585,"props":855,"children":856},{"style":607},[857],{"type":44,"value":610},{"type":39,"tag":585,"props":859,"children":860},{"style":613},[861],{"type":44,"value":616},{"type":39,"tag":585,"props":863,"children":864},{"style":607},[865],{"type":44,"value":866},"Add tests",{"type":39,"tag":585,"props":868,"children":869},{"style":613},[870],{"type":44,"value":675},{"type":39,"tag":585,"props":872,"children":873},{"style":607},[874],{"type":44,"value":875}," --project",{"type":39,"tag":585,"props":877,"children":878},{"style":607},[879],{"type":44,"value":880}," my-site-name\n",{"type":39,"tag":585,"props":882,"children":884},{"class":587,"line":883},14,[885],{"type":39,"tag":585,"props":886,"children":887},{"emptyLinePlaceholder":633},[888],{"type":44,"value":636},{"type":39,"tag":585,"props":890,"children":892},{"class":587,"line":891},15,[893],{"type":39,"tag":585,"props":894,"children":895},{"style":592},[896],{"type":44,"value":897},"# Output result as JSON\n",{"type":39,"tag":585,"props":899,"children":901},{"class":587,"line":900},16,[902,906,910,914,919,923],{"type":39,"tag":585,"props":903,"children":904},{"style":602},[905],{"type":44,"value":8},{"type":39,"tag":585,"props":907,"children":908},{"style":607},[909],{"type":44,"value":610},{"type":39,"tag":585,"props":911,"children":912},{"style":613},[913],{"type":44,"value":616},{"type":39,"tag":585,"props":915,"children":916},{"style":607},[917],{"type":44,"value":918},"Add a footer",{"type":39,"tag":585,"props":920,"children":921},{"style":613},[922],{"type":44,"value":675},{"type":39,"tag":585,"props":924,"children":925},{"style":607},[926],{"type":44,"value":927}," --json\n",{"type":39,"tag":473,"props":929,"children":931},{"id":930},"options",[932],{"type":44,"value":933},"Options",{"type":39,"tag":935,"props":936,"children":937},"table",{},[938,957],{"type":39,"tag":939,"props":940,"children":941},"thead",{},[942],{"type":39,"tag":943,"props":944,"children":945},"tr",{},[946,952],{"type":39,"tag":947,"props":948,"children":949},"th",{},[950],{"type":44,"value":951},"Flag",{"type":39,"tag":947,"props":953,"children":954},{},[955],{"type":44,"value":956},"Description",{"type":39,"tag":958,"props":959,"children":960},"tbody",{},[961,999,1016,1033,1050,1067],{"type":39,"tag":943,"props":962,"children":963},{},[964,974],{"type":39,"tag":965,"props":966,"children":967},"td",{},[968],{"type":39,"tag":78,"props":969,"children":971},{"className":970},[],[972],{"type":44,"value":973},"-a, --agent \u003Cagent>",{"type":39,"tag":965,"props":975,"children":976},{},[977,979,985,986,992,993],{"type":44,"value":978},"Agent type: ",{"type":39,"tag":78,"props":980,"children":982},{"className":981},[],[983],{"type":44,"value":984},"claude",{"type":44,"value":455},{"type":39,"tag":78,"props":987,"children":989},{"className":988},[],[990],{"type":44,"value":991},"codex",{"type":44,"value":463},{"type":39,"tag":78,"props":994,"children":996},{"className":995},[],[997],{"type":44,"value":998},"gemini",{"type":39,"tag":943,"props":1000,"children":1001},{},[1002,1011],{"type":39,"tag":965,"props":1003,"children":1004},{},[1005],{"type":39,"tag":78,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":44,"value":1010},"-p, --prompt \u003Cprompt>",{"type":39,"tag":965,"props":1012,"children":1013},{},[1014],{"type":44,"value":1015},"The prompt for the agent to execute",{"type":39,"tag":943,"props":1017,"children":1018},{},[1019,1028],{"type":39,"tag":965,"props":1020,"children":1021},{},[1022],{"type":39,"tag":78,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":44,"value":1027},"-b, --branch \u003Cbranch>",{"type":39,"tag":965,"props":1029,"children":1030},{},[1031],{"type":44,"value":1032},"Git branch to work on",{"type":39,"tag":943,"props":1034,"children":1035},{},[1036,1045],{"type":39,"tag":965,"props":1037,"children":1038},{},[1039],{"type":39,"tag":78,"props":1040,"children":1042},{"className":1041},[],[1043],{"type":44,"value":1044},"-m, --model \u003Cmodel>",{"type":39,"tag":965,"props":1046,"children":1047},{},[1048],{"type":44,"value":1049},"Model to use for the agent",{"type":39,"tag":943,"props":1051,"children":1052},{},[1053,1062],{"type":39,"tag":965,"props":1054,"children":1055},{},[1056],{"type":39,"tag":78,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":44,"value":1061},"--project \u003Cproject>",{"type":39,"tag":965,"props":1063,"children":1064},{},[1065],{"type":44,"value":1066},"Project ID or name",{"type":39,"tag":943,"props":1068,"children":1069},{},[1070,1078],{"type":39,"tag":965,"props":1071,"children":1072},{},[1073],{"type":39,"tag":78,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":44,"value":506},{"type":39,"tag":965,"props":1079,"children":1080},{},[1081],{"type":44,"value":1082},"Output result as JSON",{"type":39,"tag":53,"props":1084,"children":1086},{"id":1085},"managing-agent-tasks",[1087],{"type":44,"value":1088},"Managing Agent Tasks",{"type":39,"tag":47,"props":1090,"children":1091},{},[1092,1094,1099,1101,1106,1108,1113,1115,1120,1122,1127],{"type":44,"value":1093},"All ",{"type":39,"tag":78,"props":1095,"children":1097},{"className":1096},[],[1098],{"type":44,"value":167},{"type":44,"value":1100}," commands are ",{"type":39,"tag":70,"props":1102,"children":1103},{},[1104],{"type":44,"value":1105},"project-scoped",{"type":44,"value":1107}," — they operate on a single project (the one your directory is linked to, or the one named with ",{"type":39,"tag":78,"props":1109,"children":1111},{"className":1110},[],[1112],{"type":44,"value":109},{"type":44,"value":1114},"), not on your whole team. ",{"type":39,"tag":78,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":44,"value":419},{"type":44,"value":1121}," shows the tasks for that one project only; there is no team-wide command that lists tasks across all your sites. To see a different site's tasks, run from its linked directory or pass ",{"type":39,"tag":78,"props":1123,"children":1125},{"className":1124},[],[1126],{"type":44,"value":109},{"type":44,"value":1128}," for it.",{"type":39,"tag":473,"props":1130,"children":1132},{"id":1131},"list-tasks",[1133],{"type":44,"value":1134},"List tasks",{"type":39,"tag":574,"props":1136,"children":1138},{"className":576,"code":1137,"language":578,"meta":579,"style":579},"# List all tasks for the current site\nnetlify agents:list\n\n# Filter by status\nnetlify agents:list --status running\nnetlify agents:list --status done\nnetlify agents:list --status error\n\n# Output as JSON\nnetlify agents:list --json\n",[1139],{"type":39,"tag":78,"props":1140,"children":1141},{"__ignoreMap":579},[1142,1150,1162,1169,1177,1199,1219,1239,1246,1254],{"type":39,"tag":585,"props":1143,"children":1144},{"class":587,"line":588},[1145],{"type":39,"tag":585,"props":1146,"children":1147},{"style":592},[1148],{"type":44,"value":1149},"# List all tasks for the current site\n",{"type":39,"tag":585,"props":1151,"children":1152},{"class":587,"line":598},[1153,1157],{"type":39,"tag":585,"props":1154,"children":1155},{"style":602},[1156],{"type":44,"value":8},{"type":39,"tag":585,"props":1158,"children":1159},{"style":607},[1160],{"type":44,"value":1161}," agents:list\n",{"type":39,"tag":585,"props":1163,"children":1164},{"class":587,"line":629},[1165],{"type":39,"tag":585,"props":1166,"children":1167},{"emptyLinePlaceholder":633},[1168],{"type":44,"value":636},{"type":39,"tag":585,"props":1170,"children":1171},{"class":587,"line":639},[1172],{"type":39,"tag":585,"props":1173,"children":1174},{"style":592},[1175],{"type":44,"value":1176},"# Filter by status\n",{"type":39,"tag":585,"props":1178,"children":1179},{"class":587,"line":27},[1180,1184,1189,1194],{"type":39,"tag":585,"props":1181,"children":1182},{"style":602},[1183],{"type":44,"value":8},{"type":39,"tag":585,"props":1185,"children":1186},{"style":607},[1187],{"type":44,"value":1188}," agents:list",{"type":39,"tag":585,"props":1190,"children":1191},{"style":607},[1192],{"type":44,"value":1193}," --status",{"type":39,"tag":585,"props":1195,"children":1196},{"style":607},[1197],{"type":44,"value":1198}," running\n",{"type":39,"tag":585,"props":1200,"children":1201},{"class":587,"line":688},[1202,1206,1210,1214],{"type":39,"tag":585,"props":1203,"children":1204},{"style":602},[1205],{"type":44,"value":8},{"type":39,"tag":585,"props":1207,"children":1208},{"style":607},[1209],{"type":44,"value":1188},{"type":39,"tag":585,"props":1211,"children":1212},{"style":607},[1213],{"type":44,"value":1193},{"type":39,"tag":585,"props":1215,"children":1216},{"style":607},[1217],{"type":44,"value":1218}," done\n",{"type":39,"tag":585,"props":1220,"children":1221},{"class":587,"line":728},[1222,1226,1230,1234],{"type":39,"tag":585,"props":1223,"children":1224},{"style":602},[1225],{"type":44,"value":8},{"type":39,"tag":585,"props":1227,"children":1228},{"style":607},[1229],{"type":44,"value":1188},{"type":39,"tag":585,"props":1231,"children":1232},{"style":607},[1233],{"type":44,"value":1193},{"type":39,"tag":585,"props":1235,"children":1236},{"style":607},[1237],{"type":44,"value":1238}," error\n",{"type":39,"tag":585,"props":1240,"children":1241},{"class":587,"line":766},[1242],{"type":39,"tag":585,"props":1243,"children":1244},{"emptyLinePlaceholder":633},[1245],{"type":44,"value":636},{"type":39,"tag":585,"props":1247,"children":1248},{"class":587,"line":774},[1249],{"type":39,"tag":585,"props":1250,"children":1251},{"style":592},[1252],{"type":44,"value":1253},"# Output as JSON\n",{"type":39,"tag":585,"props":1255,"children":1256},{"class":587,"line":783},[1257,1261,1265],{"type":39,"tag":585,"props":1258,"children":1259},{"style":602},[1260],{"type":44,"value":8},{"type":39,"tag":585,"props":1262,"children":1263},{"style":607},[1264],{"type":44,"value":1188},{"type":39,"tag":585,"props":1266,"children":1267},{"style":607},[1268],{"type":44,"value":927},{"type":39,"tag":47,"props":1270,"children":1271},{},[1272,1274,1279,1280,1285,1286,1291,1292,1297,1298,1303],{"type":44,"value":1273},"Status values: ",{"type":39,"tag":78,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":44,"value":437},{"type":44,"value":455},{"type":39,"tag":78,"props":1281,"children":1283},{"className":1282},[],[1284],{"type":44,"value":445},{"type":44,"value":455},{"type":39,"tag":78,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":44,"value":453},{"type":44,"value":455},{"type":39,"tag":78,"props":1293,"children":1295},{"className":1294},[],[1296],{"type":44,"value":461},{"type":44,"value":455},{"type":39,"tag":78,"props":1299,"children":1301},{"className":1300},[],[1302],{"type":44,"value":469},{"type":44,"value":421},{"type":39,"tag":473,"props":1305,"children":1307},{"id":1306},"show-task-details",[1308],{"type":44,"value":1309},"Show task details",{"type":39,"tag":574,"props":1311,"children":1313},{"className":576,"code":1312,"language":578,"meta":579,"style":579},"netlify agents:show \u003Ctask-id>\nnetlify agents:show \u003Ctask-id> --json\n",[1314],{"type":39,"tag":78,"props":1315,"children":1316},{"__ignoreMap":579},[1317,1350],{"type":39,"tag":585,"props":1318,"children":1319},{"class":587,"line":588},[1320,1324,1329,1334,1339,1345],{"type":39,"tag":585,"props":1321,"children":1322},{"style":602},[1323],{"type":44,"value":8},{"type":39,"tag":585,"props":1325,"children":1326},{"style":607},[1327],{"type":44,"value":1328}," agents:show",{"type":39,"tag":585,"props":1330,"children":1331},{"style":613},[1332],{"type":44,"value":1333}," \u003C",{"type":39,"tag":585,"props":1335,"children":1336},{"style":607},[1337],{"type":44,"value":1338},"task-i",{"type":39,"tag":585,"props":1340,"children":1342},{"style":1341},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1343],{"type":44,"value":1344},"d",{"type":39,"tag":585,"props":1346,"children":1347},{"style":613},[1348],{"type":44,"value":1349},">\n",{"type":39,"tag":585,"props":1351,"children":1352},{"class":587,"line":598},[1353,1357,1361,1365,1369,1373,1378],{"type":39,"tag":585,"props":1354,"children":1355},{"style":602},[1356],{"type":44,"value":8},{"type":39,"tag":585,"props":1358,"children":1359},{"style":607},[1360],{"type":44,"value":1328},{"type":39,"tag":585,"props":1362,"children":1363},{"style":613},[1364],{"type":44,"value":1333},{"type":39,"tag":585,"props":1366,"children":1367},{"style":607},[1368],{"type":44,"value":1338},{"type":39,"tag":585,"props":1370,"children":1371},{"style":1341},[1372],{"type":44,"value":1344},{"type":39,"tag":585,"props":1374,"children":1375},{"style":613},[1376],{"type":44,"value":1377},">",{"type":39,"tag":585,"props":1379,"children":1380},{"style":607},[1381],{"type":44,"value":927},{"type":39,"tag":473,"props":1383,"children":1385},{"id":1384},"stop-a-running-task",[1386],{"type":44,"value":1387},"Stop a running task",{"type":39,"tag":574,"props":1389,"children":1391},{"className":576,"code":1390,"language":578,"meta":579,"style":579},"netlify agents:stop \u003Ctask-id>\n",[1392],{"type":39,"tag":78,"props":1393,"children":1394},{"__ignoreMap":579},[1395],{"type":39,"tag":585,"props":1396,"children":1397},{"class":587,"line":588},[1398,1402,1407,1411,1415,1419],{"type":39,"tag":585,"props":1399,"children":1400},{"style":602},[1401],{"type":44,"value":8},{"type":39,"tag":585,"props":1403,"children":1404},{"style":607},[1405],{"type":44,"value":1406}," agents:stop",{"type":39,"tag":585,"props":1408,"children":1409},{"style":613},[1410],{"type":44,"value":1333},{"type":39,"tag":585,"props":1412,"children":1413},{"style":607},[1414],{"type":44,"value":1338},{"type":39,"tag":585,"props":1416,"children":1417},{"style":1341},[1418],{"type":44,"value":1344},{"type":39,"tag":585,"props":1420,"children":1421},{"style":613},[1422],{"type":44,"value":1349},{"type":39,"tag":53,"props":1424,"children":1426},{"id":1425},"use-cases",[1427],{"type":44,"value":1428},"Use Cases",{"type":39,"tag":47,"props":1430,"children":1431},{},[1432],{"type":44,"value":1433},"Some of the many things you can do with Agent Runners:",{"type":39,"tag":935,"props":1435,"children":1436},{},[1437,1453],{"type":39,"tag":939,"props":1438,"children":1439},{},[1440],{"type":39,"tag":943,"props":1441,"children":1442},{},[1443,1448],{"type":39,"tag":947,"props":1444,"children":1445},{},[1446],{"type":44,"value":1447},"Category",{"type":39,"tag":947,"props":1449,"children":1450},{},[1451],{"type":44,"value":1452},"Example prompt",{"type":39,"tag":958,"props":1454,"children":1455},{},[1456,1469,1482,1495,1508,1521,1534,1547,1560,1573,1586,1599,1612,1625,1638,1651,1664],{"type":39,"tag":943,"props":1457,"children":1458},{},[1459,1464],{"type":39,"tag":965,"props":1460,"children":1461},{},[1462],{"type":44,"value":1463},"Prototyping \u002F internal tools",{"type":39,"tag":965,"props":1465,"children":1466},{},[1467],{"type":44,"value":1468},"\"Build an internal dashboard for our HR team\"",{"type":39,"tag":943,"props":1470,"children":1471},{},[1472,1477],{"type":39,"tag":965,"props":1473,"children":1474},{},[1475],{"type":44,"value":1476},"Code reviews",{"type":39,"tag":965,"props":1478,"children":1479},{},[1480],{"type":44,"value":1481},"\"Audit the code with fresh eyes and identify areas for improvement\"",{"type":39,"tag":943,"props":1483,"children":1484},{},[1485,1490],{"type":39,"tag":965,"props":1486,"children":1487},{},[1488],{"type":44,"value":1489},"Security audits",{"type":39,"tag":965,"props":1491,"children":1492},{},[1493],{"type":44,"value":1494},"\"Do a deep security audit of our codebase to identify any potential issues\"",{"type":39,"tag":943,"props":1496,"children":1497},{},[1498,1503],{"type":39,"tag":965,"props":1499,"children":1500},{},[1501],{"type":44,"value":1502},"Feature suggestions",{"type":39,"tag":965,"props":1504,"children":1505},{},[1506],{"type":44,"value":1507},"\"Based on our current codebase & docs, what should we build next?\"",{"type":39,"tag":943,"props":1509,"children":1510},{},[1511,1516],{"type":39,"tag":965,"props":1512,"children":1513},{},[1514],{"type":44,"value":1515},"Performance improvements",{"type":39,"tag":965,"props":1517,"children":1518},{},[1519],{"type":44,"value":1520},"\"Scan our codebase for performance bottlenecks and suggest improvements\"",{"type":39,"tag":943,"props":1522,"children":1523},{},[1524,1529],{"type":39,"tag":965,"props":1525,"children":1526},{},[1527],{"type":44,"value":1528},"Telemetry & analytics",{"type":39,"tag":965,"props":1530,"children":1531},{},[1532],{"type":44,"value":1533},"\"What analytics things are we not tracking but probably should\"",{"type":39,"tag":943,"props":1535,"children":1536},{},[1537,1542],{"type":39,"tag":965,"props":1538,"children":1539},{},[1540],{"type":44,"value":1541},"SEO audit",{"type":39,"tag":965,"props":1543,"children":1544},{},[1545],{"type":44,"value":1546},"\"Audit our site for SEO issues — missing meta tags, broken links, slow pages, missing alt text\"",{"type":39,"tag":943,"props":1548,"children":1549},{},[1550,1555],{"type":39,"tag":965,"props":1551,"children":1552},{},[1553],{"type":44,"value":1554},"Copy improvements",{"type":39,"tag":965,"props":1556,"children":1557},{},[1558],{"type":44,"value":1559},"\"Rewrite our landing page copy to be more compelling and conversion-focused\"",{"type":39,"tag":943,"props":1561,"children":1562},{},[1563,1568],{"type":39,"tag":965,"props":1564,"children":1565},{},[1566],{"type":44,"value":1567},"Accessibility",{"type":39,"tag":965,"props":1569,"children":1570},{},[1571],{"type":44,"value":1572},"\"Run an accessibility audit and fix all WCAG 2.1 AA violations\"",{"type":39,"tag":943,"props":1574,"children":1575},{},[1576,1581],{"type":39,"tag":965,"props":1577,"children":1578},{},[1579],{"type":44,"value":1580},"Mobile responsiveness",{"type":39,"tag":965,"props":1582,"children":1583},{},[1584],{"type":44,"value":1585},"\"Improve the mobile responsiveness — audit every page on small viewports\"",{"type":39,"tag":943,"props":1587,"children":1588},{},[1589,1594],{"type":39,"tag":965,"props":1590,"children":1591},{},[1592],{"type":44,"value":1593},"End-to-end tests",{"type":39,"tag":965,"props":1595,"children":1596},{},[1597],{"type":44,"value":1598},"\"Add end-to-end tests for our critical user flows using Playwright\"",{"type":39,"tag":943,"props":1600,"children":1601},{},[1602,1607],{"type":39,"tag":965,"props":1603,"children":1604},{},[1605],{"type":44,"value":1606},"Unit tests",{"type":39,"tag":965,"props":1608,"children":1609},{},[1610],{"type":44,"value":1611},"\"Generate unit tests for our untested utility functions\"",{"type":39,"tag":943,"props":1613,"children":1614},{},[1615,1620],{"type":39,"tag":965,"props":1616,"children":1617},{},[1618],{"type":44,"value":1619},"Documentation",{"type":39,"tag":965,"props":1621,"children":1622},{},[1623],{"type":44,"value":1624},"\"Generate a README and contributing guide based on our codebase\"",{"type":39,"tag":943,"props":1626,"children":1627},{},[1628,1633],{"type":39,"tag":965,"props":1629,"children":1630},{},[1631],{"type":44,"value":1632},"Error handling",{"type":39,"tag":965,"props":1634,"children":1635},{},[1636],{"type":44,"value":1637},"\"Add proper error boundaries, logging, and user-friendly error states throughout the app\"",{"type":39,"tag":943,"props":1639,"children":1640},{},[1641,1646],{"type":39,"tag":965,"props":1642,"children":1643},{},[1644],{"type":44,"value":1645},"UX polish",{"type":39,"tag":965,"props":1647,"children":1648},{},[1649],{"type":44,"value":1650},"\"Add loading states, skeleton screens, & transitions to improve perceived performance\"",{"type":39,"tag":943,"props":1652,"children":1653},{},[1654,1659],{"type":39,"tag":965,"props":1655,"children":1656},{},[1657],{"type":44,"value":1658},"Form hardening",{"type":39,"tag":965,"props":1660,"children":1661},{},[1662],{"type":44,"value":1663},"\"Add form validation, rate limiting, and spam protection to our contact form\"",{"type":39,"tag":943,"props":1665,"children":1666},{},[1667,1672],{"type":39,"tag":965,"props":1668,"children":1669},{},[1670],{"type":44,"value":1671},"Edge Functions",{"type":39,"tag":965,"props":1673,"children":1674},{},[1675],{"type":44,"value":1676},"\"Add an edge function for A\u002FB testing on our landing page\"",{"type":39,"tag":53,"props":1678,"children":1680},{"id":1679},"using-as-an-agent",[1681],{"type":44,"value":1682},"Using as an Agent",{"type":39,"tag":47,"props":1684,"children":1685},{},[1686,1688,1693],{"type":44,"value":1687},"If you are an AI agent, you can use ",{"type":39,"tag":78,"props":1689,"children":1691},{"className":1690},[],[1692],{"type":44,"value":117},{"type":44,"value":1694}," to delegate work to an agent running remotely on Netlify — for example, to get a second opinion from a different model.",{"type":39,"tag":47,"props":1696,"children":1697},{},[1698,1703,1705,1710,1712,1716],{"type":39,"tag":70,"props":1699,"children":1700},{},[1701],{"type":44,"value":1702},"IMPORTANT — ask for permission first, as a distinct confirmation step.",{"type":44,"value":1704}," Agent tasks run on Netlify infrastructure and cost the user credits, so a real approval gate matters. Get explicit permission before running any ",{"type":39,"tag":78,"props":1706,"children":1708},{"className":1707},[],[1709],{"type":44,"value":117},{"type":44,"value":1711}," command — and treat that as its own turn, separate from the user's original request. A directive-sounding prompt (\"start a task…\", \"use the claude agent and pin it to Opus\") is ",{"type":39,"tag":70,"props":1713,"children":1714},{},[1715],{"type":44,"value":182},{"type":44,"value":1717}," itself the approval: it tells you what they want, but the billable command still waits for a yes.",{"type":39,"tag":47,"props":1719,"children":1720},{},[1721],{"type":44,"value":1722},"Make the permission request a concrete proposal, not a menu:",{"type":39,"tag":60,"props":1724,"children":1725},{},[1726,1752,1770,1802],{"type":39,"tag":64,"props":1727,"children":1728},{},[1729,1734,1736,1742,1744,1750],{"type":39,"tag":70,"props":1730,"children":1731},{},[1732],{"type":44,"value":1733},"The exact command",{"type":44,"value":1735},", filled in — e.g. ",{"type":39,"tag":78,"props":1737,"children":1739},{"className":1738},[],[1740],{"type":44,"value":1741},"netlify agents:create -p \"\u003Cthe real prompt>\" -a codex",{"type":44,"value":1743}," — not a ",{"type":39,"tag":78,"props":1745,"children":1747},{"className":1746},[],[1748],{"type":44,"value":1749},"\u003Cplaceholder>",{"type":44,"value":1751}," and not a pick-one list of agents.",{"type":39,"tag":64,"props":1753,"children":1754},{},[1755,1760,1762,1768],{"type":39,"tag":70,"props":1756,"children":1757},{},[1758],{"type":44,"value":1759},"One agent, already chosen",{"type":44,"value":1761}," — commit to a single ",{"type":39,"tag":78,"props":1763,"children":1765},{"className":1764},[],[1766],{"type":44,"value":1767},"-a",{"type":44,"value":1769}," value and say why you picked it (\"codex for a second opinion on the auth logic\"), rather than offering claude\u002Fcodex\u002Fgemini as interchangeable options.",{"type":39,"tag":64,"props":1771,"children":1772},{},[1773,1778,1780,1785,1787,1793,1795,1800],{"type":39,"tag":70,"props":1774,"children":1775},{},[1776],{"type":44,"value":1777},"Why",{"type":44,"value":1779},", plus ",{"type":39,"tag":70,"props":1781,"children":1782},{},[1783],{"type":44,"value":1784},"what happens after \"yes\"",{"type":44,"value":1786},": the run is asynchronous — ",{"type":39,"tag":78,"props":1788,"children":1790},{"className":1789},[],[1791],{"type":44,"value":1792},"agents:create",{"type":44,"value":1794}," returns as soon as the task is queued, there's no callback, and you'll poll ",{"type":39,"tag":78,"props":1796,"children":1798},{"className":1797},[],[1799],{"type":44,"value":412},{"type":44,"value":1801}," for the outcome.",{"type":39,"tag":64,"props":1803,"children":1804},{},[1805,1810,1812,1817,1819,1824],{"type":39,"tag":70,"props":1806,"children":1807},{},[1808],{"type":44,"value":1809},"Even if a prerequisite is missing",{"type":44,"value":1811}," (not authenticated, not linked to a site, not a git repo yet), still show the exact command and chosen agent you'll run ",{"type":39,"tag":300,"props":1813,"children":1814},{},[1815],{"type":44,"value":1816},"once it's resolved",{"type":44,"value":1818}," — surface the blocker ",{"type":39,"tag":70,"props":1820,"children":1821},{},[1822],{"type":44,"value":1823},"and",{"type":44,"value":1825}," the concrete proposal, rather than collapsing to only describing the blocker.",{"type":39,"tag":47,"props":1827,"children":1828},{},[1829],{"type":44,"value":1830},"Never run these commands without the user's approval.",{"type":39,"tag":47,"props":1832,"children":1833},{},[1834,1836,1842],{"type":44,"value":1835},"Before delegating, understand what you're handing off (see ",{"type":39,"tag":1837,"props":1838,"children":1840},"a",{"href":1839},"#how-agent-tasks-run",[1841],{"type":44,"value":248},{"type":44,"value":1843}," above):",{"type":39,"tag":60,"props":1845,"children":1846},{},[1847,1863,1880],{"type":39,"tag":64,"props":1848,"children":1849},{},[1850,1855,1857,1861],{"type":39,"tag":70,"props":1851,"children":1852},{},[1853],{"type":44,"value":1854},"It runs remotely against the pushed branch — not your local work.",{"type":44,"value":1856}," The remote agent only sees code that has been committed and pushed. Do ",{"type":39,"tag":70,"props":1858,"children":1859},{},[1860],{"type":44,"value":182},{"type":44,"value":1862}," delegate work that depends on your local, in-progress changes; the remote agent can't see them and will work from stale code. If a task needs your current changes, commit and push them first (or finish the work yourself).",{"type":39,"tag":64,"props":1864,"children":1865},{},[1866,1871,1873,1878],{"type":39,"tag":70,"props":1867,"children":1868},{},[1869],{"type":44,"value":1870},"It's asynchronous — delegating does not block you.",{"type":44,"value":1872}," The task runs remotely while you keep working. But because there are no callbacks, you have to poll (",{"type":39,"tag":78,"props":1874,"children":1876},{"className":1875},[],[1877],{"type":44,"value":412},{"type":44,"value":1879},") to learn the outcome. Don't assume the task is done just because you delegated it — check the status before relying on or describing its results.",{"type":39,"tag":64,"props":1881,"children":1882},{},[1883,1888],{"type":39,"tag":70,"props":1884,"children":1885},{},[1886],{"type":44,"value":1887},"It's a separate, self-contained task — not a continuation of your session.",{"type":44,"value":1889}," The remote agent starts fresh from the repo and the prompt you give it. It has none of your conversation context, so write a complete, standalone prompt.",{"type":39,"tag":47,"props":1891,"children":1892},{},[1893],{"type":44,"value":1894},"Useful for:",{"type":39,"tag":60,"props":1896,"children":1897},{},[1898,1908,1918,1928],{"type":39,"tag":64,"props":1899,"children":1900},{},[1901,1906],{"type":39,"tag":70,"props":1902,"children":1903},{},[1904],{"type":44,"value":1905},"Cross-validation",{"type":44,"value":1907}," — get a second opinion on your implementation from a different model",{"type":39,"tag":64,"props":1909,"children":1910},{},[1911,1916],{"type":39,"tag":70,"props":1912,"children":1913},{},[1914],{"type":44,"value":1915},"Edge case discovery",{"type":44,"value":1917}," — another model may catch issues you missed",{"type":39,"tag":64,"props":1919,"children":1920},{},[1921,1926],{"type":39,"tag":70,"props":1922,"children":1923},{},[1924],{"type":44,"value":1925},"Alternative approaches",{"type":44,"value":1927}," — see how a different model would solve the same problem",{"type":39,"tag":64,"props":1929,"children":1930},{},[1931,1936],{"type":39,"tag":70,"props":1932,"children":1933},{},[1934],{"type":44,"value":1935},"Parallel work",{"type":44,"value":1937}," — kick off an independent task remotely while you continue on other work, then poll for its result",{"type":39,"tag":1939,"props":1940,"children":1941},"style",{},[1942],{"type":44,"value":1943},"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":1945,"total":891},[1946,1963,1970,1985,2002,2019,2031],{"slug":1947,"name":1947,"fn":1948,"description":1949,"org":1950,"tags":1951,"stars":23,"repoUrl":24,"updatedAt":1962},"netlify-access-control","manage Netlify site access control","Use when the task involves controlling who can reach a Netlify site, or telling Netlify Identity apart from Secure Access. Trigger whenever the user wants to lock a site or deploy to their company\u002Fteam, restrict access to employees only, build an internal or employees-only app, set up password protection, SSO, or SAML, asks \"who can access my site\", or is confused about Netlify Identity vs Secure Access vs team login vs OAuth providers. Routes the request to the right layer — app-level Identity, site-visitor Password Protection, the Auth0 extension, or Team\u002FOrg SAML SSO — and explains the two-layer (perimeter + in-app identity) pattern and its double-login tradeoff. For building the app-level auth itself, use the netlify-identity skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1952,1955,1956,1959],{"name":1953,"slug":1954,"type":15},"Access Control","access-control",{"name":9,"slug":8,"type":15},{"name":1957,"slug":1958,"type":15},"Permissions","permissions",{"name":1960,"slug":1961,"type":15},"Security","security","2026-07-14T05:40:29.082149",{"slug":4,"name":4,"fn":5,"description":6,"org":1964,"tags":1965,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1966,1967,1968,1969],{"name":21,"slug":22,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":1971,"name":1971,"fn":1972,"description":1973,"org":1974,"tags":1975,"stars":23,"repoUrl":24,"updatedAt":1984},"netlify-ai-gateway","route AI requests via Netlify AI Gateway","Reference for Netlify AI Gateway — the managed proxy that routes calls to OpenAI, Anthropic, and Google Gemini SDKs without provider API keys. Use this skill any time the user wants to add AI on a Netlify site (chat, completion, reasoning, image generation, image-to-image edit\u002Fstylize), choose or change a model, wire up the OpenAI \u002F Anthropic \u002F @google\u002Fgenai SDK, decide which provider to use for an image-gen feature (it's Gemini-only on the gateway), or debug \"model not found\" \u002F \"API key missing\" against the gateway. Required reading before pinning a model — the gateway exposes a curated subset, not every provider model.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1976,1979,1982,1983],{"name":1977,"slug":1978,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1980,"slug":1981,"type":15},"API Development","api-development",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-07-17T05:30:13.14555",{"slug":1986,"name":1986,"fn":1987,"description":1988,"org":1989,"tags":1990,"stars":23,"repoUrl":24,"updatedAt":2001},"netlify-blobs","manage file storage with Netlify Blobs","Guide for using Netlify Blobs for file and asset storage — images, documents, uploads, exports, cached binary artifacts. Covers getStore(), CRUD operations, metadata, listing, deploy-scoped vs site-scoped stores, and local development. Do NOT use Blobs as a dynamic data store — use Netlify Database for that.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1991,1994,1997,1998],{"name":1992,"slug":1993,"type":15},"Backend","backend",{"name":1995,"slug":1996,"type":15},"File Storage","file-storage",{"name":9,"slug":8,"type":15},{"name":1999,"slug":2000,"type":15},"Storage","storage","2026-07-17T05:30:16.503306",{"slug":2003,"name":2003,"fn":2004,"description":2005,"org":2006,"tags":2007,"stars":23,"repoUrl":24,"updatedAt":2018},"netlify-caching","configure CDN caching on Netlify","Guide for controlling caching on Netlify's CDN. Use when configuring cache headers, setting up stale-while-revalidate, implementing on-demand cache purge, or understanding Netlify's CDN caching behavior. Covers Cache-Control, Netlify-CDN-Cache-Control, cache tags, durable cache, and framework-specific caching patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2008,2011,2014,2015],{"name":2009,"slug":2010,"type":15},"Caching","caching",{"name":2012,"slug":2013,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":2016,"slug":2017,"type":15},"Performance","performance","2026-07-14T05:40:20.066717",{"slug":2020,"name":2020,"fn":2021,"description":2022,"org":2023,"tags":2024,"stars":23,"repoUrl":24,"updatedAt":2030},"netlify-config","configure Netlify site settings","Reference for netlify.toml configuration and site environment variables. Use when configuring build settings, redirects, rewrites, headers, deploy contexts, the `[dev]` block that controls `netlify dev` (command, port, targetPort, framework), or any site-level configuration — and when managing environment variables or secrets with the Netlify CLI, including scoping values to specific deploy contexts. Covers the complete netlify.toml syntax including redirects with splats\u002Fconditions, headers, deploy contexts, functions config, edge functions config, and the `[dev]` block (including when `framework` must be `\"#custom\"` — required when both a custom `command` and `targetPort` are set).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2025,2028,2029],{"name":2026,"slug":2027,"type":15},"Configuration","configuration",{"name":2012,"slug":2013,"type":15},{"name":9,"slug":8,"type":15},"2026-07-17T05:30:21.284801",{"slug":2032,"name":2032,"fn":2033,"description":2034,"org":2035,"tags":2036,"stars":23,"repoUrl":24,"updatedAt":2045},"netlify-database","provision and manage Netlify Database","Guide for using Netlify Database — the GA managed Postgres product built into Netlify. Use when a project needs any kind of dynamic, structured, or relational data. Covers provisioning via @netlify\u002Fdatabase, Drizzle ORM (@beta) setup, migrations, preview branching, and safe production data handling. Blobs is only for file\u002Fasset storage — any dynamic data belongs in the database.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2037,2038,2041,2042],{"name":1992,"slug":1993,"type":15},{"name":2039,"slug":2040,"type":15},"Database","database",{"name":9,"slug":8,"type":15},{"name":2043,"slug":2044,"type":15},"PostgreSQL","postgresql","2026-07-20T05:58:58.934045",{"items":2047,"total":2165},[2048,2063,2075,2082,2089,2096,2103,2110,2116,2123,2136,2150],{"slug":2049,"name":2049,"fn":2050,"description":2051,"org":2052,"tags":2053,"stars":2060,"repoUrl":2061,"updatedAt":2062},"configure-axis","configure AXIS agent evaluation scenarios","Author AXIS (Agent Experience Index Score) scenarios and axis.config.json for a project. Use when the user asks to set up AXIS, add a scenario, write or edit axis.config.json, or evaluate an AI agent with AXIS.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2054,2055,2056,2059],{"name":21,"slug":22,"type":15},{"name":2026,"slug":2027,"type":15},{"name":2057,"slug":2058,"type":15},"Evals","evals",{"name":9,"slug":8,"type":15},32,"https:\u002F\u002Fgithub.com\u002Fnetlify\u002Faxis","2026-07-20T05:59:47.468757",{"slug":2064,"name":2064,"fn":2065,"description":2066,"org":2067,"tags":2068,"stars":2060,"repoUrl":2061,"updatedAt":2074},"using-axis","run and interpret AXIS reports","Run AXIS, read its reports, navigate its project layout, and interpret scores. Use when the user asks to run AXIS, invoke the CLI, compare runs, explain a score, find a regression, manage baselines, or understand where AXIS writes its files.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2069,2072,2073],{"name":2070,"slug":2071,"type":15},"CLI","cli",{"name":2057,"slug":2058,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:40:13.443461",{"slug":1947,"name":1947,"fn":1948,"description":1949,"org":2076,"tags":2077,"stars":23,"repoUrl":24,"updatedAt":1962},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2078,2079,2080,2081],{"name":1953,"slug":1954,"type":15},{"name":9,"slug":8,"type":15},{"name":1957,"slug":1958,"type":15},{"name":1960,"slug":1961,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":2083,"tags":2084,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2085,2086,2087,2088],{"name":21,"slug":22,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":1971,"name":1971,"fn":1972,"description":1973,"org":2090,"tags":2091,"stars":23,"repoUrl":24,"updatedAt":1984},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2092,2093,2094,2095],{"name":1977,"slug":1978,"type":15},{"name":1980,"slug":1981,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":1986,"name":1986,"fn":1987,"description":1988,"org":2097,"tags":2098,"stars":23,"repoUrl":24,"updatedAt":2001},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2099,2100,2101,2102],{"name":1992,"slug":1993,"type":15},{"name":1995,"slug":1996,"type":15},{"name":9,"slug":8,"type":15},{"name":1999,"slug":2000,"type":15},{"slug":2003,"name":2003,"fn":2004,"description":2005,"org":2104,"tags":2105,"stars":23,"repoUrl":24,"updatedAt":2018},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2106,2107,2108,2109],{"name":2009,"slug":2010,"type":15},{"name":2012,"slug":2013,"type":15},{"name":9,"slug":8,"type":15},{"name":2016,"slug":2017,"type":15},{"slug":2020,"name":2020,"fn":2021,"description":2022,"org":2111,"tags":2112,"stars":23,"repoUrl":24,"updatedAt":2030},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2113,2114,2115],{"name":2026,"slug":2027,"type":15},{"name":2012,"slug":2013,"type":15},{"name":9,"slug":8,"type":15},{"slug":2032,"name":2032,"fn":2033,"description":2034,"org":2117,"tags":2118,"stars":23,"repoUrl":24,"updatedAt":2045},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2119,2120,2121,2122],{"name":1992,"slug":1993,"type":15},{"name":2039,"slug":2040,"type":15},{"name":9,"slug":8,"type":15},{"name":2043,"slug":2044,"type":15},{"slug":2124,"name":2124,"fn":2125,"description":2126,"org":2127,"tags":2128,"stars":23,"repoUrl":24,"updatedAt":2135},"netlify-deploy","deploy and host projects on Netlify","Deploy, host, and publish web projects on Netlify with the Netlify CLI. Use when the user wants to deploy a site or repository to Netlify, link a local project to a Netlify site, ship a production or preview\u002Fdraft deploy, set up Git-based continuous deployment, run a manual or local deploy, configure CI deploys, or troubleshoot a failed or misconfigured deploy. Also use to view or tail a deployed site's runtime logs — function and edge-function output, deploy logs — via `netlify logs` when debugging what a live site is doing (recent errors, recent activity, streaming output).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2129,2130,2131,2132],{"name":2070,"slug":2071,"type":15},{"name":2012,"slug":2013,"type":15},{"name":9,"slug":8,"type":15},{"name":2133,"slug":2134,"type":15},"Web Development","web-development","2026-07-17T05:30:14.218977",{"slug":2137,"name":2137,"fn":2138,"description":2139,"org":2140,"tags":2141,"stars":23,"repoUrl":24,"updatedAt":2149},"netlify-edge-functions","write Netlify Edge Functions","Guide for writing Netlify Edge Functions. Use when building middleware, geolocation-based logic, request\u002Fresponse manipulation, authentication checks, A\u002FB testing, or any low-latency edge compute. Covers Deno runtime, context.next() middleware pattern, geolocation, and when to choose edge vs serverless.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2142,2144,2147,2148],{"name":1671,"slug":2143,"type":15},"edge-functions",{"name":2145,"slug":2146,"type":15},"Middleware","middleware",{"name":9,"slug":8,"type":15},{"name":2016,"slug":2017,"type":15},"2026-07-14T05:40:34.147865",{"slug":2151,"name":2151,"fn":2152,"description":2153,"org":2154,"tags":2155,"stars":23,"repoUrl":24,"updatedAt":2164},"netlify-forms","handle HTML forms with Netlify","Guide for using Netlify Forms for HTML form handling. Use when adding contact forms, feedback forms, file upload forms, or any form that should be collected by Netlify. Covers the data-netlify attribute, spam filtering, AJAX submissions, file uploads, notifications, and the submissions API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2156,2159,2162,2163],{"name":2157,"slug":2158,"type":15},"Forms","forms",{"name":2160,"slug":2161,"type":15},"HTML","html",{"name":9,"slug":8,"type":15},{"name":2133,"slug":2134,"type":15},"2026-07-14T05:40:16.075367",17]