batch-process
Batch-produce many content pieces as one resumable queue, highest priority first. \"write these 15 posts\"
Switch tracking and delivery between Google Sheets, Airtable and local files, migrating records. \"move tracking to Airtable\"
Claude Code
$ npx -y skills add indranilbanerjee/contentforge --skill cf-switch-backend --agent claude-code
Codex
$ npx skills add indranilbanerjee/contentforge --skill cf-switch-backend -a codex -y
Cursor
$ npx skills add indranilbanerjee/contentforge --skill cf-switch-backend -a cursor -y
Gemini CLI
$ npx skills add indranilbanerjee/contentforge --skill cf-switch-backend -a gemini-cli -y
GitHub Copilot
$ npx skills add indranilbanerjee/contentforge --skill cf-switch-backend -a github-copilot -y
OpenCode
$ npx skills add indranilbanerjee/contentforge --skill cf-switch-backend -a opencode -y
Windsurf
$ npx skills add indranilbanerjee/contentforge --skill cf-switch-backend -a windsurf -y
name: cf-switch-backend description: "Switch tracking and delivery between Google Sheets, Airtable and local files, migrating records. \"move tracking to Airtable\"" disable-model-invocation: false argument-hint: "[local | airtable | google_sheets] [--status]" effort: high
Switch ContentForge's tracking and delivery backend between **Google Sheets + Drive**, **Airtable**, or **Local filesystem**. Optionally migrate existing tracking data and output files to the new backend.
Before any record or file is copied, or the brand profile changes, run the dry run (what would move, from where to where, how many records and files) and ask the user to type `yes` (Step 4). Anything else cancels with no files changed. Migration is additive and never deletes source data.
**Running in Cowork?** The "local" backend writes to the ephemeral sandbox filesystem — files vanish at session end. For Cowork team setups, use the Google (Drive) route and run `/contentforge:cf-cowork-setup` first to wire the Drive folder layout.
/contentforge:cf-switch-backend airtable /contentforge:cf-switch-backend google_sheets /contentforge:cf-switch-backend local /contentforge:cf-switch-backend --status
Read the active brand profile's `tracking.backend` field.
Report current state:
Current backend: local
Records: 47 tracking records (~/.claude-marketing/{brand}/tracking/tracking.json)
Output files: 42 files in ~/.claude-marketing/{brand}/outputs/{YYYY}/{MM}/**If switching to Airtable:** 1. Check `AIRTABLE_TOKEN` environment variable exists 2. If missing, guide through setup:
3. Ask for the Airtable Base ID (from the base URL: `airtable.com/appXXXXXXXXX/...`) 4. Verify access by running:
python {scripts_dir}/airtable-tracker.py --action init --base-id {base_id}**If switching to Google Sheets + Drive:** 1. Check Google credentials at `~/.claude-marketing/google-credentials.json` 2. If missing, guide through setup:
3. Ask for the Google Sheet ID and Drive folder ID 4. Verify access by running:
python {scripts_dir}/sheets-tracker.py --action init --sheet-id {sheet_id}**If switching to Local:**
python {scripts_dir}/local-tracker.py --action init --brand "{brand}"If the current backend has existing records:
You have 47 tracking records and 42 output files on 'local'. Would you like to migrate this data to Airtable? 1. Yes — Copy all records and files to the new backend 2. No — Start fresh (existing data preserved but not synced) 3. Skip — Just switch, decide on migration later
**If yes**, run:
python {scripts_dir}/backend-migrator.py --action migrate --brand "{brand}" --from {current} --to {target} [backend-specific args]`{current}` and `{target}` must be one of `local`, `airtable`, `google_sheets` — the migrator rejects any other value.
Report migration results:
Migration complete:
Records migrated: 47
Files migrated: 42
Files failed: 0
Source data preserved at: ~/.claude-marketing/{brand}/tracking/tracking.json
and ~/.claude-marketing/{brand}/outputs/{YYYY}/{MM}/**Do not write the brand profile until the user explicitly approves this exact change** — even when Step 3 had nothing to migrate and asked nothing. Show the change first:
About to switch {brand}'s tracking backend:
tracking.backend: {current} → {target}
New config: {backend-specific keys and values, secrets masked}
Existing data: preserved in place (never deleted)
Type "yes" to apply, anything else to cancel.Anything other than an explicit yes cancels the switch with no files changed. This gate is the safety boundary on every platform: Claude Code honours this skill's `disable-model-invocation: true`, but other hosts (Codex documents the field as unsupported) can invoke the skill without the user typing its command.
On approval, update the brand profile JSON:
Backend switched to Airtable.
New tracking records → Airtable base appXXXXXX
Output files → Airtable attachment fields
Previous data preserved at: ~/.claude-marketing/{brand}/tracking/tracking.json
and ~/.claude-marketing/{brand}/outputs/{YYYY}/{MM}/
Run /contentforge:cf-switch-backend --status to verify anytime.| Factor | Google Sheets + Drive | Airtable | Local | |--------|----------------------|----------|-------| | Auth setup | Service account (~5 min) | Personal token (~2 min) | None | | Tracking | Google Sheets | Airtable records | JSON fi
🌐 Read this in: English · हिन्दी · 中文 · 日本語 · 한국어 · Español · Português · العربية · اردو · தமிழ் · বাংলা · Русский You need to ship 30 articles this quarter that sound human, cite real sources, link into your funnel, and survive an editor who checks.
Batch-produce many content pieces as one resumable queue, highest priority first. \"write these 15 posts\"
Add a custom MCP connector for any external API or service. \"hook up our internal CMS\"
Re-check a published piece's AEO: cited in AI Overviews and AI answers, tracked over time. \"did AI cite our article\"
Show content analytics: quality-score trends, slowest pipeline phase and alerts over 7-90 days. \"how is production going\"
Audit a content library for stale posts and topic gaps; ranks what to refresh or retire. \"which posts need refreshing\"
Write a research-backed content brief from a keyword or topic: intent, competitors, outline. \"brief me on this topic\"
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…