Claude-skill-registry cms-interaction
Configure CMS connections and perform ad-hoc content searches (Sanity, Contentful, WordPress)
git clone https://github.com/majiayu000/claude-skill-registry
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"
skills/data/cms-interaction/SKILL.mdCMS 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:
- Configuration: Set up CMS connections (first-time setup)
- Ad-hoc search: Quick content searches during project planning/research
- Publishing: Push completed drafts back to CMS
For systematic content mapping and fetching, use the unified core workflow:
(discovery + clustering)kurt map cms --platform sanity --instance prod --cluster-urls
(download + index)kurt fetch --include "sanity/prod/*"
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:
- CLI commandssrc/kurt/commands/cms.py
- Sanity implementationsrc/kurt/cms/sanity/adapter.py
- Configuration managementsrc/kurt/cms/config.py
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:
- Project ID: Found in project settings or URL
- Dataset: Usually
production - Read Token: API → Tokens → Add New Token (Viewer role)
- 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
directory is already gitignored, so your credentials are safe..kurt/ - 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:
→ subskills/onboard.md →onboardkurt cms onboard
→ subskills/search.md →searchkurt cms search
→ subskills/publish.md →publishkurt cms publish
Each subskill:
- Parses user parameters
- Constructs appropriate
commandkurt cms - Executes command
- 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:
: Used in semantic URLs for clusteringslug_field
: Provides context for topic clusteringdescription_field
: Auto-assigned from schema name, skips LLM classificationinferred_content_type
Relationship with Other Skills
project-management-skill
Orchestrates systematic CMS ingestion:
- Calls
for discoverykurt map cms --cluster-urls - Uses
for bulk downloadkurt fetch --include "sanity/*" - 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
to push back to CMScms-interaction publish
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
with Editor role to configwrite_token - Regenerate token in Sanity dashboard
For detailed subskill documentation, see subskills/.md files.*