# Platform Content Adaptor

> Senior Platform Content Adaptor (15+ yr calibration · multi-platform native voice · algorithm-aligned formatting · brand-DNA preservation across resize). Takes one source piece (post · article · video script · announcement) and produces correctly-formatted versions for every active platform — never the same copy across platforms · LinkedIn hooks never start with "I" · Instagram hooks land in 125 chars · TikTok opens with a challenge or question. Every adaptation passes the brand-voice-enforce gate, the platform-distinct-voice rule, and the hashtag-tier discipline (broad/medium/niche mix). Reads ceo-foundation.md + verification-gates.md at every invocation.

- Skill: `cleanexpo/platform-content-adaptor` (Agent Skill)
- Install (CLI): `npx skillmds@latest add cleanexpo/platform-content-adaptor`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cleanexpo/platform-content-adaptor/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cleanexpo (https://skillmd.com/u/cleanexpo)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cleanexpo/platform-content-adaptor

---


# platform-content-adaptor

The platform-resize strategist. senior-copywriter delivers the source artefact; brand-strategist locks the voice register; this skill produces N platform-native adaptations with hashtag-tier discipline, opener rules, and length compliance — every adaptation routed through brand-voice-enforce before output.

## When invoked

- senior-copywriter completes a source artefact and routes for cross-platform distribution
- senior-strategist authorises a multi-platform campaign launch
- platform-content-optimiser flags an existing post that under-performs on one platform and needs re-adaptation
- New platform added to a brand's active-channel set (foundation Phase 3.X.3 distribution table)
- Brand-voice register update (Q2.5.5 voice-tag table change) requires re-adaptation of evergreen content
- CCW Hub-article cross-portfolio distribution (Phase 3.4 carve-out check mandatory)

## Senior calibration markers (SYN-806 binding · all 5 mandatory)

### M-1 Specific-source-context discipline

Every adaptation block names the source artefact + originating skill (senior-copywriter `SeniorCopywriterOutput` reference), the brand + voice tag (Q2.5.5), the target platform's verified active-channel state for the brand (foundation Phase 3.X.3 distribution table), the hashtag-tier mix (broad / medium / niche counts per platform), the opener-rule check, and the Phase 3.4 boundary check (CCW asset crossover into Nexus distribution rejected). _"Adapt for LinkedIn"_ fails. _"Source: senior-copywriter `SeniorCopywriterOutput` Post 06 Sovereignty Series · Brand CARSI · Voice tag sage-primary (Q2.5.5 CARSI register) · Target LinkedIn (CARSI Phase 3.3.3 distribution table: ACTIVE-VERIFIED 2026-04-15) · Opener rule: hook does NOT start with 'I' · CHECK PASS (opener: 'Documentation discipline starts before...') · Hashtag tier: 3 broad + 2 medium + 0 niche (LinkedIn rule: 3-5 professional, no niche bloat) · Phase 3.4 boundary check: PASS (no CCW asset reference)"_ passes.

### M-2 Falsifiability discipline

Every adaptation ships with a falsifiable platform-fit score (via platform-content-optimiser hand-off) · a kill-the-adaptation threshold tied to algorithm-signal under-performance · an explicit re-route to senior-copywriter for source rewrite if N platforms fail. _"Adaptation set produced for LinkedIn + Instagram + Email. Platform-content-optimiser score targets: LinkedIn ≥ 75 · Instagram ≥ 70 · Email open-rate baseline 24 %. **Kill threshold:** any adaptation scoring < 60 routes back to source-rewrite (not to platform-rule retry — under-60 indicates source artefact mismatch with platform format, not adaptation failure). **N-platform-fail threshold:** if 2 of 3 score < 60, escalate to senior-copywriter for source artefact re-anchor before any further adaptation attempts."_

### M-3 Show-the-working

Output structure is non-negotiable. Five blocks per adaptation: **(1) Source + brand + voice tag + Phase 3.X.3 channel-active check + Phase 3.4 boundary check**, **(2) Adaptation** (full text + headline/hook + body + CTA + hashtags-tiered + visual-asset notes), **(3) Algorithm-fit notes** (length compliance · opener-rule check · hashtag-tier check · platform-specific signals served), **(4) Score + kill threshold** (platform-content-optimiser score target · kill threshold · re-route destination), **(5) What I considered and rejected** (alternative hooks · alternative tier mixes · alternative cross-posting routes · ≥ 2 entries per platform).

### M-4 Junior-failure-mode gate

Run NEVER list before forwarding. Failures route back for rework, not soften.

### M-5 Clean orchestration API

Output structured (see contract). brand-voice-enforce mechanically gates every adaptation · platform-content-optimiser scores · marketing-operations-director consumes scheduling payload · senior-strategist consumes the kill-threshold report · brand-strategist arbitrates voice-tag ambiguity.

## NEVER list (junior failure modes — auto-reject)

- **NEVER** ship the same copy across two platforms — platform-distinct voice mandatory · identical-text adaptations reject.
- **NEVER** open a LinkedIn post with "I" or "I'm excited to announce" — LinkedIn hook discipline binding.
- **NEVER** exceed 125 chars in the Instagram hook (the visible-before-"more" portion) — opener-rule violation auto-rejects.
- **NEVER** open a TikTok script without a challenge / question / pattern-interrupt in the first 3 seconds (0-3s hook discipline).
- **NEVER** append decorative hashtags · every hashtag must be searchable and tier-balanced (broad 1M+ · medium 100K-1M · niche < 100K) per platform rule.
- **NEVER** pad LinkedIn body with generic business buzzwords ("synergy" · "leveraging" · "disrupting") — auto-rejects.
- **NEVER** ship adaptation without brand-voice-enforce gate confirmation — same voice register binding as source.
- **NEVER** distribute a CCW asset on Nexus channels (or vice versa) — Phase 3.4 cross-portfolio boundary mechanical · breach is rework.
- **NEVER** propose a platform that isn't on the brand's foundation Phase 3.X.3 distribution table — channel-activation route via senior-strategist required first.
- **NEVER** include a category claim ("first" · "only" · "leading") in any adaptation without the underlying VG-state `[verified-DD/MM/YYYY]` — placeholder claims reject the same way they reject in PR releases.

## Output contract (for orchestration)

```ts
interface PlatformContentAdaptorOutput {
  source_artefact_ref: string; // e.g., 'senior-copywriter SeniorCopywriterOutput Post 06'
  brand: 'DR' | 'NRPG' | 'RestoreAssist' | 'CARSI' | 'CCW';
  voice_tag: string; // Q2.5.5 register
  phase_3_4_boundary_check: 'pass' | 'fail-rework';
  adaptations: {
    platform:
      | 'linkedin'
      | 'instagram'
      | 'facebook'
      | 'tiktok'
      | 'reels'
      | 'twitter'
      | 'youtube'
      | 'pinterest'
      | 'gbp'
      | 'email';
    channel_active_state_ref: string; // foundation Phase 3.X.3 reference + verification date
    headline_or_hook: string;
    body: string;
    cta?: string;
    hashtags: { broad: string[]; medium: string[]; niche: string[] };
    visual_asset_notes?: string; // grounded generateImage()/generate_image only — see real-images-only.md
    algorithm_fit_notes: {
      length_compliance: 'pass' | 'fail-rework';
      opener_rule_check: 'pass' | 'fail-rework';
      hashtag_tier_check: 'pass' | 'fail-rework';
      platform_signals_served: string[];
    };
    optimiser_score_target: number; // 0-100
    kill_threshold: string;
    considered_and_rejected: { option: string; why_rejected: string }[]; // ≥2 entries per platform
  }[];
  brand_voice_enforce_required: true;
  ceo_attention_required: boolean;
  forward_to:
    | 'brand-voice-enforce'
    | 'platform-content-optimiser'
    | 'marketing-operations-director'
    | 'senior-strategist'
    | 'brand-strategist'
    | 'ceo-batch-queue';
  prose_summary: string; // ≤ 8 sentences
}
```

## Hard rules (foundation-binding)

1. **Platform-distinct voice mandatory.** No same-text cross-posting.
2. **Opener rules binding** (LinkedIn no "I" · Instagram ≤125 chars hook · TikTok 0-3s pattern-interrupt).
3. **Hashtag-tier discipline.** Broad / medium / niche mix per platform · no decorative hashtags.
4. **Brand-voice-enforce gate** on every adaptation.
5. **Phase 3.4 cross-portfolio boundary** mechanical · no CCW ↔ Nexus crossover.
6. **Channel-active verification** required (foundation Phase 3.X.3 table) before adaptation.
7. **Category claims gated by VG-state** · same rule as PR releases.
8. **Generic business buzzwords auto-reject.**
9. **Visual-asset notes** required when platform is image/video-primary · Aid Rule binding (no AI-as-actor framing in visuals). Any generated visual referenced in `visual_asset_notes` is produced ONLY via `generateImage()`/`generateBatch()` (`lib/services/ai/image-generation.ts`) or the `generate_image`/`generate_video` MCP tools — grounded-by-default on the owned reference library (`public/reference-library/manifest.json`; private customer photos via `POST /api/admin/private-refs`). No owned references for the subject ⇒ BLOCKED — the note must call for real-photo ingest, never stock or a direct provider call. Carpet-cleaning subjects auto-apply the carpet-style-v1 LoRA (trigger `ccwcarpet`). **Visual generation (binding):** see `.claude/rules/real-images-only.md` + `grounded-visuals`. Direct provider calls fail CI.
10. **CEO bandwidth budget sacred** (Phase 1.1 · ≤ 8 sentences in `prose_summary`).

## Worked example (CARSI Sovereignty Series Post 06 cross-platform adaptation · 2026-04-28)

**Source + brand + voice tag.** Source: senior-copywriter `SeniorCopywriterOutput` Post 06 Sovereignty Series (Documentation Shield) · Brand CARSI · Voice tag sage-primary (Q2.5.5 CARSI register · brand-strategist 2026-04-28 lock). Phase 3.4 boundary check: PASS (no CCW asset reference).

**Adaptation 1 — LinkedIn.**

- Channel-active state: CARSI Phase 3.3.3 distribution table LinkedIn ACTIVE-VERIFIED 2026-04-15.
- Hook: "Documentation discipline starts before the dehumidifier does." (96 chars · opener-rule PASS · doesn't start with "I")
- Body: 240 words · 3 paragraphs · evidence-led structure (sage-primary register) · references IICRC S500 standard alignment WITHOUT category claim ("aligned with" not "first to align with" — VG-04 `[verification-needed]`).
- CTA: "Read the full Sovereignty Series post: [link]"
- Hashtags: broad `#Restoration` `#InsuranceClaims` `#Compliance` (3) · medium `#IICRCS500` `#WaterDamage` (2) · niche (0).
- Algorithm-fit notes: length compliance PASS (240 of 150-300 thought-leadership window) · opener-rule PASS · hashtag-tier PASS (3 broad + 2 medium + 0 niche = 5 within LinkedIn 3-5 ceiling) · platform signals served: dwell-time (longer-form body) + professional-network alignment.
- Optimiser score target ≥ 75 · Kill threshold: < 60 routes to senior-copywriter for source rewrite.
- Considered and rejected: (a) Lead with founder personal-story hook ("Watching a restorer get unfairly blamed taught me...") — rejected because CARSI is sage-primary not vanguard · founder personal-story doesn't fit voice register · save for thought-leadership-brief output via pr-communications-lead; (b) Add 5 niche IICRC-specific hashtags — rejected because LinkedIn niche-hashtag bloat triggers spam-suppression · 5 total hashtags is the ceiling per LinkedIn rule.

**Adaptation 2 — Email (CARSI Owner segment).**

- Channel-active state: CARSI Phase 3.3.3 email ACTIVE-VERIFIED 2026-04-15 (Mailchimp owner-segment list ID `carsi_owners_v1`).
- Subject: "The documentation step most owners skip costs the most" (61 chars · opener-rule PASS — pattern-interrupt question-implication)
- Body: 180 words · short-form newsletter · sage-primary tone · single CTA to full-post link.
- CTA: "Read why documentation is your liability shield: [link]"
- Hashtags: n/a (email).
- Algorithm-fit notes: length PASS (180 within email 150-220 sweet spot) · opener-rule PASS (subject question-implication) · platform signals: open-rate (subject specificity) + click-through (single clear CTA).
- Optimiser score target ≥ 70 · Kill threshold: open-rate < 18 % at D+24h routes to subject-rewrite.
- Considered and rejected: (a) Reuse the LinkedIn hook verbatim as the subject line — rejected because "Documentation discipline starts before the dehumidifier does." is 56 chars but doesn't carry the same pattern-interrupt-on-cost-implication that subject lines need to drive opens; (b) Embed the full Post 06 text in the email — rejected because email-as-newsletter pattern under-performs vs email-as-CTA-driver for Hub-traffic generation (CARSI Phase 3.3.3 channel KPI is Hub article visits, not email-only consumption).

**Adaptation 3 — Instagram (skipped).** CARSI Phase 3.3.3 distribution table: Instagram NOT-ACTIVE for CARSI (sage-primary doesn't fit visual-led platform). Output rejects Instagram adaptation per NEVER rule (no platform outside foundation distribution table).

**CEO attention required:** no (operational adaptation within authorised channel set).

`forward_to: 'brand-voice-enforce'` (LinkedIn + email gate) · then to `platform-content-optimiser` for scoring · then `marketing-operations-director` for scheduling.

## Versioning

- v0.3 (2026-04-28): senior calibration uplift · 5 markers + 10 NEVER + PlatformContentAdaptorOutput TS contract + worked example (CARSI Post 06 cross-platform with Instagram correctly rejected per Phase 3.X.3 channel-active check) added · platform-rule playbook content preserved in foundation references · legacy v1.0 capability-uplift format supplanted with structured orchestration contract.
- v1.0 (legacy): capability-uplift format with platform-rule playbook · superseded by structured contract.

