cf-help

Show the ContentForge user guide with live plugin state — version, agent/skill/command counts, connector availability, and runtime environment read from scripts/plugin-metadata.py, never hardcoded — p

SKILL.md

GitHub

/contentforge:cf-help

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).

Show the ContentForge user guide with live plugin state (version, asset counts, connector counts, runtime environment) pulled from disk — not hardcoded — plus pipeline overview, available skills, usage examples, and troubleshooting.

CRITICAL: never hardcode version, asset counts, or connector counts

Versions and counts in this plugin used to be baked into this skill body as literal version strings and count strings ("Agents: 13 · Skills: 19 · Connectors: 9 HTTP + 19 npx"). Those drifted out of sync with the actual install every release (reported by users in v3.12.7 testing: "I'm on 3.12.7, but the help output shows an old version").

Always read live values from scripts/plugin-metadata.py. Never quote a version number, skill count, agent count, or connector count from memory or from this skill body.

Behavior

Step 1 — Fetch live plugin metadata

Run first, every time this skill is invoked (any argument or none):

python "${CLAUDE_PLUGIN_ROOT}/scripts/plugin-metadata.py" --section all-with-environment

This returns JSON with version, assets (agent/skill/command/script counts), connectors (HTTP + npx counts), skills list, commands list, pipeline_phases list (read from agent file names), and environment (detects Cowork sandbox vs local Claude Code, with a warning if filesystem writes won't reach the user's host).

Substitute the values from this JSON into every place the help output references a count, a version, or a slash-command list. Do not invent or quote numbers from elsewhere.

Step 2 — Default rendering (no args)

Render a clean help overview using the live data. Suggested format:

=== CONTENTFORGE ===
Version: <version from JSON>
Agents: <agents> | Skills: <skills_total> | Commands: <commands> | Scripts: <scripts>
Connectors: <available_http> HTTP + <available_npx> npx available
  (<active_count> currently active in your .mcp.json)
  Cowork-compatible: <cowork_compatible_count> (HTTP only — npx connectors don't run in Cowork)
Environment: <environment from JSON>
<if environment.cowork_warning is non-null, show it as a WARNING block>

Getting Started:
  1. /contentforge:brand-setup           -- Configure brand voice, terminology, guardrails
  2. /contentforge:cf-integrations       -- See which connectors are active
  3. /contentforge:create-content        -- Run the full content pipeline
  4. /contentforge:cf-help --examples    -- Worked example workflows

Step 3 — Cowork warning (when applicable)

If environment.cowork_warning is non-null, surface it prominently after the orientation block:

⚠ COWORK SANDBOX DETECTED
<cowork_warning text from JSON>

What this means in practice:
  - File writes to ~/Documents/ContentForge/ and ~/.claude-marketing/
    land inside the sandbox, NOT on your Windows / macOS host
  - Files persist only for this Cowork session
  - The full /contentforge:create-content pipeline can run, but the
    dual-copy save and per-phase checkpointing target the sandbox FS
  - For full host-filesystem behavior, run ContentForge in local
    Claude Code (CLI or VS Code / JetBrains IDE extension) instead

Step 4 — Argument routing

Argument What to render
(none) Steps 2 + 3 + Quick command list
--pipeline Steps 2 + 3 + full phase-by-phase overview (use pipeline_phases from JSON)
--skills Steps 2 + 3 + list every skill from JSON skills array with slash command + description
--commands Steps 2 + 3 + list every command from JSON commands array with slash command + description
--connectors Steps 2 + 3 + redirect: "For active/available connector status, run /contentforge:cf-integrations"
--examples Steps 2 + 3 + the worked-example workflows (see below)
--troubleshoot Steps 2 + 3 + troubleshooting matrix (see below)
--brand Steps 2 + 3 + brand setup methods (see below)

When rendering the skills/commands list, iterate over the JSON arrays — do not paste a hand-maintained list. Each row should show the slash_command field as the user-facing label and the description field as the explanation.

Pipeline phase rendering (--pipeline)

The pipeline phases come from agent file names (01-researcher.md → "Phase 01: Researcher"). Iterate pipeline_phases from the JSON and render phase + role + description. Add this preamble:

=== CONTENTFORGE PIPELINE (10 phases) ===
Step 0.5: Title Curation runs BEFORE Phase 1 (SERP recon + 4-5 SEO title options;
          user selects before draft starts).

Quality gates: composite score >=7.0 to pass | max 2 loops per phase |
3-layer verification (Fact Checker -> Scientific Validator -> Reviewer).

Then list every phase from the JSON. Do not invent timing estimates — they vary by topic complexity and model speed. If the agent description in the JSON includes a timing hint, surface it; otherwise omit.

Brand setup rendering (--brand)

Show the three brand-setup methods (interactive / JSON template / Drive Knowledge Vault), referencing the actual current commands. v3.12.7 added Drive MCP autodetection at the start of brand-setup — call this out as the recommended path for Cowork and Anthropic-platform users.

=== BRAND PROFILE SETUP (3 methods) ===

Method 1: Interactive (recommended)
  /contentforge:brand-setup "Brand Name"
  -> Walks you through voice, terminology, industry, guardrails
  -> v3.12.7+ first probes .mcp.json for Drive MCPs (Anthropic platform
     integration, Pipedream / Composio / Zapier / Make Drive aggregator)
     and short-circuits the legacy service-account flow if one is found

Method 2: Manual JSON
  -> Copy config/brand-registry-template.json
  -> Fill in your brand details
  -> Save to ~/.claude-marketing/<brand-slug>/Brand-Guidelines/<BrandName>-brand-profile.json

Method 3: Google Drive Knowledge Vault
  -> Create a Drive folder: <Brand Name>/
  -> Subfolders: Brand-Guidelines/, Guardrails/, Reference-Content/
  -> Run /contentforge:brand-setup -- it will offer to verify or
     scaffold the structure

Troubleshooting (--troubleshoot)

Surface this matrix. Use the live skill/command names from the JSON; the table below references the user-visible behaviors.

Issue What to try
"Brand profile not found" Run /contentforge:brand-setup to create the brand profile first
Files don't appear in ~/Documents/ContentForge/ Check Cowork sandbox warning above. In local Claude Code: /contentforge:output-folder shows the resolved path; verify CONTENTFORGE_PUBLISH_DIR env var if you've customized it
Headers in .docx aren't semantic Heading 1/2/3 Verified fixed in v3.12.4 -- if you see this, you're on an older version; run /plugin update contentforge@neels-plugins
Pipeline interrupted, lost work Use /contentforge:resume to pick up from the last completed phase (v3.12.3+)
Google Drive connector ignored at brand-setup Fixed in v3.12.7. Run python "${CLAUDE_PLUGIN_ROOT}/scripts/detect-drive-mcp.py" to verify the autodetect can see your MCP
Quality score below 5.0 Content flagged for human review -- check topic complexity, source availability, and brand profile completeness
Pipeline taking too long Normal: 20-30 min for articles. batch-process queues many pieces unattended (sequential, checkpointed) — it survives interruption, it does not run them concurrently

Documentation references

Guide What it covers
docs/USER-GUIDE.md Comprehensive end-to-end guide
CHANGELOG.md Full version history (the canonical record of what's in your install)
CONNECTORS.md Connector categories and setup paths
.mcp.json.connectors-reference The opt-in connector catalog -- copy entries into .mcp.json to enable them (no .mcp.json ships, by design)
docs/MODEL-CURATOR.md Model registry, aliases, and refresh workflow
config/brand-registry-template.json Brand profile JSON template

Output formatting rules

  • Render in clean, scannable tables and code blocks
  • Always quote version and counts from the JSON, never from this file
  • Match each user invocation argument to its section above; the help body contains only instructions, not pre-rendered output
  • If scripts/plugin-metadata.py fails to run (e.g. Python not available), fall back to: "Live metadata script could not run. Plugin version is in .claude-plugin/plugin.json; skill list is in skills/; command list is in commands/." Do not invent numbers in the fallback either.

What this skill explicitly avoids

  • Quoting version numbers from this file body
  • Quoting count strings (agent, skill or command counts) from this file body
  • Listing slash commands manually -- always derived from the JSON
  • Personalized advice for any specific user (this skill is for everyone)
  • Stale references to deprecated skill names (always use the names from JSON)