Deploy a website to WordPress with an AI agent
For most of Parkstatic's life there was exactly one way in: a GitHub repository. Push to main, GitHub Actions builds the project, and the finished pages land on your WordPress domain. That works well when the repo is where you live.
But a lot of sites are not built that way anymore. They start as a folder on a laptop and a conversation with a coding agent - Claude Code, Cursor, Codex, or whatever your editor ships with. The agent writes the pages, runs the build, fixes the layout, and then hits a wall: it can't publish. So you stop, open a browser, create a repo, wire up a workflow, and push - just to see a change go live.
That step is gone. Parkstatic now publishes an agent SKILL.md that teaches any coding agent how to build your site, package it, and deploy it to WordPress from the machine it's already running on. No repository, no push, no CI run.
What a SKILL.md actually is
A skill is a markdown file with YAML frontmatter that an agent loads on demand. The frontmatter says what the skill is for; the body is the procedure - real commands, real endpoints, real failure modes. Instead of hoping the model has memorised your deploy process, you hand it the process.
---
name: parkstatic-local-deploy
description: Deploy a static site to Parkstatic (WordPress) from a
local machine or AI agent, without GitHub Actions.
compatibility: Requires git, zip, curl, and Node.js.
---The Parkstatic skill mirrors what the ParkStatic/action GitHub Action does in CI, minus the parts that only make sense on a runner. Three steps survive the translation: build → package → upload.
Install the skill
The skill lives in a public repo and installs through whichever agent-skills registry your tooling uses:
# Vercel skills.sh ecosystem
npx skills add ParkStatic/skill
# skills-hub.ai
npx @skills-hub-ai/cli install ParkStatic/skill
# agentskillhub.dev
npx skhub add ParkStatic/parkstatic-local-deployOr skip the registries entirely and copy the parkstatic-local-deploy/ folder into your agent's skills directory - for Cursor that's .cursor/skills/ or ~/.cursor/skills/. Either way, the next time you say "deploy this to WordPress," the agent knows what that means.
What the agent does when you say "deploy"
Worth knowing, because you should never run a deploy you can't picture. The skill walks the agent through nine steps, and none of them are magic:
- Detect the package manager. From the lockfile at the repo root -
pnpm-lock.yaml,bun.lock,yarn.lock, orpackage-lock.json, defaulting to npm. - Match the Node version. If there's an
.nvmrcor.node-version, use it. The action defaults to Node 22. - Install dependencies with the frozen lockfile, falling back to a plain install when the lockfile is out of sync.
- Run your own build script. Every framework Parkstatic supports exposes its build through
npm run build- Vite, Astro, Nuxt, Next.js, Remix, React Router, SvelteKit, TanStack Start - so one command covers them all. - Find the output directory. The same heuristic the action uses: check
dist/client,dist,build,build/client,.output/public,out, and take the first one holding anindex.html. - Zip the contents of that directory (not the directory itself) into
dist.zipat the workspace root. - Strip dotfiles. WordPress's receiver rejects archives with unsafe entries, and on macOS the usual culprit is
.DS_Store. The skill excludes dotfiles and then verifies the archive is clean. - POST the zip to
https://deploy.parkstatic.sitewith your deploy secret on theX-Parkstatic-Tokenheader. - Read the response properly. Each status code maps to a specific cause, so the agent can fix the real problem instead of guessing.
The upload, in full
This is the only step that talks to Parkstatic. The X-Parkstatic-Wait header makes the endpoint block until WordPress confirms the install, so a failure on the WordPress side comes back as a non-2xx here rather than going green and quietly doing nothing:
curl -sS -X POST \
-H "X-Parkstatic-Token: $PARKSTATIC_SECRET" \
-H "Content-Type: application/zip" \
-H "X-Parkstatic-Wait: true" \
--data-binary "@dist.zip" \
https://deploy.parkstatic.siteA successful deploy answers with the artifact id and what WordPress did with it:
{"ok":true,"deploy_id":"0e4b19aa-…","wp_status":200,
"message":"WordPress installed 74 files."}The endpoint authenticates the upload, parks the artifact in private storage, signs a short-lived download URL, and hands it to your site's receiver, which pulls the zip and extracts it. Your source never leaves your machine - only the built output does.
Getting the deploy secret
One credential, and the agent can't do anything without it. It comes from the WordPress plugin, not from a dashboard here:
- Buy a Parkstatic Premium license and download the plugin from your account.
- Install and activate it on your WordPress site (Plugins → Add New → Upload Plugin) and enter your license key.
- Copy the generated secret from Parkstatic → General → Deploy secret in WP admin.
Then export it in the shell your agent runs in. The full walkthrough with screenshots is on the get started page.
When to use the agent, when to use GitHub
Both paths reach the same endpoint and produce the same result. They differ in what happens before the upload:
| Agent skill | GitHub Action | |
|---|---|---|
| Needs a repo | No | Yes |
| Trigger | You ask the agent | Every push to main |
| Builds where | Your machine | GitHub's runner |
| Prerender crawl | No - ships output verbatim | Yes - headless Chromium |
| Best for | Local iteration, hotfixes, agent workflows | Teams, SSR builds, reproducible CI |
What this changes in practice
The interesting part isn't that a script got shorter. It's that the whole loop - write, build, publish - now closes inside one conversation. You describe a change, the agent makes it, the agent ships it, and you check the live URL. Nothing about the hosting changes: it's still the WordPress hosting you already pay for, still pre-rendered HTML, still your domain.
It also makes Parkstatic usable in places a repo never fit. A one-page site for a client that will never see a second commit. A landing page rebuilt three times in an afternoon. A hotfix at 11pm when opening a pull request to change a phone number feels absurd. And when the project does grow up and want CI, the GitHub Action is still there, pointed at the same endpoint.
Troubleshooting
The deploy endpoint's status codes are specific on purpose - each one has a single likely cause:
- 401 - the token header was missing or empty. Usually
PARKSTATIC_SECRETwasn't exported in the shell. - 403 - no active paid license. Check Parkstatic → Account in WP admin.
- 404 - the secret doesn't match any registered instance. Re-copy it from the plugin.
- 400 - malformed upload. If the body mentions
parkstatic_unsafe_zip_entry, a dotfile survived the zip; re-package with the excludes. - 502 - WordPress rejected the deploy. The body carries the receiver's own error and a
wp_status.
Because the skill documents these, the agent can read a failure and act on it rather than retrying the same upload and reporting success it didn't earn.
Frequently asked questions
Can an AI agent deploy a website to WordPress?
Yes. Install the Parkstatic skill, give your agent the deploy secret through an environment variable, and it can build your project, package the static output, and upload it. The WordPress plugin serves the result from your domain.
Do I still need GitHub to use Parkstatic?
No. GitHub Actions remains the default for teams and for SSR builds that need a prerender crawl, but it is no longer the only route. A local folder and a deploy secret are enough.
Which agents can use the skill?
Any agent that reads SKILL.md files - Claude Code, Cursor, and the growing set of tools following the Agent Skills convention. The steps are ordinary shell commands, so an agent that can only run a terminal will manage too.
Does the agent see my source code?
Your agent works on your machine, so it sees whatever you've opened - that part is between you and your editor. Parkstatic receives only the built zip: no source, no repository access.
Can I use both the agent skill and GitHub Actions?
Yes, on the same site. They share one deploy secret and one endpoint. Ship hotfixes locally, let CI handle pushes to main. The most recent deploy wins.
Try it
If you already run Parkstatic, installing the skill takes one command and your next deploy can happen without leaving your editor. If you don't, grab a Premium license, follow the get started guide to install the plugin and generate your secret, then point your agent at the skill repo. For the wider picture of how any of this reaches your domain, see static site hosting on WordPress.