How detection works
mirra up walks the current directory looking for signals that tell it which vendors you integrate with:
package.jsondependencies —stripe,@stripe/stripe-node,resend,twilio,@supabase/supabase-js, etc.- Imports in source — falls back to grepping
import/requirefor vendor SDK names whenpackage.jsonis ambiguous. - Environment variables —
STRIPE_SECRET_KEY,RESEND_API_KEY,TWILIO_AUTH_TOKENas hints.
--mirrors.
Common invocations
Flags
Comma-separated list of mirrors to provision. Overrides auto-detection. Example:
--mirrors=stripe,resend.Create a persistent session that lives until explicit teardown. Requires the Team plan or higher. See Sessions.
Human-readable name for the session. Shown in the dashboard and accepted by
--session=<name> on subsequent commands. Ephemeral sessions get an auto-generated name if omitted; persistent sessions require one.Apply a named built-in fixture as the starting state for every mirror. Format:
<mirror>:<fixture>. Example: --seed=stripe:subscription-lifecycle. Combine multiple: --seed=stripe:empty --seed=resend:transactional-busy.Path to a JSON file containing custom seed state. Takes precedence over
--seed.Skip installing the TLS proxy. Instead,
mirra up emits env-var overrides (STRIPE_API_BASE, RESEND_API_BASE, …) on stdout for your code to read. Use this if you can’t run a local TLS proxy (locked-down CI runners, some Windows configurations).Ephemeral-session auto-expire. Accepts
60m, 2h, 90m. Capped by your plan’s max session length.Override the workspace Mirra bills and scopes the session to. Defaults to the workspace encoded in your credentials.
Emit provisioning results as a single JSON line on stdout instead of the human-readable stream. Useful for scripting.
Suppress the provisioning stream; print only the final session summary.
Request routing
Once a session is up, your code’s outbound HTTPS requests are routed to the mirrors one of two ways:TLS proxy (default)
mirra up installs a short-lived TLS proxy on your machine and adds an entry to /etc/hosts (or the Windows equivalent) so that api.stripe.com resolves to 127.0.0.1. The proxy presents a certificate for the vendor’s hostname, your SDK validates it (using Mirra’s CA that the CLI trusts during login), and the request is forwarded to the mirror URL.
What you get: your existing SDK clients work without URL changes:
Env-var routing (--no-proxy)
If the TLS proxy can’t run (locked-down CI, Windows without admin), --no-proxy emits base-URL overrides:
Output
Human-readable default:--json:
Ending the session
- Ctrl-C in the
mirra upterminal (ephemeral only). mirra downfrom any terminal for the most recent session.mirra down --session=<id-or-name>for an explicit session.- Timeout — ephemeral sessions auto-end after
--timeout.
mirra down --session=<name>.
Where to go next
mirra run
Execute a scenario against a session.
Vitest plugin
Drop Mirra into an existing test suite.