Claude-skill-registry cms-interaction

Configure CMS connections and perform ad-hoc content searches (Sanity, Contentful, WordPress)

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/cms-interaction" ~/.claude/skills/majiayu000-claude-skill-registry-cms-interaction && rm -rf "$T"
manifest: skills/data/cms-interaction/SKILL.md
source content

CMS Interaction Skill

Purpose: Ad-hoc CMS configuration and operations Subskills: onboard, search, publish Supported CMSs: Sanity (full support), Contentful (coming soon), WordPress (coming soon)


Overview

This skill provides ad-hoc CMS operations using

kurt cms
CLI commands:

  1. Configuration: Set up CMS connections (first-time setup)
  2. Ad-hoc search: Quick content searches during project planning/research
  3. Publishing: Push completed drafts back to CMS

For systematic content mapping and fetching, use the unified core workflow:

  • kurt map cms --platform sanity --instance prod --cluster-urls
    (discovery + clustering)
  • kurt fetch --include "sanity/prod/*"
    (download + index)

This workflow integrates CMS content with web content using the same commands. See project-management-skill (gather-sources subskill) for full orchestration.


Architecture

Pattern: CLI-Wrapper

This skill is a thin orchestration layer over kurt CLI commands:

User Request → Skill (routing) → kurt cms command → CMS API

All CMS logic lives in kurt-core:

  • src/kurt/commands/cms.py
    - CLI commands
  • src/kurt/cms/sanity/adapter.py
    - Sanity implementation
  • src/kurt/cms/config.py
    - Configuration management

This skill focuses on:

  • Routing user requests to appropriate commands
  • Parsing parameters and options
  • Providing context-specific guidance
  • Following up after command execution

Usage

Configuration (First-Time Setup)

cms-interaction onboard

Routes to:

kurt cms onboard --platform sanity

This guides you through:

  • Creating
    .kurt/cms-config.json
  • Entering credentials
  • Discovering content types
  • Mapping custom field names

Ad-Hoc Search (During Research)

Use during project planning to explore CMS content:

cms-interaction search --query "tutorial" --limit 10

Routes to:

kurt cms search --query "tutorial" --limit 10

When to use:

  • Exploring what content exists
  • Quick research during project planning
  • Finding specific documents by keyword

For systematic ingestion, use

kurt map cms
instead (see project-management-skill).

Publishing Drafts

cms-interaction publish --file draft.md --id <document-id>

Routes to:

kurt cms publish --file draft.md --id <document-id>

Pushes completed content back to CMS as draft (never auto-publishes).


Getting Started with Sanity

If you have an existing Sanity account, here's how to get started:

Step 1: Get Sanity Credentials

From your Sanity project dashboard:

  1. Project ID: Found in project settings or URL
  2. Dataset: Usually
    production
  3. Read Token: API → Tokens → Add New Token (Viewer role)
  4. Write Token (optional): Add New Token (Editor role)

Step 2: Create Initial Config

Create

.kurt/cms-config.json
:

{
  "sanity": {
    "prod": {
      "project_id": "your-project-id",
      "dataset": "production",
      "token": "sk...your-read-token",
      "write_token": "sk...your-write-token",
      "base_url": "https://yoursite.com"
    }
  }
}

Note:

  • The
    .kurt/
    directory is already gitignored, so your credentials are safe.
  • You can configure multiple instances (prod, staging, etc.) per platform.

Step 3: Run Onboarding

From Claude Code:

cms-interaction onboard

This discovers your content types and maps your custom field names.

Step 4: Test Setup

cms-interaction search --limit 5

Routing Logic

Routes to subskills based on first argument:

  • onboard
    → subskills/onboard.md →
    kurt cms onboard
  • search
    → subskills/search.md →
    kurt cms search
  • publish
    → subskills/publish.md →
    kurt cms publish

Each subskill:

  1. Parses user parameters
  2. Constructs appropriate
    kurt cms
    command
  3. Executes command
  4. Provides follow-up guidance

Integration with Core Workflow

Ad-hoc use (this skill):

  • Quick searches during planning
  • Exploring CMS content
  • One-off document retrieval
  • Publishing completed drafts

Systematic ingestion (core workflow):

Use the unified map-then-fetch workflow orchestrated by project-management-skill:

# Discovery + clustering
kurt map cms --platform sanity --instance prod --cluster-urls

# Selective fetching
kurt fetch --include "sanity/prod/*"
kurt fetch --in-cluster "Tutorials"
kurt fetch --with-content-type article

Benefits:

  • Same workflow as web content
  • Cross-source clustering (web + CMS)
  • Selective fetching by cluster or content type
  • Integrated into project sources

See project-management-skill/subskills/gather-sources.md for full orchestration.


Available Commands

All commands route to

kurt cms
:

Configuration

cms-interaction onboard
→ kurt cms onboard --platform sanity

Search

cms-interaction search --query "tutorial" --limit 20
→ kurt cms search --query "tutorial" --limit 20 --platform sanity

Fetch (via CLI directly)

kurt cms fetch --id <document-id> --output-dir sources/cms/sanity/

Types (via CLI directly)

kurt cms types --platform sanity

Publish

cms-interaction publish --file draft.md --id <document-id>
→ kurt cms publish --file draft.md --id <document-id> --platform sanity

Import (via CLI directly)

kurt cms import --source-dir sources/cms/sanity/

Configuration Format

After onboarding,

.kurt/cms-config.json
contains:

{
  "sanity": {
    "prod": {
      "project_id": "abc123",
      "dataset": "production",
      "token": "sk...",
      "write_token": "sk...",
      "base_url": "https://yoursite.com",

      "content_type_mappings": {
        "article": {
          "enabled": true,
          "content_field": "content_body_portable",
          "title_field": "title",
          "slug_field": "slug.current",
          "description_field": "excerpt",
          "inferred_content_type": "article",
          "metadata_fields": {}
        },
        "universeItem": {
          "enabled": true,
          "content_field": "description",
          "title_field": "title",
          "slug_field": "slug.current",
          "description_field": "description",
          "inferred_content_type": "reference",
          "metadata_fields": {}
        }
      }
    }
  }
}

Key fields:

  • slug_field
    : Used in semantic URLs for clustering
  • description_field
    : Provides context for topic clustering
  • inferred_content_type
    : Auto-assigned from schema name, skips LLM classification

Relationship with Other Skills

project-management-skill

Orchestrates systematic CMS ingestion:

  • Calls
    kurt map cms --cluster-urls
    for discovery
  • Uses
    kurt fetch --include "sanity/*"
    for bulk download
  • Integrates CMS with web content in same workflow

content-writing-skill

Consumes CMS content:

  • References CMS documents in project sources
  • Creates drafts for CMS publishing
  • Uses
    cms-interaction publish
    to push back to CMS

research-skill

Complements CMS search:

  • research-skill: External research (Perplexity AI)
  • cms-interaction: Internal content search (CMS)

Troubleshooting

"Platform not configured"

cms-interaction onboard

"Connection failed"

  • Check credentials in
    .kurt/cms-config.json
  • Verify tokens in Sanity dashboard
  • Test connection:
    kurt cms types --platform sanity

"No results found"

  • Try broader search:
    cms-interaction search --limit 20
  • Check enabled content types:
    kurt cms types
  • Verify content types configured in onboarding

"Write permission denied"

  • Add
    write_token
    with Editor role to config
  • Regenerate token in Sanity dashboard

For detailed subskill documentation, see subskills/.md files.*