← Vault Index
Source: business/marketing/skills/contentstudio-distribution-SKILL.md

name: contentstudio-distribution description: > Distribute finished social posts from the vault to platforms via ContentStudio. The integration is the authenticated contentstudio CLI — Claude pushes posts directly as drafts. Use when: "schedule this post", "push to ContentStudio", "distribute this content", "get this live", or any request to move finished social content from the vault to ContentStudio. metadata: author: Arden (Builder), Advisory OS version: "2.0.0" updated: "2026-06-05" pipeline: Vault paste-ready.txt + image -> contentstudio CLI -> ContentStudio -> Platforms platforms: LinkedIn, Facebook, Instagram, Twitter runnable-skill: .claude/skills/distribute/ (slash command /distribute)


ContentStudio Distribution — Social Post Pipeline

v2.0 — corrects the v1 doc. v1 said "Claude Code does not have access to ContentStudio" and described a manual copy-paste-through-Kathryn flow. That is no longer true (and the stale claim cost a 3-day stall on June 5 2026). The integration was built and proven on June 4–5: an authenticated contentstudio CLI that pushes posts straight into ContentStudio. Claude does the push. Do not tell Kathryn to paste anything in by hand.

The Integration Is Real — Verify in One Command

ContentStudio is the scheduling/publishing tool (Kathryn has a lifetime subscription). The integration is the contentstudio CLI on PATH (~/.local/bin/contentstudio, npm contentstudio-cli), authenticated to workspace KHB with a stored API key.

contentstudio auth:status     # API key + active workspace KHB
contentstudio auth:whoami      # live API hit — Kathryn Brown, active
contentstudio accounts:list    # connected accounts + IDs

If a cold session ever doubts this exists: run the above. It works.

The Fast Path — use the /distribute skill

The runnable skill lives at .claude/skills/distribute/ and registers as /distribute. It wraps the whole upload+create loop:

bash ~/advisory-os-vault/.claude/skills/distribute/push-drafts.sh <campaign>/social  [--dry-run]

It finds every *-paste-ready.txt, uploads the matching image, and creates one draft per post on the right account. See that skill's SKILL.md for the filename convention, the account map, and the manual CLI reference.


Roles (updated)

WhoDoes
SloaneWrites post copy (all platforms). Runs Copy QC + Sentence Editor. Produces the *-paste-ready.txt (post copy only).
WrenProduces images (.html source -> .png render).
ArdenOwns the distribution pipeline + /distribute skill. Runs the push.
Claude (any)Pushes drafts to ContentStudio via the CLI. No manual paste handoff.
KathrynApproves content. Reviews drafts in ContentStudio. Publishes. Posts first comments.

Publishing default is --publish-type draft. Kathryn is the publisher. Never schedule or auto-publish without her explicit go-ahead.


Pre-Flight QC Gate

Distribution executes; it does not QC. Before pushing, confirm each post:

#CheckPass criteria
1Copy QC + Sentence Editor passed.md header shows pass + date
2Platform + brand assigned.md header names one platform, one brand
3Image rendered.png exists, correct dimensions (table below)
4No hashtags on LinkedIn/Facebookzero — IG gets 3–5 niche tags
5No links in LinkedIn/FB bodylink goes in first comment
6Paste-ready .txt producedpost copy only, no header/brief
7Kathryn approvedshe said push / approved this post

Platform image specs

PlatformBrandDimensions
LinkedIn (AOS)AOS — charcoal #1a1a1a / gold #b79d641080x1350 (4:5)
LinkedIn (CYP)CYP — deep teal #0f2d3e / gold1080x1350 (4:5)
FacebookCYP — deep teal1080x1080 (square)
InstagramCYP — teal / gradient #3e666e1080x1350 (4:5)

Filename Convention (drives the script)

ArtifactPatternExample
Post copy*---paste-ready.txtangle5-ai-guide-linkedin-aos-paste-ready.txt
Image-.pngscreenshot-angle5-linkedin-aos.png

The CLI sends text literally (newlines preserved) — no zero-width-space hack needed (that was only for pasting into web composers; irrelevant to the API).

Account map (token -> account ID, workspace KHB)

TokenAccountID
linkedin-aos / linkedin-cypLinkedIn — Kathryn H BrowniEEqUjj-G8
fb-cypFacebook Page — Creating Your Plan1485451565006703
ig-cypInstagram — Kathryn H. Brown17841401293053293
twitter-cypTwitter/X — itskathrynbrown2490475879

Refresh if accounts reconnect: contentstudio accounts:list. The live map is in .claude/skills/distribute/push-drafts.sh.


Manual CLI (when the script isn't enough)

contentstudio media:upload --file <img.png> --json            # -> _id
contentstudio posts:create --json \
  --content "$(cat post-paste-ready.txt)" \
  --account <ID> --media-id <MEDIA_ID> --publish-type draft
contentstudio posts:list                                       # status=draft
contentstudio posts:delete <post_id>                           # undo a bad push
contentstudio comments:add <post_id> "<link + context>"        # first comment

Add --dry-run to posts:create to print the body without calling the API.


Cross-Platform Rules (unchanged)

  1. Each platform gets its own native version — never copy a LinkedIn post to FB/IG.
  2. Same angle, different execution per platform.
  3. LinkedIn = AOS brand; FB/IG = CYP. Exception: linkedin-cyp (CYP lens on LinkedIn).
  4. Stagger same-day cross-posts by 2+ hours.
  5. If both LinkedIn versions exist, both land as drafts — flag so Kathryn picks one.

What "done" looks like

Report: how many drafts landed, on which accounts, link to review/publish (https://app.contentstudio.io). Kathryn publishes. Then /handoff to log it.