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.
65
78%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./agent-plugin/skills/netlify-agent-runner/SKILL.mdThe canonical home for this skill is netlify-agent-runner in netlify/context-and-tools
Run AI coding agents (Claude, Codex, Gemini) remotely on Netlify infrastructure to automate development tasks on your site.
netlify link or netlify init).--project <name> (a project ID or name) directly to netlify agents:create to target any Netlify site without linking first.netlify agents:create is blocked and the run won't start. That's an account/plan-state issue to surface to the user, not something to work around.Interact with agent tasks only through the documented netlify agents:* commands (plus netlify --help and the public CLI reference). Do not go around the CLI:
https://api.netlify.com/... to fetch, create, or stop a task — the endpoint shapes are not part of the public contract.netlify api <method> as a recovery hatch when a documented command fails.~/Library/Preferences/netlify/config.json (or anywhere on disk) to authenticate side-channel calls.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.
Read this before creating a task — agent tasks behave differently from running an agent locally, and the differences are easy to miss.
main or master). To choose a different base branch for the agent to start from, use -b <branch> 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).main) is never overwritten. Review the task's results on that new branch / Deploy Preview — don't expect the base branch to change directly.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.netlify agents:show <task-id> or netlify agents:list.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.netlify agents:create "<prompt>" -a <agent>. Note the task ID it returns (use --json to capture it reliably).netlify agents:show <task-id>. Repeat periodically — there is no completion notification — until the status is done, error, or cancelled.done (or inspect the failure on error).# Run a prompt with the default agent
netlify agents:create "Add a contact form"
# Choose a specific agent: claude, codex, or gemini
netlify agents:create --prompt "Add dark mode" --agent claude
netlify agents:create -p "Update the README" -a codex
netlify agents:create -p "Write unit tests" -a gemini
# Target a specific branch
netlify agents:create -p "Fix the login bug" -a claude -b feature-branch
# Specify a project by name (if not in a linked directory)
netlify agents:create "Add tests" --project my-site-name
# Output result as JSON
netlify agents:create "Add a footer" --json| Flag | Description |
|---|---|
-a, --agent <agent> | Agent type: claude, codex, or gemini |
-p, --prompt <prompt> | The prompt for the agent to execute |
-b, --branch <branch> | Git branch to work on |
-m, --model <model> | Model to use for the agent |
--project <project> | Project ID or name |
--json | Output result as JSON |
All 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 <name>), 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 <name> for it.
# List all tasks for the current site
netlify agents:list
# Filter by status
netlify agents:list --status running
netlify agents:list --status done
netlify agents:list --status error
# Output as JSON
netlify agents:list --jsonStatus values: new, running, done, error, cancelled.
netlify agents:show <task-id>
netlify agents:show <task-id> --jsonnetlify agents:stop <task-id>Some of the many things you can do with Agent Runners:
| Category | Example prompt |
|---|---|
| Prototyping / internal tools | "Build an internal dashboard for our HR team" |
| Code reviews | "Audit the code with fresh eyes and identify areas for improvement" |
| Security audits | "Do a deep security audit of our codebase to identify any potential issues" |
| Feature suggestions | "Based on our current codebase & docs, what should we build next?" |
| Performance improvements | "Scan our codebase for performance bottlenecks and suggest improvements" |
| Telemetry & analytics | "What analytics things are we not tracking but probably should" |
| SEO audit | "Audit our site for SEO issues — missing meta tags, broken links, slow pages, missing alt text" |
| Copy improvements | "Rewrite our landing page copy to be more compelling and conversion-focused" |
| Accessibility | "Run an accessibility audit and fix all WCAG 2.1 AA violations" |
| Mobile responsiveness | "Improve the mobile responsiveness — audit every page on small viewports" |
| End-to-end tests | "Add end-to-end tests for our critical user flows using Playwright" |
| Unit tests | "Generate unit tests for our untested utility functions" |
| Documentation | "Generate a README and contributing guide based on our codebase" |
| Error handling | "Add proper error boundaries, logging, and user-friendly error states throughout the app" |
| UX polish | "Add loading states, skeleton screens, & transitions to improve perceived performance" |
| Form hardening | "Add form validation, rate limiting, and spam protection to our contact form" |
| Edge Functions | "Add an edge function for A/B testing on our landing page" |
If 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.
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.
Make the permission request a concrete proposal, not a menu:
netlify agents:create -p "<the real prompt>" -a codex — not a <placeholder> and not a pick-one list of agents.-a value and say why you picked it ("codex for a second opinion on the auth logic"), rather than offering claude/codex/gemini as interchangeable options.agents:create returns as soon as the task is queued, there's no callback, and you'll poll netlify agents:show <task-id> for the outcome.Never run these commands without the user's approval.
Before delegating, understand what you're handing off (see How Agent Tasks Run above):
netlify agents:show <task-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.Useful for:
0830047
Canonical home
since Sep 26, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.