| name | cmm-content-planning |
| description | Use this CMM skill to score topic candidates, select creator-ready topic cards, diagnose content direction, and turn a selected topic into a standard content plan for downstream writing, visual, video, and publishing workflows. Use when the user wants content-factory planning, topic selection, topic_card to content_plan conversion, platform/form decision, content diagnosis, or a reusable plan before drafting. All planning logic is self-contained in this skill. |
| version | 0.1.0 |
CMM Content Planning
cmm-content-planning is the CMM planning layer between information input and
content production.
It can score source/topic candidates into topic_card records, diagnose whether
and how a topic should be made, and turn a selected topic_card into a standard
content_plan. Downstream writing, visual, video, and publishing skills should
consume the content_plan, not a bare topic title.
Boundary
Use this skill for:
- Converting
topic_card into content_plan.
- Scoring source cards or topic candidates.
- Producing a short topic board for user selection.
- Diagnosing whether a selected topic is worth making.
- Choosing platform and format.
- Defining angle, evidence, risks, expression strategy, and first action.
- Preparing structured input for
cmm-content-writing, cmm-visual-production,
cmm-video-production, and cmm-publishing.
Do not use this skill to:
- Collect information. Use the research step per
cmm-content-factory/references/research-policy.md (host-native search →
cmm-web-search → guide user for material).
- Draft final articles or posts.
- Generate images, videos, or platform drafts.
Scope
This skill owns topic scoring, selection, and content diagnosis. All planning
logic is internalized in references/planning-method.md and is self-contained;
no external skill is required.
Input
Preferred input is one of:
source_card[] from cmm-web-search, subscription adapters, or user material.
topic_candidate[] from a collection system.
topic_card from a previous selection step.
- A raw user topic.
When the input is a source or candidate list, score it and produce topic_card
records before planning. When the input is already a chosen topic_card, skip
pool scoring and continue to diagnosis.
topic_card:
title: ""
core_angle: ""
why_now: ""
topic_type: ""
target_audience: []
target_platform: ""
recommended_formats: []
final_score: 0
score_breakdown: {}
account_fit_note: ""
primary_source: {}
reference_sources: []
creation_notes: ""
risks: []
If the user has only a rough topic, build a minimal topic_card first. Do not
pretend missing sources or platform choices are known.
Read references/content-plan-contract.md when exact fields are needed.
Read references/planning-method.md for scoring, platform fit, and diagnosis
rules.
Workflow
- Identify the input state:
- source cards
- topic candidates
- full
topic_card
- partial
topic_card
- raw topic from the user
- If there is a pool, score and filter candidates:
- load the user profile (
~/.cmm/profile/) first; apply its
topic_preferences.avoid and pillar hard rules before scoring, then use
the profile-driven score shape with account_fit
(falls back to the shipped default-profile.yaml when the user has none)
- reject unsupported, vague, duplicated, or marketing-only items
- keep sources attached to each surviving topic
- produce a compact
topic_board when user choice is needed; show each
topic's account_fit_note
- If there is only one topic, build or normalize a
topic_card.
- Extract the planning facts:
- topic
- core angle
- why now
- audience
- platform hints
- recommended formats
- supporting sources
- risks and weak assumptions
- Decide platform and format.
- Select styles: pick one writing/visual/layout template id and the user
profile per
cmm-content-factory/references/styles/selection-rules.md. Precedence:
same-turn user instruction > user profile default_styles
(~/.cmm/profile/) > shipped default-profile.yaml default_styles >
rules table. If no personal profile exists, load the shipped
references/styles/default-profile.yaml (persona-neutral) and remind the
user once to create their own. Record style_selection with a one-line
selection_reason in the content_plan.
- Diagnose the content shape:
- whether the topic is worth making
- what the content should prove
- what evidence is usable
- what should be avoided
- whether the expression is clean, concrete, and platform-fit
- whether visual or video production is needed
- Produce a
content_plan.
- Stop. Do not draft final content unless the user explicitly asks for the next
workflow step.
Topic Scoring Rules
Use an explainable score before creative judgment:
final_score =
0.30 * base_signal
0.20 * news_value
0.15 * source_strength
0.15 * creator_value
0.10 * platform_fit
0.10 * freshness
- noise_penalty
Scores are capped to [0, 1].
Reject candidates that cannot answer both:
- What happened or changed?
- Why does it matter to the target audience now?
Prefer source-backed substance over polished generated titles. If a title looks
templated but the source details are strong, keep the topic and regenerate the
angle.
Diagnosis Dimensions
Before producing the final content_plan, diagnose five dimensions:
| Dimension | Question | Plan effect |
|---|
content_value | Is there a clear event, change, contrast, or useful problem? | Decides whether to proceed or block. |
format_fit | Is the recommended format appropriate for the topic and platform? | Sets platform, format, and downstream needs. |
evidence_strength | Are claims supported by inspected or credible sources? | Fills evidence and risks. |
expression_efficiency | Can the core claim be said in one clear sentence? | Sets core_claim and outline direction. |
title_visual_fit | Does the topic have a cover/title/card angle? | Sets title_cover_direction and visual needs. |
Planning Rules
platform and format must be concrete. Avoid "all platforms" as the final
plan unless the task is explicitly multi-platform.
- Evidence must come from
topic_card, source cards, or user-provided material.
If evidence is weak, write that into risks.
- Reject or block topics that are only slogans, empty announcements, vague
opinions, marketing CTAs, or unsupported claims.
expression_strategy describes how to say it; it must not become a final
article draft.
title_cover_direction gives a direction only. Do not batch-generate titles
here.
first_action must be one concrete next step.
- Default output status is
draft.
Format Routing
Use these defaults unless the user or topic_card says otherwise:
| Topic shape | Recommended format |
|---|
| Deep analysis, policy, business implication, long reasoning | longform_analysis |
| Tool list, workflow, tutorial, practical comparison | visual_note or tutorial |
| Strong conflict, controversy, before/after, demo story | short_video_script |
| Fast opinion, platform change, developer-facing observation | thread |
| Product/company/creator example | case_study |
Platform hints:
wechat: long-form analysis, case study, policy/business explanation.
xiaohongshu: visual note, checklist, tool list, practical workflow.
douyin: short-video script, conflict hook, demo story.
bilibili: tutorial, deep-dive video, structured explainer.
x: thread, hot take, developer note.
weibo: short post, commentary, image-text post.
Output
If the input is a candidate pool, output a concise topic_board first and stop
for user selection unless the user has already authorized automatic selection.
topic_board:
selection_status: needs_user_choice
topics:
- title: ""
core_angle: ""
why_now: ""
recommended_platforms: []
recommended_formats: []
final_score: 0
score_breakdown: {}
risks: []
source_refs: []
rejected:
- title: ""
reason: ""
If the topic is selected, always output a concise diagnosis plus a machine-usable
content_plan.
content_plan:
topic: ""
audience: ""
platform: ""
format: ""
core_angle: ""
core_claim: ""
evidence:
- title: ""
source: ""
url: ""
usage: ""
risks: []
expression_strategy: ""
title_cover_direction: ""
outline_direction: []
first_action: ""
downstream_needs:
writing: true
visual: true
video: false
publishing: false
diagnosis:
content_value: ""
format_fit: ""
evidence_strength: ""
expression_efficiency: ""
title_visual_fit: ""
status: draft
Handoff
After producing content_plan, route only when the user asks for the next step:
- Writing:
cmm-content-writing
- Visuals:
cmm-visual-production
- Video:
cmm-video-production
- Publishing:
cmm-publishing