--- name: brand-manager description: "Set up and manage brand profiles — colors, fonts, logo, voice, pillars, platforms, hashtags, compliance rules, cta_keyword. Triggers on \"/brand-manager\", \"new brand\", \"set up a brand\", \"update the brand config\", \"switch brand\", \"change brand colors\", \"add a platform to the brand\", or any time brand configuration is created or edited. Every other skill reads this profile — run it before any production." argument-hint: "[brand-name] [--update] [--switch]" effort: medium user-invocable: true --- # /socialforge:brand-setup — Brand Manager Set up a new brand profile or update an existing one. Brand profiles control visual identity, platform config, compliance rules, approval chains, and asset sources for all SocialForge workflows. ## Context efficiency Asset-heavy skill. **Grep before Read** the asset catalog (`${CLAUDE_PLUGIN_DATA}/socialforge/brands//asset-index.json`) — never list the asset directory. Reference generated images / videos by path, not by loading metadata. Brand profile loads once per session. ## Pre-Requisite: Image Generation API SocialForge generates AI images for social media posts. Before setting up a brand, check that Google Cloud Vertex AI credentials are configured. **Step 0: Check image API (MANDATORY — do this before anything else)** Run `/socialforge:setup` to configure Google Cloud Vertex AI credentials. Your admin provides a service account JSON file, which `/socialforge:setup` stores securely in the plugin data directory. **Alternative providers:** Connect fal.ai or Replicate via the Connectors panel. **Without credentials**, SocialForge can parse calendars, match assets, adapt copy, and render carousels — but it CANNOT generate new images. STYLE_REFERENCED and PURE_CREATIVE modes will fail. ANCHOR_COMPOSE works for basic Pillow compositing only (no AI scene generation). **If credentials are not configured, warn the user clearly:** ``` WARNING: No image generation API configured. Vertex AI credentials are not set. AI image generation will FAIL. To fix: Run /socialforge:setup to configure Google Cloud Vertex AI credentials. Or connect fal.ai/Replicate via the Connectors panel. Do you want to: 1. Run /socialforge:setup now (recommended) 2. Continue without image generation (limited functionality) ``` Wait for user response. If they choose to continue without, log a persistent warning in brand-config.json: `"image_api_configured": false`. ## Quick Start (5-10 minutes) After confirming the image API, users need these 5 things: 1. **Brand name** — Your company or client name 2. **Industry** — pharma, bfsi, real-estate, saas, retail, healthcare, edtech, legal, manufacturing, hospitality, automotive, media, other 3. **Brand colors** — Primary (hex), secondary (hex), accent (hex) 4. **Active platforms** — Which social media platforms (LinkedIn, Instagram, X, Facebook, YouTube, etc.) 5. **Asset source** — Where are brand photos? (Google Drive folder URL, local path, or "I'll add later") That's it. Run `/socialforge:brand-setup [brand-name]` and answer these questions. SocialForge creates a working brand profile. **Add more later:** Logo files, fonts, visual style, compliance rules, approval chain, posting times, hashtags via `/socialforge:brand-setup [brand] --update` **AI-assistance disclosure (`ai_disclosure` in brand-config.json):** defaults to `{"mode": "claude-surfaces", "text": null}`. This governs the AI-assistance note in the monthly delivery manifest (see `/socialforge:assemble-document`) — NOT the post captions themselves: caption-level AI labels belong to each platform's native disclosure toggle (Instagram/TikTok/YouTube ship their own "AI-generated" switches; flag them at publish handoff instead of burning caption characters). Modes: `claude-surfaces` (default — the note attaches when production ran on a Claude surface or the surface is uncertain; skipped only when a non-Claude harness is affirmatively detected), `always`, `off` (the brand owns that choice). Custom `text` replaces the default verbatim; the default is vendor-neutral. Generated IMAGES/VIDEO carry C2PA `ai-disclosure` metadata independently of this setting (see `/socialforge:c2pa-sign`). ## Full Setup ### Step 1: Core Identity ``` Brand name: [required] Brand slug: [auto-generated from name, e.g., "acme-corp"] Tagline: [optional] Industry: [required — select from list] Website: [optional] ``` ### Step 2: Visual Identity ``` Colors: Primary: [hex, e.g., #1B4F72] (required) Secondary: [hex] (required) Accent: [hex] (optional, defaults to primary) Background light: [defaults to #FFFFFF] Background dark: [defaults to #1A1A1A] Text primary: [defaults to #333333] Gradient: enabled? start/end/direction (optional) Logo files: Primary logo: [file path or "skip for now"] White/reversed logo: [optional] Icon version: [optional] Logo overlay position: bottom-right (default) | bottom-left | top-right | top-left Logo overlay opacity: 0.7 (default) Fonts: Heading font: [filename or Google Font name, defaults to Montserrat-Bold] Body font: [defaults to OpenSans-Regular] ``` ### Step 3: Visual Style (For AI Generation) ``` Style keywords: [e.g., "modern", "clean", "professional", "enterprise"] Mood keywords: [e.g., "confident", "innovative", "authoritative"] Photography style: warm natural light | studio professional | candid editorial | corporate clean Illustration style: flat vector | isometric | hand-drawn | 3D render | minimal line art | none Color temperature: warm | neutral | cool Contrast level: high | medium | soft Image rules (array of custom constraints): e.g., "Navy should appear in at least 30% of visual area" e.g., "Avoid generic stock photo aesthetics" e.g., "Always include subtle brand color accents" e.g., "No text overlays on product photography" ``` ### Step 4: Platform Configuration ``` For each active platform, configure: Platform: linkedin | instagram | x | facebook | youtube | tiktok | pinterest Profile type: company | personal | creator Posting frequency: daily | 3-4/week | 2/week | weekly Optimal posting times: [day + time + timezone] Supported formats: static | carousel | video | story | reel | short | text_only Content mix: video % | carousel % | static % | text_only % Cross-posting: from which platform? (e.g., LinkedIn -> Facebook) ``` ### Step 5: Compliance Rules ``` Banned phrases: [list of phrases that must never appear in copy] Required disclaimers: [triggers and disclaimer text per platform] Data claim rules: require source verification? max claim age? Platform-specific rules: link policy, max hashtags, forbidden content types ``` If user skips: Log warning — "Compliance rules empty. Copy will not be checked for restricted content." ### Step 6: Approval Chain ``` Content tiers: HERO (flagship content): Who reviews? Client approval required? HUB (regular series): Who reviews? HYGIENE (routine posts): Auto-approve or light review? Escalation: Reminder after N days? Auto-publish without client approval after N days? ``` If user skips: Default to single-tier (all content requires user approval before finalization). ### Step 7: Asset Source Where are your brand photos stored? 1. **Local folder** — Provide the full path (e.g., /Users/photos/acme-corp/) Works in: Claude Code (persistent) | Cowork (session-only, re-provide each session) 2. **Google Drive folder** — Provide the Drive folder URL Works in: Cowork (via Settings -> Integrations -> Google Drive) | Claude Code (download first or mount) In Cowork: Claude reads Drive files directly through platform integration In Claude Code: Download the folder locally, then index with --source /local/path 3. **I'll add later** — Start with no assets (PURE_CREATIVE mode only) The asset source is saved in `asset-source.json`. You can change it anytime. **Recommended for agencies:** Use Google Drive as the source of truth. Each brand gets a Drive folder. SocialForge indexes the photos and stores the index in persistent plugin storage (survives sessions). ``` Style reference photos: Select 2-8 photos that represent the brand's visual DNA. These guide AI generation in STYLE_REFERENCED mode. ``` ### Step 8: Social Profiles For each active platform configured in Step 4: ``` Platform: [platform name] Display name: [brand name as it appears on the platform] Handle: [@handle or username] Avatar: [file path to avatar/profile photo — used in preview rendering] Profile headline: [bio or tagline shown on the platform] Profile URL: [full URL to the profile page] ``` This data powers preview rendering (showing exactly how posts look on each platform). If user skips: Previews will use brand name and placeholder avatar. Recommend filling in for accurate mockups. ### Step 9: Languages ``` Primary language: [e.g., en-US, hi-IN, es-MX] Secondary languages: [list, e.g., es-MX, fr-FR] Bilingual config: Mode: separate_posts | bilingual_single_post | language_per_platform Primary ratio: [percentage of content in primary language, e.g., 80] Do-not-translate terms: [brand names, product names, taglines to keep in original language] Translation service preference: manual | ai_with_review | ai_auto ``` ### Step 10: Brand Hashtags ``` Always include (every post): e.g., #BrandName, #BrandTagline Campaign hashtags (active campaigns only): Campaign name: [hashtag list + start/end dates] e.g., "Summer Launch": ["#SummerWithBrand", "#LaunchDay"] (2026-06-01 to 2026-08-31) Platform-specific hashtag rules: LinkedIn: max 3-5 hashtags, professional tone Instagram: 20-30 in the first comment, mix of branded + discovery X: max 2-3, integrated into copy TikTok: trending + branded mix ``` ## Output Creates these files in `${CLAUDE_PLUGIN_DATA}/socialforge/brands/{brand-slug}/` (falling back to `~/socialforge-workspace/brands/{brand-slug}/` when `${CLAUDE_PLUGIN_DATA}` is unset): - `brand-config.json` — Core identity, colors, fonts, visual style, logo, hashtags - `platform-config.json` — Active platforms, posting times, content mix, cross-posting - `approval-chain.json` — Review tiers, escalation rules - `compliance-rules.json` — Banned phrases, disclaimers, platform rules - `asset-source.json` — Where assets live - `style-references/` — Style reference photos (copied or linked) ## Pre-Flight Validation Before any SocialForge workflow starts, the brand profile is validated: - Image generation API configured (Vertex AI via `/socialforge:setup` or MCP connector) - Brand name and slug set - At least one platform configured - Colors (primary + secondary) set - Asset source configured (or explicitly skipped) Missing fields trigger a warning with options to continue or fix. ## Timeout & Interruption Handling - If user closes or interrupts during multi-step setup: save whatever was collected so far. On next `/socialforge:brand-setup [brand]`, detect the partial profile and ask: "Resume setup from Step {N}? Or start fresh?" - Each step saves incrementally — no data is lost on interruption. - If brand-config.json write fails: retry once, then save to `${CLAUDE_PLUGIN_DATA}/socialforge/brands/{slug}/brand-config.partial.json` (or the `~/socialforge-workspace/...` fallback) and inform user. ## Switching Brands ``` /socialforge:brand-setup [brand-name] --switch ``` Instantly reloads the brand context. All subsequent commands use the switched brand.