# Experience Cms Content Generate

Creates, edits, and publishes Salesforce CMS content of any kind, any domain, any topic.

- Repository: https://github.com/forcedotcom/sf-skills (1134 stars)
- Category: Writing
- License: Apache-2.0
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add forcedotcom/sf-skills --skill experience-cms-content-generate -g -a claude-code -y`
Codex: `npx skills add forcedotcom/sf-skills --skill experience-cms-content-generate -g -a codex -y`
Cursor: `npx skills add forcedotcom/sf-skills --skill experience-cms-content-generate -g -a cursor -y`
Gemini CLI: `npx skills add forcedotcom/sf-skills --skill experience-cms-content-generate -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add forcedotcom/sf-skills`

## Description

Creates, edits, and publishes Salesforce CMS content of any kind, any domain, any topic. Single and bulk: create many in parallel, edit one or many, publish all or a subset. Use this skill ANY TIME a user asks to create, generate, write, draft, author, or add content, OR to update, edit, or revise a content record, OR to publish it, OR to delete/remove a content record. Triggers like \"create a <thing> about X\", \"create 5 <things>\", \"update content <id>\", \"publish content <id>\", \"publish the record <id>\", \"make <id> live\", \"delete content <id>\", where <thing> is any user-named content type. Activates FIRST whenever content authoring, editing, publishing, or deletion is mentioned, regardless of subject. Handles the full workflow: finding the content type, resolving the workspace, creating content, editing or publishing it, including a record identified by its variantId. Does not apply to defining a content type / schema (use experience-cms-content-type-generate), cloning, versioning, workspaces, or media.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Creating CMS Content

Universal skill for creating Salesforce CMS content records, orchestrates type discovery, workspace resolution, and `create_cms_content` dispatch against an existing `ContentTypeBundle`.

**Content generation is server-side, always.** `create_cms_content` / `update_cms_content_variant` take the goal / edit instruction as `prompt`; the server generates + validates the body against the schema and returns the persisted record. Agent never walks the schema, assembles `contentBody`, pre-validates, or regenerates rejected fields (Principle 3).

## Scope

**Creates managed content records in Salesforce CMS**, instances authored against an existing `ContentTypeBundle`.

**Use when the user wants to:** create a content record of any kind (single or bulk) from a free-text prompt against an existing CMS type; edit/refine session items; **update/edit** OR **publish** a record identified directly by `managedContentVariantId` / `managedContentId`, even if NOT created this session (Step 0 → UPDATE / PUBLISH entry); publish all or a subset; **delete/remove a record**, this skill OWNS the delete request and routes to a hard stop (Step 0-D); never surface the internal reason.

**DO NOT use when the user wants to:** define a new content type / schema (use `experience-cms-content-type-generate`); unpublish, clone, or version a record; manage workspaces / folders / channels; attach images / media; apply branding.

**"Create image/media content" is NOT a pre-flight scope-out** (only literal binary file attach/upload is the excluded "attach media" above). Creating an image/video content *record* (e.g. from a URL) enters the normal flow, resolve type + workspace, dispatch `create_cms_content`, never refuse up front or propose a REST / UI workaround. `sfdc_cms__media` is server-decided: let the tool return the error, then hard-stop per Principle 15 (`references/error-recovery.md`).

## Before You Start

**Follow steps in order, do not skip or reorder.**

The rest: https://github.com/forcedotcom/sf-skills/blob/HEAD/plugins/builder/experience-cms/skills/experience-cms-content-generate/SKILL.md
