/socialforge:adapt-copy — Copy Adapter
Transform a single caption brief into platform-optimized copy for each target platform.
Context efficiency
Asset-heavy skill. Grep before Read the asset catalog (${CLAUDE_PLUGIN_DATA}/socialforge/brands/<brand>/asset-index.json) — never list the asset directory. Reference generated images / videos by path, not by loading metadata. Brand profile loads once per session.
Process (Per Post x Per Platform)
- Load post brief (topic, caption_brief, CTA, hashtags, campaign)
- Load brand-config.json (tone, hashtags, language settings)
- Load compliance-rules.json (banned phrases, disclaimers)
- For X/Twitter posts with live-source context, read the optional X/Twitter research intake note and use only reviewed evidence
- Generate platform-specific copy:
| Platform |
Tone |
Limit |
Hashtags |
Link |
| LinkedIn |
Professional |
3,000 chars (140 before fold) |
3-5 |
Direct URL |
| Instagram |
Conversational |
2,200 chars |
20-30 (first comment) |
Link in bio |
| X/Twitter |
Punchy, concise |
280 chars |
1-2 |
Direct URL |
| Facebook |
Casual |
500 chars optimal |
1-3 |
Direct URL |
| YouTube |
Description format |
5,000 chars |
3-5 |
Direct URLs |
| TikTok |
Casual, trend-aware |
2,200 chars |
3-5 (trending + branded) |
Link in bio |
| Threads |
Conversational |
500 chars |
1-3 |
Direct URL |
| Bluesky |
Concise, community-first |
300 chars |
1-2 (via tag facets) |
Direct URL |
- Apply brand hashtags (always_include + campaign-specific)
- Run compliance check - flag banned phrases, add disclaimers
- Handle bilingual posts if configured
- Save to
production/copy/post-{id}-{platform}-copy.txt
No significance markers. Never write a line whose only job is to announce that the next line matters: "here's the thing", "the thing is,", "here's the kicker", "here's where it gets interesting", "that's the part that got me", "let that sink in", "read that again". They read as machine-written, and on a 280-character platform they spend budget the point needs. Lead with the specific instead — "Approvals went from 14 days to 31" beats "Here's the thing about approval timelines". Same for stacked soft adverbs (honestly / genuinely / truly / literally / actually / basically): at most one per caption, never two in a sentence.
This is a writing rule enforced by the copy-adapter agent, not a scan. SocialForge ships no AI-tell scanner on purpose — caption-length copy has no document structure to measure, and per-1000-word metrics are noise at 280 characters.
Compliance Check (Mandatory)
Before saving any copy:
- Scan against compliance-rules.json banned_phrases
- Check data claims against data_claim_rules
- Add required disclaimers per platform
- Verify platform-specific rules (link policy, hashtag limits)
- For X/Twitter source notes, verify quotes, public metrics, and dates before using them as claims
Critical violations BLOCK — copy cannot proceed.
Warnings are noted but don't block.
Output
Copy adapted: Post P04
LinkedIn: 847 chars (under 3000) ✓ | 4 hashtags ✓ | CTA: direct link ✓
Instagram: 1,203 chars ✓ | 25 hashtags (first comment) ✓ | CTA: link in bio ✓
X: 267 chars (under 280) ✓ | 2 hashtags ✓ | CTA: direct link ✓
Compliance: PASSED (0 critical, 1 warning: "consider adding source for 47% claim")
Timeout & Fallback
- Copy generation: 30-second timeout per platform variant
- Compliance check: 10-second timeout. If fails, flag for manual review
1---2name: adapt-copy3description: Adapt post copy for every target platform — character limits, hashtag counts and placement, tone, compliance, and the right CTA mechanism per platform (comment-keyword or link-in-bio on Instagram/TikTok, direct link elsewhere; the CTA is never dropped). Triggers on "/adapt-copy", "adapt this copy", "platform versions", "rewrite for LinkedIn", "caption for each platform", "cross-post this", or any time one piece of copy needs platform-native variants. Reads the brand profile for voice, hashtags, and cta_keyword.4---56# /socialforge:adapt-copy — Copy Adapter78Transform a single caption brief into platform-optimized copy for each target platform.910## Context efficiency1112Asset-heavy skill. **Grep before Read** the asset catalog (`${CLAUDE_PLUGIN_DATA}/socialforge/brands/<brand>/asset-index.json`) — never list the asset directory. Reference generated images / videos by path, not by loading metadata. Brand profile loads once per session.1314## Process (Per Post x Per Platform)15161. Load post brief (topic, caption_brief, CTA, hashtags, campaign)172. Load brand-config.json (tone, hashtags, language settings)183. Load compliance-rules.json (banned phrases, disclaimers)194. For X/Twitter posts with live-source context, read the optional [X/Twitter research intake](../../references/x-twitter-research-intake.md) note and use only reviewed evidence205. Generate platform-specific copy:2122| Platform | Tone | Limit | Hashtags | Link |23|----------|------|-------|----------|------|24| LinkedIn | Professional | 3,000 chars (140 before fold) | 3-5 | Direct URL |25| Instagram | Conversational | 2,200 chars | 20-30 (first comment) | Link in bio |26| X/Twitter | Punchy, concise | 280 chars | 1-2 | Direct URL |27| Facebook | Casual | 500 chars optimal | 1-3 | Direct URL |28| YouTube | Description format | 5,000 chars | 3-5 | Direct URLs |29| TikTok | Casual, trend-aware | 2,200 chars | 3-5 (trending + branded) | Link in bio |30| Threads | Conversational | 500 chars | 1-3 | Direct URL |31| Bluesky | Concise, community-first | 300 chars | 1-2 (via tag facets) | Direct URL |32336. Apply brand hashtags (always_include + campaign-specific)347. Run compliance check - flag banned phrases, add disclaimers358. Handle bilingual posts if configured369. Save to `production/copy/post-{id}-{platform}-copy.txt`3738**No significance markers.** Never write a line whose only job is to announce that the next line matters: "here's the thing", "the thing is,", "here's the kicker", "here's where it gets interesting", "that's the part that got me", "let that sink in", "read that again". They read as machine-written, and on a 280-character platform they spend budget the point needs. Lead with the specific instead — "Approvals went from 14 days to 31" beats "Here's the thing about approval timelines". Same for stacked soft adverbs (honestly / genuinely / truly / literally / actually / basically): at most one per caption, never two in a sentence.3940This is a writing rule enforced by the copy-adapter agent, not a scan. SocialForge ships no AI-tell scanner on purpose — caption-length copy has no document structure to measure, and per-1000-word metrics are noise at 280 characters.4142## Compliance Check (Mandatory)4344Before saving any copy:45- Scan against compliance-rules.json banned_phrases46- Check data claims against data_claim_rules47- Add required disclaimers per platform48- Verify platform-specific rules (link policy, hashtag limits)49- For X/Twitter source notes, verify quotes, public metrics, and dates before using them as claims5051**Critical violations BLOCK** — copy cannot proceed.52**Warnings are noted** but don't block.5354## Output5556```57Copy adapted: Post P0458 LinkedIn: 847 chars (under 3000) ✓ | 4 hashtags ✓ | CTA: direct link ✓59 Instagram: 1,203 chars ✓ | 25 hashtags (first comment) ✓ | CTA: link in bio ✓60 X: 267 chars (under 280) ✓ | 2 hashtags ✓ | CTA: direct link ✓61 Compliance: PASSED (0 critical, 1 warning: "consider adding source for 47% claim")62```6364## Timeout & Fallback65- Copy generation: 30-second timeout per platform variant66- Compliance check: 10-second timeout. If fails, flag for manual review