theme check

Lints the local templates for mistakes the server cannot catch. The API already refuses invalid markup, so this covers the other kind: a binding that is perfectly legal and renders the wrong thing, with no error anywhere. Errors exit non-zero so this works as a pre-commit or CI gate. Warnings do not fail the run unless you pass --strict. It lints the draft, because that is what push sends.

theme package

Packs the templates and the builder config into one zip for handoff. The local state file is excluded: it records which revision your checkout last saw, which is true of your machine and false of anyone else’s. Packaging the same theme twice produces byte-identical output, so the archive can be checksummed and cached.

theme list

Shows each template’s name, whether it is published, whether it has unpublished changes, and its size. Live-and-edited-since is its own state rather than being collapsed into “published”, because the unpublished work is usually what you are looking for.

webhook listen

Watches for new deliveries and re-sends each one to a URL on your machine, signed exactly as the platform signs it, so you can build a receiver without a tunnel. The forward carries the real webhook-id, webhook-timestamp, webhook-event-type and webhook-signature headers, with the signature computed over id.timestamp.payload the same way a production delivery is. Your receiver’s own verification is what gets exercised.
Pass --secret. Without the endpoint’s signing secret this forwards unsigned, and any receiver that verifies will reject every event, which looks like a broken receiver rather than a missing flag. The secret is shown once when the endpoint is created.
Reading a payload needs the topic’s own read scope as well as read_webhooks: the body of an orders/paid delivery is order data, so it needs read_orders. A 403 names the scope to add, and the run continues, because other topics may still be readable. The existing backlog is skipped by default. Replaying it into a fresh receiver on every start would fire yesterday’s orders at a handler that may act on them; pass --skip-backlog=false if that is what you want.

status

Reports whether the API is answering, which build is deployed, and whether a newer CLI has been released. Exits non-zero when the API is unhealthy, so a monitor can gate on it. This is about the platform. For a problem with your own setup, mercemur doctor checks your config, key and clock instead.