{
  "schemaVersion": "1.0",
  "item": {
    "slug": "bear-blog-publisher",
    "name": "Bear Blog Publisher",
    "source": "tencent",
    "type": "skill",
    "category": "其他",
    "sourceUrl": "https://clawhub.ai/CatTalk2/bear-blog-publisher",
    "canonicalUrl": "https://clawhub.ai/CatTalk2/bear-blog-publisher",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/bear-blog-publisher",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=bear-blog-publisher",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "package.json",
      "SKILL.md",
      "templates/diagram.html",
      "scripts/publish.py",
      "examples/sample.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-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/bear-blog-publisher"
    },
    "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/bear-blog-publisher",
    "agentPageUrl": "https://openagent3.xyz/skills/bear-blog-publisher/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bear-blog-publisher/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bear-blog-publisher/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": "Bear Blog Publisher",
        "body": "Publish blog posts to Bear Blog (https://bearblog.dev/)."
      },
      {
        "title": "Overview",
        "body": "This skill provides automated publishing capabilities for Bear Blog, including optional AI content generation and diagram generation."
      },
      {
        "title": "Method 1: OpenClaw Config (Recommended for Personal Use)",
        "body": "Add to your ~/.openclaw/openclaw.json:\n\n{\n  \"skills\": {\n    \"bear-blog-publisher\": {\n      \"email\": \"your@email.com\",\n      \"password\": \"yourpassword\"\n    }\n  }\n}\n\nSecurity: File permissions should be set to 600 (readable only by owner)."
      },
      {
        "title": "Method 2: Environment Variables (Recommended for CI/CD)",
        "body": "export BEAR_BLOG_EMAIL=\"your@email.com\"\nexport BEAR_BLOG_PASSWORD=\"yourpassword\"\n\nSecurity: Credentials exist only in memory, not written to disk."
      },
      {
        "title": "Method 3: Runtime Parameters (Recommended for Multi-User)",
        "body": "Provide credentials when calling the skill:\n\npublisher = BearBlogPublisher(email=\"user@example.com\", password=\"secret\")\n\nSecurity: Caller (chat bot, web app, etc.) manages credential lifecycle."
      },
      {
        "title": "AI Content Generation (Optional)",
        "body": "To use AI content generation, configure one of the following:"
      },
      {
        "title": "OpenAI",
        "body": "export OPENAI_API_KEY=\"sk-...\""
      },
      {
        "title": "Kimi",
        "body": "export KIMI_API_KEY=\"your-kimi-api-key\""
      },
      {
        "title": "Usage",
        "body": "publisher = BearBlogPublisher()\ncontent = publisher.generate_content(\n    topic=\"Python best practices\",\n    provider=\"openai\",  # or \"kimi\"\n    tone=\"professional\",\n    length=\"medium\"\n)\nresult = publisher.publish(title=\"My Post\", content=content)"
      },
      {
        "title": "Priority Order",
        "body": "Runtime parameters (highest priority)\nEnvironment variables\nOpenClaw config (lowest priority)"
      },
      {
        "title": "1. Publish Blog Post",
        "body": "Input:\n\ntitle (string): Blog post title\ncontent (string): Markdown content\nemail (string, optional): Bear Blog email\npassword (string, optional): Bear Blog password\n\nOutput:\n\nPublished URL or error message"
      },
      {
        "title": "2. AI Content Generation (Optional)",
        "body": "Generate blog content using OpenAI or Kimi API."
      },
      {
        "title": "3. Generate Diagram (Optional)",
        "body": "For technical topics, generates architecture diagrams using HTML/CSS + Playwright."
      },
      {
        "title": "Security Best Practices",
        "body": "Never commit credentials to git\nUse environment variables in production\nSet file permissions to 600 for config files\nUse runtime parameters for multi-user scenarios"
      },
      {
        "title": "Security Considerations",
        "body": "This skill makes several operational choices that users should be aware of:"
      },
      {
        "title": "1. Playwright Browser Download",
        "body": "Why: Required for generating architecture diagrams as PNG images\nSize: ~100MB Chromium browser\nAlternative: Skip diagram generation if not needed"
      },
      {
        "title": "2. Temporary Files",
        "body": "Location: /tmp/diagram.html and /tmp/diagram.png\nPurpose: Intermediate files for diagram generation\nCleanup: Files are overwritten on each run, not explicitly deleted"
      },
      {
        "title": "3. --no-sandbox Flag",
        "body": "Why: Required for running Chromium in containerized/Docker environments\nRisk: Slightly reduced browser isolation\nMitigation: Only used for local HTML-to-image conversion, no external URLs loaded"
      },
      {
        "title": "4. Plaintext Password Storage (Optional)",
        "body": "Config file: Only if user chooses Method 1\nRecommendation: Use environment variables (Method 2) or runtime parameters (Method 3) instead\nIf using config: Always set file permissions to 600"
      },
      {
        "title": "With Config File",
        "body": "# ~/.openclaw/openclaw.json configured\nYou: \"Publish a blog about Python tips\"\nAI: [Uses config credentials, publishes]"
      },
      {
        "title": "With Environment Variables",
        "body": "export BEAR_BLOG_EMAIL=\"user@example.com\"\nexport BEAR_BLOG_PASSWORD=\"secret\"\n\nYou: \"Publish a blog about Python tips\"\nAI: [Uses env vars, publishes]"
      },
      {
        "title": "With AI Content Generation",
        "body": "export BEAR_BLOG_EMAIL=\"user@example.com\"\nexport BEAR_BLOG_PASSWORD=\"secret\"\nexport OPENAI_API_KEY=\"sk-...\"\n\nYou: \"Write and publish a blog about Python asyncio\"\nAI: [Generates content with OpenAI, publishes]"
      },
      {
        "title": "With Runtime Parameters",
        "body": "# In your chat bot code\nemail = get_user_email()  # Ask user\npassword = get_user_password()  # Ask user\n\npublisher = BearBlogPublisher(email=email, password=password)\nresult = publisher.publish(title=\"My Post\", content=\"# Content\")"
      },
      {
        "title": "Implementation",
        "body": "Uses Bear Blog web API\nCSRF token authentication\nSession-based (no persistent storage)\nPlaywright for diagram generation\nOpenAI/Kimi API for content generation"
      },
      {
        "title": "License",
        "body": "MIT"
      }
    ],
    "body": "Bear Blog Publisher\n\nPublish blog posts to Bear Blog (https://bearblog.dev/).\n\nOverview\n\nThis skill provides automated publishing capabilities for Bear Blog, including optional AI content generation and diagram generation.\n\nAuthentication Methods (Choose One)\nMethod 1: OpenClaw Config (Recommended for Personal Use)\n\nAdd to your ~/.openclaw/openclaw.json:\n\n{\n  \"skills\": {\n    \"bear-blog-publisher\": {\n      \"email\": \"your@email.com\",\n      \"password\": \"yourpassword\"\n    }\n  }\n}\n\n\nSecurity: File permissions should be set to 600 (readable only by owner).\n\nMethod 2: Environment Variables (Recommended for CI/CD)\nexport BEAR_BLOG_EMAIL=\"your@email.com\"\nexport BEAR_BLOG_PASSWORD=\"yourpassword\"\n\n\nSecurity: Credentials exist only in memory, not written to disk.\n\nMethod 3: Runtime Parameters (Recommended for Multi-User)\n\nProvide credentials when calling the skill:\n\npublisher = BearBlogPublisher(email=\"user@example.com\", password=\"secret\")\n\n\nSecurity: Caller (chat bot, web app, etc.) manages credential lifecycle.\n\nAI Content Generation (Optional)\n\nTo use AI content generation, configure one of the following:\n\nOpenAI\nexport OPENAI_API_KEY=\"sk-...\"\n\nKimi\nexport KIMI_API_KEY=\"your-kimi-api-key\"\n\nUsage\npublisher = BearBlogPublisher()\ncontent = publisher.generate_content(\n    topic=\"Python best practices\",\n    provider=\"openai\",  # or \"kimi\"\n    tone=\"professional\",\n    length=\"medium\"\n)\nresult = publisher.publish(title=\"My Post\", content=content)\n\nPriority Order\nRuntime parameters (highest priority)\nEnvironment variables\nOpenClaw config (lowest priority)\nCapabilities\n1. Publish Blog Post\n\nInput:\n\ntitle (string): Blog post title\ncontent (string): Markdown content\nemail (string, optional): Bear Blog email\npassword (string, optional): Bear Blog password\n\nOutput:\n\nPublished URL or error message\n2. AI Content Generation (Optional)\n\nGenerate blog content using OpenAI or Kimi API.\n\n3. Generate Diagram (Optional)\n\nFor technical topics, generates architecture diagrams using HTML/CSS + Playwright.\n\nSecurity Best Practices\nNever commit credentials to git\nUse environment variables in production\nSet file permissions to 600 for config files\nUse runtime parameters for multi-user scenarios\nSecurity Considerations\n\nThis skill makes several operational choices that users should be aware of:\n\n1. Playwright Browser Download\nWhy: Required for generating architecture diagrams as PNG images\nSize: ~100MB Chromium browser\nAlternative: Skip diagram generation if not needed\n2. Temporary Files\nLocation: /tmp/diagram.html and /tmp/diagram.png\nPurpose: Intermediate files for diagram generation\nCleanup: Files are overwritten on each run, not explicitly deleted\n3. --no-sandbox Flag\nWhy: Required for running Chromium in containerized/Docker environments\nRisk: Slightly reduced browser isolation\nMitigation: Only used for local HTML-to-image conversion, no external URLs loaded\n4. Plaintext Password Storage (Optional)\nConfig file: Only if user chooses Method 1\nRecommendation: Use environment variables (Method 2) or runtime parameters (Method 3) instead\nIf using config: Always set file permissions to 600\nExample Usage\nWith Config File\n# ~/.openclaw/openclaw.json configured\nYou: \"Publish a blog about Python tips\"\nAI: [Uses config credentials, publishes]\n\nWith Environment Variables\nexport BEAR_BLOG_EMAIL=\"user@example.com\"\nexport BEAR_BLOG_PASSWORD=\"secret\"\n\nYou: \"Publish a blog about Python tips\"\nAI: [Uses env vars, publishes]\n\nWith AI Content Generation\nexport BEAR_BLOG_EMAIL=\"user@example.com\"\nexport BEAR_BLOG_PASSWORD=\"secret\"\nexport OPENAI_API_KEY=\"sk-...\"\n\nYou: \"Write and publish a blog about Python asyncio\"\nAI: [Generates content with OpenAI, publishes]\n\nWith Runtime Parameters\n# In your chat bot code\nemail = get_user_email()  # Ask user\npassword = get_user_password()  # Ask user\n\npublisher = BearBlogPublisher(email=email, password=password)\nresult = publisher.publish(title=\"My Post\", content=\"# Content\")\n\nImplementation\nUses Bear Blog web API\nCSRF token authentication\nSession-based (no persistent storage)\nPlaywright for diagram generation\nOpenAI/Kimi API for content generation\nLicense\n\nMIT"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/CatTalk2/bear-blog-publisher",
    "publisherUrl": "https://clawhub.ai/CatTalk2/bear-blog-publisher",
    "owner": "CatTalk2",
    "version": "1.0.13",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/bear-blog-publisher",
    "downloadUrl": "https://openagent3.xyz/downloads/bear-blog-publisher",
    "agentUrl": "https://openagent3.xyz/skills/bear-blog-publisher/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bear-blog-publisher/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bear-blog-publisher/agent.md"
  }
}