Command-line interface for Static Studio hosting workflows. The package is intended for humans and coding agents such as Codex or Claude Code that need a narrow, scriptable interface to the Static Studio platform.
This documentation covers release 0.3.0.
npm install -g @simply-static/static-studio
static-studio --helpDuring local development:
npm install
npm run build
node dist/cli.js --helpInteractive email OTP login:
static-studio login --email person@example.comEmail OTP requests are protected by Cloudflare Turnstile. The CLI prints a
local challenge URL, attempts to open it in the default browser, and continues
after the browser returns the short-lived token to its loopback callback. Use
--no-browser to skip automatic browser launch, or pass a token obtained by another trusted flow with
--captcha-token <token>.
Personal Access Token login for CI or agents:
static-studio login --token "$STATIC_STUDIO_ACCESS_TOKEN"Generate Personal Access Tokens in the Static Studio app under Account -> Access Token. Token issuance and exchange require an active subscription with quota greater than zero. Trial status alone does not categorically exclude an account; the subscription and quota checks are authoritative.
You can also skip local config entirely:
STATIC_STUDIO_ACCESS_TOKEN=... static-studio --json sites listSessions are stored in ~/.static-studio/config.json with 0600 permissions. Use --profile <name> to keep separate accounts.
Personal Access Token and saved Supabase session authentication are unchanged and do not run the Turnstile browser flow.
static-studio whoami
static-studio status
static-studio sites list
static-studio sites get <siteId>
static-studio sites basic-auth <siteId>
static-studio sites magic-login <siteId>
static-studio sites debug-log <siteId> --tail 200
static-studio sites create --name Import --migration-file ./studio-backup-site.zip
static-studio sites create --name Import --migration-artifact-id <artifactId>
static-studio sites runtime-status <siteId>
static-studio sites start <siteId>
static-studio sites stop <siteId>
static-studio sites push <siteId> full
static-studio sites push <siteId> changes
static-studio sites redeploy <siteId>
static-studio sites redeploy <siteId> --migration-file ./studio-backup-site.zip
static-studio sites redeploy <siteId> --migration-artifact-id <artifactId>
static-studio sites cancel-export <siteId> --yes
static-studio sites releases <siteId>
static-studio sites rollback-status <siteId>
static-studio sites rollback-snapshots <siteId>
static-studio sites rollback <siteId> <snapshotId> --yes
static-studio sites delete <siteId> --yes
static-studio domains list <siteId>
static-studio domains add <siteId> example.com
static-studio domains add <siteId> example.com --prepare-only
static-studio domains primary <siteId> example.com
static-studio domains mount <siteId> example.com /docs
static-studio domains issue-ssl <siteId> example.com
static-studio domains transfer <sourceSiteId> <targetSiteId> example.com --yes
static-studio domains remove <siteId> example.com
static-studio health overview <siteId>
static-studio health run <siteId> --checks uptime ssl sitemap
static-studio alerts status <siteId>
static-studio alerts save <siteId> --enabled on --recipients alerts@example.com
static-studio alerts test <siteId> alerts@example.com
static-studio seo list <siteId>
static-studio seo save <siteId> robots.txt --file ./robots.txt
static-studio seo check-sitemaps <siteId>
static-studio indexnow status <siteId>
static-studio indexnow enable <siteId>
static-studio indexnow auto-submit <siteId> on
static-studio indexnow submit <siteId>
static-studio reports list <siteId>
static-studio reports get <reportId>
static-studio reports generate-pdf <reportId>
static-studio reports pdf-url <reportId>
static-studio reports shares <reportId>
static-studio reports share <reportId> --recipient client@example.com --password-env REPORT_SHARE_PASSWORD
static-studio reports revoke-share <reportId> <shareId> --yes
static-studio reports schedules <siteId>
static-studio reports schedule monthly <siteId> --name "Monthly report"
static-studio reports disable-schedule <scheduleId>
static-studio reports delete-schedule <scheduleId> --yes
static-studio backups list <siteId>
static-studio backups create <siteId>
static-studio backups get <siteId> <backupId>
static-studio backups restore <siteId> --backup-id <backupId> --yes
static-studio backups delete <siteId> --backup-id <backupId> --yes
static-studio backups download <siteId> <backupId>
static-studio backups copy <siteId> <backupId> <targetSiteId> --yes
static-studio backups policy <siteId>
static-studio backups policy <siteId> daily
static-studio redirects create <siteId> /old /new
static-studio redirects update <siteId> <redirectId> --from-path /old --to-path /new
static-studio redirects disable <siteId> <redirectId>
static-studio redirects enable <siteId> <redirectId>
static-studio redirects bulk-create <siteId> redirects.json
static-studio users list <siteId>
static-studio users invite <siteId> person@example.com --role administrator
static-studio users add <siteId> person@example.com --role editor
static-studio users remove <siteId> person@example.com
static-studio users set-admin <siteId> person@example.com
static-studio team list
static-studio team invite person@example.com teammate@example.com --role editor --invite-missing
static-studio team bulk-invite emails.txt --role editor --invite-missing
static-studio account usage --include-subscription
static-studio performance run <siteId> --force
static-studio performance stats <siteId>
static-studio performance get <siteId>
static-studio performance reports <siteId>
static-studio logs get <siteId> --tail 200 --level error
static-studio environments list <siteId>
static-studio environments enable <siteId>
static-studio environments create <siteId> staging
static-studio environments delete <siteId> staging --yes
static-studio environments disable <siteId> --yes
static-studio environments domain-list <siteId> staging
static-studio environments domain-connect <siteId> staging staging.example.com
static-studio environments domain-ssl <siteId> staging staging.example.com
static-studio environments domain-remove <siteId> staging --yes
static-studio tags list
static-studio tags create Client --color '#3858E9'
static-studio tags assign <siteId> <tagId>
static-studio tags remove <siteId> <tagId>
static-studio ssh add <siteId> --key-file ~/.ssh/id_ed25519.pub
static-studio ssh list <siteId>
static-studio ssh retry <siteId>New sites use the server-assigned Docker provider, managed Studio URLs, PHP 7.4
or 8.1–8.4, and server-generated Basic Auth/helper credentials. The site-record
service normally queues platform provisioning and returns its job to the CLI;
the CLI uses the dedicated queue endpoint only as a compatibility fallback.
Site creation currently requires either --migration-file or
--migration-artifact-id; Studio has temporarily disabled empty-site creation.
WordPress access uses short-lived magic links.
Migration uploads accept .zip, .tar.gz, .tgz, .wpress, and .daf
archives. Static Studio backup ZIP names containing studio-backup- and
Duplicator ZIP names ending in _archive.zip are accepted directly. New-site
and replacement uploads use private Docker artifacts with presigned multipart
requests in 25 MiB parts, direct signed completion, and server-side validation,
up to the 10 GB limit.
The --url option on performance run and performance get is deprecated. If supplied for compatibility, it must resolve to the site's stored URL.
WordPress role options support administrator, editor, author, and contributor; subscriber is not supported.
Reports and configurable Site Health alerts require the corresponding Agency entitlements. Lagos enforces these entitlements and site access for every operation.
Detailed CLI documentation lives in docs/:
docs/authentication-and-configuration.mddocs/command-reference.mddocs/input-formats-and-limits.mddocs/workflows.md
npm run typecheck
npm test
npm run build
npm auditThe CLI is implemented in TypeScript, bundles to ESM with tsup, and exports a reusable client/workflow layer from src/index.ts.
CI runs type checking, tests, build, and npm audit --audit-level=high on every push and pull request.
This package is scoped and intended to be public on npm. Before publishing, make sure the npm account has publish access to the @simply-static organization.
npm login
npm ci
npm run typecheck
npm test
npm run build
npm audit --audit-level=high
npm pack --dry-run
npm publish --access publicThe package version and changelog must already be updated before this checklist. Use npm version patch when starting the next release, not after a version has been prepared.