/claude-skill-web-clone
网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 / React-Vue-Next 内容站 / WebGL-Canvas 重前端站三大分支,并强制核对任何 AI 二手分析里的可执行代码。
$ npx -y skills add Jane-xiaoer/claude-skill-web-clone --skill claude-skill-web-clone --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/claude-skill-web-clone
Context preview
The summary Claude sees to decide when to auto-load this skill.
网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 / React-Vue-Next 内容站 / WebGL-Canvas 重前端站三大分支,并强制核对任何 AI 二手分析里的可执行代码。
SKILL.md
claude-skill-web-clone.SKILL.mdname: web-clone
description: >
网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、
照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、
复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 →
搭工程 → 替换内容」的可移植决策树,覆盖静态站 / React-Vue-Next 内容站 /
WebGL-Canvas 重前端站三大分支,并强制核对任何 AI 二手分析里的可执行代码。
metadata:
author: jane (xiaoer)
version: "1.6.0"
use_case: 个人本地复刻/学习网站,沉淀自 website-clones 克隆中枢
Web Clone · 网站复刻方法论
把"复刻一个网站"做成可重复的流程。配套工程区:`~/projects/website-clones/`(每个复刻是一个子目录)。
头号铁律:真源码至上,绝不信 AI 推测的代码
> 任何 AI 生成的"复刻分析/施工图",**正文的概念骨架可以参考,但里面的可执行代码块默认全是臆造的**,必须逐行用真源码核对,否则照抄必崩。
**实证(marbles 案例)**:一份 AI 分析文档把原站"解析法求光线-球体交点 + 把光学结果编码成位移图、交给 SVG `feDisplacementMap` 去扭曲真实 DOM"的真架构,臆造成了"ray-marching + SDF + 把 DOM 当纹理采样"——两套完全不同的实现,照抄做不出原效果且慢 N 倍。详见 `references/marbles-case.md`。
所以第一动作永远是:**拿到真源码**。
决策树(按顺序走,不许跳)
Step 0 · 先建标准工程骨架
node /Users/jane/.shared-skills/web-clone/scripts/init-clone.mjs <站名> --url <原站URL>
该脚本会创建 `~/projects/website-clones/<站名>-clone/`、`NOTES.md`、`RECON/screenshots/`,避免每次手工漏掉产物。
Step 1 · 先去 GitHub 搜源码,别急着抓站
unset SSL_CERT_FILE # macOS 怪癖,bash 前先解
# 按站名/产品名搜
SSL_CERT_FILE=/etc/ssl/cert.pem gh api "search/repositories?q=<关键词>" \
| jq -r '.items[] | "\(.full_name) ⭐\(.stargazers_count) \(.description)"' | head -10
# vercel.app/netlify.app/github.io 的 URL slug 常常就是 仓库名 / 部署者用户名
- 单文件站(github.io / 纯 HTML)→ 直接抓 raw:`curl -sL https://raw.githubusercontent.com/<user>/<repo>/main/index.html`
- **找到源码且许可允许 → 跳 Step 4 直接 clone。** 教训:先搜 GitHub 能省 30 分钟弯路。
Step 2 · 没找到源码 → 浏览器侦察(探针)
加载 `Browser` skill 或 playwright MCP,跑探针抽信号(框架 / `window.THREE` / canvas 数 / 平滑滚动库 / 字体 / scrollHeight)。截图 1440/768/390 三档 + 侦察 JSON 存 `<站>/RECON/`。
优先用内置脚本跑标准侦察:
node /Users/jane/.shared-skills/web-clone/scripts/recon-site.mjs \
--url <原站URL> \
--out ~/projects/website-clones/<站名>-clone/RECON \
--label original
node /Users/jane/.shared-skills/web-clone/scripts/asset-harvest.mjs \
--recon ~/projects/website-clones/<站名>-clone/RECON/original-recon.json \
--out ~/projects/website-clones/<站名>-clone/assets/original \
--manifest ~/projects/website-clones/<站名>-clone/RECON/asset-manifest.json
node /Users/jane/.shared-skills/web-clone/scripts/network-capture.mjs \
--url <原站URL> \
--out ~/projects/website-clones/<站名>-clone/RECON/network \
--label original
node /Users/jane/.shared-skills/web-clone/scripts/route-crawl.mjs \
--url <原站URL> \
--out ~/projects/website-clones/<站名>-clone/RECON/routes \
--label original \
--max-pages 25 \
--max-depth 2
node /Users/jane/.shared-skills/web-clone/scripts/interaction-probe.mjs \
--url <原站URL> \
--out ~/projects/website-clones/<站名>-clone/RECON/interactions \
--label original
node /Users/jane/.shared-skills/web-clone/scripts/sourcemap-hunt.mjs \
--recon ~/projects/website-clones/<站名>-clone/RECON/original-recon.json \
--out ~/projects/website-clones/<站名>-clone/RECON/sourcemaps
> 登录态私域站才用 `bb-browser`;localhost / 无登录公开站用 `Browser` skill 或 playwright(别动 bb-browser,会抢 Brave)。
Step 2.5 · 先给复杂度定级,别盲目承诺
根据侦察结果先写一版"复刻前预判":复杂度 L1-L6、推荐模式(忠实复刻 / 视觉复刻 / 内容爆改)、预计可还原范围、明确不克隆的部分。分级和评分规则见 `references/assessment.md`。
**若模式是「视觉复刻」或「内容爆改」** → 顺手产出结构化设计身份 `design-dna.json`,把"那个站的感觉"变成可版本化、可对照的 token 规范,让 Step 6 替换时"DNA 留着、内容换掉"有据可依:
node /Users/jane/.shared-skills/web-clone/scripts/dna-scaffold.mjs \
--recon ~/projects/website-clones/<站名>-clone/RECON/original-recon.json \
--out ~/projects/website-clones/<站名>-clone/RECON/design-dna.json \
--name "<站名>"
脚本会把侦察到的字体/色候选/框架特效信号 best-effort 预填,其余字段人工 Analyze 补全。三维结构(design_system / design_style / visual_effects)、完整 schema、适用边界见 `references/design-dna.md`。 > ⚠️ **「忠实复刻」分支不要用 DNA**:真源码就是真相,别让"近似风格"的 DNA 稀释逐字节铁律。
Step 3 · 按侦察结果选路径
| 侦察结果 | 走哪条路 | |---|---| | 静态 HTML/CSS,无框架 | `wget --mirror` 抓镜像 → 删追踪脚本 → 改文案 | | React / Vue / Next(内容为主) | 重建模板(如 `ai-website-cloner-template`,Node 24+),灌内容 | | SPA / SaaS / 数据驱动页面 | 先跑 `network-capture.mjs` 保存 API fixtures → 本地 JSON/mock server 替身 | | 多页面官网 / 产品站 | 先跑 `route-crawl.mjs` 做路由地图 → 每类页面抽模板 → 统一替换内容 | | 复杂交互站 | 先跑 `interaction-probe.mjs` 记录 hover/click/scroll/canvas drag 状态 → 按状态补交互,不许只截首屏 | | **WebGL / Canvas / Three.js 重前端** | **深度逆向真源码(见下)→ 忠实复刻 或 找同类开源 3D 模板换内容**。单文件原生站常常逐字节保留=最忠实复刻。**找不到真源码时走运行时帧捕获 + baseline 闸门**,纪律见 `references/effect-extraction.md`(可委托 web-shader-extractor) | | **静态构建站(Astro/Vite SSG/Hugo),含重 WebGL** | **`mirror-site.mjs` 全量镜像部署资产 → 自托管字体 + 删追踪 → 本地 web 根服务 = 真源码 1:1 忠实复刻**。对静态站,"拿到真源码"="镜像部署资产整套"。配方见 `references/static-mirror.md`。范例:oryzo.ai(Lusion,L6,高斯泼溅,hero 像素 diff 5/5) | | 用现成开源主题的站(Astro/Hugo 主题) | 去对应主题市场找源主题(**仅限套用现成主题的站**;定制站走上一行的全量镜像,别来这行) |
L4-L6 复杂站按 `references/complex-playbooks.md` 走,不要只用普通官网流程。
Step 4 · 在克隆中枢里搭工程
mkdir ~/projects/website-clones/<站名>-clone && cd $_
# git 源码:clone 进来;单文件:放进来。原始源码留一份只读基准 index-original.html
# 检查 Node 版本(package.json engines),nvm use 对应版本,钉 .nvmrc
Step 5 · 删追踪 + 写元信息 + 验证
- **删追踪**:Google Analytics(`gtag` / `googletagmanager`)、像素、热图——逐行精确切除(GA 块常在 `<head>` 顶部)。
- **写 NOTES.md**(必须):包含复杂度、复刻模式、原站 vs 克隆站对比、保真度评分、已知缺口。模板见 `references/deliverables.md`。
- **复杂站写 TEARDOWN.md**(技术拆解)。所有结论标真源码行号。
- **复刻后评分**:按 `references/assessment.md` 给结构 / 视觉 / 交互 / 响应式 / 内容替换 / 功能完整度打分。分数要能被截图、源码、运行结果支撑。
- **浏览器真验证**(硬要求,不许只看代码就说"应该能跑"):起本地服务器 → 浏览器打开 → 抓 console(不能有 JS/WebGL 编译错误)→ 截图对照原站。诚实记录验证不了的部分(如合成 PointerEvent `isTrusted=false` 触发不了拖拽,要如实写,别伪造"拖动成功")。
复刻完成后再跑一次克隆站侦察,并生成自动对比报告:
node /Users/jane/.shared-skills/web-clone/scripts/recon-site.mjs \
--url http://127.0.0.1:<端口>/ \
--out ~/projects/website-clones/<站名>-clone/RECON \
--label clone
node /Users/jane/.shared-skills/web-clone/scripts/route-crawl.mjs \
--url http://127.0.0.1:<端口>/ \
--out ~/projects/website-clones/<站名>-clone/RECON/routes-clone \
--label clone \
--max-pages 25 \
--max-depth 2
node /Users/jane/.shared-skills/web-clone/scripts/interaction-probe.mjs \
--url http://127.0.0.1:<端口>/ \
Read more
name: web-clone description: > 网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 / React-Vue-Next 内容站 / WebGL-Canvas 重前端站三大分支,并强制核对任何 AI 二手分析里的可执行代码。 metadata: author: jane (xiaoer) version: "1.6.0" use_case: 个人本地复刻/学习网站,沉淀自 website-clones 克隆中枢
Web Clone · 网站复刻方法论
把"复刻一个网站"做成可重复的流程。配套工程区:`~/projects/website-clones/`(每个复刻是一个子目录)。
头号铁律:真源码至上,绝不信 AI 推测的代码
> 任何 AI 生成的"复刻分析/施工图",**正文的概念骨架可以参考,但里面的可执行代码块默认全是臆造的**,必须逐行用真源码核对,否则照抄必崩。
**实证(marbles 案例)**:一份 AI 分析文档把原站"解析法求光线-球体交点 + 把光学结果编码成位移图、交给 SVG `feDisplacementMap` 去扭曲真实 DOM"的真架构,臆造成了"ray-marching + SDF + 把 DOM 当纹理采样"——两套完全不同的实现,照抄做不出原效果且慢 N 倍。详见 `references/marbles-case.md`。
所以第一动作永远是:**拿到真源码**。
决策树(按顺序走,不许跳)
Step 0 · 先建标准工程骨架
node /Users/jane/.shared-skills/web-clone/scripts/init-clone.mjs <站名> --url <原站URL>
该脚本会创建 `~/projects/website-clones/<站名>-clone/`、`NOTES.md`、`RECON/screenshots/`,避免每次手工漏掉产物。
Step 1 · 先去 GitHub 搜源码,别急着抓站
unset SSL_CERT_FILE # macOS 怪癖,bash 前先解 # 按站名/产品名搜 SSL_CERT_FILE=/etc/ssl/cert.pem gh api "search/repositories?q=<关键词>" \ | jq -r '.items[] | "\(.full_name) ⭐\(.stargazers_count) \(.description)"' | head -10 # vercel.app/netlify.app/github.io 的 URL slug 常常就是 仓库名 / 部署者用户名
- 单文件站(github.io / 纯 HTML)→ 直接抓 raw:`curl -sL https://raw.githubusercontent.com/<user>/<repo>/main/index.html`
- **找到源码且许可允许 → 跳 Step 4 直接 clone。** 教训:先搜 GitHub 能省 30 分钟弯路。
Step 2 · 没找到源码 → 浏览器侦察(探针)
加载 `Browser` skill 或 playwright MCP,跑探针抽信号(框架 / `window.THREE` / canvas 数 / 平滑滚动库 / 字体 / scrollHeight)。截图 1440/768/390 三档 + 侦察 JSON 存 `<站>/RECON/`。
优先用内置脚本跑标准侦察:
node /Users/jane/.shared-skills/web-clone/scripts/recon-site.mjs \ --url <原站URL> \ --out ~/projects/website-clones/<站名>-clone/RECON \ --label original node /Users/jane/.shared-skills/web-clone/scripts/asset-harvest.mjs \ --recon ~/projects/website-clones/<站名>-clone/RECON/original-recon.json \ --out ~/projects/website-clones/<站名>-clone/assets/original \ --manifest ~/projects/website-clones/<站名>-clone/RECON/asset-manifest.json node /Users/jane/.shared-skills/web-clone/scripts/network-capture.mjs \ --url <原站URL> \ --out ~/projects/website-clones/<站名>-clone/RECON/network \ --label original node /Users/jane/.shared-skills/web-clone/scripts/route-crawl.mjs \ --url <原站URL> \ --out ~/projects/website-clones/<站名>-clone/RECON/routes \ --label original \ --max-pages 25 \ --max-depth 2 node /Users/jane/.shared-skills/web-clone/scripts/interaction-probe.mjs \ --url <原站URL> \ --out ~/projects/website-clones/<站名>-clone/RECON/interactions \ --label original node /Users/jane/.shared-skills/web-clone/scripts/sourcemap-hunt.mjs \ --recon ~/projects/website-clones/<站名>-clone/RECON/original-recon.json \ --out ~/projects/website-clones/<站名>-clone/RECON/sourcemaps
> 登录态私域站才用 `bb-browser`;localhost / 无登录公开站用 `Browser` skill 或 playwright(别动 bb-browser,会抢 Brave)。
Step 2.5 · 先给复杂度定级,别盲目承诺
根据侦察结果先写一版"复刻前预判":复杂度 L1-L6、推荐模式(忠实复刻 / 视觉复刻 / 内容爆改)、预计可还原范围、明确不克隆的部分。分级和评分规则见 `references/assessment.md`。
**若模式是「视觉复刻」或「内容爆改」** → 顺手产出结构化设计身份 `design-dna.json`,把"那个站的感觉"变成可版本化、可对照的 token 规范,让 Step 6 替换时"DNA 留着、内容换掉"有据可依:
node /Users/jane/.shared-skills/web-clone/scripts/dna-scaffold.mjs \ --recon ~/projects/website-clones/<站名>-clone/RECON/original-recon.json \ --out ~/projects/website-clones/<站名>-clone/RECON/design-dna.json \ --name "<站名>"
脚本会把侦察到的字体/色候选/框架特效信号 best-effort 预填,其余字段人工 Analyze 补全。三维结构(design_system / design_style / visual_effects)、完整 schema、适用边界见 `references/design-dna.md`。 > ⚠️ **「忠实复刻」分支不要用 DNA**:真源码就是真相,别让"近似风格"的 DNA 稀释逐字节铁律。
Step 3 · 按侦察结果选路径
| 侦察结果 | 走哪条路 | |---|---| | 静态 HTML/CSS,无框架 | `wget --mirror` 抓镜像 → 删追踪脚本 → 改文案 | | React / Vue / Next(内容为主) | 重建模板(如 `ai-website-cloner-template`,Node 24+),灌内容 | | SPA / SaaS / 数据驱动页面 | 先跑 `network-capture.mjs` 保存 API fixtures → 本地 JSON/mock server 替身 | | 多页面官网 / 产品站 | 先跑 `route-crawl.mjs` 做路由地图 → 每类页面抽模板 → 统一替换内容 | | 复杂交互站 | 先跑 `interaction-probe.mjs` 记录 hover/click/scroll/canvas drag 状态 → 按状态补交互,不许只截首屏 | | **WebGL / Canvas / Three.js 重前端** | **深度逆向真源码(见下)→ 忠实复刻 或 找同类开源 3D 模板换内容**。单文件原生站常常逐字节保留=最忠实复刻。**找不到真源码时走运行时帧捕获 + baseline 闸门**,纪律见 `references/effect-extraction.md`(可委托 web-shader-extractor) | | **静态构建站(Astro/Vite SSG/Hugo),含重 WebGL** | **`mirror-site.mjs` 全量镜像部署资产 → 自托管字体 + 删追踪 → 本地 web 根服务 = 真源码 1:1 忠实复刻**。对静态站,"拿到真源码"="镜像部署资产整套"。配方见 `references/static-mirror.md`。范例:oryzo.ai(Lusion,L6,高斯泼溅,hero 像素 diff 5/5) | | 用现成开源主题的站(Astro/Hugo 主题) | 去对应主题市场找源主题(**仅限套用现成主题的站**;定制站走上一行的全量镜像,别来这行) |
L4-L6 复杂站按 `references/complex-playbooks.md` 走,不要只用普通官网流程。
Step 4 · 在克隆中枢里搭工程
mkdir ~/projects/website-clones/<站名>-clone && cd $_ # git 源码:clone 进来;单文件:放进来。原始源码留一份只读基准 index-original.html # 检查 Node 版本(package.json engines),nvm use 对应版本,钉 .nvmrc
Step 5 · 删追踪 + 写元信息 + 验证
- **删追踪**:Google Analytics(`gtag` / `googletagmanager`)、像素、热图——逐行精确切除(GA 块常在 `<head>` 顶部)。
- **写 NOTES.md**(必须):包含复杂度、复刻模式、原站 vs 克隆站对比、保真度评分、已知缺口。模板见 `references/deliverables.md`。
- **复杂站写 TEARDOWN.md**(技术拆解)。所有结论标真源码行号。
- **复刻后评分**:按 `references/assessment.md` 给结构 / 视觉 / 交互 / 响应式 / 内容替换 / 功能完整度打分。分数要能被截图、源码、运行结果支撑。
- **浏览器真验证**(硬要求,不许只看代码就说"应该能跑"):起本地服务器 → 浏览器打开 → 抓 console(不能有 JS/WebGL 编译错误)→ 截图对照原站。诚实记录验证不了的部分(如合成 PointerEvent `isTrusted=false` 触发不了拖拽,要如实写,别伪造"拖动成功")。
复刻完成后再跑一次克隆站侦察,并生成自动对比报告:
node /Users/jane/.shared-skills/web-clone/scripts/recon-site.mjs \ --url http://127.0.0.1:<端口>/ \ --out ~/projects/website-clones/<站名>-clone/RECON \ --label clone node /Users/jane/.shared-skills/web-clone/scripts/route-crawl.mjs \ --url http://127.0.0.1:<端口>/ \ --out ~/projects/website-clones/<站名>-clone/RECON/routes-clone \ --label clone \ --max-pages 25 \ --max-depth 2 node /Users/jane/.shared-skills/web-clone/scripts/interaction-probe.mjs \ --url http://127.0.0.1:<端口>/ \
Reproduce any website — from a single-file static page to a WebGL-heavy interactive demo — without faking it from AI hallucinations. 把任何一个网站(从单文件静态页到 WebGL 重前端 demo)忠实复刻出来 —— 不靠 AI 臆测代码硬抄。
Repo: Jane-xiaoer/claude-skill-web-clone

