Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

content-factory

v1.3.0

Create complete WeChat Official Account viral articles from a user-provided title by researching high-view YouTube videos, confirming topic/outline with user...

0· 73·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for jeffli2002/content-factory-v2.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "content-factory" (jeffli2002/content-factory-v2) from ClawHub.
Skill page: https://clawhub.ai/jeffli2002/content-factory-v2
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install content-factory-v2

ClawHub CLI

Package manager switcher

npx clawhub@latest install content-factory-v2
Security Scan
Capability signals
Requires OAuth token
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The declared goal—research YouTube and produce WeChat-ready articles (MD+HTML), generate covers, and optionally publish—is consistent with the bundled scripts (yt_dlp_*, generate_cover_photo.py, wechat_publish.py). However the registry metadata claims no required env vars/credentials while the package docs and scripts clearly expect a GLM_API_KEY (Zhipu/GLM-Image) and optionally WECHAT_APP_ID/WECHAT_APP_SECRET. That mismatch between declared requirements and actual code is an incoherence.
!
Instruction Scope
SKILL.md mandates running local binaries and scripts and explicitly instructs the agent to read credential files in global host paths (e.g. /root/.openclaw/credentials/tavily.json, /root/.openclaw/credentials/brave.json, ~/.claude/skills, /root/.openclaw/workspace/scripts). It also requires checking yt-dlp and executing local smart_search.py and yt_dlp scripts. These instructions cause the skill to access system-wide files and other workspace tools beyond the skill folder and could expose unrelated credentials or data.
Install Mechanism
There is no install spec (instruction-only), which reduces direct disk-write risk, but the package includes many executable Python scripts that the skill expects to run. There are no remote download/install steps in the manifest, which is positive, but executing bundled scripts still runs code on the host and must be reviewed.
!
Credentials
Registry metadata lists no required env vars, yet multiple docs and scripts require a GLM_API_KEY for cover generation and optionally WECHAT_APP_ID/WECHAT_APP_SECRET for publishing. SKILL.md also instructs reading other global credential files (Tavily/Brave) from /root/.openclaw/credentials, which are unrelated to the published metadata and give the skill potential access to unrelated service keys. This is disproportionate and undocumented.
!
Persistence & Privilege
The skill doesn't set always:true and doesn't claim to persist system-wide changes, but its runtime instructions explicitly reference and read workspace/global credential paths belonging to the agent environment (/root/.openclaw and ~/.claude). Accessing other skills' or platform-level credential files increases privilege/impact even without always:true.
What to consider before installing
Before installing or running this skill, consider the following: 1) Do not trust the package solely because the registry lists no env vars — the code and docs expect GLM_API_KEY and optionally WeChat credentials. Ask the publisher to update the registry metadata to list required env vars and explain why each is needed. 2) Inspect the included Python scripts (especially yt_dlp_*, generate_cover_photo.py, wechat_publish.py, and any file that reads /root or ~/.claude paths) to confirm what files they read and what network endpoints they contact (e.g., open.bigmodel.cn). 3) Avoid storing global or high-value credentials (platform keys, production WeChat AppSecret, or other skills' keys) in the locations the skill will read; instead use a disposable/test API key if you want to try it. 4) Run the skill in an isolated environment (container, VM, or restricted user) and audit outbound network activity before allowing it access to real secrets. 5) If you need automated publishing, consider providing only a dedicated WeChat account with limited permissions. 6) Ask the author to remove or document reads of global credential paths (Tavily/Brave paths and /root/.openclaw/workspace scripts) or to make them opt-in and configurable (skill-local .env only). If the author can (a) declare the needed env vars in registry metadata, (b) confine credential access to the skill's own .env or credential file, and (c) document all external endpoints the scripts call, the package would be materially safer. If you cannot perform these checks, treat the skill as untrusted and do not run it with real/prod credentials.

Like a lobster shell, security has layers — review code before you run it.

latestvk97dah5p9szenk2v01b1e8gn6584g0dp
73downloads
0stars
1versions
Updated 2w ago
v1.3.0
MIT-0

Content Factory

高质量内容创作标准(2026-02-20 更新)

爆款文章核心公式

标题 + 开头 = 80%的阅读量

核心原则

文章必须给用户带来真正价值:

  1. 学到具体的方法论 - 不是泛泛而谈,有可操作的方法
  2. 能实操的指南 - 照着做就能成,给提示词、给代码、给步骤
  3. 开拓视野提升认知 - 看到以前没想过的东西,认知升级

标题写法

  • 争议/对比词:「手撕Sora,脚踢Veo」「黑奴」「智商税」
  • 数字吸睛:「13个行业实战案例」
  • 疑问句引发好奇:「真的值吗?」
  • 颠覆认知:挑战传统观点

开头写法

Hook 是必须的:开头必须有一个 Hook,不能直接进入正文。

Hook 的结构:承认一个普遍痛点 + 今天这期的独特发现

Jeff 给的示范: 「大家使用 OpenClaw,其实并没有特别好的找到商业应用场景。今天通过地图 API 的结合,让我们看到了更多商业落地应用的可能性。」

其他 Hook 示例:

  • 「很多人装了 OpenClaw,但不知道它还能这样用……」
  • 「你以为 OpenClaw 只能聊天?实际上它能干这个……」
  • 「大多数人用 AI 工具只用到了一成功能……」

一句话总结:开头先承认用户的困惑或局限,再抛出今天的发现,让读者觉得『这正是我需要的』。

正文结构

2-3个具体案例,层层递进:

每个案例包含:

  • 具体场景(扔给AI什么任务)
  • 真实过程(提示词、报错、改Bug)
  • 结果展示(截图、链接、数据)
  • 优缺点分析(不藏着掖着)

干货要求

  • 给可直接抄作业的提示词
  • 完整代码示例
  • 真实项目名和案例
  • 工作流拆解

真诚原则

  • 报错经历也分享
  • 槽点大方承认
  • 效果对比(Before/After)
  • 提供测试链接和在线Demo

结尾升华

  • 方法论总结
  • 未来趋势展望
  • Agent自动化想象空间

三篇文章对照学习

维度Qwen3.5篇MiniMax M2.5篇Seedance 2.0篇
标题争议词+结论疑问句+颠覆对比+数字
开头问题切入观察洞察回应期待
结构2.0→3.0升级基础→附加→终极行业分类
干货代码配置提示词实测完整工作流
真诚报错经历槽点承认不足之处
结尾心里话升华测试入口Agent未来

Overview

八、高阅读量文章共同点(来自饼干哥哥、藏师傅分析)

1. 选题精准

  • 蹭热点 + 独特视角
  • 解决具体问题
  • 目标人群明确

2. 结构清晰

  • 层层递进
  • 案例丰富
  • 重点突出

3. 语言生动

  • 有情绪(有态度)
  • 有细节(不说正确的废话)
  • 有对话感(像在跟朋友聊天)

4. 利他思维

  • 读者能得到什么?
  • 看完能做什么?
  • 为什么转发?

5. 平台友好

  • 关键词布局
  • 开头有关键词
  • 结尾引导互动

Generate complete WeChat Official Account "viral-style" articles using YouTube research, user confirmation, and professional writing with self-iteration. Use this skill when given a topic/title and asked to research, create, and write a complete WeChat article with both MD and HTML outputs.

CRITICAL: Tool Dependency Check (MUST DO FIRST)

Before starting any research, MANDATORY tool check:

Step 1: Check yt-dlp Installation

yt-dlp --version

If not installed or command fails:

  • STOP immediately
  • Inform user: "yt-dlp tool is required for YouTube content extraction"
  • Provide installation command: pip install yt-dlp
  • Wait for user to install before proceeding
  • DO NOT skip to alternative methods without checking tools first

Step 2: Verify Script Files

ls scripts/yt_dlp_search.py
ls scripts/yt_dlp_captions.py

If scripts missing:

  • Check skill base directory: ~/.claude/skills\content-factory\scripts\
  • Inform user if files are missing
  • DO NOT proceed without verifying script availability

Step 3: Verify Web Search Tools

# Test Tavily (primary) - check credentials first
python3 -c "import json; print(json.load(open('/root/.openclaw/credentials/tavily.json'))['api_key'])" && echo "Tavily: OK"

# Test Brave (fallback) - check credentials
python3 -c "import json; print(json.load(open('/root/.openclaw/credentials/brave.json'))['api_key'])" && echo "Brave: OK"

# Test smart_search script
python3 /root/.openclaw/workspace/scripts/smart_search.py "test" --max-results 1 2>&1 | head -5

If Tavily/Brave credentials exist:

  • ✅ "Web search tools verified: Tavily API ✓, Brave API ✓"
  • Proceed with web research using smart_search.py (Tavily primary, Brave fallback)

If credentials missing:

  • ⚠️ "Web search credentials not found in credentials/ — check Tavily/Brave setup"
  • Fall back to: YouTube search results + X/Nitter + official pages (still viable)

Step 4: Tool Status Communication

Always inform user of tool status:

  • ✅ "yt-dlp installed (version X.X.X), proceeding with YouTube content extraction"
  • ✅ "Web search: Tavily ✓, Brave ✓"
  • ❌ "yt-dlp not found, please install with: pip install yt-dlp"
  • ⚠️ "Scripts found but yt-dlp missing, installation required"
  • ⚠️ "Web search unavailable — using YouTube search + X/Nitter + official pages"

IMPORTANT PRINCIPLE:

  • Tool checking is a PREREQUISITE, not optional
  • "Optionally run scripts" means "use if available", NOT "skip if inconvenient"
  • Local scripts are PRIMARY method, WebFetch is FALLBACK
  • Never assume tools are unavailable without checking first
  • Web Search: Always use smart_search.py via exec FIRST (Tavily → Brave fallback)
    • Test: python3 /root/.openclaw/workspace/scripts/smart_search.py "test" --max-results 1
    • Do NOT use OpenClaw built-in web_search tool as primary (it has separate Brave key config)

Workflow

1) Intake and clarify

  • Require: user-provided title/topic.
  • Ask for missing essentials: target audience, industry/region, tone (serious vs. punchy), desired length, and recency constraints.
  • Confirm language preference; default to Chinese output unless user requests otherwise.

2) Web Research (Multi-source)

IMPORTANT: Research from diverse web sources - YouTube is a KEY source but not the ONLY source.

Primary Research Sources (in priority order):

  1. YouTube Videos (Key source for case studies and expert insights)

    CRITICAL: YouTube Content Extraction Priority Order

    PRIMARY METHOD (Try First):

    • Run scripts/yt_dlp_search.py to search and collect video metadata
      python scripts/yt_dlp_search.py "your search query" --max-results 10
      
    • Use scripts/yt_dlp_captions.py to download subtitles/transcripts
      python scripts/yt_dlp_captions.py VIDEO_URL --whisper-if-missing
      
    • These scripts provide: title, channel, view count, upload date, duration, URL, full transcripts

    FALLBACK METHOD (If scripts fail):

    • Try WebFetch on YouTube video pages
    • If WebFetch blocked, request user to provide video URLs manually
    • Use smart_search.py via exec to find YouTube video links, then extract metadata

    LAST RESORT (If all YouTube access fails):

    • Proceed with other sources (articles, reports, blogs)
    • Clearly document in article that YouTube content was unavailable
    • Compensate with more industry reports and expert blogs

    Content Extraction Guidelines:

    • Load references/youtube_research_checklist.md for detailed extraction steps
    • Select 2-4 high-view, highly relevant videos (preferably top 20% by view count)
    • Extract verifiable data from: transcripts, descriptions, video chapters
    • Capture: title, channel, view count, upload date, duration, URL, transcript excerpts, relevance notes
  2. Official Documentation & Announcements

    • Company blogs (e.g., anthropic.com/news, openai.com/blog)
    • Official product documentation
    • Press releases and official statements
    • GitHub repositories (README, release notes)
  3. Industry Analysis & Reports

    • Gartner, Forrester, McKinsey reports
    • TechCrunch, VentureBeat, The Verge news articles
    • Industry-specific publications
    • Research papers and whitepapers
  4. Expert Blogs & Technical Content

    • Medium, Dev.to, Hacker News discussions
    • Personal blogs of industry experts
    • LinkedIn articles from thought leaders
    • Technical tutorials and case studies
  5. Community Discussions & Reviews

    • Reddit threads (r/MachineLearning, r/artificial, etc.)
    • Stack Overflow technical discussions
    • Product Hunt reviews
    • Twitter/X threads from verified experts

Research Strategy:

  • Build 5-10 diverse search queries covering:

    • Core topic keywords (e.g., "Claude Cowork enterprise deployment")
    • Use case scenarios (e.g., "AI agent workflow automation case study")
    • Problem/solution pairs (e.g., "reduce report generation time AI")
    • Industry trends (e.g., "AI agent adoption 2026 forecast")
    • Comparison queries (e.g., "Claude Cowork vs Copilot")
  • Use WebSearch and WebFetch tools to gather content from multiple sources

  • Diversify source types: Mix videos, articles, reports, and discussions

  • Prioritize recent content: Focus on material from the last 3-6 months unless topic requires historical context

Content Extraction Guidelines:

  • Summarize only from verifiable sources - Extract actual content, not speculation
  • Explicitly label source type and URL for each data point:
    • "根据Anthropic官方博客 (anthropic.com/news/...)"
    • "YouTube视频《...》中提到 (youtube.com/watch?v=...)"
    • "Gartner 2026年报告指出 (...)"
    • "TechCrunch报道称 (techcrunch.com/...)"
  • Cross-verify key statistics from multiple sources when possible
  • Capture publication dates to ensure data freshness
  • Note credibility indicators: author credentials, publication reputation, data sources cited

When web access is unavailable:

  • Ask for user-provided URLs or content excerpts
  • Request permission to enable web search tools
  • Use available references and documentation

3) Synthesize angles

  • Extract 3-7 cross-source insights: recurring pain points, surprising data, repeated mistakes, or actionable tactics found across multiple sources (videos, articles, reports, discussions)
  • Identify consensus patterns: What do multiple credible sources agree on?
  • Spot unique insights: What does only one highly credible source reveal?
  • Note conflicting viewpoints: Where do sources disagree? (can become article angles)
  • Translate insights into shareable WeChat angles:
    • Beginner-friendly guides
    • Myth-busting content
    • Actionable checklists
    • Trend analysis + predictions
    • Real case studies with verified data

4) Produce topic ideas and confirm with user

  • Load references/wechat_viral_frameworks.md to diversify angles and hooks.
  • Generate 3-5 potential article topics based on multi-source web research (YouTube, blogs, reports, discussions).

4.5) Write Research to Shared Memory (MANDATORY)

CRITICAL: Before presenting options to user, write full research context to shared memory.

This is required because: the cron job runs in an isolated session. After presenting options via Feishu, the session ends. When the user responds with "选X" in the main session, Chief Agent must be able to retrieve the research context.

Write to this file:

/root/.openclaw/workspace/memory/daily/research-YYYY-MM-DD.md

File must include:

  • All candidate topics with titles, target readers, core promises
  • Every YouTube/video URL (this is the most commonly missing field)
  • Full outlines for each topic
  • Source URLs for all references
  • Which topic is recommended as Option 1 and why

Format:

# Research - YYYY-MM-DD

## Candidate 1 (Recommended)
**Title:** ...
**Target:** ...
**Source URLs:** https://youtube.com/... (CRITICAL - include all)
**Outline:** ...

## Candidate 2
...

After writing memory, THEN present options to user (Step 5). <<<<<<< HEAD

🚨 CRITICAL: Topic Direction - Application-Focused (2026-03-17 更新)

⚠️ 禁止生成纯技术类选题!以下方向禁止出现:

  • ❌ 模型对比(如:DeepSeek vs GPT-4)
  • ❌ API 更新(如:OpenAI 新 API 发布)
  • ❌ 纯技术解读(如:MoE 架构解析)
  • ❌ 论文解读(如:最新 AI 论文分析)

✅ 必须生成应用导向选题!方向优先级:

  1. Skills - Agent Skills 使用技巧

    • 如何用 AI Agent 提升工作效率
    • 特定技能的使用秘笈和最佳实践
    • 自动化工作流的搭建经验
  2. 应用场景 - AI Agent 实际案例

    • AI 在具体工作中的落地案例
    • 行业场景的 AI 解决方案
    • 真实用户的使用体验分享
  3. 商业模式分析 - AI 创业与盈利

    • AI 产品/服务如何赚钱
    • 成功的 AI 商业案例分析
    • AI 创业机会和赛道分析
  4. 工具评测 - 真实体验对比

    • 多款 AI 工具的实际使用对比
    • 优缺点分析和使用建议
    • 适合不同场景的工具推荐
  5. 案例分享 - AI 落地实录

    • 企业/个人 AI 部署的真实案例
    • 部署成本、效果和经验教训
    • 可复制的 AI 实施方法论
  6. OpenClaw 专题 - Agent 编排实战

    • OpenClaw 技巧教程
      • OpenClaw 实际使用技巧
      • 多个 Chat App 如何配置
      • Agent 编排最佳实践
    • OpenClaw 应用场景
      • 用 OpenClaw 做自动化工作流
      • OpenClaw + 飞书/微信/Telegram 集成
      • 自定义 Agent 开发
    • OpenClaw 商业模式
      • 基于 OpenClaw 的 SaaS 服务
      • OpenClaw 企业部署案例

选题评估标准:

  • 是否对读者有实际帮助?
  • 读者能否立即应用到工作中?
  • 是否有具体的案例和数据支撑?

🚨 CRITICAL: Topic Freshness Requirement (2026-03-09)

  • MUST only select topics from past 24-48 hours
  • For AI/Tech topics: Must verify the news date, no outdated热点
  • Use search with time filter: after:2026-03-08 or similar
  • If researching DeepSeek, OpenAI, Anthropic etc - check the LATEST developments
  • Reject any topic where the news is older than 48 hours

8d2abf78b8490403831aae82052e8e107054b856

  • For each topic, provide:
    • Title (Chinese by default)
    • Target reader
    • Core promise/value
    • Outline with 3-5 sections (short section headers + 1-2 key points each)
    • Opening hook (1-2 sentences)

5) User confirmation - MANDATORY

CRITICAL: Before proceeding to write the full article, MUST confirm with user:

  • Present the proposed topic and outline clearly
  • Use AskUserQuestion tool to ask: "Which topic would you like me to develop into a full article?" or "Is this outline approved for full article writing?"
  • Wait for explicit user approval before proceeding
  • Allow user to request modifications to the outline

6) Write complete article with self-iteration

Once the topic and outline are confirmed:

Phase 1: Initial Draft

  • Write complete article following the approved outline
  • Target length: 2000-4000 Chinese characters
  • MANDATORY: Include real cases and practical implementation:
    • At least 2-3 real enterprise cases with specific company names, metrics, and outcomes
    • Step-by-step implementation guide for readers to follow
    • Actionable checklists or frameworks that can be immediately applied
    • Concrete examples with numbers, timeframes, and results
  • CRITICAL: NO FAKE NUMBERS - Data Integrity Requirements:
    • NEVER fabricate or invent specific metrics, percentages, or statistics
    • DO NOT make up company names, dates, or case study details
    • Use verifiable data from YouTube research (transcripts, descriptions, published reports)
    • When exact numbers unavailable, use professional qualifying language:
      • "预计可达..." (expected to reach...)
      • "通常情况下可提升..." (typically improves by...)
      • "根据行业经验,一般..." (based on industry experience, generally...)
      • "类似案例显示约..." (similar cases show approximately...)
      • "预期节省..." (projected to save...)
    • Cite data sources when using specific numbers: "根据Gartner报告...", "McKinsey研究显示..."
    • Use ranges instead of precise fake numbers: "提升30-50%" not "提升47.3%"
    • Focus on qualitative improvements when quantitative data unavailable: "显著提升效率" rather than inventing "93%效率提升"
    • Example of WRONG approach: "我见证了北京某公司效率提升93%"(如果这个93%是编造的)
    • Example of RIGHT approach: "类似部署预计可提升30-50%的效率,具体取决于现有流程复杂度"
  • IMPORTANT: NO EMOJIS in professional versions - Do not use any emoji characters in the full MD/HTML article content (emojis are only allowed in Xiaohongshu version)
  • IMPORTANT: First-person narrative - Use "我" (I/me) perspective throughout the article:
    • Write as if sharing personal insights and experiences
    • Use phrases like: "我发现...", "我观察到...", "让我分享...", "我建议..."
    • Create connection with reader through: "你可能会问...", "这让我想起..."
    • Professional yet warm tone - not overly casual, but approachable and authentic
    • 禁止废话表达: 避免"我认为"、"我觉得"、"我相信"等无信息量表达,直接陈述观点
  • IMPORTANT: 精炼写作原则:
    • 每句话必须包含新信息,不重复已说过的内容
    • 删除所有冗余修饰词和过渡句
    • 如果删掉某句话不影响理解,就必须删掉
    • 用数据和事实说话,不用主观判断词
  • Follow the professional tone and style from references/reference.html:
    • Use structured headings (h1, h2, h3, h4)
    • Include blockquotes for emphasis
    • Professional yet engaging narrative style
    • Clear section separation with proper spacing

Phase 2: Self-Iteration

  • Review the draft for:
    • Tone consistency: Professional, confident, not arrogant; avoid complex jargon
    • First-person voice: Ensure consistent use of "我" perspective, warm and authentic
    • Structure flow: Logical progression from problem → insight → solution
    • Hook strength: Opening must grab attention within 3 seconds
    • Key points: Each section delivers clear value
    • Call-to-action: Natural and compelling conclusion
    • Case quality: Verify all cases have specific metrics and are credible
    • Implementation practicality: Ensure action steps are clear and executable
    • 精炼检查 ⚠️ MANDATORY:
      • 删除所有"我认为"、"我觉得"、"我相信"等废话表达
      • 检查是否有重复表达相同意思的句子,合并或删除
      • 确保每个段落都有新信息,不是前文的重复
      • 删除所有不影响理解的冗余句子
    • Data integrity verification ⚠️ CRITICAL:
      • Check every number, percentage, and metric in the article
      • Verify each can be traced back to YouTube research or cited source
      • Replace any invented numbers with qualifying language ("预计...", "通常...", "约...")
      • Ensure company names and case details are verifiable or appropriately qualified
      • Remove overly precise fake statistics (e.g., "47.3%" → "约45-50%" or "显著提升")
      • 禁止杜撰案例: 所有案例必须来自研究阶段的真实来源
  • Make 2-3 rounds of self-improvement focusing on clarity and impact
  • Ensure transitions between sections are smooth

Phase 3: Quality Review & Scoring (MANDATORY)

After completing the MD draft, perform a structured quality review and scoring:

Scoring Criteria (100 points total):

CategoryPointsCriteria
精炼度20无重复表达、无废话("我认为/我觉得")、每句有新信息
数据真实性20所有案例和数据可追溯到研究来源、无杜撰
结构清晰度15逻辑流畅、层次分明、移动端友好
标题吸引力15开头3秒抓住注意力、价值主张明确
可执行性15行动建议具体可操作、读者能立即应用
语言质量15专业自信、第一人称一致、无语法错误

Scoring Process:

  1. Complete the MD article draft
  2. Perform self-review against each criterion
  3. Calculate total score (0-100)
  4. Output score report in this format:
📊 文章质量评分报告
━━━━━━━━━━━━━━━━━━━━━
精炼度:      XX/20  [具体问题说明]
数据真实性:  XX/20  [具体问题说明]
结构清晰度:  XX/15  [具体问题说明]
标题吸引力:  XX/15  [具体问题说明]
可执行性:    XX/15  [具体问题说明]
语言质量:    XX/15  [具体问题说明]
━━━━━━━━━━━━━━━━━━━━━
总分: XX/100

Decision Logic:

  • Score < 85: 自动进行修改,修复扣分项,重新评分,循环直到≥85
  • Score ≥ 85: 进入"飞书文档确认"流程

Auto-fix priorities for score < 85:

  1. 删除所有"我认为/我觉得/我相信"
  2. 合并或删除重复表达
  3. 核实并修正可疑数据
  4. 加强开头吸引力
  5. 补充具体可执行建议

⏸️ 飞书文档确认流程 (CRITICAL - 2026-03-20 新增)

在生成4种格式之前,必须先写入飞书云文档等待确认!

Step 1: 创建飞书云文档

  • 使用 feishu_doc 工具创建新文档
  • 文档标题格式:[待确认] {文章标题}
  • 内容为 Markdown 格式
  • 写入后用 read 验证内容

Step 2: 通知用户确认

  • 发送消息给用户,包含:
    • 文档链接
    • "请确认内容是否OK,回复确认后生成4种格式"
  • 等待用户明确确认(用户回复"确认"、"OK"、"可以"等)

Step 3: 用户确认后

  • 用户确认 → 进入 Phase 4 生成4种格式
  • 用户有修改意见 → 根据意见修改后重新写入飞书,循环确认流程

⚠️ 重要:禁止跳过此步骤直接生成4种格式!


Phase 4: Final Polish

  • Check all examples and data points are accurate
  • Verify Chinese grammar and punctuation
  • Ensure visual hierarchy is clear for mobile reading
  • Add emphasis with bold for key insights
  • Remove all emoji characters - Article must be emoji-free for professional publication
  • Add business conversion ending - Replace "参考来源" with engagement and consultation call-to-action (see below)
  • No horizontal rules in HTML - Do NOT use <hr/> tags between paragraphs in HTML output (markdown --- is acceptable)
  • ⚠️ VERIFY XIAOHONGSHU CHARACTER COUNT - Before finalizing Format 3, count characters (excluding hashtags) and ensure 800-1000. If under 800, add more detail; if over 1000, aggressively cut while keeping core message.

Phase 5: Generate Infographics for Key Data (HTML Only)

CRITICAL: If article contains core data visualizations, generate infographics using NotebookLM

When to generate infographics:

  • Article has 2+ key statistics or data comparisons
  • Market growth trends with specific numbers
  • Before/after comparisons with metrics
  • Multi-point data that benefits from visual representation

Infographic generation workflow:

  1. Identify data visualization opportunities in the article:

    • Market size/growth data (e.g., "$315B → $1.1T")
    • Percentage trends (e.g., "36.3% of companies")
    • Before/after comparisons (e.g., "Traditional: $25k/mo vs Solo: $500/mo")
    • Multi-metric comparisons (e.g., "3 key factors")
  2. Use notebooklm-api skill to generate infographics:

    # For each key data point, generate an infographic
    notebooklm generate infographic "Create a professional infographic showing [data description].
    Use blue color scheme (#1a5490, #2980b9, #3498db) to match article theme.
    Modern, clean design with clear data visualization. Include: [specific metrics]"
    
  3. Color scheme requirements (MUST match HTML theme):

    • Primary blue: #1a5490
    • Accent blue: #2980b9
    • Light blue: #3498db
    • Background: #ebf5fb (light blue)
    • Text: #2c3e50 (dark gray)
    • Use blue gradients and professional business style
  4. Wait for generation and download:

    # Wait for infographic completion
    notebooklm artifact wait <artifact_id> --timeout 900
    
    # Download to output directory
    notebooklm download infographic "YYYY-MM-DD-[slug]-[data-name].png"
    
  5. CRITICAL: Compress image for WeChat upload:

    # NotebookLM generates large PNG files (5-10MB) that timeout during WeChat upload
    # ALWAYS compress to JPEG before publishing
    python scripts/compress_image.py "YYYY-MM-DD-[slug]-[data-name].png"
    
    # This creates: YYYY-MM-DD-[slug]-[data-name]-compressed.jpg (typically < 1MB)
    # Compression: PNG 5.93MB → JPEG 0.68MB (88% reduction, quality=85)
    
  6. Insert into HTML output:

    • Use the COMPRESSED image filename (not the original PNG)
    • Replace CSS-based visualizations with actual infographic images
    • Use proper <figure> structure with caption and source
    • Example:
    <figure style="margin: 40px 0;">
      <img src="2026-01-18-article-slug-market-growth-compressed.jpg"
           alt="Market Growth Visualization"
           class="article-image">
      <figcaption class="image-caption">
        SaaS市场增长趋势 (2025-2032)
      </figcaption>
      <p class="image-source">
        数据来源:<a href="[source_url]" target="_blank">[Source Name]</a>
      </p>
    </figure>
    
  7. Typical infographics to generate (2-4 per article):

    • Market growth chart (if article discusses market trends)
    • Comparison infographic (traditional vs new approach)
    • Statistics visualization (key percentages/numbers)
    • Process/workflow diagram (if explaining steps)

Example prompts for common data types:

  • Market Growth:

    "Create a professional infographic showing SaaS market growth from $315B (2025) to $1.13T (2032).
    Use ascending bar chart or line graph. Blue color scheme (#1a5490, #2980b9, #3498db).
    Highlight 20%+ CAGR. Modern business style."
    
  • Percentage Trend:

    "Create a professional infographic showing 36.3% of new companies are solo-founded in 2026,
    compared to <10% in 2025. Show dramatic 3x+ growth. Blue color scheme matching corporate theme.
    Use pie chart or comparison bars."
    
  • Cost Comparison:

    "Create a professional side-by-side comparison infographic: Traditional (5-person team, $25k/month,
    $50k+ MRR to break even) vs Solo+AI ($500/month, $5k MRR profitable). Blue color scheme.
    Clear visual contrast."
    

Important notes:

  • Generate infographics AFTER writing full article content
  • Only generate for Format 2 (HTML) - not needed for MD/Xiaohongshu/Tweet
  • Infographics should enhance, not replace, written content
  • Always include proper attribution and source links
  • File naming: YYYY-MM-DD-[article-slug]-[data-description].png

7) Output format - Quad Format Required

⚠️ 仅在用户确认飞书文档后生成!

MANDATORY: Always generate ALL FOUR formats

Format 1: Markdown (.md) - 完整专业版

  • Save to /root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug].md
  • Clean markdown with proper heading hierarchy
  • DO NOT include metadata/frontmatter - Start directly with # Article Title
  • No YAML header, no version info, no date header

Format 2: HTML (.html) - 完整专业版

  • Save to /root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug].html
  • ⚠️ INFOGRAPHIC GENERATION REQUIRED: If article contains core data (market trends, statistics, comparisons), use Phase 4 workflow to generate infographics via notebooklm-api skill BEFORE finalizing HTML
  • Use the enhanced HTML structure and styling:
    • Color scheme: 墨绿主题 + 砖红点缀双色体系
    • 墨绿(主色):文字 #556b2f,竖线 #556b2f,背景 #f6fff6
    • 砖红(强调色):文字 #b74134,背景 #fff8e7,奶黄阴影
    • Font family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Microsoft YaHei"
    • Line height: 1.75 (reduced from 1.9 for tighter spacing)
    • Max width: 860px, centered
    • Headings: 墨绿配色 (h2: #556b2f 加粗,左侧墨绿竖线)
    • Blockquote: 墨绿主题 (#f6fff6 background, #556b2f border, box-shadow)
    • Enhanced text styles:
      • .highlight - Blue highlight background (linear-gradient)
      • .highlight-green - Blue text with blue highlight background
      • .highlight-green - DEPRECATED: Use .highlight-green instead (unified blue theme)
      • .highlight-orange - DEPRECATED: Use .highlight-green instead (unified blue theme)
      • .underline-dotted - Dotted underline for emphasis (2px dotted #3498db)
      • .data-box - Data highlight box with shadow
      • .key-number - Key numbers in blue, bold, larger font
    • Image styles:
      • .article-image - Responsive images with shadow and border-radius
      • .image-caption - Centered, italic caption text
      • .image-source - Source attribution with clickable links
    • Responsive design with proper viewport meta
  • Include complete HTML structure (DOCTYPE, head, body)
  • Apply consistent spacing and typography
  • IMPORTANT: Do NOT use <hr/> tags between paragraphs - Use spacing and headings for visual separation instead
  • DO NOT include metadata - No date, version info, or author metadata in HTML output

🚨 微信公众号排版规范 (CRITICAL - 必须遵守)

⚠️ 权威规范文件:references/wechat-format-rules.md(以此为准,不得与该文件冲突)

🚨 2026-04-09 重大更新(经验教训):

核心问题:微信安全过滤会强制覆盖 <h1>/<h2>/<h3>/<p>/<strong> 等HTML默认标签的样式(变蓝色),所有CSS class和 <style> 块都会被剥离。

唯一安全方案:所有样式必须用 <div><span> 标签的 style="" 内联属性,禁止使用任何被微信强制覆盖的标签。

排版规范核心要点(完整内容见 references/wechat-format-rules.md):

文章标题(H1 - 用于脚本提取)

<!-- 供 wechat_publish.py 提取标题,必须保留且 display:none -->
<h1 style="display:none;">从张雪峰.skill到金谷园饺子馆.skill,给我们带来的思考</h1>

二级标题(Section Title)

<!-- 禁止用 <h2>,微信会强制覆盖为蓝色!必须用 div 内联 -->
<div style="font-size:17px;color:#556b2f;font-weight:bold;margin:28px 15px 14px;padding-left:12px;border-left:4px solid #556b2f;">一、章节标题</div>
  • 字体:17px,墨绿色 #556b2f,加粗
  • 左侧墨绿竖线:4px solid #556b2f
  • 左侧留白:padding-left:12px
  • 上下间距:margin:28px 15px 14px

正文段落(Body Paragraph)

<!-- 禁止用 <p>,微信会覆盖样式!必须用 div 内联 -->
<div style="margin:0 0 12px;padding:0 15px;line-height:1.8;">正文内容</div>
  • 段间距:margin:0 0 12px(下一段前留12px)
  • 左右留白:padding:0 15px
  • 行高:line-height:1.8

重点字词(Highlighted Key Terms)

<!-- 砖红字体 + 奶黄背景,不是红色! -->
<span style="background:#fff8e7;padding:2px 6px;border-radius:3px;color:#b74134;font-weight:600;">重点字词</span>

重点句(Important Sentences - 点下划线)

<!-- 墨绿色点状下划线,不是红色! -->
<span style="border-bottom:2px dotted #556b2f;padding-bottom:2px;color:#556b2f;">重点句子</span>

数字强调(Key Numbers)

<span style="color:#556b2f;font-weight:bold;">12天</span>

Hook区域(开篇摘要框)

<div style="background:#f6fff6;border-left:5px solid #556b2f;box-shadow:3px 3px 10px rgba(85,107,47,0.12);padding:18px 20px;border-radius:0 10px 10px 0;margin:0 0 24px 0;font-size:15px;line-height:1.9;">
    <span style="color:#556b2f;font-weight:bold;">2026年4月</span>,短短两天内...
</div>

CTA结尾(必须添加)

<div style="background:#556b2f;padding:16px;border-radius:10px;text-align:center;color:#fff;margin:24px 0 0;">
    <div style="margin:0;color:#fff;font-size:15px;line-height:1.8;">如果你觉得文章对你有所帮助,请关注就行</div>
</div>

完整HTML结构规则

元素❌ 禁止✅ 正确
文章标题<h1>(会变蓝)<h1 style="display:none;"> + 视觉标题用div
二级标题<h2>/<p>(会变蓝)<div style="border-left:4px solid #556b2f;color:#556b2f;">
正文段落<p>(会变蓝)<div style="margin:0 0 12px;padding:0 15px;">
加粗强调<strong>(会变蓝)<span style="color:#556b2f;font-weight:bold;">
重点字词class样式(被剥离)<span style="background:#fff8e7;padding:2px 6px;border-radius:3px;color:#b74134;">
重点句下划线class样式(被剥离)<span style="border-bottom:2px dotted #556b2f;padding-bottom:2px;color:#556b2f;">
CTA区域<p>(会变蓝)<div style="background:#556b2f;...;">
列表<ul>/<ol>/<li>(圆点不可控)<div style="margin:0 0 6px 20px;">• 内容</div>

颜色系统(Jeff品牌色)

用途颜色值示例
二级标题#556b2f(墨绿)color:#556b2f;font-weight:bold;
左侧竖线#556b2f(墨绿)border-left:4px solid #556b2f;
重点句点下划线#556b2f(墨绿)border-bottom:2px dotted #556b2f;
重点字词背景#fff8e7(奶黄)background:#fff8e7;
重点字词字体#b74134(砖红)color:#b74134;
CTA背景#556b2f(墨绿)background:#556b2f;

发布命令(必须使用 -X utf8)

cd /root/.openclaw/workspace/skills/content-factory && python3 -X utf8 scripts/wechat_publish.py --html "/root/.openclaw/workspace/output/YYYY-MM-DD-article-slug.html" --cover "/root/.openclaw/workspace/output/YYYY-MM-DD-article-slug-cover.png"
  • 必须加 -X utf8:否则中文会变成 \uXXXX 转义序列

  • 必须加 --cover:否则封面图使用默认图片

  • 禁止元信息:禁止日期、版本号、版权声明

  • Content structure optimization:

    • REDUCE bullet points - convert to flowing narrative paragraphs
    • INCREASE first-person narrative ("我发现...", "我观察到...", "在我看来...")
    • Use bullet points ONLY for tool lists or step-by-step instructions
    • Transform data lists into prose with inline highlights
  • WeChat list formatting (CRITICAL for publishing):

    • Remove ALL blank lines between <li> elements to prevent WeChat from adding extra bullets
    • Format lists compactly: <ul><li>Item 1</li><li>Item 2</li><li>Item 3</li></ul> (no newlines between items)
    • Apply to both <ul> and <ol> lists
    • WeChat's parser treats blank lines as new list items, causing visual clutter
    • This is handled automatically by wechat_publish.py script during upload
  • Visual data presentation:

    • PREFER NotebookLM-generated infographics for key data (see Phase 4)
    • Use CSS-based visualizations only as fallback if infographic generation fails
    • Add inline data visualizations using CSS gradients and flexbox
    • Create visual comparison cards for before/after scenarios
    • Use colored boxes with statistics for key data points
    • Include source attribution links for all data visualizations
    • Example: Create gradient boxes showing market growth trends
    • Example: Use side-by-side comparison cards for cost structures
    • Example: Design stat cards with large numbers and context
  • Information source images:

    • Search for charts/graphs from original sources (Fortune Business Insights, Scalable.news, etc.)
    • If images unavailable, create CSS-based data visualizations
    • Always include <figure> with <figcaption> and source links
    • Use <p class="image-source"> with clickable attribution links

Format 3: Markdown (.md) - 小红书版 (Xiaohongshu Style)

  • Save to /root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug]-小红书.md
  • 🚨 STRICT CHARACTER COUNT (CRITICAL):
    • Target: 800-1000 characters (Chinese chars + English words)
    • MUST use Python script to verify before sending to user
    • Verification command:
      python3 -c "import re; c=re.sub(r'#+\s*|---+|^-\s+|#+\s*$|\n\n+','',open('file.md').read()); print(len(re.findall(r'[\u4e00-\u9fa5]',c))+len(re.findall(r'[a-zA-Z]+',c)))"
      
    • If count < 800: Add more content/expansion
    • If count > 1000: Aggressively cut while keeping core message
    • DO NOT rely on wc -c - it counts bytes not displayable characters
  • Casual, engaging style WITH emojis (opposite of professional versions)
  • STRICT CHARACTER LIMIT: 800-1000 Chinese characters (excluding hashtags)
    • ⚠️ CRITICAL: Count characters BEFORE finalizing - must be ≥800 AND ≤1000
    • Use Python to verify: 800 <= len(content_without_hashtags) <= 1000
    • If under 800, add more detail to case study or tips
    • If over 1000, aggressively cut content while keeping core message
    • Priority: Keep case study + key data + actionable tips
  • MUST include at least 1 complete case study with specific metrics
  • Content structure:
    • Eye-catching opening with emojis (2-3 sentences)
    • 1-2 key insights or problems
    • 1 complete real case with specific numbers/results
    • 3-5 actionable tips or takeaways (bullet points with emojis)
    • Engaging conclusion with call-to-action
    • Hashtags at the end (5-10 relevant hashtags)
  • Tone: Conversational, exciting, relatable - like sharing a discovery with friends
  • Emoji usage: Use emojis strategically for emphasis and visual appeal (✨💡🚀📊💪 etc.)
  • Hashtag format examples:
    #ClaudeCowork #AI工具 #企业效率 #人工智能 #职场提升 #AI代理 #效率翻倍 #科技趋势
    
  • DO NOT include business conversion section - Keep it short and focused for Xiaohongshu platform
  • Character count verification (MANDATORY):
    # After writing, verify character count
    content = """[your xiaohongshu content]"""
    lines = content.split('\n')
    hashtag_line = [l for l in lines if l.startswith('#')]
    if hashtag_line:
        content_without_hashtags = content.replace(hashtag_line[0], '').strip()
    else:
        content_without_hashtags = content.strip()
    
    char_count = len(content_without_hashtags)
    assert 800 <= char_count <= 1000, f"Character count {char_count} must be between 800-1000!"
    

Format 4: Text (.txt) - X/Twitter 英文长推文版 (X Pro)

  • Save to /root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug]-tweet.txt
  • English language only - Professional, data-driven long-form tweet
  • Maximum length: 1000 characters (optimized for readability and engagement)
  • MUST include 2-3 complete cases with specific metrics from the article
  • Content structure:
    • Strong hook (2-3 sentences defining the core shift/insight)
    • Case 1: Problem → Solution → Results (3-5 bullet points with specific numbers)
    • Case 2: Problem → Solution → Results (3-5 bullet points with specific numbers)
    • Optional Case 3 or security/challenge lesson (if space permits)
    • Paradigm shift summary (3-5 transformation points using →)
    • Industry prediction or trend (Gartner data, market forecast)
    • Brief actionable framework or next steps (optional, 2-3 points)
    • Compelling call-to-action (question or statement)
    • 5-8 relevant hashtags at the end
  • Tone: Professional yet engaging, authoritative but accessible, Twitter-style brevity
  • Visual structure: Use separators (━━━), bullet points (•), arrows (→) for clarity
  • Emoji usage: Minimal - only if it enhances readability (max 2-3 total)
  • Data density: Include 6-9 specific metrics (percentages, time reductions, ROI)
  • Hashtag format: 5-8 tags covering technology, industry, and application
    #AI #ClaudeCowork #EnterpriseAI #Automation #AIAgents #DigitalTransformation #Productivity #FutureOfWork
    
  • Focus: Extract 2-3 most compelling cases with concrete results, maintain Twitter's scannable format while providing depth

File Naming Convention:

  • Use ISO date format: YYYY-MM-DD (e.g., 2026-01-14)
  • Followed by article title slug in lowercase with hyphens
  • Xiaohongshu version adds -小红书 suffix before extension
  • Tweet version adds -tweet suffix before extension
  • Examples:
    • 2026-01-14-claude-cowork-enterprise-guide.md (Professional MD)
    • 2026-01-14-claude-cowork-enterprise-guide.html (Professional HTML)
    • 2026-01-14-claude-cowork-enterprise-guide-小红书.md (Xiaohongshu MD)
    • 2026-01-14-claude-cowork-enterprise-guide-tweet.txt (Twitter/X English)

Output Directory Structure:


├── 2026-01-14-[article-title-slug].md
├── 2026-01-14-[article-title-slug].html
├── 2026-01-14-[article-title-slug]-小红书.md
└── 2026-01-14-[article-title-slug]-tweet.txt

Create the output directory if it doesn't exist.

8) WeChat Cover Photo Generation (GLM-Image API)

IMPORTANT: Before publishing, generate a professional WeChat cover photo using GLM-Image API.

WeChat Cover Specifications:

  • Size: 900x386 pixels (WeChat Official Account standard)
  • Aspect Ratio: 21:9 (ultra-wide landscape)
  • Style: Professional magazine style with minimalist flat vector graphics
  • Format: PNG or JPEG (compress if > 1MB)

Cover Photo Generation Workflow:

  1. Extract article title from the finalized content

  2. Generate cover photo using GLM-Image API:

    # Generate cover photo using GLM-Image API
    python scripts/generate_cover_photo.py \
      --title "[article title]" \
      --theme "[article theme]" \
      --output "/root/.openclaw/workspace/output/YYYY-MM-DD-[article-slug]-cover.png"
    
  3. Image will be automatically generated at 21:9 ratio (900x386 pixels)

  4. Compress if needed:

    # Check file size
    ls -lh "YYYY-MM-DD-[article-slug]-cover.png"
    
    # If > 1MB, compress to JPEG
    python scripts/compress_image.py "YYYY-MM-DD-[article-slug]-cover.png"
    # Creates: YYYY-MM-DD-[article-slug]-cover-compressed.jpg
    
  5. Include cover photo reference in publishing workflow

Prompt Engineering Guidelines for Cover Photos:

Core Principles:

  • Title-focused: Graphics should complement, not compete with the title
  • Minimalist: Less is more - avoid cluttered designs
  • Professional: Magazine-quality aesthetics
  • White background: Pure white (#ffffff) - MANDATORY for all covers
  • Dark blue primary: Navy blue (藏青色 #1a3a52 or #1a5490) for text and main graphics
  • Accent colors: Light blue (#3498db), gray (#7f8c8d) for subtle elements only
  • 21:9 Ultra-wide: Design for 21:9 aspect ratio (900x386 pixels)

Example Prompts by Article Type:

  1. Tech/AI Articles:

    Create a professional WeChat cover image (900x386 pixels, 21:9 ultra-wide landscape).
    
    Title: [AI/Tech article title]
    
    Style: Professional magazine cover with minimalist flat vector graphics.
    - Pure white background (#ffffff)
    - Title centered in dark blue (藏青色 #1a3a52)
    - Subtle geometric shapes: circuits, nodes, or abstract tech patterns in dark blue
    - Optional accent: light blue (#3498db) for highlights
    - Clean, modern typography
    - High contrast for mobile readability
    - 21:9 ultra-wide composition
    
  2. Business/Enterprise Articles:

    Create a professional WeChat cover image (900x386 pixels, 21:9 ultra-wide landscape).
    
    Title: [Business article title]
    
    Style: Professional magazine cover with minimalist design.
    - Pure white background (#ffffff)
    - Title centered in navy blue (藏青色 #1a5490)
    - Subtle business graphics: charts, graphs, or geometric patterns in dark blue
    - Optional accent: gray (#7f8c8d) for subtle elements
    - Professional, trustworthy aesthetic
    - Balanced composition
    
  3. Tutorial/Guide Articles:

    Create a professional WeChat cover image (900x386 pixels, 21:9 ultra-wide landscape).
    
    Title: [Tutorial/Guide title]
    
    Style: Professional magazine cover with clear hierarchy.
    - Pure white background (#ffffff)
    - Title centered in dark blue (藏青色 #1a3a52)
    - Minimalist icons or step indicators in dark blue
    - Optional accent: light blue (#3498db) for visual interest
    - Clean, educational aesthetic
    - Easy to scan on mobile
    
  4. General Template (Recommended):

    Create a professional WeChat Official Account cover image (900x386 pixels, 21:9 ultra-wide landscape).
    
    Title: [article title - use actual title text]
    
    Design requirements:
    - Professional magazine style
    - Minimalist flat vector graphics based ONLY on the title keywords
    - Pure white background (#ffffff) - MANDATORY
    - Title text centered, large, and prominent in dark blue (藏青色 #1a3a52 or #1a5490)
    - Graphics and shapes in dark blue/navy (藏青色)
    - Optional accent colors: light blue (#3498db), gray (#7f8c8d) for subtle elements only
    - Clean geometric shapes that relate to title content
    - High contrast for mobile readability
    - Professional typography (sans-serif, bold for title)
    - **21:9 ultra-wide composition** - use horizontal space effectively
    - Suitable for business/professional audience
    
    Layout:
    - Title occupies center 60% of image
    - Background graphics subtle and non-distracting
    - Adequate white space around title
    - Professional, magazine-quality finish
    

Color Palette (Consistent with Article Theme):

  • Background: Pure white (#ffffff) - MANDATORY for all covers
  • Primary: Dark blue/Navy (藏青色) #1a3a52 or #1a5490 - for title text and main graphics
  • Accent 1: Light blue #3498db or #2980b9 - for highlights and visual interest
  • Accent 2: Gray #7f8c8d - for subtle elements
  • Text: Dark blue for title, dark gray #2c3e50 for subtitles

Quality Checklist:

  • Pure white background (#ffffff)
  • Title and graphics in dark blue (藏青色)
  • Title is clearly readable on mobile devices
  • Background graphics don't compete with title
  • Color scheme matches article theme (dark blue primary)
  • Image dimensions are 900x386 pixels (21:9)
  • File size < 1MB (compress if needed)
  • Professional, magazine-quality aesthetic
  • Suitable for business/professional audience

Integration with Publishing Workflow:

  • Generate cover photo AFTER finalizing article content
  • Compress to < 1MB if needed (use scripts/compress_image.py)
  • Include cover photo path in WeChat publishing API call
  • Verify cover photo meets WeChat specifications (size, format, content)

Error Handling:

  • If GLM generation fails, retry with simplified prompt
  • If generation takes too long, check API quota
  • If file size > 1MB, compress to JPEG with quality=85
  • Notify user if cover generation is skipped

9) WeChat Official Account Auto-Publishing

IMPORTANT: After generating Format 2 (HTML) and cover photo, automatically publish to WeChat Official Account for preview.

WeChat Official Account Credentials:

  • Credentials are stored in .env file (see Configuration section below)
  • AppID: Set WECHAT_APP_ID in .env
  • AppSecret: Set WECHAT_APP_SECRET in .env
  • Get credentials from: https://mp.weixin.qq.com/ → 设置与开发 → 基本配置

Publishing Workflow:

  1. Generate all 4 formats (MD, HTML, Xiaohongshu, Tweet)
  2. Generate WeChat cover photo using GLM-Image API (see section 8)
  3. Compress cover photo and infographics if > 1MB
  4. Extract content from HTML file for WeChat API
  5. Call publishing script with UTF-8 mode (CRITICAL on Windows)
  6. Verify encoding and images in WeChat draft preview
  7. Return preview URL to user

Publishing Script Usage (CRITICAL - Windows UTF-8 Mode):

# ALWAYS use -X utf8 flag on Windows to prevent encoding errors
python -X utf8 scripts/wechat_publish.py --html "/root/.openclaw/workspace/output/YYYY-MM-DD-[article-title-slug].html"

# WITHOUT -X utf8, Chinese characters will show as \uXXXX escape sequences
# This is a Windows-specific issue due to GBK default encoding

Expected Output:

✓ Access token obtained
✓ Content image uploaded: [filename] -> http://mmbiz.qpic.cn/...
✓ Draft article created
✓ Media ID: WOr7ZIAYNpv...

Verification Checklist:

  • Check logs for "Content image uploaded" (confirms image upload success)
  • Verify Chinese characters display correctly (not \uXXXX sequences)
  • Open WeChat draft preview to confirm images display
  • Document Media ID for reference

API Endpoints Used:

  • Token: https://api.weixin.qq.com/cgi-bin/token
  • Draft: https://api.weixin.qq.com/cgi-bin/draft/add
  • Preview: https://api.weixin.qq.com/cgi-bin/freepublish/submit

Error Handling:

  • If API call fails, save HTML locally and notify user
  • Log error details to publish_errors.log
  • Provide manual publishing instructions

Security Notes:

  • AppSecret is sensitive - consider moving to environment variable in production
  • Access tokens expire after 2 hours - script handles refresh automatically
  • Preview links are valid for 24 hours

Article Ending - Business Conversion (MANDATORY for Format 1 & 2):

Instead of listing "参考来源" or "References", ALWAYS end Format 1 (MD) and Format 2 (HTML) professional articles with a business conversion section that guides readers to follow and engage for AI consulting services.

NOTE: Do NOT include this section in Format 3 (Xiaohongshu) - that format should end with hashtags only.

Markdown Format (for Format 1):

---

如果觉得这篇文章对您帮助,欢迎关注公众号。

HTML Format (for Format 2, add before </body>):

<p>如果觉得这篇文章对您帮助,欢迎关注公众号。</p>

Important Notes:

  • Do NOT include "参考来源" or "References" sections in any articles
  • The business conversion section is MANDATORY for every article
  • Customize the contact information placeholder based on user needs
  • Keep the tone consistent with first-person narrative: professional, helpful, and approachable
  • This section serves as the commercial funnel to convert readers into consulting clients
  • Do NOT use <hr/> before the business conversion section - The h2 heading provides sufficient visual separation

Quality bar and safety

  • Avoid unverifiable claims about video content; summarize only what is available in transcripts or descriptions.
  • Keep summaries concise and clearly attributed to sources.
  • Avoid direct copying of long transcript passages.
  • Article Writing Standards:
    • Maintain professional, confident tone without arrogance
    • Use concrete examples and data points
    • Ensure logical flow and clear value proposition
    • Mobile-first readability (short paragraphs, clear hierarchy)
    • Include proper attributions for any referenced content
  • Writing Quality Rules (MANDATORY):
    • 精炼表达: 不要重复相同意思的话语,每句话必须有新信息
    • 禁止废话: 不要使用"我认为"、"我觉得"、"我相信"等无意义表达,直接陈述观点
    • 禁止杜撰: 所有案例和数据必须来自研究阶段收集的真实来源,不得编造
    • 直接有力: 用"是"而不是"我认为是",用"数据显示"而不是"我觉得数据可能显示"
    • 删除冗余: 如果删掉某句话不影响理解,就删掉它

Common Mistakes and Lessons Learned

❌ MISTAKE 1: Skipping Tool Dependency Check

What happened:

  • Assumed yt-dlp was unavailable without checking
  • Jumped directly to WebFetch/WebSearch fallback methods
  • Missed opportunity to extract rich YouTube content

Why it's wrong:

  • Tool checking is MANDATORY, not optional
  • "Optionally run scripts" means "use if available", NOT "skip if inconvenient"
  • Local scripts are PRIMARY method, WebFetch is FALLBACK

Correct approach:

# ALWAYS check first
yt-dlp --version
ls scripts/yt_dlp_search.py
ls scripts/yt_dlp_captions.py

# Then decide execution path based on results

❌ MISTAKE 2: Misunderstanding "Optional" in Documentation

What happened:

  • Saw "Optionally run scripts" and interpreted as "can skip"
  • Didn't realize local scripts are the PRIMARY YouTube extraction method

Why it's wrong:

  • "Optional" means "if conditions are met, should use"
  • It's about tool availability, not execution priority
  • WebFetch is the fallback, not the primary method

Correct interpretation:

  • IF yt-dlp installed → MUST use scripts (primary method)
  • IF yt-dlp missing → inform user, request installation
  • ONLY IF user declines → use fallback methods

❌ MISTAKE 3: Not Reading Reference Documentation

What happened:

  • Didn't load references/youtube_research_checklist.md
  • Missed detailed instructions on YouTube content extraction

Why it's wrong:

  • Reference docs contain critical workflow details
  • They provide step-by-step guidance for complex tasks
  • Skipping them leads to incomplete execution

Correct approach:

# ALWAYS load reference docs when mentioned
Read("references/youtube_research_checklist.md")

❌ MISTAKE 4: Premature Fallback to Alternative Sources

What happened:

  • WebFetch failed → immediately switched to WebSearch for articles
  • Didn't exhaust all YouTube extraction methods first

Why it's wrong:

  • YouTube content provides unique value (case studies, personal stories, demos)
  • Articles/reports can't fully replace video content richness
  • Should try ALL methods before giving up on primary source

Correct decision tree:

YouTube needed?
    ↓
Check yt-dlp installed?
    ↓ YES                           ↓ NO
Try scripts                    → Inform user + install
    ↓ SUCCESS    ↓ FAIL              ↓
Continue      → Try WebFetch    → Retry scripts
                    ↓ FAIL              ↓ FAIL
              Request user URLs   → Use fallback sources
                    ↓ FAIL         (document limitation)
              Use fallback sources
              (document limitation)

❌ MISTAKE 5: WeChat Publishing Encoding Errors (Windows)

What happened:

  • Published article to WeChat showed Unicode escape sequences instead of Chinese characters
  • Example: \u6211\u752872\u5c0f\u65f6 instead of "我用72小时"
  • Draft created successfully but content was unreadable

Why it's wrong:

  • Windows default encoding is GBK, not UTF-8
  • BeautifulSoup HTML parsing inherits system encoding
  • JSON serialization with ensure_ascii=False alone is insufficient
  • The issue affects the entire Python process, not just file I/O

Root cause:

  • Windows console uses GBK encoding by default
  • Python's default encoding follows system locale
  • HTML parsing and string operations use default encoding
  • WeChat API receives incorrectly encoded content

Correct approach:

# ALWAYS use Python UTF-8 mode on Windows for WeChat publishing
python -X utf8 scripts/wechat_publish.py --html "/root/.openclaw/workspace/output/article.html"

# NOT just PYTHONIOENCODING (insufficient):
# PYTHONIOENCODING=utf-8 python scripts/wechat_publish.py  # ❌ Only fixes I/O

# The -X utf8 flag forces UTF-8 for:
# - File I/O operations
# - String encoding/decoding
# - HTML parsing (BeautifulSoup)
# - JSON serialization
# - HTTP request bodies

Verification:

  • Check WeChat draft preview immediately after publishing
  • Look for Chinese characters rendering correctly
  • If you see \uXXXX sequences, encoding failed
  • Re-run with -X utf8 flag

Prevention checklist:

  • Always use python -X utf8 for WeChat publishing on Windows
  • Test with a short article first to verify encoding
  • Check draft preview before announcing success
  • Document the Media ID for reference

❌ MISTAKE 6: NotebookLM Infographic Too Large for WeChat Upload

What happened:

  • Generated 6.0MB PNG infographic using NotebookLM API
  • WeChat image upload timed out: TimeoutError('The write operation timed out')
  • Article published successfully but without the infographic
  • User reported: "图片没有加载进去" (images not loaded)

Why it's wrong:

  • NotebookLM generates high-resolution PNG files (often 5-10MB)
  • WeChat API has 10MB limit but large files timeout frequently
  • Network upload timeout occurs before reaching size limit
  • PNG format is uncompressed and inefficient for web delivery

Root cause:

  • NotebookLM prioritizes quality over file size
  • PNG format preserves all pixel data without compression
  • WeChat's upload endpoint has strict timeout limits (60 seconds)
  • Large files fail silently - draft created but image missing

Correct approach:

# Step 1: Generate infographic with NotebookLM (as usual)
notebooklm generate infographic "prompt..." --json
notebooklm artifact wait <artifact_id> --timeout 600
notebooklm download infographic ./output.png

# Step 2: ALWAYS compress before WeChat upload
python -c "
from PIL import Image
import os

# Convert PNG to JPEG with quality optimization
img = Image.open('output.png').convert('RGB')
img.save('output-compressed.jpg', 'JPEG', quality=85, optimize=True)

# Verify size reduction
original_mb = os.path.getsize('output.png') / 1024 / 1024
compressed_mb = os.path.getsize('output-compressed.jpg') / 1024 / 1024
print(f'Original: {original_mb:.2f}MB → Compressed: {compressed_mb:.2f}MB')
"

# Step 3: Update HTML to reference compressed image
# Replace: <img src="output.png" ...>
# With:    <img src="output-compressed.jpg" ...>

# Step 4: Publish with compressed image
python -X utf8 scripts/wechat_publish.py --html "/root/.openclaw/workspace/output/article.html"

Compression results:

  • Original PNG: 5.93MB → Compressed JPEG: 0.68MB (88% reduction)
  • Upload time: Timeout → 21 seconds (successful)
  • Visual quality: Minimal degradation at 85% JPEG quality

Prevention checklist:

  • Always compress NotebookLM infographics before WeChat upload
  • Target file size: < 1MB for reliable upload
  • Use JPEG format with quality=85 for good balance
  • Verify image uploaded successfully in logs: "Content image uploaded: ... -> http://mmbiz.qpic.cn/..."
  • Check WeChat draft preview to confirm image displays
  • If upload fails, reduce JPEG quality to 75 or resize dimensions

Image compression script (reusable):

# Save as scripts/compress_image.py
from PIL import Image
import sys
import os

def compress_for_wechat(input_path, output_path=None, quality=85):
    """Compress image for WeChat upload (target < 1MB)"""
    if output_path is None:
        base, ext = os.path.splitext(input_path)
        output_path = f"{base}-compressed.jpg"

    img = Image.open(input_path)
    if img.mode in ('RGBA', 'LA', 'P'):
        img = img.convert('RGB')

    img.save(output_path, 'JPEG', quality=quality, optimize=True)

    original_mb = os.path.getsize(input_path) / 1024 / 1024
    compressed_mb = os.path.getsize(output_path) / 1024 / 1024

    print(f"Original: {original_mb:.2f}MB")
    print(f"Compressed: {compressed_mb:.2f}MB ({100*(1-compressed_mb/original_mb):.1f}% reduction)")
    print(f"Output: {output_path}")

    return output_path

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python compress_image.py <input_image> [output_image] [quality]")
        sys.exit(1)

    input_path = sys.argv[1]
    output_path = sys.argv[2] if len(sys.argv) > 2 else None
    quality = int(sys.argv[3]) if len(sys.argv) > 3 else 85

    compress_for_wechat(input_path, output_path, quality)

Usage:

# Compress with default settings (quality=85)
python scripts/compress_image.py infographic.png

# Compress with custom quality
python scripts/compress_image.py infographic.png output.jpg 75

# Compress and specify output path
python scripts/compress_image.py infographic.png compressed.jpg

✅ BEST PRACTICES

  1. Always Check Tools First

    • Run dependency checks before starting research
    • Inform user of tool status
    • Don't assume unavailability
  2. Follow Priority Order Strictly

    • Primary method → Fallback method → Last resort
    • Don't skip steps in the decision tree
    • Document why each method failed
  3. Be Transparent with User

    • Tell user which tools are available
    • Explain which methods you're using
    • Inform if content quality is degraded due to tool limitations
  4. Read All Reference Documentation

    • Load checklist files when mentioned
    • Follow detailed workflows in reference docs
    • Don't improvise when guidance exists
  5. Systematic Troubleshooting

    • If A fails, check why before trying B
    • Don't jump from A to D without trying B and C
    • Record failure reasons for future improvement
  6. WeChat Publishing on Windows (CRITICAL)

    • ALWAYS use python -X utf8 flag for WeChat publishing
    • Verify encoding in draft preview immediately
    • Check for \uXXXX sequences indicating encoding failure
    • Re-run with UTF-8 mode if Chinese characters don't display
  7. NotebookLM Infographic Workflow

    • Generate infographic with NotebookLM as usual
    • ALWAYS compress PNG to JPEG before WeChat upload
    • Target file size: < 1MB for reliable upload
    • Use scripts/compress_image.py for consistent compression
    • Update HTML to reference compressed image filename
    • Verify image upload success in logs before announcing completion
  8. Image Compression for WeChat

    • Convert PNG to JPEG with quality=85
    • Check compressed file size (should be < 1MB)
    • If still too large, reduce quality to 75 or resize dimensions
    • Verify image displays correctly in WeChat draft preview
    • Keep original PNG for archival purposes

Configuration

Environment Setup

All API keys and credentials are stored in .env file for security and easy management.

Setup Steps:

  1. Copy the example file:

    cd ~/.claude/skills\content-factory
    copy .env.example .env
    
  2. Edit .env and add your credentials:

    # WeChat Official Account (Required for auto-publishing)
    WECHAT_APP_ID=your-wechat-app-id
    WECHAT_APP_SECRET=your-wechat-app-secret
    
  3. Get your credentials:

    • WeChat Credentials: https://mp.weixin.qq.com/ → 设置与开发 → 基本配置
    • NotebookLM: Authenticate with notebooklm login (for cover photo generation)
  4. Verify configuration:

    python scripts/check_env.py
    

Important:

  • Never commit .env file to Git (it's in .gitignore)
  • Keep .env.example as a template (safe to commit)
  • See API_KEY_SETUP.md for detailed setup instructions
  • See CONFIGURATION.md for configuration management details

Resources

Research Tools:

  • scripts/yt_dlp_captions.py - Download YouTube captions/transcripts
  • scripts/yt_dlp_search.py - Search and collect YouTube metadata
  • scripts/compress_image.py - Compress images for WeChat upload
  • scripts/wechat_publish.py - Auto-publish to WeChat Official Account
  • notebooklm-api skill - Generate infographics and cover photos
  • WebSearch tool - Search across all web sources
  • WebFetch tool - Fetch and extract content from URLs

Reference Guides:

  • references/youtube_research_checklist.md - YouTube-specific research workflow
  • references/web_research_guide.md - Multi-source web research best practices
  • references/wechat_viral_frameworks.md - Article frameworks and hooks
  • references/wechat_publishing_guide.md - WeChat publishing documentation
  • references/reference.html - HTML template and styling reference for output

Templates:

  • assets/wechat_outline_template.md - Outline template (optional)

Output Directory:

  • /root/.openclaw/workspace/output/ - Target directory for generated MD, HTML, Xiaohongshu, Tweet files, and cover photos

如果觉得这篇文章对您帮助,欢迎关注公众号。

Comments

Loading comments...