Awesome-omni-skill pressable
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.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/tools/pressable-majiayu000" ~/.claude/skills/diegosouzapw-awesome-omni-skill-pressable-947ffe && rm -rf "$T"
skills/tools/pressable-majiayu000/SKILL.mdPressable 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.json
Agent 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_ed25519
Add 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:
(256 bit) — recommendedssh-ed25519
(256 bit)ecdsa-sha2-nistp256
(2048–16384 bit)ssh-rsa
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.com
SSH Config (optional): For easier access, add to
~/.ssh/config:
Host pressable-mysite HostName ssh.pressable.com User id959e223a7c76e64 IdentityFile ~/.credentials/pressable-ssh/id_ed25519 IdentitiesOnly yes
Then 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-name
WP-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
with~/.credentials/
permissions600 - 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 | |
| Purge cache | |
| Create backup | |
| Run WP-CLI | 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