关于 myvibe-publish
myvibe-publish 是用于将 HTML 文件、ZIP 压缩包、目录或 URL 发布到 MyVibe 的技能。它涵盖项目检查、元数据准备、发布确认和部署,也支持更新现有 Vibe。
主要功能
- 01发布文件、ZIP 或目录
- 02从 URL 导入并发布
- 03设置可见性与项目元数据
- 04按 DID 更新现有 Vibe
- 05为发布生成截图
适用场景
- 01将构建好的 HTML 项目部署到 MyVibe
- 02从 ZIP 或目录发布网站
- 03从 URL 导入网页并发布
- 04更新已发布的 Vibe
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ arcblock/ myvibe-skills --skill myvibe-publish安装后在 Claude Code 中输入/myvibe-publish确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/package-lock.jsonpackage.jsonpublish.mjssave-token.mjsscripts/utils/auth.mjsblocklet-info.mjsconstants.mjsfetch-tags.mjsgenerate-screenshot.mjshistory.mjshttp.mjsstore.mjsupload-image.mjsupload.mjszip.mjs详细介绍
MyVibe 发布
将 Web 内容(HTML 文件、ZIP 存档或目录)发布到 MyVibe。
前提条件
- Node.js 18 或更高版本
- 此技能中的所有脚本执行都需要网络访问权限。始终使用
sandbox_permissions=require_escalated运行 Bash 命令,以确保启用网络权限。 - 部署和截图生成可能需要几分钟。发布命令的超时时间请设为 10 分钟(600000ms)。
用法
/myvibe:myvibe-publish --file ./dist.zip # Publish ZIP
/myvibe:myvibe-publish --file ./index.html # Publish HTML
/myvibe:myvibe-publish --dir ./dist # Publish directory
/myvibe:myvibe-publish --url https://example.com/app # Import from URL
/myvibe:myvibe-publish --dir ./dist --new # Force new Vibe
/myvibe:myvibe-publish --dir ./dist --did z2qaXXX # Update specific Vibe
选项
| 选项 | 别名 | 描述 |
|---|---|---|
--file <path> | -f | HTML 文件或 ZIP 存档的路径 |
--dir <path> | -d | 要压缩并发布的目录 |
--url <url> | -u | 要导入并发布的 URL |
--hub <url> | -h | MyVibe URL(默认值: https://www.myvibe.so/) |
--title <title> | -t | 项目标题 |
--desc <desc> | 项目描述 | |
--visibility <vis> | -v | 可见性:public 或 private(默认值:public) |
--did <did> | 用于版本更新的 Vibe DID(覆盖自动检测结果) | |
--new | 强制创建新的 Vibe,忽略发布历史 |
预授权凭据
当用户在消息中提供访问凭据(以 blocklet- 开头的字符串)时,请在发布前保存该凭据:
node {skill_path}/scripts/save-token.mjs --token "<credential>" --hub <hub-url>
--hub 参数用于指定凭据所属的 MyVibe hub。始终显式传入 --hub,以匹配发布目标 hub。如果用户指定了自定义 hub(通过发布命令或消息中的 --hub),请在此处使用相同的 URL。不要依赖默认值。
这会将凭据保存到 ~/.myvibe/,以便后续所有发布操作自动使用。不会触发浏览器身份验证。
如果用户的消息中包含凭据,请务必在此步骤中提取并保存,即使已有凭据也不例外。
工作流概览
- 检测项目类型 → 如果无需构建,则在后台开始生成截图
- 构建(如需要)→ 然后在后台开始生成截图
- 元数据分析 → 提取标题、描述和标签
- 确认发布 → 显示元数据并征求用户确认
- 执行发布 → 脚本自动读取截图结果
- 返回结果 → 显示发布 URL
首次调用工具时——并行检查依赖项并收集信息:
Bash:test -d {skill_path}/scripts/node_modules || npm install --prefix {skill_path}/scriptsRead:源文件或目录中的主要文件Bash:git remote get-url origin 2>/dev/null || echo "Not a git repo"
确认依赖项后,获取标签:
Bash:node {skill_path}/scripts/utils/fetch-tags.mjs --hub {hub}
步骤 1:检测项目类型
| 检查项 | 项目类型 | 下一步 |
|---|---|---|
使用 HTML/ZIP 的 --file | 单文件 | → 开始截图,然后执行步骤 3 |
存在包含 index.html 的 dist/、build/ 或 out/ | 已预构建 | → 执行步骤 2(确认是否重新构建) |
存在带有构建脚本的 package.json,但没有输出目录 | 可构建 | → 执行步骤 2(先构建) |
存在多个 package.json 或工作区配置 | Monorepo | → 执行步骤 2(选择应用) |
根目录下存在 index.html,但没有 package.json | 静态项目 | → 开始截图,然后执行步骤 3 |
对非构建项目开始截图(run_in_background: true):
对于目录源(--dir):
node {skill_path}/scripts/utils/generate-screenshot.mjs --dir {publish_target} --hub {hub}
对于单文件源(--file):
node {skill_path}/scripts/utils/generate-screenshot.mjs --file {publish_target} --hub {hub}
重要:当源是单个 HTML 文件时使用 --file,当源是目录时使用 --dir。标志必须与发布配置中的 source.type 一致,这样两个脚本才能为截图结果文件计算出相同的哈希值。
启动截图后台任务后,使用 TaskOutput(设置 block: false)检查任务输出,然后再继续。如果输出中包含“agent-browser is not installed”或“Chromium is not installed”:
- 安装 agent-browser:
npm install -g agent-browser && agent-browser install - 重新运行截图命令(与上方相同的命令,设置
run_in_background: true) - 再次使用
TaskOutput(block: false)检查,以确认任务正在运行
这样可以确保截图在后台成功完成,同时你继续分析元数据。
步骤 2:构建(如有需要)
根据锁文件检测包管理器,并从 package.json 脚本中检测构建命令。
使用 AskUserQuestion 确认:
- 已预构建:“重新构建还是使用现有输出?”
- 可构建:“发布前是否构建?”
- Monorepo:“要发布哪个应用?”
构建完成后,在后台开始截图(与步骤 1 中的检查相同:使用 TaskOutput 并设置 block: false,确认 agent-browser 可用;如有需要则安装,然后重试),接着继续执行步骤 3。
步骤 3:元数据分析
生成标题
MyVibe 根据标题生成页面 URL(例如,“Interactive Solar System” → interactive-solar-system),因此标题必须有意义且描述性明确。
步骤 1 - 提取原始标题候选项:
<title>标签内容og:title元数据内容package.json的 name 字段- 第一个
<h1>的内容
步骤 2 - 评估并生成: 如果提取的标题过于通用或没有意义(例如,“Document”、“Untitled”、“index”、“app”、“React App”、“Vite App”、单个字符,或类似软件包名称的“my-app”),请根据以下内容生成更好的标题:
- 项目的实际功能(根据源代码、README、对话上下文)
- 页面的视觉内容和用途
标题要求:
- 2–6 个词,简洁且描述清晰
- 描述内容/用途,而非技术(例如,“Interactive Solar System”,而不是“Three.js Demo”)
- 不使用“app”、“demo”、“project”、“page”等填充词,除非它们对表达含义至关重要
- 使用英文单词,并采用正确的大小写格式(标题式大小写)
- 如果用户明确提供了
--title,始终原样使用
生成描述(50–150 个词,采用故事叙述风格)
涵盖:原因(动机)→ 内容(功能)→ 历程(可选)
来源:对话历史、README.md、源代码、package.json、git log
指南:
- 语气自然、对话感强
- 注重价值和故事,而非技术规格
- 避免使用“A web app built with React”这类泛泛的描述
提取 githubRepo
从 git 远程地址或 package.json 的 repository 字段中提取,并将 SSH 格式转换为 HTTPS 格式。
匹配标签
获取标签:node {skill_path}/scripts/utils/fetch-tags.mjs --hub {hub}
| 标签类型 | 匹配方法 |
|---|---|
| techStackTags | 将 package.json 依赖项与标签 slug 匹配 |
| platformTags | 根据对话上下文匹配(Claude Code、Cursor 等) |
| modelTags | 根据对话上下文匹配(Claude 3.5 Sonnet、GPT-4 等) |
| categoryTags | 根据项目推断(游戏库 → 游戏,图表 → 可视化) |
第 4 步:确认发布
显示元数据并使用 AskUserQuestion:
Publishing to MyVibe:
──────────────────────
Title: [value]
Description:
[50-150 word story]
GitHub: [URL or "Not detected"]
Cover Image: [Will be included if ready]
Tags: Tech Stack: [...] | Platform: [...] | Category: [...] | Model: [...]
选项:“发布” / “编辑详情”
第 5 步:执行发布
发布脚本会自动读取截图结果文件。直接执行发布:
通过 stdin 传递配置:
node {skill_path}/scripts/publish.mjs --config-stdin <<'EOF'
{
"source": { "type": "dir", "path": "./dist", "did": "z2qaXXXX" },
"hub": "https://www.myvibe.so",
"metadata": {
"title": "My App",
"description": "Story description here",
"visibility": "public",
"githubRepo": "https://github.com/user/repo",
"platformTags": [1, 2],
"techStackTags": [3, 4],
"categoryTags": [5],
"modelTags": [6]
}
}
EOF
did可选——用于明确更新版本coverImage自动从/tmp/myvibe-screenshot-{hash}.json读取- 发布后会清理截图结果文件
操作失败后重试
如果发布脚本输出包含 retryHint: skip-upload 或显示“Upload was successful. DID: ...”,请勿重新运行完整的发布命令。应改用输出中的 DID 和 skipUpload,仅重试发布操作:
node {skill_path}/scripts/publish.mjs --config-stdin <<'EOF'
{
"source": { "type": "dir", "path": "./dist", "skipUpload": true, "did": "<DID from error output>" },
"hub": "https://www.myvibe.so",
"metadata": {
"title": "My App",
"description": "Story description here",
"visibility": "public"
}
}
EOF
这样会复用已上传的内容,只重试发布操作,避免产生重复记录。
第 6 步:返回结果
发布脚本运行完成后,检查脚本输出是否包含以下消息:
成功消息
回复中始终包含 Vibe URL 和探索提示词:
Published successfully!
🔗 [URL]
🌐 Discover more creative Vibes → {hub}/explore
探索 URL 使用相同的 {hub} 基础地址(默认为 https://www.myvibe.so)。如果用户指定了自定义 --hub,探索链接也应使用该 hub。
升级提示(重要)
更新现有 Vibe 且未启用版本历史时,脚本会打印升级提示:
📦 Previous version overwritten. Want to keep version history?
Upgrade to Creator → {hub}/pricing
如果脚本输出包含此提示,你必须在回复用户时包含这些升级信息。 这有助于免费套餐用户了解版本历史功能。
错误处理
| 错误 | 操作 |
|---|---|
| 缺少依赖项 | 在 scripts 目录中运行 npm install |
| 401/403 身份验证错误 | Token 已自动清除,重新运行以进行授权 |
| 构建失败 | 分析错误并提供修复方案,或按原样发布源代码 |
| 截图失败 | 跳过 coverImage,不带封面继续发布 |
| 缺少 agent-browser | 运行 npm install -g agent-browser && agent-browser install |
| 脚本执行失败(网络/沙盒) | 检查是否已启用网络权限。添加 sandbox_permissions=require_escalated 后重试 |
| 发布操作失败(上传成功) | 使用错误输出中的 DID 和 skipUpload: true,仅重试操作 |
| 云端 Agent 中身份验证超时 | 请用户从 https://www.myvibe.so/openclaw 获取发布提示 |
| 私密模式仅适用于 Creator 和 Studio 用户 | 参见下文“私密模式错误处理” |
私密模式错误处理
使用 visibility: private 发布时,如果失败并提示“Private mode is only available for Creator and Studio users”,请使用 AskUserQuestion 让用户选择:
问题:“私密发布需要 Creator 或 Studio 订阅。你想如何继续?”
| 选项 | 标签 | 描述 |
|---|---|---|
| 1 | 公开发布 | 你的 Vibe 将对所有人可见。升级后可以更改此设置。 |
| 2 | 查看升级选项 | 打开定价页面,查看支持私密发布的订阅方案。 |
根据选择执行操作:
- 选项 1:使用
visibility: "public"重新运行发布,并告知用户 Vibe 现已公开 - 选项 2:显示定价 URL
{hub}/pricing并停止发布流程
备注
- 始终分析内容,拟定有意义的标题/描述——切勿使用目录名称
- 发布前与用户确认
- 默认 hub:https://www.myvibe.so/
- 每次发布时都从 API 获取最新标签
- 发布历史记录在
~/.myvibe/published.yaml中,用于自动更新版本 - 使用
--new可强制创建新的 Vibe,而非更新现有内容