adapt-copy
Adapt post copy per platform: character limits, hashtags, tone and the right CTA mechanism. \"rewrite this caption for LinkedIn\"
Run the full pipeline for the month, from calendar parse to delivery, pausing between phases. \"produce the whole month\"
Claude Code
$ npx -y skills add indranilbanerjee/socialforge --skill full-pipeline --agent claude-code
Codex
$ npx skills add indranilbanerjee/socialforge --skill full-pipeline -a codex -y
Cursor
$ npx skills add indranilbanerjee/socialforge --skill full-pipeline -a cursor -y
Gemini CLI
$ npx skills add indranilbanerjee/socialforge --skill full-pipeline -a gemini-cli -y
GitHub Copilot
$ npx skills add indranilbanerjee/socialforge --skill full-pipeline -a github-copilot -y
OpenCode
$ npx skills add indranilbanerjee/socialforge --skill full-pipeline -a opencode -y
Windsurf
$ npx skills add indranilbanerjee/socialforge --skill full-pipeline -a windsurf -y
name: full-pipeline description: "Run the full pipeline for the month, from calendar parse to delivery, pausing between phases. \"produce the whole month\"" argument-hint: "[brand] [YYYY-MM] [calendar-source]" effort: max user-invocable: true
> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts/` folder, next to `skills/`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).
Run all phases sequentially with quality gates between each.
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.
| Phase | Skill | Gate | |-------|-------|------| | -1 | credential-check | API credentials configured (Vertex AI and/or WaveSpeed) | | 0 | parse-calendar | Calendar parsed, all required fields present | | 1 | match-assets | Asset matches confirmed by user | | 2 | compose-creative | All images/videos generated, quality scores ≥7.0 | | 3 | adapt-copy | Copy adapted, compliance passed | | 4 | create-previews | Previews rendered for all posts | | 5 | build-review-gallery | Gallery built and accessible (images + video) | | 6 | manage-reviews | All posts reviewed (async — pipeline pauses here) | | 7 | finalize-month | All approved posts packaged for delivery |
Before any production work begins, verify that the required API credentials are configured via `credential_manager.py`.
1. Run `credential_manager.py status` to check Vertex AI and WaveSpeed configuration 2. **Image generation** requires Vertex AI credentials configured via `/socialforge:setup` 3. **Video generation** requires WaveSpeed API key (only checked if calendar contains video posts) 4. If any required credential is missing, stop the pipeline and prompt the user: "Required credentials not configured. Run `/socialforge:setup` to configure API keys before starting production." 5. If all credentials are valid, proceed to Phase 0
Phase 2 operates in two distinct modes depending on how it is invoked.
Produces creative for a single post with full user control at each stage.
Direction and confirmation cost nothing. The first paid call is the Generate stage, so the post is quoted once, after the user confirms the details and before anything is generated. This skill states no price: `price_book.py` is the only source.
1. List what is about to be generated: for each paid call, the registry alias (`resolve_model.py --alias <alias>` gives the current model id), the provider, and the units (images, or seconds of video, plus any option that changes the price, such as synchronised audio). For an image post that is the planned variants (typically 2-3); for a video post, both keyframe rounds and the clip. 2. Quote it:
python "${CLAUDE_PLUGIN_ROOT}/scripts/price_book.py" --action quote-batch --items '[{"model":"<resolved model id>","provider":"<provider>","units":<n>,"label":"<post id and stage>"}]'A single item can use `--action quote --model <id> --provider <provider> --units <n>`. If the quote exits non-zero or lists a blocked item, stop: run `/socialforge:price-check` to look the missing price up, then quote again. 3. Show the user the total, each line, its **source URL**, and how old the price is (a price older than 24 hours is stale and is refused; it must be looked up again):
Estimated cost: <total_usd> USD for <n> generations. Prices from <source>, <age_hours> h old (valid for 24 h). Type "go" to generate. Anything else cancels.
4. Continue only on an explicit `go` for exactly this list. Anything else, including silence, cancels and nothing is generated. If the list changes (a regeneration, another model, an added option), quote again and ask again. A quote is never approval (`approved_to_run` is always `false`); only the user's `go` is.
**Image posts — 4-stage approval:** 1. **Direction** — Review creative direction and prompt before generation 2. **Generate** — AI generates 2-3 variants; user picks the best or requests regeneration 3. **Composite** — Selected variant composited with brand asset, overlay, and logo; user approves 4. **Resize** — Platform-specific resizes produced; user confirms final set
**Video posts — 5-stage approval:** 1. **Direction** — Review video concept, storyboard outline, and scene descriptions 2. **Script** — Approve shot-by-shot script with timing and transitions 3. **Generate** — AI generates video clip; user reviews motion and pacing 4. **Composite** — Overlay, logo, and captions applied; user approves 5. **Resize** — Platform-specific aspect ratios produced; user confirms final set
Produces creative for all posts in the calendar with minimal interruption.
A batch fans out across the whole calendar and video is billed by the second, so the batch is quoted once, after the group directions are approved and before anything is generated. This skill states no price: `price_book.py` is the only source, and one unpriced item blocks the whole batch.
1. List what is about to be generated: for each paid call, the registry alias (`resolve_model.py --alias <alias>` gives the current model id), the provider, and the units (images, or seconds of video, plus any option that changes the price, such as synchronised audio). In a batch, list every paid generation of every post. Interactive mode (`/socialforge:generate-post`) does the same per post, in `/socialforge:compose-creative`.
Your client wants 30 days of social content across six platforms with brand-faithful imagery, AI-generated video, and provenance signed for EU markets. You have five days.
Adapt post copy per platform: character limits, hashtags, tone and the right CTA mechanism. \"rewrite this caption for LinkedIn\"
Assemble the month-end delivery manifest: approved posts, copy, files and metadata as one JSON. \"build the delivery manifest\"
Set up or update a brand profile: colors, fonts, logo, voice, platforms, compliance rules. \"update our brand colors\"
Build the shareable HTML review gallery of every generated post for team or client. \"make me a gallery page\"
Embed C2PA content credentials and an AI-disclosure record in AI-generated assets. \"sign these images for AI disclosure\"
Compose just the creative (image or video) for a calendar post, in four modes. \"make the visual for this post\"
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…