Docs

CLI reference

Every benbow command and flag. Each one also takes --json for output with a stable schema.

The app and the CLI drive the same local daemon, so anything you can click you can also script. Add --json to Benbow's own commands for machine-readable output (benbow wp, composer and artisan pass their tool's output through unchanged). Generated from benbow dev (a2d996de25d9).

benbow agent

While an AI agent works on a site, Benbow keeps the site's starting state (files and database) in an agent session, until you keep the changes or undo them all.

Subcommands: connect, diff, idle, session, start, tools

benbow agent connect

Add Benbow's MCP server to an agent's own settings in your home (after a backup)

benbow agent connect <agent> [flags]
--yesdo not ask

benbow agent diff

What changed since the agent session started: files and database tables

benbow agent diff <site> [flags]
--file <string>one file's unified diff (path inside the project)

benbow agent idle

After how many idle hours a session closes keeping the changes (0: never)

benbow agent idle [hours] [flags]

benbow agent session

Agent sessions: list, show, keep or undo

Subcommands: keep, list, open, revert, show

benbow agent session keep

Keep the changes and close the session

benbow agent session keep <site> [flags]

benbow agent session list

Open agent sessions (--all: recently closed ones too)

benbow agent session list [flags]
--allalso recently closed sessions

benbow agent session open

Open a session yourself before an agent (any agent, MCP or not) works on a site

benbow agent session open <site> [flags]

benbow agent session revert

Puts the site's files and database back to the session's starting snapshot. This also undoes changes you made yourself during the session: Benbow does not know who changed what. .git and node_modules are never touched, and the current state is saved first (a pre-restore snapshot).

benbow agent session revert <site> [flags]
--yesdo not ask

benbow agent session show

A site's open session and its snapshots

benbow agent session show <site> [flags]

benbow agent start

Opens an agent session (starting snapshot of files and database), lets agents change this site until the session closes, and starts the agent in a new terminal window with Benbow connected for that run (Cursor: opens the folder). Agents: claude, codex, gemini, cursor-agent, cursor, copilot.

benbow agent start <site> [flags]
--connectadd Benbow to the agent's own settings if it needs it (Gemini, Cursor)
--terminal <string>Terminal, iTerm or Ghostty (default: the last one, or Terminal)
--tool <string>claude, codex, gemini, cursor-agent, cursor or copilot (default: the last one)
--yessame as --connect

benbow agent tools

AI agents on this Mac and whether Benbow is connected to them

benbow agent tools [flags]

benbow artisan

Run artisan for a Laravel site, e.g. `benbow artisan shop migrate`.

Every argument after the site name goes to artisan unchanged, and its output and exit code are passed through (no --json envelope).

benbow artisan <site> [artisan arguments...] [flags]

benbow blueprint

Blueprints are JSON templates for new WordPress sites: WordPress version and language, themes and plugins (wordpress.org, zip URL, GitHub or git), options, wp-config constants and must-use plugins. See docs/blueprints.md.

Blueprints install third-party code (themes and plugins) into your site. Use only sources you trust. Benbow records each download's SHA-256 the first time and stops if it changes.

Subcommands: apply, delete, export, github-token, import, list, save, show, sources

benbow blueprint apply

Install a blueprint's themes, plugins and settings into a WordPress site (snapshot first)

benbow blueprint apply <name> <site> [flags]
--accept-changesaccept sources whose content changed since first use
--dry-runonly show what would be installed
--yesdo not ask

benbow blueprint delete

Delete a blueprint

benbow blueprint delete <name> [flags]

benbow blueprint export

Write a blueprint as JSON (to stdout without a file)

benbow blueprint export <name> [file.json] [flags]

benbow blueprint github-token

Store a GitHub token for private repositories (read from the terminal or stdin)

benbow blueprint github-token [flags]
--deleteremove the stored token

benbow blueprint import

Add a blueprint from a JSON file

benbow blueprint import <file.json|-> [flags]
--forcereplace a blueprint with the same name
--name <string>save under this name instead of the file's

benbow blueprint list

List blueprints

benbow blueprint list [flags]

benbow blueprint save

Save a WordPress site's themes, plugins and settings as a blueprint

benbow blueprint save <site> <name> [flags]
--forcereplace a blueprint with the same name

benbow blueprint show

Show a blueprint's JSON

benbow blueprint show <name> [flags]

benbow blueprint sources

List the downloads Benbow recorded, with their SHA-256

benbow blueprint sources [flags]

benbow composer

Run Composer for a site, e.g. `benbow composer shop require guzzlehttp/guzzle`. Composer 2.11 (2.2 LTS for PHP older than 7.3); its cache is in Benbow's folder.

Every argument after the site name goes to composer unchanged, and its output and exit code are passed through (no --json envelope).

benbow composer <site> [composer arguments...] [flags]

benbow daemon

The daemon serves Benbow's local API (JSON over a Unix socket only you can open) for the Benbow app. It runs as a launchd agent from the Benbow home and does not start at login; benbow start and benbow stop do not touch it.

benbow daemon [flags]

Subcommands: start, stop

benbow daemon start

Start the daemon (restarts it if the benbow binary changed)

benbow daemon start [flags]

benbow daemon stop

Stop the daemon

benbow daemon stop [flags]

benbow db

Manage site databases on Benbow's MySQL

Subcommands: create, link, list, query, show, unlink

benbow db create

Create a database and its own user for a site

benbow db create <site> [flags]
--engine <string>mysql or pgsql (default "mysql")
--name <string>database name (default: the site name with underscores)

benbow db list

List databases (the server must be running)

benbow db list [flags]
--engine <string>mysql or pgsql (default "mysql")

benbow db query

Runs as a user that can only read, in a read-only transaction: at most 500 rows and 10 seconds. Changes go through wp or artisan.

benbow db query <site> <sql> [flags]

benbow db show

Show a site's database and how to connect (password with --json)

benbow db show <site> [flags]

benbow domains

Sites are served at <name>.localhost by default: nothing to set up.

.test domains (e.g. demo.benbow.test) are opt-in: Benbow adds a file to /etc/resolver that sends .test lookups to its own DNS server on 127.0.0.1. Enabling and disabling each ask for one administrator authorization.

.local domains (e.g. shop.local) are a MAMP compatibility mode: Benbow installs a small helper that only manages Benbow's own lines in /etc/hosts (127.0.0.1 and ::1). Installing it asks for one administrator authorization.

benbow domains [flags]

Subcommands: disable, enable

benbow domains disable

Stop serving .test or .local domains and remove what Benbow installed for them

benbow domains disable test|local [flags]

benbow domains enable

Serve .test or .local domains (one administrator authorization)

benbow domains enable test|local [flags]

benbow fetch

Request a page of a site and show the status, redirects and PHP errors it caused

benbow fetch <site> [path] [flags]
--headHEAD instead of GET
--htmlprint the page's HTML

benbow group

Groups only organize the list: they change nothing about how sites are served. Paths use / between levels, e.g. Clients/Acme.

Subcommands: add, disable, enable, list, move, order, remove, rename

benbow group add

Create a group, and any missing group above it (e.g. Clients/Acme)

benbow group add <path> [flags]

benbow group disable

Turn off every site in a group and its subgroups

benbow group disable <path> [flags]

benbow group enable

Turn on every site in a group and its subgroups (archived sites stay off)

benbow group enable <path> [flags]

benbow group list

List groups

benbow group list [flags]

benbow group move

Move a group into another one ("/" for the top level)

benbow group move <path> <into> [flags]

benbow group order

Items are site:<name> or group:<path>, in the order wanted; groups and sites mix freely. Items from elsewhere move inside <path>; the others of that level follow in their current order. Example: benbow group order Clients site:shop group:Clients/Acme site:blog

benbow group order <path> <item>... [flags]

benbow group remove

Remove a group; its sites and groups move up one level (no site is removed)

benbow group remove <path> [flags]

benbow group rename

Rename a group

benbow group rename <path> <new-name> [flags]

benbow import

Import sites from another tool (MAMP PRO, Local, Herd, Valet, XAMPP)

Subcommands: herd, local, mamp, undo, valet, xampp

benbow import herd

Reads Laravel Herd's site list (its files are only read) and creates one Benbow site per host, same name and folder. The tool itself is never modified and can keep running. .local names are kept (benbow domains enable local), or served as <name>.localhost with --localhost.

--migrate also brings each new site to work from Benbow: its database is copied from the tool's MySQL (only read: the tool's MySQL must be running, Benbow never starts it) or loaded from --dump, the site gets its own MySQL user, wp-config.php or .env is backed up in Benbow's folder and pointed at Benbow, and the old address is replaced in the database. The project files stay shared: afterwards the tool's copy of the site no longer reaches its database. `benbow import undo <site>` puts things back.

benbow import herd [flags]
--dry-runshow what would happen, change nothing
--dump <string>load this .sql or .sql.gz instead of reading the source's MySQL (one --site)
--existing <string>when Benbow already has the database: use, recopy (after a backup) or skip (default "use")
--localhostserve sites as <name>.localhost instead of their .local names
--migratealso copy databases and point wp-config.php/.env at Benbow
--site <strings>only these hosts (server name or site name; repeatable)
--source-passwordask for the source user's password
--source-user <string>MySQL user on the source (default: the one in wp-config.php/.env)

benbow import local

Reads Local's site list (its files are only read) and creates one Benbow site per host, same name and folder. The tool itself is never modified and can keep running. .local names are kept (benbow domains enable local), or served as <name>.localhost with --localhost.

--migrate also brings each new site to work from Benbow: its database is copied from the tool's MySQL (only read: the tool's MySQL must be running, Benbow never starts it) or loaded from --dump, the site gets its own MySQL user, wp-config.php or .env is backed up in Benbow's folder and pointed at Benbow, and the old address is replaced in the database. The project files stay shared: afterwards the tool's copy of the site no longer reaches its database. `benbow import undo <site>` puts things back.

benbow import local [flags]
--dry-runshow what would happen, change nothing
--dump <string>load this .sql or .sql.gz instead of reading the source's MySQL (one --site)
--existing <string>when Benbow already has the database: use, recopy (after a backup) or skip (default "use")
--localhostserve sites as <name>.localhost instead of their .local names
--migratealso copy databases and point wp-config.php/.env at Benbow
--site <strings>only these hosts (server name or site name; repeatable)
--source-passwordask for the source user's password
--source-user <string>MySQL user on the source (default: the one in wp-config.php/.env)

benbow import mamp

Reads MAMP PRO's site list (its files are only read) and creates one Benbow site per host, same name and folder. The tool itself is never modified and can keep running. .local names are kept (benbow domains enable local), or served as <name>.localhost with --localhost.

--migrate also brings each new site to work from Benbow: its database is copied from the tool's MySQL (only read: the tool's MySQL must be running, Benbow never starts it) or loaded from --dump, the site gets its own MySQL user, wp-config.php or .env is backed up in Benbow's folder and pointed at Benbow, and the old address is replaced in the database. The project files stay shared: afterwards the tool's copy of the site no longer reaches its database. `benbow import undo <site>` puts things back.

benbow import mamp [flags]
--dry-runshow what would happen, change nothing
--dump <string>load this .sql or .sql.gz instead of reading the source's MySQL (one --site)
--existing <string>when Benbow already has the database: use, recopy (after a backup) or skip (default "use")
--localhostserve sites as <name>.localhost instead of their .local names
--migratealso copy databases and point wp-config.php/.env at Benbow
--site <strings>only these hosts (server name or site name; repeatable)
--source-passwordask for the source user's password
--source-user <string>MySQL user on the source (default: the one in wp-config.php/.env)

benbow import undo

Undo a site's migration: restore its configuration, delete the copied database

benbow import undo <site> [flags]

benbow import valet

Reads Laravel Valet's site list (its files are only read) and creates one Benbow site per host, same name and folder. The tool itself is never modified and can keep running. .local names are kept (benbow domains enable local), or served as <name>.localhost with --localhost.

--migrate also brings each new site to work from Benbow: its database is copied from the tool's MySQL (only read: the tool's MySQL must be running, Benbow never starts it) or loaded from --dump, the site gets its own MySQL user, wp-config.php or .env is backed up in Benbow's folder and pointed at Benbow, and the old address is replaced in the database. The project files stay shared: afterwards the tool's copy of the site no longer reaches its database. `benbow import undo <site>` puts things back.

benbow import valet [flags]
--dry-runshow what would happen, change nothing
--dump <string>load this .sql or .sql.gz instead of reading the source's MySQL (one --site)
--existing <string>when Benbow already has the database: use, recopy (after a backup) or skip (default "use")
--localhostserve sites as <name>.localhost instead of their .local names
--migratealso copy databases and point wp-config.php/.env at Benbow
--site <strings>only these hosts (server name or site name; repeatable)
--source-passwordask for the source user's password
--source-user <string>MySQL user on the source (default: the one in wp-config.php/.env)

benbow import xampp

Reads XAMPP's site list (its files are only read) and creates one Benbow site per host, same name and folder. The tool itself is never modified and can keep running. .local names are kept (benbow domains enable local), or served as <name>.localhost with --localhost.

--migrate also brings each new site to work from Benbow: its database is copied from the tool's MySQL (only read: the tool's MySQL must be running, Benbow never starts it) or loaded from --dump, the site gets its own MySQL user, wp-config.php or .env is backed up in Benbow's folder and pointed at Benbow, and the old address is replaced in the database. The project files stay shared: afterwards the tool's copy of the site no longer reaches its database. `benbow import undo <site>` puts things back.

benbow import xampp [flags]
--dry-runshow what would happen, change nothing
--dump <string>load this .sql or .sql.gz instead of reading the source's MySQL (one --site)
--existing <string>when Benbow already has the database: use, recopy (after a backup) or skip (default "use")
--localhostserve sites as <name>.localhost instead of their .local names
--migratealso copy databases and point wp-config.php/.env at Benbow
--site <strings>only these hosts (server name or site name; repeatable)
--source-passwordask for the source user's password
--source-user <string>MySQL user on the source (default: the one in wp-config.php/.env)

benbow laravel

Runs composer create-project laravel/laravel, adds the site (served from public/) and sets APP_URL, the database (a new one with its own user when MySQL is running, else SQLite) and Mailpit in .env.

benbow laravel <name> [flags]
--aliases <strings>extra domains, comma separated
--database <string>"new" (own MySQL database) or "sqlite" (default: new if MySQL is running)
--domain <string>local domain (default: <name>.localhost)
--engine <string>engine of the new database: mysql or pgsql (default: whichever is running, MySQL first)
--group <string>list the site in this group
--ini <stringArray>php.ini value of this site, name=value (repeatable)
--path <string>new or empty folder (default ~/Sites/<name>)
--php <string>PHP version (8.2 or newer) (default "8.4")

benbow mail

Catch the mail PHP sends in Mailpit (status)

benbow mail [flags]

Subcommands: disable, enable, list, show

benbow mail disable

Stop catching mail (messages are kept)

benbow mail disable [flags]

benbow mail enable

Catch every mail PHP sends; inbox at https://mail.localhost

benbow mail enable [flags]

benbow mail list

The newest mail PHP sent (filter by --to or --subject)

benbow mail list [flags]
-n, --limit <int>how many (default 20)
--subject <string>only mail with these words in the subject
--to <string>only mail to this address

benbow mail show

One message's text and links (the newest without an id)

benbow mail show [id] [flags]

benbow mcp

Serves the Model Context Protocol over stdin/stdout: sites, PHP versions, logs, databases, the PHP compatibility check and wp-cli. Add it to an agent, e.g.:

claude mcp add benbow -- benbow mcp

Agents are read-only until you allow changes: benbow mcp allow <site> (or *). Before changing a site Benbow takes a snapshot; benbow mcp log shows what they did.

benbow mcp [flags]

Subcommands: allow, deny, log, status

benbow mcp allow

Let AI agents change a site (* for everything, creating sites included)

benbow mcp allow <site|*> [flags]

benbow mcp deny

Make a site (or everything) read-only for AI agents again

benbow mcp deny <site|*> [flags]

benbow mcp log

What AI agents changed (or tried to), newest first

benbow mcp log [flags]
-n, --lines <int>how many (default 50)

benbow mcp status

What AI agents may change

benbow mcp status [flags]

benbow mysql

Benbow runs MySQL 8.4 LTS on 127.0.0.1, port 3307 by default (3306 is usually MAMP's). Databases live in Benbow's home; the root password is generated by Benbow and kept in the login keychain.

PHP sites reach it with DB_HOST "localhost" (Benbow's socket) or "127.0.0.1:3307".

benbow mysql [flags]

Subcommands: disable, enable, password

benbow mysql disable

Stop MySQL (databases are kept)

benbow mysql disable [flags]

benbow mysql enable

Install, initialize and start MySQL

benbow mysql enable [flags]
--port <int>TCP port on 127.0.0.1 (default: first free from 3307)

benbow mysql password

Print the connection details, root password included

benbow mysql password [flags]

benbow phone

Serves one site at <site>-<mac>.local on this Mac's private network addresses (Bonjour), with HTTPS from Benbow's CA, for --minutes (default 30). Without a site, shows what is shared. The site's files and database are not changed.

benbow phone [site] [flags]
--minutes <int>turn off after this many minutes (max 1440) (default 30)
--offstop sharing

benbow php

Manage PHP versions

Subcommands: check, install, list, settings, xdebug

benbow php check

Runs PHP_CodeSniffer with PHPCompatibility on the site's code, before you switch its PHP version. WordPress sites: only wp-content (themes and plugins) unless --all.

benbow php check <site> [flags]
--allWordPress: check the core files too
--target <string>PHP version to check against (default: the newest fully supported)

benbow php install

Download, verify and install a PHP version (e.g. 8.4)

benbow php install <version> [flags]

benbow php list

List installed and available PHP versions

benbow php list [flags]

benbow php settings

Show or change php.ini settings of a PHP version.

Settings: memory_limit, upload_max_filesize, max_execution_time, display_errors. post_max_size always follows upload_max_filesize.

benbow php settings <version> [name=value...] [flags]

benbow php xdebug

Xdebug runs in step-debugging mode and only starts when triggered (browser extension, or an XDEBUG_TRIGGER cookie or parameter). Your IDE listens on 127.0.0.1:9003. Turning it on or off restarts that PHP version.

benbow php xdebug [flags]

Subcommands: off, on

benbow php xdebug off

Turn Xdebug off for a PHP version

benbow php xdebug off <version> [flags]

benbow php xdebug on

Turn Xdebug on for a PHP version (e.g. 8.4)

benbow php xdebug on <version> [flags]

benbow ports

The HTTPS port is the one in site addresses; 443 leaves it out. The HTTP port (0: off) only redirects to HTTPS. 443 and 80 need Benbow's helper, installed with one administrator password: it forwards them to Benbow while Benbow runs.

benbow ports [flags]
--http <int>HTTP redirect port: 0 (off), 80, or 1024-65535
--https <int>HTTPS port: 443, or 1024-65535

benbow postgres

Benbow can run PostgreSQL 18 on 127.0.0.1, port 5433 by default (5432 is usually taken by Postgres.app or Homebrew). Off until enabled; databases live in Benbow's home; the superuser (postgres) password is kept in the login keychain.

benbow postgres [flags]

Subcommands: disable, enable, password

benbow postgres disable

Stop PostgreSQL (databases are kept)

benbow postgres disable [flags]

benbow postgres enable

Install, initialize and start PostgreSQL

benbow postgres enable [flags]
--port <int>TCP port on 127.0.0.1 (default: first free from 5433)

benbow postgres password

Print the connection details, superuser password included

benbow postgres password [flags]

benbow pull

Copy a remote's database and files into the site (a snapshot is taken first)

benbow pull <site> [remote] [flags]
--dry-runshow what would change, change nothing
--no-databaseleave the database out
--no-filesleave the files out

benbow push

Copy the site's database and files to a staging remote (never production)

benbow push <site> <staging remote> [flags]
--dry-runshow what would change, change nothing
--no-databaseleave the database out
--no-filesleave the files out
--yesdo not ask

benbow redis

Benbow can run Redis 8 on 127.0.0.1, port 6380 by default (6379 is usually taken by another Redis). Off until enabled; no password: only this Mac reaches it.

benbow redis [flags]

Subcommands: disable, enable

benbow redis disable

Stop Redis (its saved data is kept)

benbow redis disable [flags]

benbow redis enable

Install and start Redis

benbow redis enable [flags]
--port <int>TCP port on 127.0.0.1 (default: first free from 6380)

benbow remote

Production and staging copies of a site (for benbow pull and push)

Subcommands: remove, set, show

benbow remote remove

Forget a remote and its password

benbow remote remove <site> <name> [flags]

benbow remote set

A remote is a copy of the site on a server. Transports: ssh your keys, ssh-agent and ~/.ssh/config (/usr/bin/ssh); files with rsync, database with the server's wp-cli or mysqldump sftp for hosts without a shell; database through a temporary PHP bridge ftps / ftp same, over FTP (plain FTP sends the password unencrypted) A password (--password asks for it) is kept in the login keychain.

benbow remote set <site> [flags]
--exclude <strings>patterns never synced (default: .git, node_modules, .DS_Store, cache)
--host <string>server name
--kind <string>production (pull only) or staging (pull and push) (default "production")
--name <string>remote name (default: its kind)
--no-passwordforget the stored password
--passwordask for the password and keep it in the keychain
--path <string>project folder on the server
--paths <strings>folders to sync (default: wp-content/uploads, storage/app/public, or everything)
--port <int>port (default of the transport)
--transport <string>ssh, sftp, ftps or ftp (default "ssh")
--url <string>the remote site's address
--user <string>login
--webroot <string>folder served on the web, inside --path (Laravel: public)

benbow remote show

List a site's remotes

benbow remote show <site> [flags]

benbow site

Manage sites

Subcommands: add, archive, disable, enable, list, logs, php, remove, set, unarchive

benbow site add

Add a site served at https://<name>.localhost (or --domain)

benbow site add <name> [flags]
--aliases <strings>extra domains, comma separated
--create-foldercreate the document root (missing or empty) for a new site
--database <string>"new" for a database with its own user, or the name of an existing one to link
--domain <string>local domain, e.g. demo.benbow.test (default: <name>.localhost)
--engine <string>database engine for --database: mysql or pgsql (default "mysql")
--forceadd the folder even if it has no index.php or index.html
--group <string>list the site in this group, e.g. Clients/Acme (see benbow group)
--ini <stringArray>php.ini value of this site, name=value (repeatable)
--path <string>document root (default: current folder)
--php <string>PHP version (e.g. 8.4, 8.2) (default "8.4")

benbow site archive

Put a site away: not served, listed apart (folder and database are kept)

benbow site archive <name> [flags]

benbow site disable

Stop serving a site, keeping it in the list

benbow site disable <name> [flags]

benbow site enable

Serve a site that was disabled

benbow site enable <name> [flags]

benbow site list

List sites

benbow site list [flags]

benbow site logs

Show the end of a site's access log (or --php for PHP errors)

benbow site logs <name> [flags]
--clearempty both logs of the site
-n, --lines <int>number of lines (max 2000) (default 50)
--phpPHP errors, warnings and notices instead of requests

benbow site php

Show or change php.ini settings of one site (setting= goes back to the PHP version's)

benbow site php <name> [setting=value...] [flags]

benbow site remove

Remove a site (its folder is left untouched)

benbow site remove <name> [flags]
--drop-databasealso delete the site's database and its own MySQL user
--yesdo not ask before deleting the database

benbow site set

Change a site's PHP version, folder, domain, aliases, group or title

benbow site set <name> [flags]
--aliases <strings>extra domains, comma separated, replacing the current ones ("" clears)
--domain <string>new local domain, e.g. demo.benbow.test
--forceaccept a folder without index.php or index.html
--group <string>move the site into a group, e.g. Clients/Acme ("" for the top level)
--path <string>new document root
--php <string>new PHP version (e.g. 8.3)
--title <string>label shown in the list instead of the name ("" clears)

benbow site unarchive

Bring back an archived site and serve it again

benbow site unarchive <name> [flags]

benbow snapshot

Snapshots save a site's project folder (APFS clones: no space until files change; .git and node_modules are left out) and its database, in Benbow's folder.

Subcommands: create, delete, keep, list, restore

benbow snapshot create

Take a snapshot

benbow snapshot create <site> [flags]
--note <string>what this snapshot is for

benbow snapshot delete

Delete a snapshot

benbow snapshot delete <site> <id> [flags]

benbow snapshot keep

Show or set how many snapshots are kept per site (default 10)

benbow snapshot keep [n] [flags]

benbow snapshot list

List a site's snapshots, newest first

benbow snapshot list <site> [flags]

benbow snapshot restore

Put the site's files and database back (the current state is saved first)

benbow snapshot restore <site> <id> [flags]
--yesdo not ask

benbow start

Start Caddy and the PHP versions your sites use

benbow start [flags]
--https-port <int>change the HTTPS port (default: 8443, or the first free port after it)

benbow status

Show services, sites and their URLs

benbow status [flags]

benbow stop

Stop all Benbow services

benbow stop [flags]

benbow trust

Adds Benbow's local root certificate to your login keychain as trusted for your user only. macOS shows one dialog asking for your password or Touch ID. No sudo, nothing system-wide. Undo with: benbow untrust

benbow trust [flags]

benbow uninstall

Stops every Benbow service, removes Benbow's CA and MySQL password from the login keychain and deletes ~/Library/Application Support/benbow, MySQL databases included. Your site folders are never touched.

benbow uninstall [flags]
--yesdo not ask for confirmation

benbow untrust

Remove Benbow's certificate authority from the login keychain

benbow untrust [flags]

benbow update

Show component updates (PHP, MySQL, Caddy, Mailpit, Adminer, wp-cli)

benbow update [flags]

Subcommands: apply, check, rollback

benbow update apply

Install updates (all, or e.g. caddy php-8.4) and restart what uses them

benbow update apply [component...] [flags]

benbow update check

Download and verify the signed manifest; install nothing

benbow update check [flags]

benbow update rollback

Go back to the version a component had before its last update

benbow update rollback <component> [flags]

benbow version

Print the Benbow version

benbow version [flags]

benbow wordpress

Create a new WordPress site: folder, database, wp-config.php, installation

benbow wordpress <name> [flags]
--accept-changeswith --blueprint: accept sources whose content changed since first use
--admin-email <string>administrator email (default admin@<domain>)
--admin-user <string>administrator user name (default "admin")
--aliases <strings>extra domains, comma separated
--blueprint <string>apply this blueprint (see benbow blueprint)
--domain <string>local domain, e.g. blog.benbow.test (default: <name>.localhost)
--group <string>list the site in this group, e.g. Clients/Acme (see benbow group)
--ini <stringArray>php.ini value of this site, name=value (repeatable)
--path <string>new or empty folder (default ~/Sites/<name>)
--php <string>PHP version (default "8.4")
--title <string>site title (default: the name)
--yeswith --blueprint: do not ask

benbow wp

Run wp-cli for a site, e.g. `benbow wp shop plugin list`.

Every argument after the site name goes to wp unchanged, and its output and exit code are passed through (no --json envelope).

benbow wp <site> [wp arguments...] [flags]