Shopify theme
Skill NovateStudioGit/novate-studio-skills/ecommerce/shopify-theme
57 agent skills for Claude Code — creative production, paid growth, copywriting, ecommerce, email marketing & knowledge ops. By Novate Studio.
npx -y skills add NovateStudioGit/novate-studio-skills --skill shopify-themeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Edit and push ExampleBrand (or any) Shopify theme files reliably via the Theme Access proxy. Use when Will says "edit the theme", "push that to the widget/PDP", "update the bundle snippet", or any in-place Shopify theme file change. Resolves the unpublished theme, edits locally, dash-checks, and PUTs through the proxy (bypasses the flaky MCP and the CLI's broken push).
SKILL.md
4.6 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
/shopify-theme
In-place Shopify theme file edits, the way that actually works. Born from a session
that burned ~6 turns fighting push channels: the MCP themeFilesUpsert expires
mid-session, and the Shopify CLI theme push 404s with a Theme Access token
(even though theme list/pull work). The reliable channel is the Theme Access
proxy Asset API via curl/urllib — that's what this skill defaults to.
Engine: scripts/theme_proxy.py (stdlib only). Recipe + history: memory
[[shopify-theme-edit-via-api]], [[ExampleBrand-theme-numbered]], [[ExampleBrand-3for100-bundle]].
Guardrails (read first)
- Unpublished theme only. Never write the live/MAIN theme. Re-verify role every time (roles + the copy's id change):
python3 scripts/theme_proxy.py list. - No em/en dashes, ever ([[no-em-en-dashes]]).
pushrefuses if it finds—–—–(override--forceonly if truly intentional). - Verify it renders, don't just trust the 200 ([[feedback-verify-render-before-claiming-done]]). A successful PUT means the bytes landed, not that it looks right. Give Will the
?preview_theme_id=<id>link. - Never echo the token. Write it to
/tmp/.th_env(chmod 600), use, delete. It's ashptka_Theme Access password generated from the TARGET store's "Theme Access" app — a token from another store 404s on every call. - Per-product-template gotcha ([[ExampleBrand-theme-numbered]]): ExampleBrand products use
templateSuffix→templates/product.<suffix>.json. Editing the defaulttemplates/product.jsondoes NOTHING. To change a PDP block you must edit ALLtemplates/product.*.json. Self-scoping snippets (render only if product in a collection) make it safe to add a block to every template.
Setup each run
- Token: ask Will to paste the
shptka_...password (Settings → Apps → Theme Access, in the target store). Save it: write/tmp/.th_env,chmod 600. The script reads it from there (or$SHOPIFY_CLI_THEME_TOKEN, or--token). - Store: default is ExampleBrand
qk6w18-bw.myshopify.com. Override with--shop <handle>.myshopify.comor$SHOPIFY_SHOP. Confirm the handle via the admin URLadmin.shopify.com/store/<handle>. - Confirm the unpublished theme id:
python3 scripts/theme_proxy.py list.
Pipeline
1. LIST theme_proxy.py list -> pick the UNPUBLISHED theme id
2. GET theme_proxy.py get <id> <key> /tmp/f -> pull the file to edit (or use the working copy)
3. EDIT edit /tmp/f locally:
- JSON templates: strip leading /* ... */ header -> json.loads -> mutate
blocks / block_order -> json.dumps(indent=2, ensure_ascii=False) -> re-prepend header
- snippets / *.liquid / *.css: edit directly
4. CHECK grep -c -e '—' -e '–' -e '—' -e '–' /tmp/f (must be 0; push also enforces)
5. PUSH theme_proxy.py push <id> <key> /tmp/f -> expect "OK HTTP 200"
6. VERIFY give Will https://<domain>/products/<handle>?preview_theme_id=<id> and ask him to hard-refresh
7. CLEAN rm -f /tmp/.th_env
Run the engine with dangerouslyDisableSandbox (it needs network).
Commands
python3 scripts/theme_proxy.py list
python3 scripts/theme_proxy.py get <theme_id> snippets/foo.liquid /tmp/foo.liquid
python3 scripts/theme_proxy.py push <theme_id> snippets/foo.liquid /tmp/foo.liquid
key is the theme-relative path (snippets/…, templates/…, assets/…, sections/…).
Errors
- 401 "Invalid API key" = missing/wrong token, or the
X-Shopify-Shopheader is absent (the script always sends it). - 404 on every call = the token is for a different store, or the Theme Access app isn't installed on this store. NOT a handle problem if
admin.shopify.com/store/<handle>resolves. Regenerate the password from THIS store's Theme Access app. - Bulk edits (many
templates/product.*.json): loopget→edit→pushper file, or edit the local pulled copies then push each. For a brand-new snippet you canpushit without a priorget.
Handoffs
- Offer/discount economics → [[midas-ecomcfo-skill|/midas]]. Native discount setup (BXGY, free-ship) is Admin API, not this skill. Checkout branding has no API ([[ExampleBrand-checkout-branding-no-api]]).
Gives 0 of the 12 instructions most design systems skills give in ~1.1k tokens
Counted across 528 of the 534 authors here whose files we hold, read 2026-08-06
- create a custom theme if neededin 54 of 528, across 10 files
- read the corresponding theme filein 54 of 528, across 10 files
- ask which theme to applyin 53 of 528, across 9 files
- show the theme showcasein 53 of 528, across 9 files
- maintain visual identity across all slidesin 50 of 528, across 6 files
- apply the specified colors and fontsin 47 of 528, across 3 files
- get explicit confirmationin 45 of 528, across 1 file
- Generate a design system before codingin 19 of 528, across 6 files
- Maintain at least 4.5:1 color contrast ratioin 19 of 528, across 8 files
- Describe component shapes, colors, shadows, and interaction statesin 18 of 528, across 4 files
- Check Python installation and install if missingin 17 of 528, across 4 files
- Default to html-tailwind if stack is unspecifiedin 17 of 528, across 4 files
Said here and by no other author read
- edit the unpublished theme only
- verify theme role before every run
- save the theme token to a file
- delete the token file after use
- strip comment headers before editing json
- grep edited files for em or en dashes
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.