发布部署 · 场景放大 · 移动遥控开发

产物的最后一公里:
手机遥控写代码,产物如何出远端

Happy 在手机上遥控远端 Mac mini 跑 Claude Code 写代码——很爽,远端算力强、能放手干。但写完后的产物(网页 / 报告 / 可视化 / 图)困死在远端磁盘:手机端没有 file://、没有 localhost、够不着远端文件系统,于是看不到、存不下、发不出。 解法是给产物补一条交付管道:用 Cloudflare 一条命令把产物静态部署成公网站点,输出一个 URL——手机即看、任何人可点、随手分享。

// 核心洞察 · 这页讲什么

远程开发(尤其手机遥控)真正的瓶颈不在"写",在"交付"。代码在远端跑得飞起,可只要产物还是远端磁盘上一个本地文件,它就不属于你——你看不见、也分享不出去。这一页把这个「最后一公里」断点讲清,并收集这条交付闭环里用到的全部 Skills(操控 → 生产 → 交付 → 验证 → 沉淀,五层)。它本身,就是用文末那条命令发出来的。

01

场景全景 · 一条会断在中间的链

从手机按下指令,到产物真正能被看见,中间有一个致命断点。Cloudflare 这一节,就是把断点接上的那座桥。

📱
手机端 · Happy
在手机上遥控远端 Claude Code · 经自建 happy-server + Tailscale 打通,人不在电脑前也能下指令
操控 ↓
🖥️
远端 · Mac mini · Claude Code
算力强、真正干活的机器 · 跑编码与内容生产 skills,放手让它自主执行
产出 ↓
📦
产物 · 落在远端磁盘上
HTML 网页 · 数据可视化 · 报告 · PPT · 图——此刻它只是远端某个目录里的本地文件
✂ 断点 · 手机够不着
产物困在远端:手机端没有 file:// 双击打开、没有共享的 localhost、也没有远端文件系统访问 → 看不到 / 存不下 / 发不出。链条断在这里。
交付管道 · Cloudflare Pages
在远端用 wrangler 一条命令,把产物目录直接发成公网静态站(Direct Upload,不必先推 Git)
产出 URL ↓
🔗
公网 URL · 脱离远端
手机即看 · 任何人点开即可 · 随手丢进聊天就分享——产物终于属于你
02

为什么产物"存不下来"

桌面端干活时,产物双击 file:// 就能看,根本没有这个问题。一旦换成手机遥控远端,三道墙同时立起来。

🚫 没有 file://

桌面端双击 HTML 即 open。手机遥控时,产物在另一台机器的磁盘上,你手上的浏览器根本访问不到远端文件系统。

🚫 没有 localhost

远端起个 python -m http.server 也只在远端的 localhost。Tailscale 虽能内网直连,但要端口转发 + 一直开着机,既不持久、更不能丢给别人点。

🚫 易逝 · 不可分享

产物常是"用完即弃"的临时文件,没有稳定地址。想发给同事 / 自己手机存档,连个能点的链接都凑不出来。

⚡ 那一步"静态部署"到底在做什么:本质是给易逝的本地文件,换一个持久、可寻址、可分享的公网身份。从「远端磁盘上的一个文件」升级成「一个谁都能点的 URL」——Cloudflare Pages 就是这条管道里最短、最省心的一根:无需服务器、无需买域名,*.pages.dev 子域自动给,免费额度足够个人产物用。
03

这条闭环用到的 Skills · 按五层收集

把整条链拆成五层,每层列出真正会用上的 skill / 工具。沿用主 guide 的色彩语义:绿=自研 · 蓝=外部生态 · 橙=Cloudflare · 琥珀=环境 · 紫=沉淀

1

操控层 · 人在手机,活在远端

环境轴 · 见主 guide §02
把"手机下指令"接到"远端真正执行"。Happy 是手机操控入口(App,非 skill);连接与远端工作流靠环境轴两个 skill 兜底。
HappyApp · 手机遥控 Claude Code 入口 ssh-connect认机器 · Tailscale 免密 · 放手在远端执行 remote-dev-sync远端(算力强)改 → 本地 git pull 跑
2

生产层 · 产物从哪来

需要被交付的东西
远端真正产出"要给人看"的东西——它们正是接下来要被部署的对象。按产物类型挂对应 skill。
网页/原型 web-design-engineer高质量可视化网页/仪表盘· html-artifacts自包含单文件 HTML· frontend-design设计方向
图文/演示 article-with-images带图文章/报告· ppt-generation演示稿· web-video-presentation网页式视频
fireworks-tech-graph架构/流程图· gpt-image-2· warm-doodle手绘插图
3

交付层 · 把产物变成 URL

本场景核心cloudflare/skills
整条闭环的关键一节。Cloudflare 是首选(本页就用它);Vercel / 阿里云 OSS 是等效备选。
主选 · CF wrangler部署 CLI · 一条命令上线 · 本次主角· cloudflare平台总览 Pages/Workers/R2/KV· workers-best-practices若要配动态 Worker
备选 deploy-to-vercel一键静态部署 · 思路一一对应· vercel-cli 阿里云 OSSvia alibabacloud-find-skills · ossutil
缺口 deploy-to-cloudflare待造 · 对标 deploy-to-vercel,把本页流程固化成一句话 skill
4

验证层 · 确认手机真能打开

部署后
拿到 URL 不等于成功——部署完顺手验一下状态码 / 渲染,免得发出去是个 404。
web-connectCDP 真浏览器打开 + 截图,比 curl 直观· playwright-cli无头浏览器自动化校验· curl状态码 / 重定向终点 / 标题
5

沉淀层 · 让这次经验复用

沉淀底座 · 见主 guide §02
部署经验 + 产物本身都值得回收,免得下次又从零摸。
ob-bridge产物 + 会话 transcript 卸货到 Obsidian _inbox· ob-collect / ob-topic把命令/踩坑收进知识库· distiller提炼成可复用方案· skill-creator固化成 deploy-to-cloudflare
04

最短交付命令 · 一条把产物送上公网

难点从来不在命令长短,而在三个隐性点:鉴权非交互的 -yclean URL 的 308(见下方三块)。命令本身就这么短:

远端 Mac mini · zsh
# 1) 准备一个干净目录,把产物复制成 index.html(它会成为根路径 /)
mkdir -p cf-deploy && cp out/report.html cf-deploy/index.html

# 2) 一条命令部署 —— npx 即用即跑不污染全局,-y 免交互(后台/非 TTY 必加)
npx -y wrangler@latest pages deploy cf-deploy \
  --project-name my-artifact \
  --branch main \
  --commit-dirty=true

# 3) 验证(期望 200)
curl -s -o /dev/null -w "%{http_code}\n" https://my-artifact.pages.dev/

# ✨ Success! → 🌎 https://my-artifact.pages.dev  ← 把这个 URL 发回手机
🔗 实证: 本页与主 guide 都是这么发出来的 —— skill-system-guide.pages.dev(HTTP 200 ✅)。首次需先 npx -y wrangler@latest pages project create <名字> --production-branch main 建项目;之后每次改完只跑第 2 步即可重新发布。
① 鉴权

OAuth(wrangler login 走浏览器,token 会自动续期)或 API Token(CLOUDFLARE_API_TOKEN,适合无浏览器/CI)。权限需含 pages (write)

② 非交互 -y

首次装包的 "Ok to proceed?" 在非 TTY(后台 / 手机遥控)下无人应答会卡死npx -y 自动确认,是无人值守部署的关键。

③ clean URL 308

Pages 默认把 /x.html 308 永久重定向到去扩展名的 /x。对外只给根路径 / 或无扩展名路径,最稳。