Your agent tests the plugin. You keep writing code

Ask Claude for a site to test your build on. It makes one, installs the plugin, and reads the error back — no ZIP, no upload form, no host login.

Claude Code, Cursor, Codex — anything with a shell or an MCP client.

Ten minutes, twice

Seven steps to find out you missed a null check

The tedious part was never the code.

By hand

You are the deploy pipeline

  1. 1

    Run the build, then zip the plugin folder.

  2. 2

    Log in to the host — or the staging site, or whichever install you keep around for this.

  3. 3

    Plugins → Add New → Upload Plugin → Choose file → Install Now.

  4. 4

    Deactivate the old copy, activate the new one, dismiss the notice.

  5. 5

    Click through wp-admin until something looks wrong.

  6. 6

    White screen. Edit wp-config.php over SFTP to switch WP_DEBUG on, reload, copy the error.

  7. 7

    Fix one line. Go back to step 1.

Now change one PHP version and do it all again.

With an agent

You describe the outcome once

you

“Put the current build on a fresh WordPress 7.1-beta3 sandbox with PHP 8.1, turn debug on, and tell me what breaks.”

  • Creates a sandbox on the WordPress and PHP version you named.
  • Installs and activates the build — no upload form, no ZIP you made by hand.
  • Switches WP_DEBUG and WP_DEBUG_LOG on for that sandbox.
  • Reads wp-content/debug.log and quotes the fatal back with a file and a line number.

You never left the editor. Change “7.1-beta3” to “6.6” and ask again.

Trusted by

PublishPressPaywallProjectNewsletter GlueInfinite UploadsMetaSlider

Your agent probably already has what it needs

Pick whichever one your agent can already reach.

mcp server

Ask for a site in the chat you already have open

Add the endpoint, approve it once in the browser, and 50+ tools appear where you are already typing.

https://app.sandywp.com/mcp AI & MCP

cli

If it can run a shell, it can already do this

Node 18 and one browser approval. Then it can deploy a local ZIP the remote MCP server cannot reach.

npx @sandywp/cli deploy my-site acme-forms.zip CLI

ssh, sftp & mounts

Let the agent edit the running site, not a copy of it

The sandbox’s /var/www/html shows up at ~/SandyWP/my-site. Every save lands on the live install.

sandywp mount my-site SSH & SFTP

Deeper: the CLI docs, the mount guide, and llms.txt for machines.

One prompt, four tool calls, an answer

The same prompt as above, with the receipts. Every tool name is real.

you

Put the current build on a fresh WordPress 7.1-beta3 sandbox with PHP 8.1, turn debug on, and tell me what breaks.

sandywp_create_site

{ siteName: "beta-check", wordpressVersion: "7.1-beta3", phpVersion: "8.1" }

job queued · provisioning cold (pre-release build)

✓ ready · https://beta-check.sandywp.dev

sandywp_deploy_plugin

{ siteId: "site_9f2c…", zipUrl: "https://ci.acme.dev/acme-forms-2.4.0.zip" }

✓ installed and activated · acme-forms 2.4.0

sandywp_update_debug_options

{ siteId: "site_9f2c…", wpDebug: true, wpDebugLog: true }

✓ WP_DEBUG on · logging to wp-content/debug.log

sandywp_read_debug_log

{ siteId: "site_9f2c…", lines: 40 }

PHP Fatal error: Uncaught TypeError: acme_render_field():

Argument #2 ($args) must be of type array, null given,

called in wp-content/plugins/acme-forms/src/Field.php on line 118

claude

Field.php:118 assumes the filter always returns an array; here it can be null. A one-line guard fixes it — want me to patch it and redeploy to the same sandbox?

  • ZIP files you built by hand: zero.
  • Hosts you logged into: zero.
  • Editor windows you left: zero.

What changes once the agent runs the loop

iterate

One prompt instead of the upload form

It creates the sandbox, installs the build, and hands back a URL with a one-time wp-admin login.

shareable

The broken state has a URL you can send someone

A real server with a public address — hand a colleague the link instead of a transcript.

php

It can change the setting that caused the bug

PHP 8.1, 8.2 or 8.3. Memory 64–512 MB, execution 10–300s. The restart takes seconds.

disposable

A sandbox it wrecks costs you nothing

Reset to a clean install at the same URL, or delete it. One tool call either way.

self-serve

It reads the manual so you do not paste it

llms.txt is a plain-text quickstart for agents. Point one at it and it stops guessing.

no cleanup

Last Tuesday’s test sites are already gone

An hour, a week, or permanent — you pick at create time. Expired sandboxes remove themselves.

Four jobs it stops handing back to you

debug mode

It reads the fatal instead of asking you for a screenshot

Flip WP_DEBUG per sandbox; the log is one tool call away.

[23-Jul 09:14] PHP Warning: Undefined array key

"layout" in .../acme-forms/src/Renderer.php:64

[23-Jul 09:14] PHP Fatal error: Uncaught TypeError

✓ 40 lines returned to the agent

Debug mode

git deployment

It deploys the branch it just wrote

One GitHub repo per sandbox, tracking the branch on every push.

$ git push origin fix/null-args

github → sandywp webhook

✓ deployed → wp-content/plugins/acme-forms

a4f9c21 · guard $args before render

Git Deployment

github previews

Every pull request gets an exact-commit WordPress review site

Tag SandyWP on the PR; the bot verifies the SHA before it reports the preview ready.

@sandywp-bot deploy

fetch refs/pull/42/head

✓ verified a4f9c21 · preview ready

GitHub PR Previews

templates

Every run starts from the site that actually breaks

Save the fixture — versions, plugins, content, database — and relaunch fresh copies.

sandywp_list_templates

woo-checkout-fixture

acme-forms-regression

✓ run-17 ready · run-17.sandywp.dev

Templates

wordpress beta

Sweep the version matrix while you keep working

6.6 through 7.1-beta3, each on PHP 8.1, 8.2 or 8.3. WordPress 7.1 lands August 2026.

sandywp_create_site ×4

✓ wp 6.6 · php 8.1 · activates

✓ wp 7.0.2 · php 8.3 · activates

✗ wp 7.1-beta3 · php 8.1 · fatal on activate

WordPress Beta

The rest of what is in the box

Everything else your agent can reach, one line each.

  • More than 50 tools in the chat window you already use.

    AI & MCP
  • Create, deploy, ssh, mount and delete from any shell.

    CLI
  • A real shell with WP-CLI, scoped to one sandbox.

    SSH & SFTP
  • The error text, not your description of it.

    Debug mode
  • Test what is in the repo, not what is in Downloads.

    Git Deployment
  • Save the fixture once, relaunch it per run.

    Templates
  • Find the 7.1 breakage before your users file it.

    WordPress Beta
  • Clone the live site so the agent debugs real data. Production is only read.

    Cloner
  • Create a site or deploy a branch from a Slack mention.

    Slack
  • Review the exact pull request commit in temporary WordPress.

    GitHub PR Previews

What it costs to hand this to an agent

An agent makes more sandboxes than you would. That only works if they are cheap.

Free

$0

  • 2 active sandboxes
  • 256 MB storage
  • Sandboxes expire after a week

No card required

Plus

$7/mo

  • 10 active sandboxes
  • 5 GB storage
  • CLI, SSH, mounts, Git deploys

≈ $0.70 per sandbox / month

Max

$27/mo

  • 50 active sandboxes
  • 30 GB storage
  • CLI, SSH, mounts, Git deploys

≈ $0.54 per sandbox / month

Pro holds 25 live WordPress installs for $17 a month — about 68¢ per sandbox. Yearly billing is ten months for twelve.

A customer who moved over from another sandbox host gave one reason: a lot more features for a better price point.

Free is real — 2 sandboxes, no card — but the CLI, SSH, mounts, Slack, PHP config and Git deploys start at Plus.

Questions before you hand over the keys

Do I need to use Claude specifically?

No. Any agent with a shell can use npx @sandywp/cli; any MCP-capable client can add the endpoint.

Does the agent get shell access to my production site?

No — sandboxes only. SSH lands inside that sandbox’s own container, is key-based, and stays off until you enable it per sandbox.

How do I connect the MCP server?

Add https://app.sandywp.com/mcp as a remote MCP server and approve the OAuth prompt. Scoped to your account, revocable any time.

Can the MCP server install a ZIP that is sitting on my laptop?

No, it is remote and cannot read local files. Run npx @sandywp/cli deploy in your shell instead, or pass a public zipUrl.

What happens to sandboxes the agent forgets about?

They expire. One week by default, from 1 hour up to permanent. After expiry: 7 days retention on paid plans, 12 hours on Free.

Can it deploy from my git repo instead?

Yes — one GitHub repo per sandbox, auto-deploy on push to a branch, or a one-off deploy of any branch or tag. Paid plans.

Is this on the free plan?

Partly. Free gives 2 sandboxes and no card. The CLI, SSH, mounts, Slack, PHP config and Git deploys start at Plus, $7 a month.

How fast is a sandbox, really?

Default stacks come from a warm pool and are ready in seconds. Pinned versions, betas and multisite provision cold, so creates return a job to poll.

What if the agent breaks WordPress completely?

That is the point of a sandbox. Reset it to a clean install at the same URL, or delete it and make another.

Let it run the boring half.

Create a free account, connect your agent once, and take the zip-and-upload step out of your week.