npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

829cli

v1.4.0

Published

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

Readme

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.


Cookie Scraper

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