Install
openclaw skills install @charriotzed/video-workflow-builder视频创作工作流生成器。当用户想为自己的账号定制一套完整的视频创作流程(选题、文稿、标题、封面),或说"帮我做个账号工作流""定制视频流程""我想在抖音/B站/小红书/视频号/百家号做XX内容"时使用。它只问三件事(平台、垂类、人设),其余靠联网研究补齐,先给出账号定位诊断供确认,再生成一套可安装使用的专属工作流 skill。
openclaw skills install @charriotzed/video-workflow-builder这是一个"生成 skill 的 skill"。它不直接帮你写选题、写文稿、做封面——它做的是把这一整套能力,按照你的平台、垂类和人设,量身定制成一个独立、可安装、开箱即用的专属工作流 skill,覆盖从选题到文稿、标题、封面的完整链路。你只需要回答三个最基础的问题,剩下的受众画像、爆款打法、变现路径、平台算法动向,它会自己联网研究补齐,先给你一份账号定位诊断和策略提案确认方向,确认后再落地生成产物。目标是让每个账号拿到的都不是一份通用模板,而是一套真正吃透了自己平台算法和垂类打法的作战手册。
本技能同时支持 Claude Code 和 Codex(以及其它遵循 SKILL.md 规范的 agent)。下文提到具体工具名时,请按你当前所在的运行环境映射到等价能力,不要因为"没有叫这个名字的工具"就跳过步骤:
scripts/web_search.py(qianfan web search 网关),不要直接用 Claude Code 自带的 WebSearch 或 Codex 自带的联网搜索工具。这样搜索源可控、结果结构统一、跨 agent 环境行为一致。调用方式:python3 "$SKILL_DIR/scripts/web_search.py" "搜索词" [--top N] [--json](密钥从技能目录 .env 的 QIANFAN_WEBSEARCH_API_KEY 读取,已随技能配好)。若网关报错/无密钥,如实告知用户无法获取实时数据,退回内部知识作研究依据,不要用记忆里的旧数据冒充实时情报,也不要偷偷改用自带 WebSearch。web_search.py 每条结果自带的 content 字段(网关已摘出约前 1000 字,判断相关性/快速扫风向足够)。需要读完整全文(网关 content 只有全文约两成、且从中间截断)时,用 python3 "$SKILL_DIR/scripts/web_search.py" <url> --full [--max-chars N] 本机直抓提纯——不要用 Claude Code/Codex 自带的 WebFetch:它跑在云端,对国内站(163/百家号/东方财富等)会系统性报"无法确认域名安全"而失败,本机抓取则没有这个问题。Write 工具;Codex 直接用其文件写入能力(或 apply_patch)。凡说"用 Write 工具生成某文件",即指"用当前环境的文件写入能力落地该文件"。生成产物 skill 时涉及的每一个文件(SKILL.md、各模块文档、脚本、配置)都要真实落地到磁盘,不能只在对话里描述。python3。脚本路径见下方「脚本路径」——一律用技能目录的绝对路径,不要假设当前工作目录就是技能目录。本技能自身的脚本(结构校验器 validate_skill.py 等)随技能一起安装,位于技能目录下的 scripts/。不要假设 shell 的当前工作目录是技能目录(Codex/Claude Code 运行时 cwd 通常是用户项目目录)。运行脚本前先定位技能目录,用绝对路径调用。技能目录按环境查找:
~/.claude/skills/video-workflow-builder~/.codex/skills/video-workflow-builder推荐用一句话解析出脚本根目录再调用,避免路径出错:
SKILL_DIR="$HOME/.claude/skills/video-workflow-builder"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.codex/skills/video-workflow-builder"
python3 "$SKILL_DIR/scripts/validate_skill.py" <生成的产物目录>
下文示例为简洁起见写成 scripts/xxx.py,实际调用时请替换为 "$SKILL_DIR/scripts/xxx.py"。生成的产物 skill 安装后同理有自己的技能目录(~/.claude/skills/<账号名>-workflow 或 ~/.codex/skills/<账号名>-workflow),产物内部脚本调用时也要按这个规则解析绝对路径——这一点会写入产物自身的 SKILL.md,此处先记在心里。
本技能自带两类资源:一是范例库,供生成时参照质量与结构,不能原样照抄进产物;二是平台/方法论资源库,是生成产物时"抄数据"的原始素材来源,会随后续任务逐步建成。
范例(已就位,可直接参照):
平台算法知识库(已就位,生成产物时"抄数据"的原始素材来源):
阶段1研究某平台时,必须先读取对应的 references/platforms/<平台>.md 拿到该平台的四层算法拆解,作为联网研究的基础和校验依据;这些文件已全部就位,不要说"该平台资料还未收录"。仅当用户选的平台超出上述五个(抖音/B站/小红书/视频号/百家号)时,才如实告知该平台无内置算法资料、本次仅依赖联网研究。
产物模板(已就位):
references/skill-template/ — 产物 skill 的可填空模板(*.tmpl 文件,含各模块 {{PLACEHOLDER}}),生成规范见下方「生成规范」章节。方法论内核(已就位,生成时的逻辑抄数据来源):
references/platforms/*.md 叠加注入。references/platforms/*.md 在生成时注入。references/platforms/*.md 及本次确认的垂类在生成时注入。整个生成过程分五个阶段,中间有两个明确的停止点(STOP),不要跳过或抢跑。
用户发起请求后,只问这三件事:
明确不要问受众画像、差异化定位、变现路径——这些属于研究阶段和诊断阶段的产出,不是访谈阶段该问用户的。用户往往自己也说不清楚"目标受众是谁""怎么和同类账号差异化",把这些问题甩给用户只会让访谈变得又长又低效。三件事问完、拿到答案就立刻进入阶段1,不要追加更多访谈问题。
提问方式:访谈这三件事一律用普通对话文字直接问("你想在哪个平台做?做什么方向?以什么身份出镜?"),不要调用交互式选择控件/表单类工具——本技能跨 Claude Code 与 Codex 等多种环境运行,这类控件并非各环境都稳定支持,纯文本提问在任何环境都可靠,也让用户能一句话把三件事一起说全。
若用户在一句话里已经把三件事都说全了(例如"我想在抖音做美食测评账号,人设是社区大厨"),直接确认理解无误后进入阶段1,不必再走一轮问答。
拿到平台×垂类的组合后,双线并行展开研究:
联网研究(用 scripts/web_search.py 网关搜索,别用自带 WebSearch;需要读全文时用 --full 本机抓正文,别用 WebFetch),围绕选定的平台和垂类,至少覆盖:
内置资料研究:同时读取对应的 references/platforms/<平台>.md(若已存在),获取该平台推荐机制、核心指标权重、内容形态适配、冷启动与破圈的结构化拆解,作为联网研究的补充和校验依据。
若无法联网:如实告知用户当前环境没有联网能力,明确说明本次研究将只依赖内部知识和已内置的平台资料,不会有实时热点和最新数据;绝不用训练记忆里的旧案例冒充"当下爆款"或编造搜索结果。
两条线的信息汇总后,才能进入阶段2出诊断——研究不到位,诊断就是空话。
基于阶段1的研究,产出一份「账号定位诊断 + 策略提案」,覆盖以下几块,缺一不可:
只展示以上三项(目标受众/差异化定位/内容方向)给用户确认。 变现路径、各平台适配建议这两项不放进给用户看的诊断里——用户通常不需要在这一步操心这些。但 AI 内部必须基于阶段1研究把这两项判断清楚,并在阶段3照常写进产物的 positioning.md(填充
{{MONETIZATION}}、{{PLATFORM_ADAPTATION}}占位符),不能因为不向用户展示就跳过不做。
诊断产出后,必须停下来,用一句话邀请用户确认或提调整,例如:"以上是我研究后的定位诊断,你看看目标受众和差异化定位是否符合预期?可以直接说'受众再窄一点''差异化换个角度'来调整。确认没问题我就开始生成你的专属工作流。"
在用户明确确认之前,绝不进入阶段3生成产物。 用户如果只是追问细节或提小修改,就地调整诊断文本,再次确认,不要自行判断"应该没问题了"就往下走。
诊断展示与确认同样用普通对话文字(把诊断三项写成正文段落 + 一句邀请确认),不要把诊断项塞进交互式选择控件/表单类工具——理由同阶段0:跨环境可靠、也让用户能自由说"哪里再调",而不是被限定在几个预设选项里。
诊断提案范例(假设阶段0拿到的答案是:平台=抖音、垂类=职场、人设="35岁大厂中层,裸辞后做职业咨询的过来人前辈"):
## 账号定位诊断 · 抖音职场·大厂过来人
**目标受众**:25-32岁、在一二线城市互联网/大厂工作2-5年的初中层职场人,正处在"要不要跳槽/要不要卷管理岗/要不要裸辞"的决策焦虑期。
受众心声:"我到底是该忍还是该走""我现在这个level值多少钱我自己都不知道""领导画的饼我信了三年,是不是傻"。
**差异化定位**:抖音职场垂类目前扎堆两种账号——鸡血励志型("你不努力就会被淘汰")和纯吐槽发泄型("打工人的一天"),
真正带具体决策框架、且人设有大厂中层背书的"理性拆解型"账号还不多。差异化打法:不喊鸡血、不单纯吐槽,
每条视频给一个可以直接套用的判断框架(比如"三个信号说明你该跳槽了"),把感性的职场焦虑翻译成可执行的决策清单。
**内容方向**(3-5个):
1. 决策框架类:"XX信号说明你该跳槽/该忍/该谈判加薪了"
2. 大厂内幕拆解类:从中层视角讲绩效、晋升、裁员背后的真实逻辑
3. 真实案例复盘类:匿名化改编身边真实的职场决策案例,讲清楚"当时怎么想的、后来发现漏算了什么"
4. 反常识纠偏类:戳破"努力就会被看见""跳槽一定要涨薪"这类职场鸡汤里的坑
以上是本次研究后的定位诊断,你看看目标受众和差异化定位是否符合预期?可以说"受众再往上提两年""内容方向去掉反常识纠偏这条"来调整,确认没问题我就开始生成你的专属工作流。
拿到用户确认(或调整后再确认)的结果,才进入阶段3。诸如"目标受众"这类字段的最终确认版本,会原样成为阶段3里 {{AUDIENCE}} 等占位符的填充内容——诊断阶段写得越具体,生成阶段就越省事、越贴合真实情况。
用户确认定位诊断后,按照下方「生成规范」,把研究成果和确认后的定位落地成一套完整的产物 skill。这一步不需要再和用户来回确认,做完再统一汇报。
产物生成并通过校验后,向用户说明:
~/.claude/skills/<账号名>-workflow(Claude Code)或 ~/.codex/skills/<账号名>-workflow(Codex)下才能被识别为可用技能.env 文件,怎么填入真实密钥(.env.example 只是占位模板,真实密钥要写进用户自己的、已被 .gitignore 排除的 .env 文件,不会被本技能记录或上传)交付说明讲清楚就结束本轮生成,不必额外发起新的确认。
阶段3生成产物时,遵循以下规范:
产物目录命名:<账号名>-workflow。若用户没有明确给出简短的账号slug,就根据垂类和人设拟一个简洁的英文/拼音slug作为默认值,并在交付说明里告知用户这个默认命名,允许其后续重命名。
填充模板:读取 references/skill-template/ 下的 *.tmpl 文件(后续任务生成后可用),把其中每一个 {{PLACEHOLDER}} 替换成基于本次访谈+研究+诊断确认后的真实内容。已知的占位符至少包括:
{{ACCOUNT_NAME}} — 账号名称{{ACCOUNT_SLUG}} — 账号英文/拼音短标识,用于目录和文件命名{{PLATFORMS}} — 目标平台列表{{NICHE}} — 垂类{{PERSONA}} — 人设描述{{TRIGGER_WORDS}} — 产物 skill 的触发词/触发场景{{AUDIENCE}} — 目标受众画像{{AUDIENCE_VOICE}} — 受众心声(口语化复述){{POSITIONING}} — 差异化定位{{DIFFERENTIATION}} — 与竞品的具体差异点{{MONETIZATION}} — 变现路径与时间线{{PLATFORM_ADAPTATION}} — 各平台适配建议{{TOPIC_FRAMEWORK}} — 选题方法论/框架{{HOT_SOURCE_GUIDE}} — 热点/爆款素材来源指引{{SCRIPT_LENGTH}} — 文稿目标时长与字数{{SCRIPT_STRUCTURE}} — 文稿结构模板{{TITLE_RULES}} — 标题生成规则(继承 title-gen-v3 逻辑){{TITLE_KEYWORD_RULE}} — 标题关键词/搜索锚定规则{{COVER_SIZES}} — 各平台封面尺寸规格。注意区分"视频画幅"与"封面画幅":如 B站视频是横屏 16:9,但封面按平台库是"4:3 感/接近正方"、脚本实际出 1024x768,别把视频的 16:9 误当成封面尺寸填进来;每个平台的封面尺寸必须与 scripts/generate_cover.py 里 PLATFORM_SIZES 实际支持的档位一致(B站 1024x768、抖音/小红书/视频号 768x1024),不能自己另填一个脚本跑不出来的尺寸{{COVER_EMOTION_MAP}} — 情绪-配色映射规则{{COVER_SERIES_LAYOUT}} — 封面系列化固定排布规则{{COVER_DESIGN_LANGUAGE}} — 账号默认「设计语言」(一次调动成套自洽审美的抓手,锁定构图/配色/材质/字体/风格五个基因维度),按垂类+人设现产,如"冷峻智库/时事周刊风"若模板库尚未就位(当前任务阶段可能遇到),先按同等结构手写产物 SKILL.md 及各模块文档,保证内容完整、可用,等模板库落地后再切换为"读取模板+填空"的方式,不因为模板缺失而生成一份内容不完整的产物。
填充范例(承接上面阶段2的抖音职场账号,确认后进入填空):
{{ACCOUNT_NAME}} → 大厂过来人老K
{{ACCOUNT_SLUG}} → dachang-guolairen
{{PLATFORMS}} → 抖音
{{NICHE}} → 职场决策/大厂内幕
{{PERSONA}} → 35岁大厂中层,裸辞后做职业咨询的过来人前辈
{{TRIGGER_WORDS}} → "帮我看看这条职场选题""写一条跳槽建议的口播稿""起个职场标题""职场封面"
{{AUDIENCE}} → 25-32岁一二线互联网/大厂员工,处在跳槽/晋升/裸辞决策焦虑期
{{AUDIENCE_VOICE}} → "我到底该忍还是该走""这个level我自己都不知道值多少钱"
{{POSITIONING}} → 理性决策框架型,区别于鸡血励志和纯吐槽两类扎堆账号
{{DIFFERENTIATION}} → 每条视频给一个可直接套用的判断框架,而非喊口号或单纯发泄
{{MONETIZATION}} → 起号期不变现→成长期职业咨询付费→成熟期课程分销/雇主品牌广告
{{PLATFORM_ADAPTATION}} → 抖音强钩子开头、60-90秒、前3秒抛结论
{{TOPIC_FRAMEWORK}} → 决策框架类/内幕拆解类/案例复盘类/反常识纠偏类,四个选题池轮换
{{HOT_SOURCE_GUIDE}} → 抖音职场话题榜、脉脉/小红书职场热帖、近期裁员财报新闻
{{SCRIPT_LENGTH}} → 60-90秒,约200-300字
{{SCRIPT_STRUCTURE}} → 3秒钩子→冲突陈述→框架讲解(2-3点)→行动建议→互动引导
{{TITLE_RULES}} → 继承 title-gen-v3 五步分析法,标题需含具体身份锚点+反常识判断
{{TITLE_KEYWORD_RULE}} → 标题前半必须出现"跳槽/裸辞/大厂/晋升"等搜索热词之一
{{COVER_SIZES}} → 抖音 3:4 竖版 1080x1440
{{COVER_EMOTION_MAP}} → 决策焦虑→暗色警示;反常识→对比撞色;案例复盘→暖色叙事
{{COVER_SERIES_LAYOUT}} → 顶部固定压"大厂过来人老K"账号名,中部大字结论,底部小字场景标签
{{COVER_DESIGN_LANGUAGE}} → 冷峻职场纪实风(深灰蓝冷调+暖色点缀、哑光质感、极粗黑体主锤字、中央焦点构图)
填完后,每个占位符对应的真实内容还要同步体现在产物各模块正文里(比如 {{TITLE_RULES}} 不只是模板里的一行占位,产物「标题生成」模块的完整方法论正文都要按这个规则展开),占位符表只是落地时的对照清单,不是最终交付内容本身。
注入平台事实,而非引用链接:生成产物各模块时,把对应的 references/platforms/<平台>.md 里和该垂类相关的推荐机制、指标权重、内容形态、冷启动打法,直接复制改写进产物模块正文,不要只留一个指向本技能内部资源的链接。产物必须是自包含的——用户装上产物 skill 后,不需要再依赖本生成器技能本身就能独立运作。
配置脚本:
web_search.py(联网搜索网关,产物做选题/热点研究时统一走它,别用自带 WebSearch)、generate_cover.py(封面生成脚本)、fetch_hotlist.py(选题第零步扫实时热榜,调自部署的 DailyHotApi)、content_db.py/archive_content.py/query_db.py/update_metrics.py(内容资产库)、.env.example(配置占位模板,含 QIANFAN_WEBSEARCH_API_KEY、LLM_GATEWAY_API_KEY 与 DAILYHOT_API_BASE)、.gitignore(确保真实 .env 不被提交)。这批是 validate_skill.py 校验的必需脚本,少一个产物就通不过校验。产物 SKILL.md 里凡涉及联网研究,都要写明"用 scripts/web_search.py 网关搜索,别直接用 agent 自带的 WebSearch",并复制一份真实 .env(含 QIANFAN_WEBSEARCH_API_KEY)进产物、由 .gitignore 排除。fetch_hotlist.py 抓的是跨平台通用热榜,属上面的无条件必备项,与这里"垂类专属活数据脚本"是两回事。)内容资产库(每个产物必带):产物要能把每次产出的内容结构化沉淀到独立于 skill 的长期数据库 ~/.claude|.codex/content-db/<账号slug>/。落地方式:把 content_db.py/archive_content.py/query_db.py/update_metrics.py 复制进产物 scripts/(脚本从自身路径推导账号 slug 与数据根,无需改写);产物的选题模块开头查库去重与找系列、文稿模块末尾自动存档、SKILL.md 说明回填与查库方式——这三处已在模板中就位,填模板时不要删。数据独立存放,重装产物 skill 不影响历史内容。
密钥处理(安全红线):产物用到的真实 API key,只能写进产物目录下、被 .gitignore 排除的真实 .env 文件里,由用户自己配置或本技能在生成时以环境变量形式写入该 git-ignored 文件;随技能一起提交/追踪的 .env.example 永远只放占位符(如 LLM_GATEWAY_API_KEY=your_key_here)。任何真实密钥值都不允许写进 SKILL.md 或任何会被版本控制追踪的文件。
生成审查模块(每个产物必带,与文稿模块配套):文稿写作与交付前终审已拆成两个独立模块——除 references/script-writing.md 外,还必须生成 references/script-review.md(从 references/skill-template/script-review.md.tmpl 填空而来),承载"换一双眼睛"的三层终审(硬门禁 / 受众复审 / 事实与立场终审)。产物 SKILL.md 的工作流总览里已把"审查"列为文稿之后的强制一步(模板已就位),填模板时不要删。为什么拆出来:交付前终审是整条链路最容易被"作者自己觉得没问题"的惯性跳过的一步,独立成模块 + 在 SKILL 流程里显式列为强制步,才压得住。写作模块管"写得好不好留不留得住",审查模块管"敢不敢、站不站得住、能不能安全播出去",两者配套缺一不可。
校验与自查:产物生成完毕后,运行
python3 scripts/validate_skill.py <产物目录>
若报告任何问题(frontmatter缺失、链接指向不存在的文件等),先修复再交付给用户,不要带着已知问题交付。
以下几条是生成产物时的非负项,任何一条不满足都视为本次生成未完成:
references/script-review.md(独立审查模块),且 SKILL.md 工作流总览把"审查"列为文稿之后的强制一步。审查模块须含三层:硬门禁、受众复审、事实与立场终审(真信源不许编造/反直觉结论因果闭环/敏感题立场落安全区/可执行正向收尾)。缺审查模块或流程未列审查步,视为生成未完成。generate_cover.py)及产物任何文件中,绝不硬编码真实 API key——密钥只能来自环境变量或用户自己配置的 git-ignored .env。content_db.py/archive_content.py/query_db.py/update_metrics.py 四个脚本齐全并能正确读写 content-db/<slug>/,选题模块查库去重、文稿模块自动存档两处衔接不能缺失。scripts/validate_skill.py 校验,且不遗留任何已知问题。