vercel/update-shop
Update an existing Vercel Shop storefront with newer template changes. Use when the user wants to check drift, plan an upgrade, or apply template updates to a project scaffolded from Vercel Shop.
npx skills add https://github.com/vercel/shop --skill update-shop
Bring an existing Vercel Shop project up to date with the template by reasoning about individual rollout entries, never by diffing against a template version. Downstream storefronts often adopt only part of the template, so every decision must be validated against the current codebase.
Infer the mode from the user's request:
.vercel-shop/bootstrap.json in the project root — original templateVersion and scaffoldedAt.vercel-shop/rollout-state.json in the project root — decisions recorded by earlier runs of this skill (may not exist)AGENTS.md and .claude/settings.json in the project if presentIf .vercel-shop/bootstrap.json is missing, say the project predates plugin bootstrap metadata and continue with a best-effort heuristic audit.
The rollout log is maintained upstream in github.com/vercel/shop. The plugin bundles a copy of template-rollout-log/ and template-version.json, but it is only as fresh as the installed plugin, so prefer the upstream copy:
dir=$(mktemp -d)
curl -fsSL https://codeload.github.com/vercel/shop/tar.gz/refs/heads/main |
tar -xz --strip-components=3 -C "$dir" \
shop-main/packages/plugin/template-rollout-log \
shop-main/packages/plugin/template-version.json
Read every markdown entry in the extracted template-rollout-log/ except README.md. If the fetch fails (offline or restricted network), fall back to the copies bundled with this plugin and say in the report that the log may be stale until the plugin is updated.
Compare the scaffold metadata against the current recommended template version and check for structural drift:
.vercel-shop/bootstrap.jsonAGENTS.md.claude/settings.json.agents/skills/ or a legacy .claude/skills symlinklib/shopify/ or components/Report the original scaffold version, the scaffold timestamp, the current recommended template version, and a short note on overall drift. If the scaffold version matches the current version, say so explicitly. In audit mode, stop here.
Build the candidate list from the rollout log:
scaffoldedAt, treat entries with a newer introducedOn as the primary candidates. Versions are only hints..vercel-shop/rollout-state.json already records as adopted, skipped, or not applicable — unless the user asks to revisit them.For each remaining entry, decide one of:
appliesTo or preconditions don't match this projectValidate each decision against the current codebase. Do not assume a change is missing just because the scaffold is old, and do not invent upgrade work when no entries apply — say so explicitly. Call out uncertainty when the project has heavily diverged from template conventions.
Present the plan grouped by decision. In plan mode, stop here and do not edit files.
Confirm with the user which entries to apply before editing anything. Then, for each selected entry, one at a time:
paths, and Apply when / Safe to skip when sections.relatedSkills when listed.changeKey.If an entry's validation fails, stop, report the failure, and ask whether to fix forward, skip the entry, or revert its edits before continuing.
Record every decision in .vercel-shop/rollout-state.json so future runs don't re-litigate settled entries. Keep decisions keyed by changeKey:
{
"decisions": {
"storefront-typed-client": {
"decision": "adopted",
"decidedOn": "2026-07-06"
},
"pdp-metafields-specs": {
"decision": "skipped",
"decidedOn": "2026-07-06",
"note": "custom PDP replaced the specs section"
}
}
}
Use adopted, skipped, not-applicable, or already-present as decision values. Do not modify .vercel-shop/bootstrap.json — scaffoldedAt must keep describing the original scaffold.
Finish with a concise report: what was applied, what was skipped and why, validation results, and any entries deferred for manual review.
Take vercel/update-shop from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.