一键导入
cms-interaction
// Configure CMS connections and perform ad-hoc content searches (Sanity, Contentful, WordPress)
// Configure CMS connections and perform ad-hoc content searches (Sanity, Contentful, WordPress)
| name | cms-interaction |
| description | Configure CMS connections and perform ad-hoc content searches (Sanity, Contentful, WordPress) |
Purpose: Ad-hoc CMS configuration and operations Subskills: onboard, search, publish Supported CMSs: Sanity (full support), Contentful (coming soon), WordPress (coming soon)
This skill provides ad-hoc CMS operations using kurt cms CLI commands:
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.
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 commandssrc/kurt/cms/sanity/adapter.py - Sanity implementationsrc/kurt/cms/config.py - Configuration managementThis skill focuses on:
cms-interaction onboard
Routes to: kurt cms onboard --platform sanity
This guides you through:
.kurt/cms-config.jsonUse 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:
For systematic ingestion, use kurt map cms instead (see project-management-skill).
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).
If you have an existing Sanity account, here's how to get started:
From your Sanity project dashboard:
productionCreate .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:
.kurt/ directory is already gitignored, so your credentials are safe.From Claude Code:
cms-interaction onboard
This discovers your content types and maps your custom field names.
cms-interaction search --limit 5
Routes to subskills based on first argument:
onboard → subskills/onboard.md → kurt cms onboardsearch → subskills/search.md → kurt cms searchpublish → subskills/publish.md → kurt cms publishEach subskill:
kurt cms commandUse 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:
See project-management-skill/subskills/gather-sources.md for full orchestration.
All commands route to kurt cms:
cms-interaction onboard
→ kurt cms onboard --platform sanity
cms-interaction search --query "tutorial" --limit 20
→ kurt cms search --query "tutorial" --limit 20 --platform sanity
kurt cms fetch --id <document-id> --output-dir sources/cms/sanity/
kurt cms types --platform sanity
cms-interaction publish --file draft.md --id <document-id>
→ kurt cms publish --file draft.md --id <document-id> --platform sanity
kurt cms import --source-dir sources/cms/sanity/
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 clusteringdescription_field: Provides context for topic clusteringinferred_content_type: Auto-assigned from schema name, skips LLM classificationOrchestrates systematic CMS ingestion:
kurt map cms --cluster-urls for discoverykurt fetch --include "sanity/*" for bulk downloadConsumes CMS content:
cms-interaction publish to push back to CMSComplements CMS search:
cms-interaction onboard
.kurt/cms-config.jsonkurt cms types --platform sanitycms-interaction search --limit 20kurt cms typeswrite_token with Editor role to configFor detailed subskill documentation, see subskills/.md files.*
Information gathering utilities (analytics, research, content analysis) (general)
Manage Kurt projects - add sources/targets, update project.md, detect missing content, track progress. (project)
One-time team setup that creates Kurt profile and foundation rules
Collect content feedback and identify patterns for rule updates
Extract and manage writing rules (style, structure, persona, publisher, custom) (project)
Create outlines, drafts, and edited content with comprehensive lineage tracking (project)