pressable
Skill8 starsChanged 2 months agoMITView on GitHub
Manage Pressable WordPress hosting via API. Use when creating/cloning sites, managing backups, purging cache, updating PHP versions, managing plugins, checking site status, or any Pressable hosting operations.
- Reads credentials
- Sends data out
In this repository8 other files it gives its agents.
- agent-skill-inventory-and-consolidationSkill
- bloggerSkill
- copy-to-clipboardSkill
- dialkitSkill
- explain-with-canvasSkill
- project-setupSkill
- pr-review-guideSkill
- tweak-controlsSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. About 0 are common, 14 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈14
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 34
Create a credentials file (keep outside of git repos):
- Distinctive: line 68
Add the public key to Pressable:
- Distinctive: line 311
Run WP-CLI commands without SSH:
- Very specific: line 319
Note: Don't include wp prefix — it's added automatically.
- Distinctive: line 328
Root access: Not available
- Distinctive: line 365
Only themes, plugins, mu-plugins sync (not core or uploads)
- Distinctive: line 371
Private repos: Must grant OAuth access to organization
- Distinctive: line 372
Wrong branch: Check Git tab settings
- Very specific: line 373
Files not syncing: Ensure they're in wp-content/{themes,plugins,mu-plugins}/
- Distinctive: line 374
Deployments failing: Check GitHub History in Git tab
- Distinctive: line 383
Use SSH keys instead of passwords when possible
- Distinctive: line 384
Create read-only API apps for monitoring/reporting
- Distinctive: line 390
Test on staging sites first
- Distinctive: line 391
Use webhooks for async operation status
- Distinctive: line 396
When the agent uses this skill:
- Distinctive: line 399
Look up site ID from name if needed
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Pressable Hosting Skill
Manage WordPress sites on Pressable managed hosting.
Overview
This skill covers:
- API — Site management, cache, backups, plugins, DNS
- SSH/SFTP — Command-line access, WP-CLI
- Git Deploy — Auto-deploy from GitHub on push
Setup
1. Enable API Access
- Log in to my.pressable.com
- Navigate to API Applications → Create New API Application
- Name your app and select permission levels:
- Read-only — Safe for monitoring/reporting
- Full access — Required for modifications
- Save the Client ID and Client Secret
2. Store Credentials Securely
Create a credentials file (keep outside of git repos):
mkdir -p ~/.credentials
chmod 700 ~/.credentials// ~/.credentials/pressable.json
{
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}chmod 600 ~/.credentials/pressable.jsonAgent configuration: Reference as {baseDir}/../../.credentials/pressable.json (relative to workspace).
3. Set Up SSH Keys (Recommended)
SSH keys allow passwordless access to all your Pressable sites.
# Generate a dedicated key
ssh-keygen -t ed25519 -f ~/.credentials/pressable-ssh/id_ed25519 -C "pressable-agent"
# Secure permissions
chmod 700 ~/.credentials/pressable-ssh
chmod 600 ~/.credentials/pressable-ssh/id_ed25519Add the public key to Pressable:
- Go to my.pressable.com → Profile → Settings → SSH Keys
- Paste contents of
~/.credentials/pressable-ssh/id_ed25519.pub
Supported key types:
ssh-ed25519(256 bit) — recommendedecdsa-sha2-nistp256(256 bit)ssh-rsa(2048–16384 bit)
API Reference
Authentication
# Load credentials
CREDS=$(cat ~/.credentials/pressable.json)
CLIENT_ID=$(echo $CREDS | jq -r '.client_id')
CLIENT_SECRET=$(echo $CREDS | jq -r '.client_secret')
# Get access token (valid 1 hour)
TOKEN=$(curl -s --location 'https://my.pressable.com/auth/token' \
--form "grant_type=\"client_credentials\"" \
--form "client_id=\"$CLIENT_ID\"" \
--form "client_secret=\"$CLIENT_SECRET\"" | jq -r '.access_token')
# Use in requests
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites"Note: Tokens expire after 1 hour. Refresh before expiry for long-running operations.
Sites
# List all sites
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites" | jq '.data'
# Get site details
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites/{id}"
# Create site
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites" \
-d '{"name":"my-new-site","datacenter_code":"DFW"}'
# Clone site
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/clone" \
-d '{"name":"cloned-site"}'
# Delete site
curl -s -X DELETE -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites/{id}"
# Update PHP version (8.2, 8.3, 8.4, 8.5)
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}" \
-d '{"php_version":"8.3"}'Datacenters
| Code | Location |
| AMS | Amsterdam |
| BUR | Burbank |
| DCA | Washington DC |
| DFW | Dallas |
Edge Cache
# Get cache status
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites/{id}/edge-cache"
# Toggle cache on/off
curl -s -X PUT -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites/{id}/edge-cache"
# Purge cache
curl -s -X DELETE -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites/{id}/edge-cache"
# Enable defensive mode (DDoS protection)
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/edge-cache/defensive-mode" \
-d '{"duration":"1-hour"}'On-Demand Backups
# List backups
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites/{id}/ondemand-backups"
# Create backup (type: "fs" for filesystem, "db" for database)
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/ondemand-backups" \
-d '{"backup_type":"db"}'
# Download backup
curl -s -H "Authorization: Bearer $TOKEN" \
"https://my.pressable.com/v1/sites/{site_id}/ondemand-backups/{backup_id}/download"
# Delete backup
curl -s -X DELETE -H "Authorization: Bearer $TOKEN" \
"https://my.pressable.com/v1/sites/{site_id}/ondemand-backups/{backup_id}"Limits: 3 filesystem + 3 database backups max. Auto-deleted after 7–30 days.
Plugins
# List plugins
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/sites/{id}/plugins"
# Install & activate (from WordPress.org or URL)
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/plugins" \
-d '{"plugins":[{"path":"jetpack"},{"path":"akismet","version":"5.1"}]}'
# Update plugins
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/plugins" \
-d '{"plugins":[{"path":"jetpack"}]}'
# Activate / Deactivate
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/plugins/activate" \
-d '{"plugins":[{"path":"jetpack"}]}'
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/plugins/deactivate" \
-d '{"plugins":[{"path":"jetpack"}]}'
# Delete
curl -s -X DELETE -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/plugins" \
-d '{"plugins":[{"path":"jetpack"}]}'Note: Plugin operations are async. Use webhooks for completion status.
DNS Zones
# List zones
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/zones"
# Get zone records
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/zones/{zone_id}/records"
# Create record
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/zones/{zone_id}/records" \
-d '{"type":"A","name":"www","value":"192.0.2.1","ttl":3600}'
# Delete record
curl -s -X DELETE -H "Authorization: Bearer $TOKEN" \
"https://my.pressable.com/v1/zones/{zone_id}/records/{record_id}"Account & Collaborators
# Get account info
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/account"
# Activity logs
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/account/logs/activity" \
-d '{"page":1,"per_page":20}'
# List collaborators
curl -s -H "Authorization: Bearer $TOKEN" "https://my.pressable.com/v1/collaborators"
# Add collaborator to sites
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/collaborators/batch_create" \
-d '{"email":"user@example.com","siteIds":[123,456],"roles":["wp_access","sftp_access"]}'SSH & WP-CLI
SSH Access
Each Pressable site has unique SSH credentials. To connect:
- Go to Sites → Select site → Connections tab
- Find SSH Username and click Reset to generate password
- Note the SSH/SFTP URL (format:
ssh.pressable.com)
# Connect with password
ssh {ssh-username}@ssh.pressable.com
# Connect with SSH key (after adding to account)
ssh -i ~/.credentials/pressable-ssh/id_ed25519 {ssh-username}@ssh.pressable.comSSH Config (optional): For easier access, add to ~/.ssh/config:
Host pressable-mysite
HostName ssh.pressable.com
User {ssh-username}
IdentityFile ~/.credentials/pressable-ssh/id_ed25519
IdentitiesOnly yesThen connect with: ssh pressable-mysite
WP-CLI Commands
WP-CLI is pre-installed. After connecting via SSH:
# List plugins
wp plugin list
# Deactivate a problem plugin
wp plugin deactivate plugin-name
# Activate a theme
wp theme activate theme-name
# View PHP errors
wp php-errors
# Skip themes/plugins (for broken sites)
wp --skip-plugins --skip-themes plugin deactivate plugin-nameWP-CLI via API
Run WP-CLI commands without SSH:
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://my.pressable.com/v1/sites/{id}/ssh/command" \
-d '{"command":["plugin list --format=json"]}'Note: Don't include wp prefix — it's added automatically. Use webhooks for async responses.
SSH Limitations
- Session time: 8 hours max
- Memory: 1GB RAM per session
- Processes: 25 max concurrent
- Connections: 10 per site (across all users)
- Background processes: Killed on disconnect (even with
nohup) - Root access: Not available
GitHub Auto-Deploy
Deploy changes automatically when you push to GitHub.
Setup
- Prepare your repo:
your-repo/ └── wp-content/ ├── themes/ ├── plugins/ └── mu-plugins/ - Connect to Pressable:
- Go to Sites → Select site → Git tab
- Paste your repo's HTTPS URL (from GitHub's "Code" button)
- Click Set Repository URL
- Click Authorize and log in to GitHub
- Select branch:
- Choose the branch to deploy (e.g.,
main) - Configure sync settings:
- ✅ Sync themes / plugins / mu-plugins
- ⚠️ Delete files not in repo (optional, use carefully)
- Click Set and Deploy
- Choose the branch to deploy (e.g.,
How It Works
- Push changes to configured branch
- GitHub sends webhook to Pressable
- Pressable clones repo and rsyncs to
wp-content/ - Only themes, plugins, mu-plugins sync (not core or uploads)
Troubleshooting
- Private repos: Must grant OAuth access to organization
- Wrong branch: Check Git tab settings
- Files not syncing: Ensure they're in
wp-content/{themes,plugins,mu-plugins}/ - Deployments failing: Check GitHub History in Git tab
Best Practices
Security
- Store credentials in
~/.credentials/with600permissions - Use SSH keys instead of passwords when possible
- Create read-only API apps for monitoring/reporting
- Rotate API credentials periodically
Operations
- Always backup before destructive operations
- Test on staging sites first
- Use webhooks for async operation status
- Cache API tokens (1hr validity) to reduce auth calls
Agent Usage
When the agent uses this skill:
- Load credentials from configured path
- Get fresh token if expired
- Look up site ID from name if needed
- Execute operation
- Verify result
Quick Reference
| Task | Method |
| List sites | GET /v1/sites |
| Purge cache | DELETE /v1/sites/{id}/edge-cache |
| Create backup | POST /v1/sites/{id}/ondemand-backups |
| Run WP-CLI | POST /v1/sites/{id}/ssh/command or SSH |
| Deploy from Git | Push to connected branch |
API Base: https://my.pressable.com
SSH Host: ssh.pressable.com
Docs: my.pressable.com/documentation/api/v1
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

