This is an archived copy of the SandyWP docs. It is kept online as a fallback and may be out of date. The maintained documentation lives at docs.sandywp.com.

Slack app

Deploy to your SandyWP sandboxes without leaving Slack. Mention @SandyWP with a plugin .zip attached or a deploy <branch> command and the bot creates a site (or deploys to an existing one) and replies in-thread with the URL and a magic login link.

SandyWP for Slack is mention-based: you talk to the bot by @mentioning it in a channel it belongs to. There are no slash commands to remember. See the SandyWP for Slack overview for a tour, or read on for the full walkthrough.

Use natural language or exact commands

Describe what you want in your own words. When enabled, AI interprets sandbox and deployment requests before anything runs. Exact login, logout, help, and list commands work directly. For example: @SandyWP prepare a checkout sandbox on PHP 8.2 with query monitor, or attach a ZIP and say @SandyWP put this in a fresh site called release-review.

The AI can only propose structured command fields. It cannot call SandyWP APIs directly, choose credentials, or bypass version checks, account permissions, site pickers, and delete confirmations. Ambiguous requests get a clarification instead of a guessed action.

Install to your workspace

A workspace admin installs the app once, then anyone in the workspace can use it.

  1. Open the SandyWP for Slack page and click Add to Slack (this points at /slack/install). If you are signed in to SandyWP, the Slack tab on your account page shows the same button.
  2. Slack asks you to approve the app for your workspace. Approve it.
  3. You land back on a success page. Your workspace's bot token is stored encrypted (AES-256-GCM) there is nothing to configure on your end.

Invite the bot to any channel you want to use it in with /invite @SandyWP. The bot only sees messages in channels it has been added to.

Link your account

Deploys run as you against your SandyWP account and your plan limits so each Slack user links their own identity once.

  1. In Slack, mention @SandyWP login (link / sign in work too).
  2. The bot replies in-thread with a one-time link. Open it in your browser.
  3. Log into SandyWP normally, then click Link my account. A personal API token is created for Slack so deploys act as your account.

The bot posts a confirmation back into the thread once you are linked. To unlink later, mention @SandyWP logout it revokes that API token and removes the mapping.

Login links are single-use and expire after about 10 minutes. If yours expired, just run @SandyWP login again for a fresh one.

Deploy plugin ZIPs

Attach both plugin ZIPs and say @SandyWP create a sandbox with these 2 plugins. If they were uploaded earlier in the thread, add above. SandyWP uses the latest ZIP upload in that thread, creates one sandbox, and installs each selected plugin in order. You can also name a single attached file. If the selection is unclear, the bot asks which ZIP. Batches support up to 20 ZIPs. If an install fails, the bot stops and reports what succeeded.

An ordinal selects exactly one ZIP in the displayed attachment order. For example, @SandyWP install the 2nd plugin on a new site installs only the second ZIP. This explicit selection overrides the normal behavior that keeps an unqualified base-and-Pro pair together.

Attach a plugin .zip to a message and mention the bot. SandyWP downloads it, installs and activates the plugin, and replies with the site URL, a magic login link, and the result. Where the plugin lands depends on how you phrase the mention:

You sayWhat happens
@SandyWP create a site wp: 6.9 php: 8.2 and install thisCreates a brand-new site on WordPress 6.9 with PHP 8.2 and deploys the plugin onto it. Omit either version option to use its default.
@SandyWP install this to my-demoDeploys to your existing site my-demo. A slug or a full my-demo.sandywp.dev URL both work. Only ready sites qualify. Keep the to: a bare install my-demo now reads as a wordpress.org plugin name (see below).
@SandyWP name: my-demoCreates a new site named my-demo. name: always means "make a new site", never "target an existing one".
@SandyWP install this (no site named)If you already have ready sites, the bot replies with a picker instead of guessing (see below). With no ready sites yet, it just creates one.

The site picker

When you attach a ZIP but don't say where it should go, the bot posts buttons in the thread: one per recent ready site (up to four, with a dropdown above that) plus ➕ Create new site. Click one and it deploys there, swapping the buttons for "Installing…". Only the person who started the mention can click, and the picker expires after about 15 minutes.

Already uploaded the ZIP earlier in the thread? Reply @SandyWP upload that plugin and the bot grabs the most recent .zip from the thread Slack often omits the file from the mention itself, so it re-scans the thread to find it.

Preinstall plugins from wordpress.org

List wordpress.org plugin slugs after install or with, separated by commas and/or and. They are installed and activated while the sandbox is being built, so it comes up with everything already in place:

  • @SandyWP create a site with query-monitor, woocommerce no ZIP needed.
  • @SandyWP create a site name: plugin-test, install this, and publishpress-authors, post-expirator your attached .zip and two wordpress.org plugins, in one message.

Up to 10 plugins per site. The word this always means the attached ZIP, and the name:, wp:, and php: values are never mistaken for plugin names.

Preinstalling a list happens while a new sandbox is built. To add one wordpress.org plugin to a site you already have, use the existing-site command below.

Typos are caught before anything is created

If a slug is not on wordpress.org, the bot stops and asks instead of handing you a sandbox that is quietly missing the plugin you wanted to test:

🔍 I couldn't find publishpress-author on wordpress.org. Did you mean publishpress-authors?

Every bad name is reported in one reply, and nothing is created until you fix it, so just correct the message and mention the bot again. When no close match exists the bot says so rather than guessing.

Install wordpress.org plugins on an existing site

Add and activate up to 10 directory plugins without rebuilding the sandbox or uploading a ZIP:

  • @SandyWP install query-monitor, woocommerce on my-demo installs both directly on the named ready site.
  • @SandyWP install query-monitor, woocommerce installs immediately when you have one ready site, or shows a site picker when you have several.

Separate slugs with commas or and. This picker only lists existing ready sites and has no “Create new site” action. Plugins run sequentially through the same background deployment lifecycle as a ZIP, and the final reply includes the site URL, a fresh magic login link, and any per-plugin failures. Plugin names are checked against wordpress.org first, so a typo gets the same correction prompt as a create-time preinstall.

Deploy a git branch

With no ZIP attached, mention @SandyWP deploy <branch> to deploy a branch from a site's connected git repository. All of these work:

  • @SandyWP deploy development
  • @SandyWP deploy branch development
  • @SandyWP deploy development branch

This requires a repository connected on the site's Git Deployment panel first — see the Git deployment guide to set one up. From there:

  • No site has a repo yet → the bot explains you need to connect a repository first.
  • Exactly one site has a repo → it deploys there immediately.
  • Several do → it shows a repo-only picker to choose which. There is no "Create new site" here, since a git deploy needs an existing repository.

The branch you name overrides the repository's configured branch for that run only the repo's saved branch is never changed. On success the bot replies with the branch, the deployed commit SHA and message, the site URL, and a magic login link; on failure it posts the tail of the deploy log.

Filler words like deploy this or deploy plugin are not treated as branch names, and an invalid ref is rejected with a hint. If a .zip is attached, the plugin deploy always wins over deploy <branch> text.

Site commands

Manage sites without a ZIP, straight from Slack:

CommandWhat it does
@SandyWP create new site, name: future-test, wordpress version 7.1 betaCreates a named site on the requested WordPress prerelease. Friendly shorthand such as 7.1 or 7.1 beta selects the release when exactly one version matches; if several match, the bot lists the exact choices.
@SandyWP install query-monitor, woocommerceInstalls and activates wordpress.org plugins on an existing ready site. Name it with on my-demo, or let the bot show your ready sites to choose from.
@SandyWP create a new site from template client-baseCreates the site from one of your saved templates instead of a blank WordPress. The compact form is @SandyWP create a new site, name: my-demo, template: client-base, and a name matches either the template's slug or its display name. A template brings its own WordPress version, PHP version, and plugins, so wp:, php:, and a preinstall list are refused with it rather than dropped; an unknown or still-building template creates nothing and lists your ready templates. A .zip in the same message is deployed onto the new site.
@SandyWP list my templatesLists your saved templates (also show my templates / just my templates), with the status of any that are still building.
@SandyWP list my sitesLists your sites (also show my sites / just my sites).
@SandyWP delete my-demoDeletes a site by slug (also remove site my-demo). The bot asks you to confirm with a button first nothing is deleted until you click it.

Options

Options are comma-separated and can appear in any order. One message can carry all of them:

@SandyWP create a new site, name: plugin-test, wp: 7.1, php: 8.2, plugins: query-monitor and akismet, install this
OptionAlso written asWhat it sets
name:named, calledThe new site's name. Always creates a new site.
wp:wordpress:, wordpress version:, wordpress version 7.1 betaThe WordPress release for a new site. Ignored for a deploy onto an existing site.
php:php version:, php version 8.2The exact PHP runtime for a new site. Ignored for a deploy onto an existing site.
plugins:plugin:, install …, with …, add …Up to 10 wordpress.org slugs to preinstall and activate, comma or and separated.
template:from template …The saved template to clone. Cannot be combined with wp:, php:, or plugins:.
to my-demoon, into, a my-demo.sandywp.dev URLAn existing site to act on. The opposite of name:: nothing new is created.

WordPress options accept compact forms such as wp: 6.9, wordpress: 6.9, and wordpress version: 6.9, plus natural create-site wording such as wordpress version 7.1 beta. PHP accepts php: 8.2, php version: 8.2, and natural php version 8.2 wording. Unsupported versions are rejected instead of silently using a different release. The reply includes available versions, a valid command, and a link to the Slack feature guide. The option only applies when the command creates a new site; deploying to an existing site does not change its WordPress or PHP version.

Not sure what to type? Say @SandyWP help for the full command list. An unrecognized mention gives a short pointer to that help and this guide.

Troubleshooting

SymptomFix
The bot doesn't respond to a mention.It probably isn't in that channel. Run /invite @SandyWP in the channel and try again the bot only sees messages where it has been added.
"That request expired" when you click a picker button.Pickers expire after about 15 minutes. Re-send your mention (or ZIP) to get fresh buttons. Only the person who started the mention can click.
"Link your account first."You haven't linked yet, or your link was revoked. Mention @SandyWP login, open the link, and click Link my account.
Your login link says it's invalid or expired.Login links are single-use and last about 10 minutes. Run @SandyWP login again for a new one.
The plugin ZIP is rejected as too large.Plugin uploads are capped at 50 MB. For larger projects, deploy from a git repository instead.
deploy <branch> says to connect a repository first.No ready site has a connected repository. Set one up on the site's Git Deployment panel, then try again.
A deploy failed.The bot posts the tail of the deploy log in-thread. Fix the issue and re-run the command.

Privacy & data

SandyWP stores your workspace's bot token and your personal API token encrypted at rest, plus the Slack team and user IDs needed to route replies. Message text is processed to run your command. When natural-language interpretation is enabled, SandyWP sends only the mention text, recent messages in the thread, and ZIP filenames and IDs to Anthropic (Claude); it never sends Slack tokens, SandyWP tokens, or ZIP contents. Uninstalling the app or unlinking your account removes the stored token and mapping. See the Privacy Policy for the full details.

Next steps