Skip to content

cms-pimp

Active router for ALL CMS and headless content requests — classifies by use case (hosted/collaborative, self-hosted/TypeScript-first, git-based/Astro-native) and routes to the correct CMS skill. Use when choosing a CMS, setting up content management, or working with structured content.

ModelSource
sonnetpack: cms
Full Reference If the request involves a CMS, headless content, structured content, content editing, schema definition, content types, or content management in ANY way — you MUST route through this skill FIRST.

This is not optional. This is not negotiable. You cannot skip this.

The orchestration layer for all CMS expertise. Not documentation — an active router. Every CMS request flows through this routing table before any response.

Mandatory Announcement — FIRST OUTPUT before anything else:

┏━ 📝 cms-pimp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ [one-line description of what request/routing] ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

No exceptions. Box frame first, then route.

The CMS pack covers the full headless content spectrum — from Sanity’s hosted real-time collaborative studio to Payload’s self-hosted TypeScript-native CMS to Keystatic’s git-based content management with native Astro integration.

Classify the request. Invoke the matching skill. No response before invocation.

Request PatternSkill
Sanity studio, GROQ queries, real-time editing, hosted content lakesanity
Payload CMS, self-hosted, custom collections, Payload admin UIpayload
Keystatic, git-based content, Astro integration, local content fileskeystatic
”Which CMS should I use?” / “Help me choose a CMS”Decision matrix → route
Content modeling, schema design (no tool specified)Decision matrix → route

When the user hasn’t specified a tool, classify their use case:

SignalRoute To
Hosted, collaborative editing, non-technical editors, real-timesanity
Self-hosted, full ownership, TypeScript-first, custom auth/business logicpayload
Git-based, Astro project, markdown-adjacent, no DB neededkeystatic
Multi-user editorial team, content as a service, CDN deliverysanity
Next.js + custom backend + data ownershippayload
Astro static site, content in repo, simple workflowkeystatic
”Which one should I use?”Ask one question: self-hosted or hosted?

Shortcut rules:

  • Non-technical editors + hosted → Sanity, no discussion
  • Full TypeScript control + self-hosted → Payload, no discussion
  • Astro + git-native content → Keystatic, no discussion
  • Enterprise content team at scale → Sanity, no discussion

Before routing, check project context:

  • stack.json → read cms field and framework (Astro = lean toward Keystatic)
  • package.json → detect sanity, payload, or @keystatic/core already installed
  • Config files → sanity.config.ts, payload.config.ts, or keystatic.config.tsx present
StateAction
sanity in deps or sanity.config.ts existsRoute to sanity directly
payload in deps or payload.config.ts existsRoute to payload directly
@keystatic/core in deps or keystatic.config.tsx existsRoute to keystatic directly
stack.json has "cms": "sanity"Route to sanity directly
stack.json has "cms": "payload"Route to payload directly
stack.json has "cms": "keystatic"Route to keystatic directly
Framework is Astro + nothing detectedDecision matrix → lean keystatic
Nothing detectedApply decision matrix
User SaysChain
”Set up a blog with an editing UI”Decision matrix → sanity or keystatic
”Add a CMS to my Astro site”keystatic
”Build a custom CMS with auth and collections”payload
”I need non-technical editors to manage content”sanity
”Query my content with GROQ”sanity
”Self-host my CMS on my own server”payload
”Store content in my git repo”keystatic
”Content modeling for an e-commerce catalog”Decision matrix → usually sanity or payload
  • Never respond about CMS setup or content before invoking the target skill
  • No summarizing, planning to invoke, or explaining what you’re about to do
  • If unclear, ask ONE clarifying question, then route
  • The skill’s content has the verified facts — always defer to it
  • “Which CMS should I use?” is decision matrix territory — NEVER jump to implementation