# OpenClaw VOC 技能包迁移到 Claude Code 的技术改造分析 更新时间:2026-05-21 ## 结论 这些 OpenClaw 技能包可以迁移到 Claude Code 使用,但不能只把 `SKILL.md` 和 `api-config.json` 原样复制过去。 原因是两边的职责模型不同: - OpenClaw 当前是 `SKILL.md + api-config.json + Node 脚本 + 打包安装脚本` 的组合。`api-config.json` 负责把自然语言触发映射到本地脚本或接口调用。 - Claude Code 的 Skill 更偏向“可被 Claude 自动或手动触发的工作流说明”。它能包含脚本和参考文件,但不会天然理解 OpenClaw 的 `api-config.json`。 - 如果要让 Claude Code 像 OpenClaw 一样稳定调用接口,建议新增 MCP 层,或者至少新增一层 Claude Code 专用的命令/脚本适配层。 推荐路线: 1. P0:先做轻量适配,保留现有 Node 脚本,新增 Claude Code Skill 和命令入口,让 Claude 可以通过自然语言或 `/skill-name` 触发完整流程。 2. P1:做标准 MCP 适配器,把现有 `api-config.json` 里的参数 schema、执行方式、输出解析统一暴露成 Claude Code 可调用工具。 3. P2:做 Claude Code Plugin,把 Skills、MCP、hooks、安装脚本、默认配置打成一个可分发套件。 ## 重要修正:不是替换 OpenClaw,而是新增 Claude Code 入口 这里的目标不是把旧技能包“转型”成 Claude Code 专用包,而是在不破坏 OpenClaw 已有闭环的前提下,新增 Claude Code 可识别、可调用、可复用的入口。 所以旧资产的处理原则是: - `api-config.json`:保留,继续给 OpenClaw 使用。 - 现有 `SKILL.md`:保留,继续给 OpenClaw 使用;Claude Code 可以另建 `.claude/skills` 或插件 `skills`。 - 现有 Node runner:保留命令行兼容,但内部建议抽出平台无关函数。 - `install.js`、七牛 zip 包、OpenClaw 部署脚本:保留,不要因为 Claude Code 改造打断现有安装链路。 - 新增 Claude Code 支持时,只在外围加适配层,不直接把 OpenClaw 的目录语义改掉。 更准确的架构目标是: ```text 同一套业务核心 -> OpenClaw adapter -> Claude Code adapter -> MCP adapter -> CLI adapter ``` ## 新增 Claude Code 时,旧可复用部分需要重构什么 ### 1. Runner 脚本从 CLI-only 重构为 core + CLI wrapper 当前观察: - `scripts/tools/douyin-speaking-daily-runner.js` 是完整 CLI 脚本,核心流程和命令行解析混在一起。 - `scripts/tools/douyin-video-transcriber.js` 也是 CLI 主入口。 - `industry-trend-intelligence/scripts/industry-trend-runner.js` 也是 CLI 主入口。 - `scripts/tools/douyin-speaking-daily-report.js` 已有 `module.exports`,复用性更好。 建议重构: ```text scripts/core/ douyin-speaking-daily/ runDailyWorkflow.js scriptCoCreation.js transcriptQueue.js douyin-video-transcript/ transcribeVideo.js industry-trend/ runTrendWorkflow.js scripts/tools/ douyin-speaking-daily-runner.js 只负责 parse argv + 调 core + emit result douyin-video-transcriber.js 只负责 parse argv + 调 core + emit result ``` 这样 OpenClaw 继续执行旧命令,Claude Code / MCP 则可以直接 import core function。 最小改法: ```js async function runDailyWorkflow(options, context = {}) { // 原 main 里的业务逻辑迁移到这里 return result; } async function main() { const args = parseArgs(process.argv.slice(2)); const result = await runDailyWorkflow(args, createCliContext(args)); emitResult(args, result); } if (require.main === module) main(); module.exports = { runDailyWorkflow }; ``` 这样不会破坏旧 CLI。 ### 2. `openclaw-tool-runner.js` 重构为平台中立 local-script runner 当前 `scripts/tools/openclaw-tool-runner.js` 已经有很有价值的能力: - 解析 `--tool`。 - 查找工具路径。 - 过滤未替换的 `{{param}}`。 - 执行子进程。 - 提取 stdout 中的 JSON。 - 再输出 `PREFIX=`。 这个逻辑不是 OpenClaw 独有,Claude Code 和 MCP 也能复用。 建议: ```text scripts/runtime/ local-script-runner.js output-parser.js template-args.js tool-resolver.js scripts/tools/ openclaw-tool-runner.js 保留旧入口,内部调用 scripts/runtime/local-script-runner.js ``` Claude Code P0 可以直接复用这个 runtime,MCP P1 也可以复用它执行 `api-config.json`。 ### 3. `api-config.json` 读取逻辑抽成通用 tool manifest loader 当前 `api-config.json` 是 OpenClaw 专用,但里面有大量可复用信息: - tool name - description - parameters JSON schema - execution command - args template - cwd - outputParser - output schema 不需要立刻废弃它,而是新增读取器: ```text scripts/runtime/ api-config-loader.js tool-manifest-normalizer.js ``` 作用: ```text OpenClaw api-config.json -> normalized tool manifest -> OpenClaw 继续使用 -> Claude Code P0 wrapper 使用 -> MCP tool 注册使用 ``` 短期不要新增太多重复配置,否则会出现 OpenClaw 配一遍、Claude Code 再配一遍、MCP 又配一遍的维护灾难。 ### 4. 参数解析与类型转换抽成公共模块 当前多个脚本都有自己的: - `parseArgs` - `bool` - `intValue` - `splitList` - `readJsonMaybe` - `hasConcreteArg` 这些函数在 OpenClaw 和 Claude Code 下都会继续用。 建议抽到: ```text scripts/runtime/ args.js values.js json.js ``` 好处: - Claude Code wrapper 不用复制一套参数处理。 - MCP adapter 可以把 JSON 参数转成 CLI 参数。 - 能统一处理数组、布尔、路径、空模板值 `{{xxx}}`。 ### 5. 输出协议抽成统一 result envelope 当前比较好的设计是 `assistantMessage`,但各脚本返回字段还不完全统一。 建议统一: ```json { "status": "ok", "assistantMessage": "直接给用户看的正文", "summary": {}, "nextAction": "", "outputDir": "", "files": [], "warnings": [], "errors": [] } ``` 新增: ```text scripts/runtime/ result-envelope.js ``` 所有旧 runner 逐步改成: ```js return okResult({ assistantMessage, summary, files, nextAction }); ``` OpenClaw 仍然显示 `assistantMessage`,Claude Code 也能直接显示正文。 ### 6. Credential / token 读取抽成平台无关模块 当前脚本里存在这些假设: - `VOC_TOKEN` - `OPENCLAW_VOC_TOKEN` - `VOC_SOCIAL_TOKEN` - `~/.openclaw/voc-credentials.json` 新增 Claude Code 后,不建议在业务脚本里继续写死 `.openclaw`。 建议: ```text scripts/runtime/ credentials.js ``` 读取顺序: ```text 1. 显式参数 --voc-token / context.vocToken 2. 环境变量 VOC_TOKEN / VOC_SOCIAL_TOKEN / OPENCLAW_VOC_TOKEN 3. 项目 memory 或 config 4. ~/.openclaw/voc-credentials.json 5. ~/.claude/voc-credentials.json 6. Claude Code plugin data dir ``` 旧 OpenClaw 不受影响,Claude Code 可以新增自己的 credential 位置。 ### 7. Workspace / memory / output root 抽成运行上下文 当前大量默认路径依赖 `process.cwd()`: - `memory/...` - `outputs/...` - `openclaw-voc-output/...` Claude Code 下 cwd 可能是用户项目,插件目录,或 repo 根目录。 建议每个核心函数都接受: ```js context = { workspaceRoot, memoryRoot, outputRoot, platform: 'openclaw' | 'claude-code' | 'cli' | 'mcp' } ``` CLI wrapper 默认: ```js workspaceRoot = process.cwd() memoryRoot = path.join(workspaceRoot, 'memory') outputRoot = path.join(workspaceRoot, 'outputs') ``` OpenClaw 和 Claude Code adapter 可以覆盖。 ### 8. 社媒 API client 抽成可复用 client 当前抖音、小红书的实际接口调用散落在多个工具和 runner 里。 新增 Claude Code 后,低层 API 最适合变成 MCP tools,所以要先抽 client: ```text scripts/clients/ voc-social-client.js douyin-client.js xiaohongshu-client.js transcription-gateway-client.js ``` 业务 runner 不直接拼接口 URL,而是调用 client。 收益: - OpenClaw runner 用同一 client。 - Claude Code MCP tool 用同一 client。 - 错误码、403、余额不足、接口异常可以统一处理。 ### 9. 采集、报告、共创、记忆要拆开 以抖音日报为例,现在 runner 已经能做很多事: - 建档 - 采集 - 评论 - 自动逐字稿 - 报告 - 选题 - 脚本共创 - 定稿 - 偏好记忆 功能闭环是好事,但 Claude Code 接入后,建议内部拆成模块: ```text profile/ collection/ transcript/ report/ script-co-create/ memory/ ``` 对外还是一个 runner,对内更清楚。这样 Claude Code 如果只想调用“逐字稿”或“脚本共创”,不用跑完整日报。 ### 10. 中文文案、编码、正则需要治理 当前 Windows / PowerShell 输出里已经多次出现乱码风险。新增 Claude Code 后,路径、stdout、JSON、中文 prompt 都会经过更多层。 建议: - 所有源码统一 UTF-8。 - JSON 输出不要混杂非结构化中文日志。 - 用户可见文案集中放到 message builder,不散落在采集逻辑里。 - 少用硬编码中文正则判断复杂意图,优先把自然语言交给 Skill 层判断,再传结构化参数给 runner。 ## 哪些旧部分不要重构 ### 不要动 OpenClaw 已跑通的外部接口 这些先保留: ```text douyin/*/api-config.json industry-trend-intelligence/skills/*/api-config.json xiaohongshu/*/api-config.json ``` 原因: - OpenClaw 线上包依赖它们。 - 七牛 zip 包安装链路依赖它们。 - 用户教学视频和现有说明文档也依赖它们。 ### 不要一开始就改技能包目录名 保留: ```text douyin/douyin-speaking-daily-runner industry-trend-intelligence/skills/industry-trend-runner ``` 新增 Claude Code 目录即可: ```text .claude/skills/... claude-code-adapter/... ``` ### 不要把所有低层 API 都做成 Claude Skill 低层 API 应该是工具,不是用户入口。 保持用户入口少而清晰: - 抖音口播日报 - 抖音视频逐字稿 - 行业趋势情报官 - 小红书趋势采集 低层能力放到 MCP tools: - 搜索笔记 - 获取评论 - 获取视频详情 - 获取用户作品 ## 官方能力对应 参考 Claude Code 官方文档: - Skills:[Extend Claude with skills](https://docs.claude.com/en/docs/claude-code/skills)。`~/.claude/skills//SKILL.md`、项目 `.claude/skills//SKILL.md`、插件 `skills//SKILL.md` 都可以被 Claude Code 识别;技能可以被自然语言触发,也可以用 `/skill-name` 直接调用。 - Skills 支持 `description`、`allowed-tools`、`disable-model-invocation`、`arguments`、`${CLAUDE_SKILL_DIR}` 等字段,适合做工作流入口和上下文说明。 - Slash commands:[Common workflows - custom slash commands](https://docs.claude.com/en/docs/claude-code/common-workflows)。`.claude/commands/*.md` 适合承接高频固定入口,例如 `/douyin-daily`、`/trend-daily`,但复杂能力仍应沉淀为 Skill 或 MCP tool。 - MCP:[Connect Claude Code to tools via MCP](https://docs.claude.com/en/docs/claude-code/mcp)。Claude Code 可以连接本地或远程 MCP server,把外部 API、数据库、本地工具暴露成可调用工具。 - Plugin:[Create plugins](https://docs.claude.com/en/docs/claude-code/plugins)。Claude Code Plugin 可以把 `skills/`、`commands/`、`hooks/`、`.mcp.json`、`bin/`、`settings.json` 等放在同一个插件包里统一分发。 - Hooks:[Hooks reference](https://docs.claude.com/en/docs/claude-code/hooks)。可在 Claude Code 生命周期节点自动执行 shell、HTTP 或 LLM prompt,适合做 token 检查、环境预检、运行后归档等自动动作。 对应到我们的技能包,最重要的判断是: > Skill 负责“什么时候用、怎么协作、如何输出”;MCP 或脚本适配器负责“真正调用哪个接口、传什么参数、怎么解析结果”。 ## 当前项目结构观察 本仓库目前有三类主要技能资产: ```text douyin/ douyin-speaking-daily-runner/ douyin-video-transcript/ douyin-general-search/ douyin-video-comments/ ... industry-trend-intelligence/ skills/ industry-trend-runner/ industry-trend-profile-builder/ xiaohongshu-search-notes/ xiaohongshu-note-detail/ xiaohongshu-note-comments/ ... scripts/ install.js skill-package-manifest.json xiaohongshu/ xiaohongshu-search-notes/ xiaohongshu-note-detail/ xiaohongshu-note-comments/ ... ``` 典型 OpenClaw 技能目录结构: ```text skill-name/ SKILL.md api-config.json ``` 典型 `api-config.json` 结构: ```json { "name": "douyin-speaking-daily-runner", "type": "local-script", "execution": { "kind": "command", "command": "node", "args": [ "scripts/tools/douyin-speaking-daily-runner.js", "--result-prefix", "DOUYIN_SPEAKING_DAILY_RUNNER_RESULT", "--profile", "{{profile}}" ], "cwd": "{{workspaceRoot}}", "outputParser": { "type": "stdout-prefix-json", "prefix": "DOUYIN_SPEAKING_DAILY_RUNNER_RESULT=" } }, "parameters": { "type": "object", "properties": {} }, "output": { "type": "object", "properties": { "assistantMessage": { "type": "string" } } } } ``` 这套结构在 OpenClaw 里是完整的,但在 Claude Code 里缺少三个东西: 1. Claude Code 可发现的 Skill 目录:`.claude/skills//SKILL.md` 或插件 `skills//SKILL.md`。 2. Claude Code 可执行的工具桥:MCP server,或明确写在 Skill 里的脚本调用说明。 3. Claude Code 可安装的包结构:插件目录、`.mcp.json`、`.claude-plugin/plugin.json` 或项目级 `.claude/skills`。 ## 架构改造目标 建议把现有 OpenClaw 技能包重构成五层: ```text 自然语言入口层 用户说“启动抖音口播每日稿件日报” 用户说“给我看小红书家装趋势日报” Skill 协作层 Claude Code SKILL.md 负责角色、触发词、工作流、输出要求、交互策略 工具调用层 P0:Node wrapper P1:MCP server 负责调用 API、本地脚本、上传下载、转写、报告生成 业务脚本层 复用现有 scripts/tools/*.js 复用 industry-trend-intelligence/scripts/*.js 记忆与产物层 memory/*.json outputs/* report markdown/json transcript cache ``` 这样迁移后,同一套底层业务脚本可以同时服务: - OpenClaw - Claude Code - 未来其他 Agent 平台 - 直接命令行调用 ## P0 轻量迁移方案 目标:最快让 Claude Code 可识别、可运行、可自然语言协作。 做法: ```text .claude/ skills/ douyin-speaking-daily/ SKILL.md examples/ startup.md script-co-create.md scripts/ run-douyin-speaking-daily.ps1 industry-trend-intelligence/ SKILL.md examples/ home-customization.md generic-trend.md scripts/ run-industry-trend.ps1 ``` P0 的 Skill 不需要把所有 API 都写进去,只需要写清: - 什么场景触发。 - 如何读取已有记忆。 - 如何调用现有 Node 脚本。 - 输出优先展示 `assistantMessage`,文件路径只放末尾。 - 用户继续说“选题2”“定稿”“不要工具清单方向”时如何续接最近一次运行。 示例: ```markdown --- name: douyin-speaking-daily description: 生成抖音口播每日稿件日报,支持爆款选题、逐字稿补跑、脚本共创、定稿和偏好沉淀。用户说启动日报、生成口播选题、进入脚本共创、定稿时使用。 allowed-tools: Bash Read Write --- ## 工作流 1. 优先读取 `memory/douyin-speaking-profile.json`。 2. 如果没有档案,用自然语言向用户建档,不展示专业参数。 3. 调用 `node scripts/tools/douyin-speaking-daily-runner.js`。 4. 优先把返回 JSON 里的 `assistantMessage` 原样发给用户。 5. 不要只返回文件路径。 ``` 优点: - 改造少。 - 现有脚本几乎不用动。 - 可以快速演示 Claude Code 版技能入口。 缺点: - Claude 仍然是通过 shell 间接调用工具,不是原生结构化工具调用。 - 参数校验、错误处理、工具列表发现不够稳定。 - 多技能组合时,Claude 需要读说明后决定该跑哪个脚本。 适用范围: - 课程演示。 - 单机部署。 - 小范围内部测试。 - 先验证 Claude Code 是否能承接 OpenClaw 工作流体验。 ## P1 标准迁移方案:MCP 适配器 目标:让 Claude Code 像调用内置工具一样调用我们的 VOC 技能接口。 新增: ```text claude-code-adapter/ mcp/ package.json src/ server.js load-api-configs.js local-script-tool.js http-endpoint-tool.js output-parser.js credential-store.js workspace-resolver.js skills/ douyin-speaking-daily/ SKILL.md industry-trend-intelligence/ SKILL.md .mcp.json README.md ``` 核心思路: 1. 扫描现有 `api-config.json`。 2. 把每个 `api-config.json` 转成一个 MCP tool。 3. 把 `parameters` 映射成 MCP input schema。 4. 根据 `execution.kind` 决定调用本地命令还是 HTTP 接口。 5. 根据 `outputParser` 解析 stdout 或 HTTP response。 6. 把结构化结果返回给 Claude Code。 映射关系: | OpenClaw 字段 | Claude Code / MCP 对应 | | --- | --- | | `name` | MCP tool name | | `description` | MCP tool description | | `parameters` | MCP input schema | | `execution.command` | 本地进程 spawn | | `execution.args` | 参数模板渲染 | | `execution.cwd` | workspace root resolver | | `outputParser.type=stdout-prefix-json` | stdout 前缀 JSON 解析器 | | `output.properties.assistantMessage` | Claude 聊天优先展示正文 | | `relatedSkills` | Claude Skill 内的工作流路由说明 | MCP 工具命名建议: ```text voc_douyin_speaking_daily_run voc_douyin_video_transcript voc_douyin_general_search voc_xiaohongshu_search_notes voc_xiaohongshu_note_comments voc_industry_trend_run voc_industry_trend_profile_build ``` Claude Code Skill 里只保留高层协作说明: ```markdown 当用户要“启动日报”时: 1. 调用 `voc_douyin_speaking_daily_run`。 2. 如果返回 `needs_profile`,引导建档。 3. 如果返回 `needs_account_confirmation`,展示候选账号,不要自行确认。 4. 如果返回 `assistantMessage`,直接展示正文。 5. 如果用户选择选题,继续调用同一个 runner 的 `selectedTopicIndex` 或 `message`。 ``` 优点: - Claude Code 能真正“看见”工具。 - 参数 schema 可被工具层校验。 - 多技能组合稳定,不依赖模型猜命令。 - 更适合后续扩展到小红书、抖音、微博、知乎等通用情报官。 缺点: - 需要开发 MCP server。 - 需要处理 Windows 路径、中文编码、token、网络异常、输出长度限制。 ## P2 产品化迁移方案:Claude Code Plugin 目标:把 VOC 技能包变成 Claude Code 可安装、可复用、可分发的插件套件。 推荐目录: ```text claude-code-plugin-voc-intelligence/ .claude-plugin/ plugin.json skills/ douyin-speaking-daily/ SKILL.md douyin-video-transcript/ SKILL.md industry-trend-intelligence/ SKILL.md social-trend-intelligence/ SKILL.md .mcp.json mcp/ package.json src/ server.js ... bin/ voc-runner.cmd voc-runner.ps1 hooks/ hooks.json preflight-token-check.js settings.json README.md ``` 插件化后可以做到: - 用户安装一个插件,就获得一组技能。 - MCP server 随插件自动启动。 - `bin/` 里的命令在插件启用时进入 Claude Code 的 Bash 路径。 - hooks 自动检查 token、Node 版本、余额、输出目录。 - 后续可拆成多个插件: - `voc-douyin-speaking` - `voc-social-trend` - `voc-xiaohongshu` - `voc-transcript` ## 需要重构的设计点 ### 1. 技能边界重构 当前 OpenClaw 里每个 API 都可以是一个技能,例如: - `douyin-general-search` - `douyin-video-comments` - `xiaohongshu-search-notes` - `xiaohongshu-note-comments` 迁移到 Claude Code 后,不建议把每个低层 API 都做成用户可见 Skill。 建议: - 面向用户的 Skill 保持少量高层入口。 - 低层 API 统一变成 MCP tools。 推荐用户可见 Skill: ```text douyin-speaking-daily douyin-video-transcript industry-trend-intelligence social-trend-intelligence ``` 推荐 MCP tools: ```text douyin_general_search douyin_video_detail douyin_video_comments douyin_user_posts douyin_video_transcript xiaohongshu_search_notes xiaohongshu_note_detail xiaohongshu_note_comments industry_trend_runner ``` ### 2. `api-config.json` 平台中立化 当前 `api-config.json` 是 OpenClaw 专用。建议新增一个平台中立的 `tool.schema.json`,或者让 MCP adapter 兼容读取 `api-config.json`。 推荐先兼容读取,后续再演进: ```text api-config.json 继续给 OpenClaw 用 tool.schema.json 后续平台中立版本 claude-tool.config.json 如需 Claude 特定覆盖再加 ``` 短期不建议马上删除 `api-config.json`,因为 OpenClaw 仍要继续跑。 ### 3. 脚本入口标准化 所有脚本都应支持: ```text --workspace-root --result-prefix --output --collection-mode sample|live --message ``` 输出必须稳定: ```text RESULT_PREFIX={"status":"ok","assistantMessage":"...","files":[]} ``` 对 Claude Code 来说,最重要的是: - 不要只写文件。 - 一定返回 `assistantMessage`。 - 错误也要结构化返回,而不是只打印 stack trace。 - Windows 中文路径不能影响运行。 ### 4. 记忆系统统一 目前 OpenClaw 默认用: ```text memory/douyin-speaking-profile.json memory/douyin-speaking-script-memory.json memory/douyin-speaking-history.json memory/industry-trend-memory.json ``` Claude Code 迁移时有两种选择: 方案 A:继续使用项目内 `memory/`。 适合: - 单项目。 - 课程演示。 - 用户能理解“这个项目目录就是工作空间”。 方案 B:插件持久化目录。 适合: - 多项目共享。 - 真实产品分发。 - 不希望每个项目重复建档。 建议: ```text P0:继续使用项目 memory/ P1:MCP adapter 支持 --memory-root P2:Plugin 使用 ${CLAUDE_PLUGIN_DATA}/memory,并允许项目级覆盖 ``` ### 5. 自然语言启动话术固化 OpenClaw 里已经优化过“不要展示专业参数”的启动方式。Claude Code Skill 也要继承这个设计。 用户入口话术示例: ```text 启动抖音口播每日稿件日报。 先读取已有账号档案,如果没有就帮我建档。 今天帮我采集抖音爆款口播选题,自动补一条最值得拆的视频逐字稿。 最后直接在聊天里给我日报,不要只给文件路径。 ``` Claude Code Skill 应把这类话术作为默认入口,而不是让用户输入: ```text profile=... autoTranscriptTopN=1 autoTranscriptProvider=iflytek-gateway ``` ### 6. 权限与安全重构 需要区分: - 只读查询。 - 会消耗余额的 API。 - 会上传音视频的转写。 - 会写入长期记忆的定稿。 建议: ```text P0:Skill 文档里写清楚何时需要用户确认。 P1:MCP tool 增加 budget、dryRun、collectionMode。 P2:Hook 做运行前检查和余额提醒。 ``` 特别是: - `autoTranscriptTopN > 0` 会消耗转写额度。 - 直播采集和批量搜索会消耗 VOC-AI 服务次数。 - `finalize=true` 会写入长期记忆。 ### 7. 输出协议重构 Claude Code 的体验要沿用我们已经验证过的内容优先原则: ```text 优先展示 assistantMessage 其次展示关键摘要 最后才展示文件路径 ``` 所有 runner 输出建议统一: ```json { "status": "ok", "assistantMessage": "直接给用户看的正文", "summary": {}, "nextAction": "建议用户下一步怎么说", "files": [], "warnings": [], "errors": [] } ``` ## 文件级改造清单 ### 必须新增 ```text docs/specs/claude-code-skill-package-porting-analysis.md .claude/ skills/ douyin-speaking-daily/ SKILL.md douyin-video-transcript/ SKILL.md industry-trend-intelligence/ SKILL.md claude-code-adapter/ README.md mcp/ package.json src/ server.js load-api-configs.js local-script-tool.js http-endpoint-tool.js output-parser.js credential-store.js workspace-resolver.js ``` ### 建议新增 ```text claude-code-adapter/ skills/ douyin-speaking-daily/ SKILL.md examples.md industry-trend-intelligence/ SKILL.md examples.md tests/ api-config-loader.test.js output-parser.test.js local-script-tool.test.js fixtures/ douyin-speaking-daily-runner.api-config.json industry-trend-runner.api-config.json ``` ### 后续插件化新增 ```text claude-code-plugin-voc-intelligence/ .claude-plugin/ plugin.json skills/ .mcp.json mcp/ bin/ hooks/ settings.json ``` ### 需要调整现有脚本 ```text scripts/tools/douyin-speaking-daily-runner.js scripts/tools/douyin-video-transcriber.js industry-trend-intelligence/scripts/industry-trend-runner.js industry-trend-intelligence/scripts/industry-trend-profile-builder.js industry-trend-intelligence/scripts/industry-trend-memory.js industry-trend-intelligence/scripts/xiaohongshu-trend-collector.js ``` 调整重点: - 支持显式 `--workspace-root`。 - 标准化 `--result-prefix`。 - 标准化错误 JSON。 - 保证 `assistantMessage` 永远优先返回。 - 兼容 Claude Code 项目目录和插件目录。 ## 推荐实施顺序 ### 第一步:Claude Code P0 适配,先跑一个闭环 范围: - `industry-trend-intelligence` - `douyin-speaking-daily` 交付: ```text .claude/skills/industry-trend-intelligence/SKILL.md .claude/skills/douyin-speaking-daily/SKILL.md ``` 测试目标: ```text 用户说:启动抖音口播每日稿件日报 Claude 能调用 runner Claude 直接展示日报正文 用户说:选题2,进入脚本共创 Claude 能续接最近日报 用户说:定稿 Claude 能写入偏好记忆 ``` ### 第二步:MCP adapter 骨架 范围: - 先支持 `local-script` 类型。 - 先支持 stdout-prefix-json。 - 先接入 2 个 runner: - `douyin-speaking-daily-runner` - `industry-trend-runner` 验收: ```text Claude Code /mcp 可以看到 voc 工具 工具可以返回 assistantMessage 错误能结构化返回 ``` ### 第三步:MCP adapter 扩展到社媒 API 范围: - 小红书搜索、笔记详情、评论。 - 抖音搜索、视频详情、评论、用户作品。 目标: ```text Claude 不再靠 shell 拼命令。 Claude 能组合多个工具完成“通用社媒趋势情报官”。 ``` ### 第四步:插件化打包 范围: ```text claude-code-plugin-voc-intelligence/ ``` 交付: - 插件 manifest。 - skills。 - MCP 配置。 - hooks。 - 安装说明。 - smoke test。 ## P0、P1、P2 优先级 ### P0 必做 - 新增 Claude Code Skill 入口。 - 复用现有 Node runner。 - 输出必须显示正文,不只给文件路径。 - 自然语言启动话术,不暴露专业参数。 - 能跑通日报、选题、脚本共创、定稿记忆。 ### P1 必做 - MCP adapter 读取 `api-config.json`。 - 参数 schema 自动映射。 - 本地脚本工具化。 - 错误结构化。 - token 和余额检查。 - Windows 中文路径兼容。 ### P2 可做 - Claude Code Plugin 套件。 - hooks 自动预检。 - 多平台通用社媒情报官。 - 插件市场式分发。 - 独立版本号、更新检测、回滚机制。 ## 迁移风险 ### 风险 1:只迁 SKILL.md,工具不可用 Claude Code 能识别 Skill,不等于能识别 OpenClaw 的 `api-config.json`。如果没有脚本调用说明或 MCP adapter,Claude 只能读说明,无法稳定执行工具。 ### 风险 2:低层 API 全做成 Skill,用户入口变乱 不要把 `douyin-video-comments`、`xiaohongshu-note-detail` 这种低层能力暴露成用户主要入口。用户应该看到“日报”“趋势情报”“逐字稿”“脚本共创”这类任务入口。 ### 风险 3:输出太偏文件系统 Claude Code 用户也不应该只看到文件路径。所有核心 runner 都要返回 `assistantMessage`。 ### 风险 4:路径和编码问题 当前 PowerShell 输出中已经出现过中文乱码。迁移时要统一: ```text UTF-8 绝对路径 path.resolve 不要手拼 Windows 反斜杠 ``` ### 风险 5:消耗型任务缺少预算控制 逐字稿、社媒采集、批量评论抓取都可能消耗额度。MCP tool 参数里应保留: ```text dryRun collectionMode dailyBudget autoTranscriptTopN maxCommentPages ``` ## 建议的目标形态 最终不是“OpenClaw 技能包复制成 Claude Code 技能包”,而是沉淀成一套平台中立 VOC Agent Kit: ```text voc-agent-kit/ core/ scripts/ schemas/ runners/ openclaw/ skills/ api-config.json install.js claude-code/ skills/ mcp/ plugin/ docs/ user-guides/ developer-guides/ ``` 这样同一个底层能力可以有多套外壳: - OpenClaw 外壳:继续使用 `api-config.json`。 - Claude Code 外壳:使用 Skill + MCP + Plugin。 - 命令行外壳:直接运行 Node。 - 后续 Web 外壳:调用同一套 runner。 ## 最小可落地版本 如果要最快开始,我建议先做这个版本: ```text .claude/skills/douyin-speaking-daily/SKILL.md .claude/skills/industry-trend-intelligence/SKILL.md claude-code-adapter/scripts/run-openclaw-local-script.js claude-code-adapter/tests/output-parser.test.js ``` `run-openclaw-local-script.js` 做三件事: 1. 读取指定 `api-config.json`。 2. 用传入 JSON 参数渲染 `{{param}}`。 3. 执行命令并解析 stdout prefix JSON。 这样可以不立刻写完整 MCP,但已经把 OpenClaw 的关键执行协议抽象出来,为 P1 MCP 迁移铺路。 ## 验收标准 ### 用户体验验收 用户可以这样说: ```text 启动抖音口播每日稿件日报。 ``` Claude Code 应返回: ```text 今日爆款选题池 Top 5 选题 逐字稿状态 下一步怎么选题/共创/定稿 ``` 用户可以继续说: ```text 选题2,进入脚本共创。 开头更狠一点,老板视角。 定稿。 不要纯工具清单方向。 ``` Claude Code 应能连续完成: - 进入脚本共创。 - 生成 v0。 - 根据反馈生成 v1。 - 定稿写入记忆。 - 保存偏好并影响下次日报。 ### 技术验收 - Claude Code 能发现 Skill。 - 本地脚本可以被调用。 - MCP P1 后,Claude Code 能发现 VOC MCP tools。 - runner 输出结构化 JSON。 - `assistantMessage` 被优先展示。 - 失败时返回可读错误和下一步建议。 - sample 模式和 live 模式可区分。 ## 我的建议 不要先做“大一统插件”。先做 P0 轻量适配和 P1 MCP 骨架。 顺序应该是: 1. 先用 `.claude/skills` 证明 Claude Code 的用户工作流能跑通。 2. 再把 `api-config.json` 抽象成通用工具执行器。 3. 再升级成 MCP。 4. 最后做插件化分发。 这样风险最低,也不会影响 OpenClaw 当前已经跑通的技能包。