
Shopify Dev
Search all of shopify.dev when your agent needs cross-API Shopify answers and no dedicated Admin, Liquid, or Checkout skill matches.
Overview
shopify-dev is an agent skill for the Build phase that searches Shopify’s full developer documentation on shopify.dev when no API-specific Shopify toolkit skill applies.
Install
npx skills add https://github.com/shopify/shopify-ai-toolkit --skill shopify-devWhat is this skill?
- Mandatory vector search via scripts/search_docs.mjs before answering Shopify dev questions
- Fallback only when API-specific toolkit skills (Admin GraphQL, Liquid, checkout extensions, etc.) do not apply
- Topic-focused queries—not full user prompts—for better doc retrieval
- Requires Node.js; reports query metadata to Shopify per the skill privacy notice
- Explicit guardrail: do not trust pretrained Shopify API details without searching
- Mandatory search-before-answer workflow via scripts/search_docs.mjs
- Skill version 1.9.0 in metadata
Adoption & trust: 5.6k installs on skills.sh; 373 GitHub stars; 2/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
What problem does it solve?
You are implementing Shopify features across APIs and cannot trust the model’s memory or guess which dedicated shopify-* skill covers the question.
Who is it for?
Indie builders and small teams wiring multi-API Shopify apps, theme changes, and checkout flows who already use Node in the agent environment.
Skip if: Tasks clearly owned by a named API skill (Admin GraphQL-only, Liquid-only, checkout extensions-only) or teams that cannot run Node or accept Shopify’s search telemetry disclosure.
When should I use this skill?
Search Shopify developer documentation across all APIs when no API-specific Shopify skill applies.
What do I get? / Deliverables
Your agent returns shopify.dev-grounded answers after a documented search pass, or you route to a narrower API skill when the task is clearly scoped.
- shopify.dev-sourced answer with retrieved examples and field definitions
- Routing recommendation to a specific Shopify API skill when scope narrows
Recommended Skills
Journey fit
Shopify store and app work happens while wiring products, checkout, themes, and custom apps—canonical shelf is Build integrations. The skill is a documentation retriever for Shopify APIs and platform features, not a single narrow API cheat sheet.
How it compares
Use as the broad doc search layer instead of guessing API details in chat when no specialized Shopify skill matches.
Common Questions / FAQ
Who is shopify-dev for?
Solo builders and agents working on Shopify commerce projects who need authoritative documentation retrieval across APIs when a single API skill is not enough.
When should I use shopify-dev?
During Build integrations when the question spans multiple Shopify APIs, themes, or platform features; skip it when a specific shopify-admin-graphql, shopify-liquid, or checkout-extension skill already fits.
Is shopify-dev safe to install?
Review the Security Audits panel on this Prism page and read Shopify’s privacy notice: the search script may report queries and client metadata to Shopify before you rely on it in production repos.
SKILL.md
READMESKILL.md - Shopify Dev
This skill provides a general-purpose search over all of Shopify's developer documentation on shopify.dev. Use it to find documentation when the user's question spans multiple APIs or when no API-specific skill (shopify-admin-graphql, shopify-liquid, shopify-checkout-extensions, etc.) matches the task. --- ## ⚠️ MANDATORY: Search Before Answering Search the vector store to get the detailed context you need: working examples, field and type definitions, valid values, and API-specific patterns. You cannot trust your trained knowledge — always search before answering. ``` scripts/search_docs.mjs "<topic or feature name>" --model YOUR_MODEL_NAME --client-name YOUR_CLIENT_NAME --client-version YOUR_CLIENT_VERSION ``` Search for the **topic or feature name**, not the full user prompt. > **Use this skill ONLY when no API-specific skill applies to the task.** > If the user is asking about the Admin API, Liquid themes, Checkout Extensions, > or any other named Shopify API, use the corresponding skill instead > (e.g. shopify-admin-graphql, shopify-liquid, shopify-checkout-extensions, …). --- > **Privacy notice:** `scripts/search_docs.mjs` reports the search query, search response or error text, skill name/version, and model/client identifiers to Shopify (`shopify.dev/mcp/usage`) to help improve these tools. Set `OPT_OUT_INSTRUMENTATION=true` in your environment to opt out. #!/usr/bin/env node // src/agent-skills/scripts/search_docs.ts import { parseArgs } from "util"; // src/http/index.ts var PROD_BASE_URL = "https://shopify.dev/"; var SHOP_DEV_BASE_URL = "https://shopify-dev.shop.dev/"; function stagingHost(serverNumber) { return `https://shopify-dev-staging${serverNumber}.shopifycloud.com/`; } function resolveShopifyDevBaseUrl(options) { const env = options?.env ?? process.env; const stagingRaw = env.SHOPIFY_DEV_STAGING_SERVER_NUMBER?.trim(); if (stagingRaw) { if (!/^\d+$/.test(stagingRaw)) { throw new Error( `SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${stagingRaw}"` ); } const serverNumber = Number(stagingRaw); if (!Number.isSafeInteger(serverNumber) || serverNumber <= 0) { throw new Error( `SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${stagingRaw}"` ); } const token = env.MINERVA_TOKEN; if (!token) { const audience = stagingHost(serverNumber).replace(/\/$/, ""); throw new Error( `SHOPIFY_DEV_STAGING_SERVER_NUMBER=${serverNumber} is set but no Minerva token is available. Staging servers are behind Minerva. Get a token via: export MINERVA_TOKEN=$(devx minerva-auth --client-id 0oa1bphetnkOusboI0x8 --audience ${audience})` ); } return { url: stagingHost(serverNumber), headers: { Cookie: `MINERVA_TOKEN=${token}` } }; } const instrumentationOverride = env.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim(); if (instrumentationOverride && options?.uri?.startsWith("/mcp/usage")) { return { url: instrumentationOverride, headers: {} }; } if (env.DEV && env.DEV !== "false") { return { url: SHOP_DEV_BASE_URL, headers: {} }; } return { url: PROD_BASE_URL, headers: {} }; } async function shopifyDevFetch(uri, options) { let url; let resolvedHeaders = {}; if (uri.startsWith("http://") || uri.startsWith("https://")) { url = new URL(uri); } else { const resolved = resolveShopifyDevBaseUrl({ uri }); url = new URL(uri, resolved.url); resolvedHeaders = resolved.headers; } if (options?.parameters) { Object.entries(options.parameters).forEach(([key, value]) => { url.searchParams.append(key, value); }); } const response = await fetch(url.toString(), { method: options?.method || "GET", head