把刚刚和用户一起打磨好的 HTML 原型加密后发布到 GitHub Pages(Public 仓库),返回一个稳定链接。同事打开链接需要输入项目口令,浏览器本地解密后才能看到原型内容。
存储后端是可替换的(scripts/backends.py 的抽象层)。当前实现是 GitHub Pages,未来切换公司内网 CDN 时只需新增一个 Backend 类。
用户输入
│
├── 包含 GitHub 用户名/token 等? → 走「首次配置流程」
│
├── 想上传/分享原型? → 走「上传流程」
│
└── 模糊,先问清楚
python3 scripts/upload.py health
找不到配置文件 → 走「首次配置流程」Token 无效 → 引导用户重新生成 token403 Forbidden 或 blocked-by-allowlist → 沙盒网络被禁了。引导用户: > Claude 默认不让 skill 访问外部网络。请去 Settings → Capabilities → Allow network egress,在 Additional allowed domains 里加上 api.github.com,然后开个新对话再来找我(这个设置不会应用到当前对话)。详见 SETUP.md 第 0 步。
HTML 必须是本地文件。
/tmp/prototype.htmlcreate_file 写入 /tmp/prototype.html绝对不要自己猜。
```bash
python3 scripts/upload.py list
```
有项目时:
> 服务器上目前有:1. 登录页 2. 订单流程
>
> 这次的原型属于哪个?告诉我编号或者一个新项目名。
没项目时:
> 这是第一个原型,给它起个项目名吧(例如「登录页」「订单流程」)。
python3 scripts/upload.py has-password --project "<项目名>"
如果返回 has_password: true:
```bash
python3 scripts/upload.py verify-password --project "<项目名>" --password "<用户给的口令>"
```
valid: false → 告诉用户口令不对,让他重输。不要绕过这一步。valid: true → 进第 5 步注意:现有项目用错误口令上传虽然技术上能加密成功,但同事用旧口令解不开,会让大家很困惑。所以必须校验。
如果是用户刚命名的新项目:
> 这是新项目,给它设个口令吧(同事访问时要输这个口令,至少 4 位)。
>
> 提示:选个简单好记的,比如 team2026、abcd1234 —— 它只用于本项目原型的访问保护,不是高安全场景。
等用户回复口令。不要自己生成口令 —— 用户得记住才行。
新项目:必须问作者名,作为这个项目 PRD 的负责产品经理。
> 这个项目的负责人(作者)是谁?我会把名字显示在原型页面和项目列表里。
让用户回答(可以是中文姓名、英文工号、邮箱前缀等,由用户决定格式)。不要自己猜或填默认值。
已有项目:默认不动作者,但可以让用户选择是否更新:
调用 meta 子命令查当前作者:
python3 scripts/upload.py meta --project "<项目名>"
返回 {author: "王云鹏", ...} 后,轻量提示一下:
> 当前作者是「王云鹏」,需要换成别人吗?(比如交接给新同事了。直接说"不用"就保持不变)
--author--author "新名字"不要为这事卡住流程 —— 默认就是不变。
简短问「这次改了什么?我顺便记到 commit 里」。用户提了就传 --note,没提就跳过。
python3 scripts/upload.py upload \
--project "<项目名>" \
--password "<项目口令>" \
--html-file /tmp/prototype.html \
--author "<新项目必填,已有项目省略代表不变>" \
--note "<可选>"
成功返回:
{
"success": true,
"url": "https://xxx.github.io/team-prototypes/登录页/latest.html",
"versioned_url": "https://xxx.github.io/team-prototypes/登录页/2026-04-28_15-30-00.html",
"project_url": "https://xxx.github.io/team-prototypes/登录页/",
"home_url": "https://xxx.github.io/team-prototypes/",
"filename": "2026-04-28_15-30-00.html",
"timestamp": "2026-04-28_15-30-00",
"author": "王云鹏"
}
按这个格式(自然组织,别照搬):
✅ 已上传(已加密,需口令访问)
📐 项目:登录页 · 作者 王云鹏
🔗 发给同事的链接(永远指向最新版):
https://xxx.github.io/team-prototypes/登录页/latest.html
🔑 访问口令:<项目口令>
📌 这次具体版本:
https://xxx.github.io/team-prototypes/登录页/2026-04-28_15-30-00.html
📂 项目所有版本:
https://xxx.github.io/team-prototypes/登录页/
⏱ GitHub Pages 部署需 30-60 秒,第一次打开如果 404,稍等再刷新。
💡 同事输一次口令后 7 天免输入。
重要:每次上传都把口令一并展示给用户,让他能直接复制连同链接一起发给同事。
> 第一次用要做 5 分钟的 GitHub 设置(全程在浏览器里完成,不用打开终端)。
> 请打开 SETUP.md 跟着步骤走,最后一步把信息回贴给我。
从用户消息里提取 4 个字段:
任一缺失 → 问用户补全,不要瞎猜。
用 create_file 在 skill 根目录写:
{
"backend": "github",
"github": {
"token": "<token>",
"owner": "<用户名>",
"repo": "<仓库名>",
"pages_url": "<pages 地址>",
"branch": "main"
}
}
python3 scripts/upload.py health
成功 → 「配置完成,可以上传原型了」并建议测试一次。
失败 → 按错误内容引导:
Token 无效 → 让他确认 token 是否完整、是否选了 Contents: Read and write仓库不存在 → owner/repo 拼写403 Forbidden / blocked-by-allowlist / connection refused → 沙盒网络问题,引导用户去 Settings → Capabilities → Additional allowed domains 加上 api.github.com,然后开新对话再回来。这是首次配置最常见的卡点。如果 Memory 启用:把 owner/repo/pages_url 不含 token 存到 Memory,方便下次新对话直接读取。Token 已经在 config.json 里持久化了,不需要再在 Memory 里存第二份。
用户说「上传」但没有 HTML:
问:「你想上传哪个原型?是当前对话里的某个 HTML,还是某个本地文件?」
同事说「打不开 / 口令不对」:
用户忘了某项目口令:
口令只存了哈希,没法找回。两个选择:
python3 scripts/upload.py set-password --project "" --password "<新口令>" ,但注意:旧版本是用旧口令加密的,仍然要旧口令才能解 —— 重设口令只影响之后上传的文件。告诉用户这一点。用户想用同一份 HTML 传到多个项目:
依次跑两次 upload。注意每个项目可能口令不同。
HTML 体积大:
GitHub 单文件 100MB 上限,加密会让密文略大但同量级。>5MB 时提醒用户「这个原型有点大,可能是嵌入了图片」。
共 1 个版本