Observed since 20 Oct, 21:17 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
829 Studios CLI tools — plugin management, SSH, and more
Command-line tools for managing WP Engine installs at scale — plugin management, SSH connections, portal access, user management, and more.
brew install fzfnpm install -g 829cli
829 config
You will be prompted for:
Settings are saved to ~/.829.json.
829 installs sync
This fetches all WP Engine installs from the API and caches them to ~/.829/installs.json. Re-run any time your install list changes.
Add the following to your ~/.zshrc:
eval "$(829 completion zsh)"
Then reload your shell:
source ~/.zshrc
Requires
fzf. Install withbrew install fzf.For bash, use
eval "$(829 completion bash)"in your~/.bashrc.
829 config Configure API credentials and defaults
829 installs sync Fetch installs from the WP Engine API
829 installs list Browse cached installs
829 ssh [install-id] SSH into a WP Engine install
829 scp [install-id] Push or pull files to/from an install
829 portal [install-id] Open install in the WP Engine portal
829 portal user list List all portal users across accounts (CSV)
829 portal user add Add a user to an account
829 portal user delete Remove a user from an account
829 portal user promote Change a user's role in an account
829 plugin scan Scan plugin status across installs
829 plugin activate Activate a plugin across installs
829 plugin deactivate Deactivate a plugin across installs
829 plugin update Update a plugin across installs
829 plugin delete Delete a plugin across installs
829 run Run a shell command across installs via SSH
829 wpt provision Install/update wordpress-tools and provision API keys
829 wpt settings Update wordpress-tools settings across installs
829 wpt repair Fix misnamed wordpress-tools-main plugin folder
829 cookies <sitemap-url> Audit cookies/localStorage/sessionStorage across a site
829 crawl <url> Crawl a site and export a CSV inventory of pages
829 help Show all commands
829 help <command> Show detailed help for a command
829 completion zsh Print zsh completion script
829 completion bash Print bash completion script
Run 829 help at any time for the full reference, or 829 help <command> for detail on a specific command (e.g. 829 help plugin, 829 help wpt).
829 scp uploads (push) or downloads (pull) files and folders between your machine and a WP Engine install.
829 scp [install-id] [push|pull] [source] [destination]
Every argument is optional — anything you leave off is prompted for. Pass all four to run it in one line, or none for a fully interactive session.
One-liners:
# Upload a file
829 scp asphaltgreen push ~/Downloads/my_file.php wp-content/uploads/my_file.php
# Download a file into a local folder
829 scp asphaltgreen pull wp-content/debug.log ~/Downloads/
# Upload or download a whole folder
829 scp asphaltgreen push ./my-plugin wp-content/plugins/my-plugin
829 scp asphaltgreen pull wp-content/uploads/2026 ~/Downloads/
Interactive:
$ 829 scp <Tab> # fzf install picker (or: 829 scp asphaltgreen)
? I want to:
❯ Push (upload to server)
Pull (download from server)
? Source (local): ~/Downloads/my_file.php
? Destination (relative to web root): wp-content/uploads/my_file.php
Pushing /Users/you/Downloads/my_file.php → asphaltgreen:/sites/asphaltgreen/wp-content/uploads/my_file.php
my_file.php 100% 12KB 1.2MB/s 00:00
Done.
The destination prompt is pre-filled with a sensible default (wp-content/uploads/<name> for push, ./<name> for pull) — press Enter to accept it.
| Side | How it's entered |
|---|---|
| Remote | Relative to the web root. sites/<install-id>/ is added for you, since SSH logs you in two levels above it. A pasted sites/<install-id>/… or leading / is also accepted. Paths that resolve outside the web root (e.g. ../) are rejected. |
| Local | Absolute, relative to the current directory, or ~/…. On push the source must exist; on pull the destination folder must exist. End a pull destination with / to download into that folder under the original name. |
| Flag | Description |
|---|---|
-y, --yes | Skip the confirmation prompt when pushing to a production install |
--yes is passed.scp -O (the legacy scp protocol), which WP Engine's SSH gateway requires, and -r, so folders work without extra flags.829 ssh.After enabling Tab completion, typing 829 ssh , 829 scp , or 829 portal and pressing Tab opens an fzf picker:
INSTALL ID DOMAIN ENVIRONMENT
absoluteenerg1 absoluteenergy.com 🌐 production
absoluteenerstg absoluteenergy.829stage.com 📝 staging
absoluteenerdev absoluteenergy.829dev.com ⚙️ development
Arrow up/down to navigate, type to filter, Enter to connect, open, or start a transfer. For 829 scp, Tab after the install ID completes push/pull and then local file paths.
829 plugin scan supports three slug modes:
| Mode | Example | Behavior |
|---|---|---|
| Exact | --plugin wordfence | Single report, post-scan action prompt |
| Multi-slug | --plugin wordfence,woocommerce | One report per plugin + combined comparison report |
| Wildcard | --plugin "wordpress-tools*" | Matches any installed plugin name starting with that prefix |
After an exact-slug scan you can immediately activate, deactivate, update, or delete the plugin on the matching installs.
829 run executes an arbitrary shell command across any set of installs via SSH. The command is base64-encoded before sending so quotes and special characters are preserved.
829 run --cmd "wp plugin install https://github.com/org/repo/releases/download/1.8.0/plugin-1.8.0.zip --force"
Output is saved to a CSV with columns: name, primary_domain, exit_code, output.
829 portal user list iterates all WP Engine accounts and exports a CSV of every user:
account_name, account_id, first_name, last_name, email, role, installs
installs is all for full-access roles, or a semicolon-separated list of install names for partial access.
829 wpt provisionInstalls or force-updates the wordpress-tools plugin from GitHub, activates it, generates a 32-character API key, and sets it — across any number of installs in one run.
829 wpt settingsEnables or disables restrict_plugin_management across targeted installs.
829 wpt repairFixes installs where the plugin was installed from a GitHub ZIP archive, leaving the folder named wordpress-tools-main instead of wordpress-tools. Renames the folder and activates the plugin. If both folders exist, removes the stale one.
Audits every cookie, localStorage entry, and sessionStorage entry set on a site's pages. Identifies the vendor behind each item (Google Analytics, HubSpot, Meta, etc.) and exports two CSV reports.
Scan via sitemap:
829 cookies https://example.com/sitemap.xml
Scan a single page:
829 cookies https://example.com/about
Scan a specific list of pages via JSON file:
829 cookies --urls ./pages.json
The JSON file should be a plain array of URLs:
[
"https://example.com/about",
"https://example.com/contact",
"https://example.com/services"
]
Options:
| Flag | Description | Default |
|---|---|---|
-u, --user <username> | Basic auth username | — |
-p, --pass <password> | Basic auth password | — |
-c, --concurrency <n> | Pages to scrape in parallel | 3 |
-o, --output <dir> | Output directory for CSV files | ~/829-tools/reports/ |
--max-pages <n> | Cap number of pages (useful for testing) | — |
--urls <file> | JSON file containing an array of URLs to scan | — |
--by-page | Also generate the per-page detail report | — |
--debug | Print per-page cookie capture diagnostics | — |
Output files (written to ~/829-tools/reports/ by default):
cookie-summary-<timestamp>.csv — one row per unique cookie/storage key, with vendor, domain, attributes, page count, and sample valuescookie-by-page-<timestamp>.csv — generated only when --by-page is passed; one row per item per pageCrawls a site and exports a CSV inventory of every page with SEO-relevant data (status, title, meta, H1s, word count, links, etc.).
Crawl via sitemap:
829 crawl https://example.com/sitemap.xml
Crawl by following links from a start URL:
829 crawl https://example.com --max-depth 3 --max-pages 200
Render JS before parsing (for SPAs / client-rendered sites):
829 crawl https://app.example.com --render
Options:
| Flag | Description | Default |
|---|---|---|
-u, --user <username> | Basic auth username | — |
-p, --pass <password> | Basic auth password | — |
-c, --concurrency <n> | Pages to fetch in parallel | 5 (3 with --render) |
-o, --output <dir> | Output directory for CSV files | ~/829-tools/reports/ |
--max-pages <n> | Cap the number of pages crawled | — |
--max-depth <n> | Max link depth from start URL (crawl mode only) | 5 |
--urls <file> | JSON file containing an array of URLs | — |
--render | Use Puppeteer to render JS before parsing | — |
--ignore-robots | Ignore robots.txt disallow rules | — |
--debug | Print per-page diagnostics | — |
Output: crawl-<timestamp>.csv — one row per page with: url, status_code, title, meta_description, h1, canonical, word_count, internal_links_count, external_links_count, images_missing_alt, and more.
Reports and logs are written to ~/829-tools/:
~/829-tools/reports/ CSV reports from scans, actions, provisioning, cookie audits, and crawls
~/829-tools/logs/ Detailed logs of SSH session output
npm update -g 829cli
829 installs sync
Download counts and popularity will appear here as the collector receives them.
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:17 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:e76604e6659459502527bbf5eca8a0038075920145516166a750f3108937c684