I have reproduced the issue on the latest CLI version.
Yes, I am on the latest version
I have searched existing posts and this report is not a duplicate.
Yes, this isn’t a duplicate
In which of these areas are you experiencing a problem?
App
Expected behavior
Context — What I’m trying to do
I have a custom app (claude-code-api) installed on my production store via Settings → Apps → Develop apps. The app has full scopes for product and inventory management (write_products, write_inventory, write_publications, etc.).
I use a Python script that automates catalogue management on my store:
- Upload product images via staged uploads
- Create products with variants, pricing, and media
- Set inventory levels at a specific location
- Publish products to the online store sales channel
The script currently handles OAuth (client credentials grant), GraphQL requests, and API versioning manually. I want to replace that boilerplate with shopify app execute, which already handles auth and versioning — making my script a thin orchestrator instead of a hand-rolled API client.
Expected Behaviour
shopify app execute should support an opt-in flag (e.g. --allow-live, mirroring shopify theme push --allow-live) that permits mutations on production stores where the app is already installed with the required scopes.
Example:
shopify app execute --store my-store.myshopify.com --allow-live \
--query 'mutation productCreate($input: ProductCreateInput!) { productCreate(product: $input) { product { id } } }' \
--variables '{"input": {"title": "New Product"}}'
The app’s scopes already govern what it can and can’t do. The store owner has explicitly installed the app and granted those scopes. An --allow-live flag would respect that existing trust while preventing accidental production writes.
Actual behavior
Actual Behaviour
The CLI README states:
“Mutations are only allowed on dev stores.”
shopify app execute rejects all mutations on production stores regardless of app scopes or user intent. There is no override flag.
This forces developers to maintain their own OAuth and HTTP layers for production use — duplicating exactly what the CLI already does, just without the dev-store guard.
Why this matters
The CLI already solves auth, versioning, and request formatting. The dev-store restriction means anyone automating against a production store (catalogue management, inventory sync, bulk operations) cannot benefit from this. The gap is especially painful for solo developers and small merchants who use custom apps for legitimate store automation — not app distribution.
The precedent exists: shopify theme push --allow-live uses the same pattern — dangerous by default, opt-in when you mean it.
Reproduction steps
N/A but
— I’m a product manager (ie not a professional engineer at all), and this is my first shopify experience. So if I am entirely missing a magical something that I should be doing rather than my script and rather than asking for the CLI to allow me to do this beyond a dev store, please I’d love the advice!
Verbose output
N/A (I was very verbose)
Operating system
Linux (WSL2) — 6.6.87.2-microsoft-standard-WSL2
CLI version
3.92.0
Shell
zsh
Nodejs version
v24.12.0
What language and version are you using in your application?
Python 3.14 (automation script using the Admin GraphQL API via the custom app’s client credentials)


