npm.io
1.4.0 • Published 3d agoCLI

829cli

Licence
MIT
Version
1.4.0
Deps
11
Size
134 kB
Vulns
0
Weekly
0

829

Command-line tools for managing WP Engine installs at scale — plugin management, SSH connections, portal access, user management, and more.


Requirements

  • Node.js >= 18 (nodejs.org)
  • WP Engine API credentials — username and token from the WP Engine User Portal
  • SSH keys configured for WP Engine (docs)
  • fzf (optional, required for Tab autocomplete) — brew install fzf

Installation

npm install -g 829cli

First-time Setup

1. Configure your API credentials
829 config

You will be prompted for:

  • WP Engine API username
  • WP Engine API token
  • Default batch size (recommended: 20)
  • Default parallel jobs (recommended: 20)

Settings are saved to ~/.829.json.

2. Sync your install list
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.

3. Enable Tab autocomplete (zsh)

Add the following to your ~/.zshrc:

eval "$(829 completion zsh)"

Then reload your shell:

source ~/.zshrc

Requires fzf. Install with brew install fzf.

For bash, use eval "$(829 completion bash)" in your ~/.bashrc.


Commands

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 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).


SSH & Portal Autocomplete

After enabling Tab completion, typing 829 ssh 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 or open.


Plugin Scan

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.


Run

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.


Portal User Management

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.


wordpress-tools

829 wpt provision

Installs 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 settings

Enables or disables restrict_plugin_management across targeted installs.

829 wpt repair

Fixes 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 values
  • cookie-by-page-<timestamp>.csv — generated only when --by-page is passed; one row per item per page

Site Crawler

Crawls 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.


Output Files

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

Updating

npm update -g 829cli
829 installs sync

Keywords