Segmently CLI Content Plan Guide
Use this skill when the user asks how to inspect, export, apply, transfer, or verify Segmently Content Plan data through the CLI.
This skill is specialized for Content Plan. For non-Content Plan CLI tasks, use
segmently-cli-guide. This customer-facing skill stays on public Segmently CLI
surfaces; if a request needs Segmently support-only diagnostics, say that the
public skill cannot perform that step and provide the closest public read/verify
command instead.
CLI 1.0.0 Contract
Content Plan workflows in this skill target @segmently/cli 1.0.0 or newer.
Start with segmently --version; use segmently capabilities when the selected
environment may lag the installed CLI.
The command vocabulary is deliberate:
applyimports or upserts an explicit manifest through--file;acceptpromotes a generated draft identified by a positional generation id;set-currentmakes an existing author, design profile, or design-system package active;deleteremoves a document;removeonly removes list membership, such as a platform from a topic.
Removed 0.1.x names are migration errors, not aliases. In particular, generated
topic/post draft lookup uses --generation <generationId>, never
--task <taskId>.
Core Workflow
- Confirm the installed CLI and environment with
segmently --versionand, when environment capability matters,segmently capabilities. - Confirm target context: production project ID, author ID, platform ID, and
profile key when design profiles are involved. Use
content-plan authors defaultorcontent-plan authors listwhen the author ID is not known. - For an existing project or an uncertain end-to-end state, run
content-plan doctor --author <authorId>first. It evaluates the shared eight-step flow (author -> platforms -> pillars -> backlog -> strategy -> publications -> posts -> assets) and returns the exact next command for a missing step. A not-ready result exits non-zero by design. - Choose the smallest workflow from
references/workflows.md, then the smallest CLI surface inside it:content-plan bootstrap validate|plan|apply|verifyfor empty or partially configured projects that need author, platform, strategy, post, and calendar setup from one manifest;- read/export for inspection;
- focused apply for pillars/templates/design profiles;
- dry-run before every write that supports it.
- Keep target IDs explicit. Do not rely on IDs embedded in imported manifests.
- Validate manifest-backed writes locally, then dry-run them. Content Plan 1.0.0 validates bootstrap, topic apply, aspect apply, research phase patch, post generation files, and design-profile apply before any network call.
- For reference images, separate CDN upload from profile/package apply. Uploading an image only creates an asset URL; it does not make the reference visible in Content Plan Design.
- For generated posts, resolve the post storage first when the user gives a
draft ID.
posts resolveandposts drafts listcovercontent_posts, sprint posts, post examples, andpost_generations/*/generatedPosts. State the boundary in the answer: a generated draft can live underpost_generations/*/generatedPostsrather than canonicalcontent_posts, so resolve it before slot or asset operations. - For topic-source-driven planning, use
content-plan topics generateto create generated topic drafts from manual text and/or URL source context, thencontent-plan topics drafts listandcontent-plan topics acceptto promote accepted drafts into the backlog (topics applyapplies a deterministic manifest instead). For topic-source-driven posts, put the same material intocontent-plan topics resources. Post generation reads those resources fromprojects/{projectId}/topics/{topicId}/resources. - For image/asset repairs, inspect the post brief, operate one
aiAssetsslot at a time, regenerate or patch the prompt if needed, generate a new experiment, then select/reject/delete experiments explicitly. - For full post QA, group commands by lifecycle stage instead of treating every operation as isolated: model preflight, post generation, draft/canonical resolution, brief regeneration, slot repair, image experiment generation, selection, and task/debug evidence.
- For publishing demos, make the post canonical first, then attach it to
Calendar with
posts scheduleorposts schedule-batch; a standalonecontent_postsdocument is not enough for reviewer navigation. - Treat task output as control flow. With
--wait, failed, cancelled, or timed-out tasks exit non-zero. Without--wait, a launched task reportstaskState: "pending"plus a copyablefollowUp; run that command before claiming completion. - Verify with the matching list/export/doctor command and, when useful, the generated UI URLs from bootstrap plan/apply/verify output.
- For X, first run
segmently capabilitiesand require both advertised X command families, then inspectcontent-plan x status. State this gate in every X answer: continue only when both families are advertised; otherwise say the X workflow is unavailable in the selected environment and stop before any paid read, reply, or publication command. Documentation is not proof that the selected environment/backend and installed CLI support the workflow. - Separate X research/listening, approval, and delivery. Preview every paid
operation with
--dry-run; approval never sends; a real post/reply requires the exact confirmation returned by the server. Reconcile an ambiguous result before attempting any new send.
Load References As Needed
- Command/scopes lookup: read
references/commands.md. - Manifest structures: read
references/manifests.md. - End-to-end workflows: read
references/workflows.md. - CLI improvement backlog: read
references/backlog.mdonly when planning product/CLI changes.
Do not load every reference by default. A design reference question usually
needs commands.md, manifests.md, and the specific design workflow from
workflows.md.
Response Shape
For Content Plan CLI guidance, answer in this order:
Goal:
Target context:
Required auth/scopes:
Selected workflow:
Preflight / doctor:
Commands and generated state files:
Manifest fields:
Dry-run checks:
Verification:
UI location:
Notes / risks:Keep commands copyable. Use placeholders like <projectId>, <authorId>, and
<profileId> unless the user supplied real IDs. Never invent secrets or print
tokens.
Safety Rules
- Content Plan commands are author-scoped. Always include or resolve
--author <authorId>before profile/design/template operations. - Use
content-plan doctoras the readiness entry point for a full or partially configured flow. Do not convert its not-ready exit code into a command failure; readsteps[].nextCommandand advance the first required missing step. - Use
--dry-runbefore write commands when supported. - Mutating aspect commands report
changedFields.changedFields: []means the result is identical to the stored state — the server skips the write entirely and the command still exits 0. A no-op apply is SUCCESS, not failure; trustchangedFieldsinstead of building your own diff. - Topic aspects (
topics aspects apply|add|patch) accept ONLY the canonical fieldsaspectKey,aspectLabel(required, non-empty), andaspectAngle. Never invent field names from UI column headers —aspect,hookAngle, andtitleare rejected with did-you-mean hints.aspects apply --fileaccepts a bare array,{ "postBreakdown": [...] }, or the exactaspects listoutput{ "aspects": [...] }; a file containing BOTH keys is an ambiguity error. Seereferences/manifests.md > Topic Aspects Manifest. - Readback-before-retry (MANDATORY): when a REAL (non-dry-run) apply fails
with
auth_required, a network error, or any ambiguous outcome, never blindly re-run it. First read the state back (topics aspects list, the matchingget/listfor other surfaces), compare against the intended manifest, and re-apply only if the readback proves the write did not land. - Verify UI-visible writes in the UI, not only via CLI readback: a readback
echoes what was STORED, not what the product RENDERS. After applying data
users see (topic aspects, posts, publications), confirm the values in the
owning surface (e.g.
/project/{projectId}/content-plan?cpTab=backlog) or ask the operator to. A stored-vs-rendered contract mismatch is invisible to readback alone. bootstrap applyvalidates by default and resumes from<manifest>.bootstrap-state.json. Preserve the checkpoint after an interrupted run; use--restartonly when the operator intentionally wants every operation repeated.--skip-validationis an escape hatch and never skips thesystem_platformspreflight.- X paid reads require
social:read; X creates requiresocial:publishplus the documented Content Plan scope. A connected account, enabled project budget, and environment feature gate are also required. - Do not provide an executable X search/reply/publish sequence as unconditional
guidance. Put the two-family
segmently capabilitiesgate before it and make the unavailable/not-advertised stop condition explicit in the answer. - X
scheduledAtis editorial metadata only. Never describe it as an automatic or scheduled provider send. - Never automate X replies, likes, follows, direct messages, polling, or recurring analytics. Saved listening sources are inert until explicit refresh.
- An X dry-run performs no provider request. If a create outcome is ambiguous,
do not retry; use the matching
reconcile-xcommand. - An X reply budgets a bounded source-post verification read separately from
the create. Review the aggregate estimate and
sourceCheckUsage; do not assume a reply costs only one provider request. - X
401means reconnect-required. X403means the provider rejected the operation/app entitlement; reportx_provider_forbidden, keep the connection intact, and never fabricate analytics metrics. content-plan designs applyaccepts flat editor JSON, skill composite JSON, or CLI transfer manifests. Prefer transfer manifests for project-to-project moves and reference-driven profile variants.- Use
--set-currentonly when the profile should become the runtime generation profile. Without it, design apply creates or updates a library variant that the user opens inside the publication type card only when the input manifest does not already setprofile.setCurrent: true. If exporting a current profile to create a new variant, explicitly edit the manifest toprofile.setCurrent: falsebefore apply. - Use
content-plan designs set-currentto switch runtime generation to an existing library profile without reapplying the full design manifest. - Use
content-plan design-systems list|export|inspect|apply|set-currentwhen the operation spans a full package and multiple profile formats. Dry-run package apply or activation, then verify withdesign-systems list --include-profilesanddesign-systems inspect. - Use
--references uploadto copy references into a target project. Use--references keepwhen references already live in the target project or are intentionally external. visualReferences[].textBudgets[]are per controllable text field. They are not aggregate budgets for the whole image.- Use
--waitwhen supported and the operator needs the terminal task result in the same CLI run. Current Content Plan wait support coversposts generate,topics generate,topics aspects generate,posts assets plan,posts assets regenerate-brief,posts assets regenerate-textwhen it returns a task,posts assets slots generate, andposts assets slots batch-generate. - Never use the removed
--taskfilter withtopics drafts listorposts drafts list; use--generation <generationId>. - Research launch commands return
runId, nottaskId; usecontent-plan research wait <runId>or inspect withcontent-plan research get/list. content-plan posts assets regenerate-textis best-effort: it only works when the existing post still has enough generation context. Useposts generatewhen full text generation should be launched from topic, aspect, platform, and model settings.- The CLI exposes first-class author/platform bootstrap, deterministic strategy
and calendar bootstrap, manual post creation, schedule batch attachment,
topic resource import, topic/theme bulk apply, draft generation apply, AI copy
refine, post asset brief inspection, asset preview, one-slot prompt
regeneration, batch slot generation, and experiment reject/delete. The
remaining known post gap is true full
regenerate-postfrom only an existing post ID when stored generation context is absent.