{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ghost-cms",
    "name": "Ghost CMS",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/chrisagiddings/ghost-cms",
    "canonicalUrl": "https://clawhub.ai/chrisagiddings/ghost-cms",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ghost-cms",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ghost-cms",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "LEXICAL-MIGRATION.md",
      "README.md",
      "SKILL.md",
      "package.json",
      "references/analytics.md",
      "references/api-reference.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ghost-cms"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/ghost-cms",
    "agentPageUrl": "https://openagent3.xyz/skills/ghost-cms/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ghost-cms/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ghost-cms/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Ghost CMS",
        "body": "Manage Ghost blog content, members, analytics, and newsletters through the Ghost Admin API."
      },
      {
        "title": "⚠️ Security Warning",
        "body": "Ghost Admin API keys provide FULL access to your Ghost site:\n\nContent Management: Create, update, delete, publish posts and pages\nMember Management: Add, modify, delete members and subscriptions\nSubscription Management: Create, modify, delete membership tiers\nComment Management: Reply to, approve, delete comments\nUser Management: Invite, modify, delete users\nMedia Management: Upload images and files (affects storage)\nSite Configuration: Modify newsletters and settings\n\nPublished content is IMMEDIATELY PUBLIC - be extra careful with publish operations.\n\nSecurity Best Practices:\n\nStore API keys securely - Use 1Password CLI or secure env vars\nReview before publishing - Always check content before making it public\nNever commit keys - Keep credentials out of version control\nRotate keys regularly - Create new integrations every 90 days\nUse dedicated integrations - Separate keys for different use cases\nTest on staging first - Use a test Ghost site when possible\n\nAdmin API Key Scope:\nGhost Admin API keys have no scoping options - they provide full access to everything. There are no read-only keys.\n\nOperation Types:\n\nRead-Only Operations (✅ Safe):\n\nList posts, pages, tags, members, tiers, newsletters, comments\nGet analytics and member stats\nAll GET requests\n\nDestructive Operations (⚠️ Modify or delete data, may be public):\n\nCreate/update/delete posts, pages, tags (POST, PUT, DELETE)\nPublish/unpublish/schedule posts (makes content public)\nCreate/update/delete members, tiers, newsletters\nCreate replies, approve/delete comments\nUpload images (uses storage quota)\nAll POST, PUT, DELETE requests\n\nFor detailed operation documentation, see api-reference.md."
      },
      {
        "title": "Quick Setup",
        "body": "Get your Ghost Admin API credentials:\n\nGhost dashboard → Settings → Integrations\nCreate a new \"Custom Integration\"\nCopy the Admin API Key and API URL\n\n\n\nStore credentials securely:\nOption A: Environment Variables (Recommended)\n# Add to your shell profile (~/.zshrc, ~/.bashrc)\nexport GHOST_ADMIN_KEY=\"YOUR_ADMIN_API_KEY\"\nexport GHOST_API_URL=\"YOUR_GHOST_URL\"\n\nAPI URL Examples (works with ALL hosting types):\n# Ghost(Pro) hosted\nexport GHOST_API_URL=\"https://yourblog.ghost.io\"\n\n# Self-hosted with reverse proxy (production)\nexport GHOST_API_URL=\"https://blog.yourdomain.com\"\n\n# Self-hosted development (Ghost default port 2368)\nexport GHOST_API_URL=\"http://localhost:2368\"\n\n# Self-hosted with custom port\nexport GHOST_API_URL=\"https://ghost.example.com:8080\"\n\nImportant:\n\nAlways include protocol (http:// or https://)\nInclude :PORT if Ghost runs on non-standard port\nDo NOT include trailing slash\nDo NOT include /ghost/api/admin (added automatically)\n\nOption B: Config Files\nmkdir -p ~/.config/ghost\necho \"YOUR_ADMIN_API_KEY\" > ~/.config/ghost/api_key\necho \"YOUR_GHOST_URL\" > ~/.config/ghost/api_url\n\n# Secure the files (owner read-only)\nchmod 600 ~/.config/ghost/api_key\nchmod 600 ~/.config/ghost/api_url\n\nOption C: 1Password CLI (Most Secure)\n# Store key in 1Password\nop item create --category=API_CREDENTIAL \\\n  --title=\"Ghost Admin API\" \\\n  admin_key[password]=\"YOUR_ADMIN_API_KEY\" \\\n  api_url[text]=\"YOUR_GHOST_URL\"\n\n# Use in commands\nexport GHOST_ADMIN_KEY=$(op read \"op://Private/Ghost Admin API/admin_key\")\nexport GHOST_API_URL=$(op read \"op://Private/Ghost Admin API/api_url\")\n\nSecurity Notes:\n\nKeys provide full site access - protect them like passwords\nRotate keys every 90 days (create new integration, revoke old)\nNever commit to git or share keys publicly\nConsider separate keys for production vs. staging\nHTTPS recommended: Use HTTPS for production (HTTP acceptable for localhost only)\n\n\n\nInstall dependencies:\ncd ghost-cms-skill/scripts\nnpm install\n\nDependencies installed:\n\nform-data (^4.0.5) - Multipart file uploads (theme ZIP files)\njsonwebtoken (^9.0.3) - JWT token generation for Ghost Admin API authentication\n\nOptional dependencies (install manually if needed):\n\ngscan (^5.2.4) - Official Ghost theme validator (from TryGhost)\n\nOnly needed for theme validation feature\nInstall with: cd scripts && npm install gscan\n\n\n\nAll dependencies from public npm registry. No custom downloads.\n\n\nTest connection:\nSee setup.md for detailed authentication and troubleshooting."
      },
      {
        "title": "Snippet Extractor",
        "body": "Purpose: Migrate existing Ghost snippets to local library for programmatic use.\n\nWhy needed: Ghost Admin API blocks snippet access (403 Forbidden) for integration tokens. This tool works around that limitation.\n\nUsage:\n\n# Extract snippets from a specially-formatted draft post\nnode scripts/snippet-extractor.js my-snippets-post\n\n# Validate format before extracting\nnode scripts/snippet-extractor.js my-snippets-post --validate\n\n# Preview without saving\nnode scripts/snippet-extractor.js my-snippets-post --dry-run\n\n# Custom marker prefix\nnode scripts/snippet-extractor.js my-snippets-post --marker \"This is:\"\n\n# Full help\nnode scripts/snippet-extractor.js --help\n\nWorkflow:\n\nCreate draft post in Ghost\nFor each snippet: add paragraph marker (e.g., \"SNIPPET: name\" or \"This is: name\")\nInsert the snippet content below each marker\nRun extractor → all snippets saved to snippets/library/\n\nFeatures:\n\n✅ Extracts all card types (bookmarks, callouts, images, markdown, HTML, etc.)\n✅ Preserves exact Lexical structure\n✅ Auto-detects credentials from ~/.config/ghost/ or env vars\n✅ Supports custom marker formats\n✅ Dry-run and validation modes\n✅ Verbose output for debugging\n\nExample:\n\n# User has 12 snippets in Ghost\n# Creates \"My Snippets\" draft with markers\n# Runs: node scripts/snippet-extractor.js my-snippets --marker \"This is:\"\n# Result: All 12 snippets in library/ ready for use\n\nSee snippets/README.md for complete documentation."
      },
      {
        "title": "Theme Manager",
        "body": "Purpose: Upload, activate, switch, and manage Ghost themes programmatically.\n\nWhy needed: Automate theme deployments, switch themes, manage theme versions.\n\nUsage:\n\ncd scripts\n\n# List all installed themes\nnode theme-manager.js list\n\n# Upload theme ZIP\nnode theme-manager.js upload /path/to/theme.zip\n\n# Upload and activate immediately\nnode theme-manager.js upload /path/to/theme.zip --activate\n\n# Activate existing theme\nnode theme-manager.js activate theme-name\n\n# Download theme backup\nnode theme-manager.js download theme-name backup.zip\n\n# Delete theme (cannot delete active theme)\nnode theme-manager.js delete old-theme\n\n# Show current active theme\nnode theme-manager.js active\n\nFeatures:\n\n✅ Upload custom themes from ZIP files\n✅ Switch between installed themes\n✅ Download theme backups\n✅ Delete unused themes\n✅ Validation and error handling\n✅ Immediate activation - theme changes are public instantly\n\n⚠️ Important:\n\nTheme activation is immediate and public - site appearance changes instantly\nCannot delete the currently active theme (switch first)\nThemes must be valid Ghost theme ZIP files\n\nWorkflow:\n\n# Safe theme switching with rollback\nnode theme-manager.js active              # Note current theme\nnode theme-manager.js activate new-theme  # Switch to new theme\n# Test site in browser\nnode theme-manager.js activate old-theme  # Rollback if needed\n\nSee references/themes.md for complete theme management documentation and best practices."
      },
      {
        "title": "Theme Validator",
        "body": "Purpose: Validate Ghost themes before uploading using official gscan validator.\n\n⚠️ Optional Feature: Requires gscan package. Install with:\n\ncd scripts\nnpm install gscan\n\nWhy needed: Catch errors early - missing files, invalid syntax, deprecated helpers, version incompatibility.\n\nUsage:\n\ncd scripts\n\n# Validate theme directory\nnode theme-validator.js ~/themes/my-theme/\n\n# Validate ZIP file  \nnode theme-validator.js theme.zip\n\n# Target specific Ghost version\nnode theme-validator.js theme.zip --version v6\n\n# JSON output for CI/CD\nnode theme-validator.js theme.zip --json\n\n# Show only errors (hide warnings)\nnode theme-validator.js theme.zip --errors-only\n\nFeatures:\n\n✅ Official Ghost validator (gscan from TryGhost)\n✅ Same validation as Ghost Admin\n✅ Validates directories or ZIP files\n✅ Ghost v5/v6 compatibility checking\n✅ Finds deprecated helpers and syntax errors\n✅ CI/CD integration (JSON output, exit codes)\n✅ Categorized issues (errors, warnings, recommendations)\n\nValidation levels:\n\nErrors - Must fix before upload (theme will be rejected)\nWarnings - Should fix for best compatibility\nRecommendations - Nice to have (best practices)\n\nSafe deployment workflow:\n\n# 1. Validate before upload\nnode theme-validator.js my-theme.zip\n\n# 2. Fix any errors\n\n# 3. Re-validate\nnode theme-validator.js my-theme.zip\n\n# 4. Upload when clean\nnode theme-manager.js upload my-theme.zip\n\nCI/CD integration:\n\nnode theme-validator.js theme.zip --json\nif [ $? -eq 0 ]; then\n  node theme-manager.js upload theme.zip --activate\nfi\n\nExit codes: 0 = valid, 1 = errors found, 2 = invalid arguments\n\nSee references/themes.md for complete validation documentation and common error fixes."
      },
      {
        "title": "Core Operations",
        "body": "This skill covers all major Ghost operations. Navigate to the relevant reference for detailed guidance:"
      },
      {
        "title": "Content Management",
        "body": "When to use: Creating drafts, publishing posts, scheduling content, managing pages\n\nSee content.md for:\n\nCreating new posts (drafts)\nPublishing and scheduling posts\nUpdating existing content\nManaging tags, featured images, metadata\nWorking with pages vs posts\n\nSee lexical-cards.md for:\n\nComplete Lexical card type reference (23 documented types)\nMost comprehensive Ghost Lexical documentation available\nFull JSON structures with field references\nVideo, audio, file uploads, buttons, toggles, embeds\nProduct cards, headers, call-to-action, paywall\nMember visibility and content personalization\n\n⚠️ Ghost Snippets Limitation:\n\nGhost's native snippet feature (reusable content blocks saved in the editor) cannot be accessed via the Admin API with integration tokens (403 Forbidden). This means:\n\n❌ Cannot list available snippets\n❌ Cannot fetch snippet content\n❌ Cannot programmatically use author's existing snippets\n\nSolution: Automated Snippet Extraction\n\nThe skill includes a snippet extractor tool that migrates Ghost snippets to local files:\n\nCreate extraction post in Ghost with all snippets (one-time setup)\nRun extractor: node scripts/snippet-extractor.js post-slug\nDone! All snippets saved to snippets/library/ for programmatic use\n\nCommands:\n\n# Extract snippets (auto-detects credentials from ~/.config/ghost/)\nnode scripts/snippet-extractor.js my-snippets-post\n\n# Validate format before extracting\nnode scripts/snippet-extractor.js my-snippets-post --validate\n\n# Preview without saving\nnode scripts/snippet-extractor.js my-snippets-post --dry-run\n\n# Custom marker format\nnode scripts/snippet-extractor.js my-snippets-post --marker \"This is:\"\n\n# Full help\nnode scripts/snippet-extractor.js --help\n\nBenefits:\n\n✅ Migrate all existing Ghost snippets in seconds\n✅ Preserves exact Lexical structure (bookmarks, callouts, images, etc.)\n✅ Git version control\n✅ Use programmatically in automated posts\n✅ Works with any card types\n\nSee snippets/README.md for complete documentation on extraction workflow and local snippet usage."
      },
      {
        "title": "Analytics & Insights",
        "body": "When to use: Checking subscriber counts, popular content, traffic trends\n\nSee analytics.md for:\n\nSubscriber growth and counts\nMost popular posts (views, engagement)\nTag/topic performance over time\nMember tier distribution"
      },
      {
        "title": "Comments & Engagement",
        "body": "When to use: Responding to comments, moderating discussions\n\nSee comments.md for:\n\nListing pending/unanswered comments\nResponding to comments\nComment moderation"
      },
      {
        "title": "Members & Subscribers",
        "body": "When to use: Managing subscriber tiers, member access, premium content\n\nSee members.md for:\n\nSubscriber tier management\nMember-only content settings\nRecent subscriber activity\nSubscription status"
      },
      {
        "title": "Newsletters",
        "body": "When to use: Managing newsletter settings, email campaigns\n\nSee newsletters.md for:\n\nNewsletter configuration\nSending newsletters\nSubscriber email settings"
      },
      {
        "title": "API Reference",
        "body": "For advanced operations or endpoint details, see api-reference.md."
      },
      {
        "title": "Common Workflows",
        "body": "Draft → Notion → Ghost:\n\nDraft content collaboratively in Notion\nFinalize content\nUse this skill to copy to Ghost as draft\nReview in Ghost admin\nSchedule or publish\n\nWeekly content series:\n\n\"Navi, write and publish a unique weekly post about [topic from our discussions this week]\"\nSkill creates post, sets author to \"Navi\", publishes automatically\n\nComment management:\n\n\"Are there any pending comments?\"\nReview list of comments with post titles\n\"Respond to comment #123 with [response]\"\n\nAnalytics check:\n\n\"What tags have been most popular in the past 6 months?\"\n\"How many new subscribers this month?\"\n\"When was my last subscriber-exclusive post?\""
      }
    ],
    "body": "Ghost CMS\n\nManage Ghost blog content, members, analytics, and newsletters through the Ghost Admin API.\n\n⚠️ Security Warning\n\nGhost Admin API keys provide FULL access to your Ghost site:\n\nContent Management: Create, update, delete, publish posts and pages\nMember Management: Add, modify, delete members and subscriptions\nSubscription Management: Create, modify, delete membership tiers\nComment Management: Reply to, approve, delete comments\nUser Management: Invite, modify, delete users\nMedia Management: Upload images and files (affects storage)\nSite Configuration: Modify newsletters and settings\n\nPublished content is IMMEDIATELY PUBLIC - be extra careful with publish operations.\n\nSecurity Best Practices:\n\nStore API keys securely - Use 1Password CLI or secure env vars\nReview before publishing - Always check content before making it public\nNever commit keys - Keep credentials out of version control\nRotate keys regularly - Create new integrations every 90 days\nUse dedicated integrations - Separate keys for different use cases\nTest on staging first - Use a test Ghost site when possible\n\nAdmin API Key Scope: Ghost Admin API keys have no scoping options - they provide full access to everything. There are no read-only keys.\n\nOperation Types:\n\nRead-Only Operations (✅ Safe):\n\nList posts, pages, tags, members, tiers, newsletters, comments\nGet analytics and member stats\nAll GET requests\n\nDestructive Operations (⚠️ Modify or delete data, may be public):\n\nCreate/update/delete posts, pages, tags (POST, PUT, DELETE)\nPublish/unpublish/schedule posts (makes content public)\nCreate/update/delete members, tiers, newsletters\nCreate replies, approve/delete comments\nUpload images (uses storage quota)\nAll POST, PUT, DELETE requests\n\nFor detailed operation documentation, see api-reference.md.\n\nQuick Setup\n\nGet your Ghost Admin API credentials:\n\nGhost dashboard → Settings → Integrations\nCreate a new \"Custom Integration\"\nCopy the Admin API Key and API URL\n\nStore credentials securely:\n\nOption A: Environment Variables (Recommended)\n\n# Add to your shell profile (~/.zshrc, ~/.bashrc)\nexport GHOST_ADMIN_KEY=\"YOUR_ADMIN_API_KEY\"\nexport GHOST_API_URL=\"YOUR_GHOST_URL\"\n\n\nAPI URL Examples (works with ALL hosting types):\n\n# Ghost(Pro) hosted\nexport GHOST_API_URL=\"https://yourblog.ghost.io\"\n\n# Self-hosted with reverse proxy (production)\nexport GHOST_API_URL=\"https://blog.yourdomain.com\"\n\n# Self-hosted development (Ghost default port 2368)\nexport GHOST_API_URL=\"http://localhost:2368\"\n\n# Self-hosted with custom port\nexport GHOST_API_URL=\"https://ghost.example.com:8080\"\n\n\nImportant:\n\nAlways include protocol (http:// or https://)\nInclude :PORT if Ghost runs on non-standard port\nDo NOT include trailing slash\nDo NOT include /ghost/api/admin (added automatically)\n\nOption B: Config Files\n\nmkdir -p ~/.config/ghost\necho \"YOUR_ADMIN_API_KEY\" > ~/.config/ghost/api_key\necho \"YOUR_GHOST_URL\" > ~/.config/ghost/api_url\n\n# Secure the files (owner read-only)\nchmod 600 ~/.config/ghost/api_key\nchmod 600 ~/.config/ghost/api_url\n\n\nOption C: 1Password CLI (Most Secure)\n\n# Store key in 1Password\nop item create --category=API_CREDENTIAL \\\n  --title=\"Ghost Admin API\" \\\n  admin_key[password]=\"YOUR_ADMIN_API_KEY\" \\\n  api_url[text]=\"YOUR_GHOST_URL\"\n\n# Use in commands\nexport GHOST_ADMIN_KEY=$(op read \"op://Private/Ghost Admin API/admin_key\")\nexport GHOST_API_URL=$(op read \"op://Private/Ghost Admin API/api_url\")\n\n\nSecurity Notes:\n\nKeys provide full site access - protect them like passwords\nRotate keys every 90 days (create new integration, revoke old)\nNever commit to git or share keys publicly\nConsider separate keys for production vs. staging\nHTTPS recommended: Use HTTPS for production (HTTP acceptable for localhost only)\n\nInstall dependencies:\n\ncd ghost-cms-skill/scripts\nnpm install\n\n\nDependencies installed:\n\nform-data (^4.0.5) - Multipart file uploads (theme ZIP files)\njsonwebtoken (^9.0.3) - JWT token generation for Ghost Admin API authentication\n\nOptional dependencies (install manually if needed):\n\ngscan (^5.2.4) - Official Ghost theme validator (from TryGhost)\nOnly needed for theme validation feature\nInstall with: cd scripts && npm install gscan\n\nAll dependencies from public npm registry. No custom downloads.\n\nTest connection: See setup.md for detailed authentication and troubleshooting.\n\nTools & Utilities\nSnippet Extractor\n\nPurpose: Migrate existing Ghost snippets to local library for programmatic use.\n\nWhy needed: Ghost Admin API blocks snippet access (403 Forbidden) for integration tokens. This tool works around that limitation.\n\nUsage:\n\n# Extract snippets from a specially-formatted draft post\nnode scripts/snippet-extractor.js my-snippets-post\n\n# Validate format before extracting\nnode scripts/snippet-extractor.js my-snippets-post --validate\n\n# Preview without saving\nnode scripts/snippet-extractor.js my-snippets-post --dry-run\n\n# Custom marker prefix\nnode scripts/snippet-extractor.js my-snippets-post --marker \"This is:\"\n\n# Full help\nnode scripts/snippet-extractor.js --help\n\n\nWorkflow:\n\nCreate draft post in Ghost\nFor each snippet: add paragraph marker (e.g., \"SNIPPET: name\" or \"This is: name\")\nInsert the snippet content below each marker\nRun extractor → all snippets saved to snippets/library/\n\nFeatures:\n\n✅ Extracts all card types (bookmarks, callouts, images, markdown, HTML, etc.)\n✅ Preserves exact Lexical structure\n✅ Auto-detects credentials from ~/.config/ghost/ or env vars\n✅ Supports custom marker formats\n✅ Dry-run and validation modes\n✅ Verbose output for debugging\n\nExample:\n\n# User has 12 snippets in Ghost\n# Creates \"My Snippets\" draft with markers\n# Runs: node scripts/snippet-extractor.js my-snippets --marker \"This is:\"\n# Result: All 12 snippets in library/ ready for use\n\n\nSee snippets/README.md for complete documentation.\n\nTheme Manager\n\nPurpose: Upload, activate, switch, and manage Ghost themes programmatically.\n\nWhy needed: Automate theme deployments, switch themes, manage theme versions.\n\nUsage:\n\ncd scripts\n\n# List all installed themes\nnode theme-manager.js list\n\n# Upload theme ZIP\nnode theme-manager.js upload /path/to/theme.zip\n\n# Upload and activate immediately\nnode theme-manager.js upload /path/to/theme.zip --activate\n\n# Activate existing theme\nnode theme-manager.js activate theme-name\n\n# Download theme backup\nnode theme-manager.js download theme-name backup.zip\n\n# Delete theme (cannot delete active theme)\nnode theme-manager.js delete old-theme\n\n# Show current active theme\nnode theme-manager.js active\n\n\nFeatures:\n\n✅ Upload custom themes from ZIP files\n✅ Switch between installed themes\n✅ Download theme backups\n✅ Delete unused themes\n✅ Validation and error handling\n✅ Immediate activation - theme changes are public instantly\n\n⚠️ Important:\n\nTheme activation is immediate and public - site appearance changes instantly\nCannot delete the currently active theme (switch first)\nThemes must be valid Ghost theme ZIP files\n\nWorkflow:\n\n# Safe theme switching with rollback\nnode theme-manager.js active              # Note current theme\nnode theme-manager.js activate new-theme  # Switch to new theme\n# Test site in browser\nnode theme-manager.js activate old-theme  # Rollback if needed\n\n\nSee references/themes.md for complete theme management documentation and best practices.\n\nTheme Validator\n\nPurpose: Validate Ghost themes before uploading using official gscan validator.\n\n⚠️ Optional Feature: Requires gscan package. Install with:\n\ncd scripts\nnpm install gscan\n\n\nWhy needed: Catch errors early - missing files, invalid syntax, deprecated helpers, version incompatibility.\n\nUsage:\n\ncd scripts\n\n# Validate theme directory\nnode theme-validator.js ~/themes/my-theme/\n\n# Validate ZIP file  \nnode theme-validator.js theme.zip\n\n# Target specific Ghost version\nnode theme-validator.js theme.zip --version v6\n\n# JSON output for CI/CD\nnode theme-validator.js theme.zip --json\n\n# Show only errors (hide warnings)\nnode theme-validator.js theme.zip --errors-only\n\n\nFeatures:\n\n✅ Official Ghost validator (gscan from TryGhost)\n✅ Same validation as Ghost Admin\n✅ Validates directories or ZIP files\n✅ Ghost v5/v6 compatibility checking\n✅ Finds deprecated helpers and syntax errors\n✅ CI/CD integration (JSON output, exit codes)\n✅ Categorized issues (errors, warnings, recommendations)\n\nValidation levels:\n\nErrors - Must fix before upload (theme will be rejected)\nWarnings - Should fix for best compatibility\nRecommendations - Nice to have (best practices)\n\nSafe deployment workflow:\n\n# 1. Validate before upload\nnode theme-validator.js my-theme.zip\n\n# 2. Fix any errors\n\n# 3. Re-validate\nnode theme-validator.js my-theme.zip\n\n# 4. Upload when clean\nnode theme-manager.js upload my-theme.zip\n\n\nCI/CD integration:\n\nnode theme-validator.js theme.zip --json\nif [ $? -eq 0 ]; then\n  node theme-manager.js upload theme.zip --activate\nfi\n\n\nExit codes: 0 = valid, 1 = errors found, 2 = invalid arguments\n\nSee references/themes.md for complete validation documentation and common error fixes.\n\nCore Operations\n\nThis skill covers all major Ghost operations. Navigate to the relevant reference for detailed guidance:\n\nContent Management\n\nWhen to use: Creating drafts, publishing posts, scheduling content, managing pages\n\nSee content.md for:\n\nCreating new posts (drafts)\nPublishing and scheduling posts\nUpdating existing content\nManaging tags, featured images, metadata\nWorking with pages vs posts\n\nSee lexical-cards.md for:\n\nComplete Lexical card type reference (23 documented types)\nMost comprehensive Ghost Lexical documentation available\nFull JSON structures with field references\nVideo, audio, file uploads, buttons, toggles, embeds\nProduct cards, headers, call-to-action, paywall\nMember visibility and content personalization\n\n⚠️ Ghost Snippets Limitation:\n\nGhost's native snippet feature (reusable content blocks saved in the editor) cannot be accessed via the Admin API with integration tokens (403 Forbidden). This means:\n\n❌ Cannot list available snippets\n❌ Cannot fetch snippet content\n❌ Cannot programmatically use author's existing snippets\n\nSolution: Automated Snippet Extraction\n\nThe skill includes a snippet extractor tool that migrates Ghost snippets to local files:\n\nCreate extraction post in Ghost with all snippets (one-time setup)\nRun extractor: node scripts/snippet-extractor.js post-slug\nDone! All snippets saved to snippets/library/ for programmatic use\n\nCommands:\n\n# Extract snippets (auto-detects credentials from ~/.config/ghost/)\nnode scripts/snippet-extractor.js my-snippets-post\n\n# Validate format before extracting\nnode scripts/snippet-extractor.js my-snippets-post --validate\n\n# Preview without saving\nnode scripts/snippet-extractor.js my-snippets-post --dry-run\n\n# Custom marker format\nnode scripts/snippet-extractor.js my-snippets-post --marker \"This is:\"\n\n# Full help\nnode scripts/snippet-extractor.js --help\n\n\nBenefits:\n\n✅ Migrate all existing Ghost snippets in seconds\n✅ Preserves exact Lexical structure (bookmarks, callouts, images, etc.)\n✅ Git version control\n✅ Use programmatically in automated posts\n✅ Works with any card types\n\nSee snippets/README.md for complete documentation on extraction workflow and local snippet usage.\n\nAnalytics & Insights\n\nWhen to use: Checking subscriber counts, popular content, traffic trends\n\nSee analytics.md for:\n\nSubscriber growth and counts\nMost popular posts (views, engagement)\nTag/topic performance over time\nMember tier distribution\nComments & Engagement\n\nWhen to use: Responding to comments, moderating discussions\n\nSee comments.md for:\n\nListing pending/unanswered comments\nResponding to comments\nComment moderation\nMembers & Subscribers\n\nWhen to use: Managing subscriber tiers, member access, premium content\n\nSee members.md for:\n\nSubscriber tier management\nMember-only content settings\nRecent subscriber activity\nSubscription status\nNewsletters\n\nWhen to use: Managing newsletter settings, email campaigns\n\nSee newsletters.md for:\n\nNewsletter configuration\nSending newsletters\nSubscriber email settings\nAPI Reference\n\nFor advanced operations or endpoint details, see api-reference.md.\n\nCommon Workflows\n\nDraft → Notion → Ghost:\n\nDraft content collaboratively in Notion\nFinalize content\nUse this skill to copy to Ghost as draft\nReview in Ghost admin\nSchedule or publish\n\nWeekly content series:\n\n\"Navi, write and publish a unique weekly post about [topic from our discussions this week]\"\nSkill creates post, sets author to \"Navi\", publishes automatically\n\nComment management:\n\n\"Are there any pending comments?\"\nReview list of comments with post titles\n\"Respond to comment #123 with [response]\"\n\nAnalytics check:\n\n\"What tags have been most popular in the past 6 months?\"\n\"How many new subscribers this month?\"\n\"When was my last subscriber-exclusive post?\""
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/chrisagiddings/ghost-cms",
    "publisherUrl": "https://clawhub.ai/chrisagiddings/ghost-cms",
    "owner": "chrisagiddings",
    "version": "0.1.8",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ghost-cms",
    "downloadUrl": "https://openagent3.xyz/downloads/ghost-cms",
    "agentUrl": "https://openagent3.xyz/skills/ghost-cms/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ghost-cms/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ghost-cms/agent.md"
  }
}