shop: Skill for Claude Code

.agents/skills/enable-shopify-menus/SKILL.md

enable-shopify-menus is a skill for Claude Code, Codex from vercel/shop. It costs 28 tokens per session (1,707 once invoked), scanned A, original, MIT.

A setup guide for replacing fixed navigation and footer links with menus managed in Shopify. The storefront keeps its existing links as a fallback when a selected Shopify menu is missing or empty.

In plain words
What is it for?
Use it to connect the desktop and mobile navigation, the footer, or both to Shopify menus by their handles. Shopify menus can contain nested links for grouped navigation.
Why use it?
It removes the need to edit navigation code whenever menu links change. It also preserves usable navigation if the Shopify menu has not been configured.

Skill for Claude CodeCodex ✓ vendor

Written for no agent in particular: nothing here depends on one. Also seen: installed under .agents/ (shared by several agents).

This is vercel/shop's own configuration. It tells Claude Code and Codex how to work on shop itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything shop configures →

About the project

Vercel Shop is a monorepo, meaning one code repository that contains multiple related applications and tools, for a Next.js Shopify storefront template, its documentation site, and a scaffolding CLI. It helps developers create and work with Shopify storefronts built on Next.js. The catalogue entries are skills, commands, a plugin, and an instruction for working with this project.

vercel/shop · 126 stars · on GitHub · vercel.shop

Reuse

Borrowing it

Nothing to install: this file belongs to vercel/shop. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/vercel/shop/main/.agents/skills/enable-shopify-menus/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/vercel/shop

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for enable-shopify-menus

README.md
[![agentmods](https://agentmods.dev/badge/skills/vercel/shop/enable-shopify-menus/github.svg)](https://agentmods.dev/skills/vercel/shop/enable-shopify-menus)
Your own site
<a href="https://agentmods.dev/skills/vercel/shop/enable-shopify-menus"><img src="https://agentmods.dev/badge/skills/vercel/shop/enable-shopify-menus/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for enable-shopify-menus

Your own site · 80×15
<a href="https://agentmods.dev/skills/vercel/shop/enable-shopify-menus"><img src="https://agentmods.dev/badge/skills/vercel/shop/enable-shopify-menus.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 28 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,707 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00028 $0.01707
Opus 5.5 $0.00011 $0.00683
Sonnet 5.5 $0.00006 $0.00341
Haiku 4.5 $0.00003 $0.00171

Measured 9d ago against content hash 2fec8c36e9a1, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

enable-shopify-menus scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

curl -X POST "https://your-store.example.com/api/revalidate?tag=menus" \
.agents/skills/enable-shopify-menus/SKILL.md · 197 lines

How it starts

The opening of the file, as written. The whole thing — 197 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Enable Shopify Menus

By default, the storefront's nav renders an inline const items: MenuItem[] = [...] in Nav (components/nav/index.tsx), and the footer renders an empty const items: MenuItem[] = [] in Footer (components/footer/index.tsx). QuickLinks, MobileMenu, and Footer's FooterMenu already render MenuItem[] from lib/menu/types.ts, up to three levels deep in the nav and two in the footer.

This skill adds a cached Shopify menu read and points the selected components at it with the inline items as fallback. Shopify sends no webhook when a menu changes, so menus stay cached until the storefront's protected POST /api/revalidate endpoint is called with the menus tag.

Before you start

Ask the user two questions in order:

1. Which menus do you want to fetch from Shopify?

  • Nav menu — replaces the hardcoded items used by the desktop quick links and mobile sheet.
  • Footer menu — adds footer columns.
  • Both

2. What are the Shopify menu handles?

Ask for each selected menu. Defaults: main-menu for nav, footer for footer. Every Shopify store starts with both.

Wait for the user to answer before proceeding.


1. Add the menu operation

Create lib/shopify/operations/menu/server.ts. Shopify returns absolute item URLs on the store's myshopify or primary domain, sometimes with a Markets locale prefix; the operation turns those into storefront paths and leaves external links alone.

import { gql } from "@shopify/hydrogen";

import { shopConfig } from "@/lib/config";
import type { CommerceLocale } from "@/lib/config/types";
import type { MenuItem } from "@/lib/menu/types";
import { assertStorefrontOk } from "@/lib/shopify/errors/server";
import { storefront } from "@/lib/shopify/storefront/server";

const GET_MENU_QUERY = gql(`#graphql
  query getMenu($handle: String!, $country: CountryCode, $language: LanguageCode) @inContext(country: $country, language: $language) {
    shop {
      primaryDomain {
        url
      }
    }
    menu(handle: $handle) {
      items {
        id
        title
        url
        items {
          id
          title
          url
          items {
            id
            title
            url
          }
        }
      }
    }
  }
`);

function toStorefrontUrl(url: string | null | undefined, internalHosts: string[]): string {
  if (!url) return "/";
  let parsed: URL;
  try {
    parsed = new URL(url);
  } catch {
    return url;
  }
  if (!internalHosts.includes(parsed.hostname)) return url;
  const path = parsed.pathname.replace(/^\/[a-z]{2}(?:-[a-z]{2,4})?(?=\/|$)/i, "") || "/";
  return `${path}${parsed.search}${parsed.hash}`;
}

export async function fetchMenu({
  handle,
  locale = shopConfig.localization,
}: {
  handle: string;
  locale?: CommerceLocale;
}): Promise<MenuItem[] | null> {
  const response = await storefront.request(GET_MENU_QUERY, { locale, variables: { handle } });
  assertStorefrontOk(response, "getMenu");

  const menu = response.data.menu;
  if (!menu || menu.items.length === 0) return null;

  const internalHosts = [
    process.env.NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN ?? "",
    new URL(response.data.shop.primaryDomain.url).hostname,
  ];
  const link = ({ id, title, url }: { id: string; title: string; url?: string | null }) => ({
    id,
    title,
    url: toStorefrontUrl(url, internalHosts),
  });

  return menu.items.map((item) => ({
    ...link(item),
    items: item.items.map((child) => ({
      ...link(child),
      items: child.items.map((leaf) => ({ ...link(leaf), items: [] })),
    })),
  }));
}

Read the full file on GitHub · 197 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 9d ago Changed · -29 lines 2fec8c36e9a1
  2. 11d ago Changed 7aeb8ba1f429
  3. 29d ago Changed · +2 lines 9591d9c9629f
  4. 1mo ago Changed · +143 lines · +9 tokens per session dc893434449e
  5. 1mo ago First seen · 81 lines · 19 tokens per session scan A e1f91e40ee51

Subscribe to this mod's changes

enable-shopify-menus is a skill published in the GitHub repository vercel/shop (126 stars, last pushed 5d ago), licensed MIT. It adds 28 tokens to every session and 1,707 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-26.

Related

enable-shopify-menus compared with skills from other repositories

enable-shopify-menus next to 6 skills from other repositories
ModTypeStarsLast pushLicenceScanTokensWorks with
enable-shopify-menusvercel/shopSkill1265d agoMITA28Claude Code, Codex
amazon-reviews-api-skillbrowser-act/skillsSkill6.3k2d agoMITA124Claude Code, Codex
amazon-competitor-analyzerbrowser-act/skillsSkill6.3k2d agoMITA48Claude Code, Codex
asc-subscription-localizationrorkai/app-store-connect-cli-skillsSkill1.1kyesterdayMITA60Claude Code
food-orderBitterbot-AI/bitterbot-desktopSkill2.5kyesterdayMITA53Claude Code, Codex
external-purchasesrshankras/claude-code-apple-skillsSkill8642d agoMITA76Claude Code
Product Photoshoot Workflowjau123/MeiGen-AI-Design-MCPSkill1.8kyesterdayMITA111Claude Code