Catalog npm
PACKAGE EXPLORERView in registry

829cli

npm

829 Studios CLI tools — plugin management, SSH, and more

pluginswordpresswp-cliwpengine
Versions collected5
Direct dependencies18From release 1.5.0
Last observed20 Oct, 21:17 UTC

README

Current package documentation

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


File Transfer (scp)

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.

Paths

SideHow it's entered
RemoteRelative 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.
LocalAbsolute, 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.

Options

FlagDescription
-y, --yesSkip the confirmation prompt when pushing to a production install

Notes

  • Pushing to a production install always asks for confirmation unless --yes is passed.
  • Transfers use scp -O (the legacy scp protocol), which WP Engine's SSH gateway requires, and -r, so folders work without extra flags.
  • Existing files at the destination are overwritten without prompting.
  • Requires the same SSH key setup as 829 ssh.

SSH & Portal Autocomplete

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.


Plugin Scan

829 plugin scan supports three slug modes:

ModeExampleBehavior
Exact--plugin wordfenceSingle report, post-scan action prompt
Multi-slug--plugin wordfence,woocommerceOne 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:

FlagDescriptionDefault
-u, --user <username>Basic auth username—
-p, --pass <password>Basic auth password—
-c, --concurrency <n>Pages to scrape in parallel3
-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-pageAlso generate the per-page detail report—
--debugPrint 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:

FlagDescriptionDefault
-u, --user <username>Basic auth username—
-p, --pass <password>Basic auth password—
-c, --concurrency <n>Pages to fetch in parallel5 (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—
--renderUse Puppeteer to render JS before parsing—
--ignore-robotsIgnore robots.txt disallow rules—
--debugPrint 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

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 5

Collected releases
VersionPublishedDirect dependenciesOpen version
1.5.0Registry latest29 Sept 202618
1.4.025 Jun 202618
1.3.023 Jun 202613
1.1.113 May 202613
1.0.03 Apr 202613

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:17 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:e76604e6659459502527bbf5eca8a0038075920145516166a750f3108937c684