FAQ
claude-copy is a Claude Code plugin with 11 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes chrome-development, html, image. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Repo: HarKro753/claude-copy

Rebuild any interface โ then prove the rebuild is right, one pixel at a time.
Every tool in this category claims pixel-perfect. clone is the one that checks.
A Chrome extension captures a live site's screenshot, DOM, and computed styles. A Claude Code plugin rebuilds the page from that capture, renders its own output back into headless Chromium, and diffs it against the original screenshot. Every region gets a score. Nothing is finished until every score clears its floor.
See the measurements โ ยท Read a teardown โ
Each row is a live production page, rebuilt from scratch and diffed against its own reference at the same size and device pixel ratio. exact is the share of pixels identical to the original on all three channels, with no tolerance whatsoever.
| Capture | Frame | Pixels exact | Within 8/255 | Mean ฮ | |
|---|---|---|---|---|---|
| Doppler โ Team settings | 1920ร937 | 97.69% | 98.05% | 1.27 | Teardown |
| Tailscale โ Access rules | 1534ร921 | 97.58% | 98.80% | 0.65 | |
| Cal.com โ Bookings | 1921ร937 | 94.67% | 97.88% | 1.41 | |
| Stripe โ Dashboard | 1920ร929 | 94.45% | 94.86% | 1.70 | |
| Cloudflare โ Dashboard | 1920ร929 | 91.88% | 95.46% | 3.87 |
Doppler and Tailscale sit near 97.6% because token-driven product surfaces are exactly what the pipeline is built for. Cloudflare is the floor of the set, and the gap is almost entirely antialiasing along small-glyph edges plus the image content every rebuild deliberately replaces with neutral placeholders โ a part that can never reach 100% by design, which is why the within-8 column is the more useful read on dense screens.
| Original | Clone | Pixel diff |
|---|---|---|
![]() | ![]() | ![]() |
Written up in full: Doppler's team settings page, measured to the pixel โ an eleven-value grey ramp, a radius ladder tied to element size, and an accent color used exactly four times.
| Original | Clone |
|---|---|
![]() | ![]() |
| Original | Clone | Pixel diff |
|---|---|---|
![]() | ![]() | ![]() |
| Original | Clone | Pixel diff |
|---|---|---|
![]() | ![]() | ![]() |
| Original | Clone | Pixel diff |
|---|---|---|
![]() | ![]() | ![]() |
In every diff, dark means agreement. Color appears only where the clone and the original disagree โ chiefly the brand marks and photographic content the pipeline deliberately refuses to reproduce.
/clone:html emits a static page.html. /clone:react emits shadcn/ui components with the site's captured states (hover, focus, dialogs) as real props. Same measurement code underneath.Ask an agent to copy a UI and it will invent a 13px gap, pick a grey that's two steps off, and tell you it's done. The fix isn't a better prompt โ it's removing the agent's opinion from the acceptance decision.
So the capture is treated as ground truth (a real PNG bitmap plus the computed styles that produced it), and the rebuild is graded against it every cycle until it passes. Drift stops being a matter of taste and becomes a number that either clears the floor or doesn't.
What you keep afterwards is not the clone. Nobody should ship one โ it has no data, no responsive behaviour, and no reason to exist. What survives is the layer above it: the real token ramp, the type scale, the elevation model, the exact grey that reads as a border instead of a line. That's the part a team takes years to converge on, and the part a generative tool approximates badly and confidently. Wiring a database to a table component was never the hard bit.
graph LR
A[Chrome extension] -->|ref.png ยท DOM ยท computed styles| B[capture folder]
B --> C[prep ยท extract ยท resolve ยท cluster]
C --> D[author page.html / .tsx]
D --> E[check: render โ diff โ score]
E -->|failing boxes| D
E -->|0 failing| F[verified clone]
:hover/:focus states.base.css, tokens, self-hosted fonts, open-source icon glyphs), and cluster repeated subtrees into components.layout.md. The only step where anything is guessed.Full architecture: docs/CODEBASE_MAP.md ยท pipeline design rationale: docs/PIPELINE_GRAPH.md.
clone is a Claude Code plugin. Install it from this repo's marketplace:
/plugin marketplace add HarKro753/claude-copy
/plugin install clone@clone-marketplace
Enabling the plugin puts the clone CLI on your Bash PATH and loads the /clone:html and /clone:react skills. See Requirements for the Python, Node, and Chrome pieces.
The capture side is a Chrome MV3 extension in capture-extension/, loaded unpacked โ no Web Store, no account:
chrome://extensions.capture-extension/ folder.The copy-website capture action then appears in your toolbar and writes a capture folder that clone prep consumes.
clone prep <session> --target html|react # target recorded in routes.json
clone extract # layout.md, tree.json, shared/*
clone resolve # fetch/recolor open-source icon glyphs
clone cluster # detect repeated components
clone init | map | build # react target only
clone check [route] # render โ diff โ score, loop until 0 failing
Static HTML is one line per phase. React adds init (scaffold + theme), map (a shadcn component per node), and build (vite โ self-contained page.html).
A web app is not one capture โ it's one capture per screen. Capture the dashboard, then billing, then settings; each becomes its own verified route, and the shared design system is derived across all of them so the routes agree with each other instead of drifting apart.
Worth knowing before you install, rather than after:
python3 โ the oracle.capture-extension/ as an unpacked Manifest V3 extension.clone plugin enabled.assets/ README banner + the measured gallery (original ยท render ยท diff)
example/ a live static clone (render.html + its fonts/css/svg)
capture-extension/ Chrome MV3 capture tool
skills/clone/ the pipeline plugin (engine/ + html & react targets)
docs/ CODEBASE_MAP.md ยท PIPELINE_GRAPH.md
The engine is skills/clone/engine/ โ one module per concern, with both artifacts behind a shared Target interface, so adding a third is one file in targets/, not a fork. After touching the engine, run all four test files:
cd skills/clone/tests
python3 -m pytest test_engine.py test_react.py test_hook.py test_e2e.py
Rebuilding a page to within a pixel means reading every decision its designers made. Those readings are written up at officeos.co/teardowns โ type ramps, spacing grids, the exact border greys, and why each choice does what it does, all sourced from values that had to be right for the diff to pass.
The products above are used purely as technical subjects for measurement and design analysis. This project is not affiliated with, endorsed by, or sponsored by any of them; all trademarks and brand marks belong to their respective owners. Brand marks are dropped from every rebuild, photographic content is replaced with neutral placeholders, and clones are rendered locally for measurement only โ never deployed or served as live sites.
MIT ยฉ Harro Krog. See CONTRIBUTING, Code of Conduct, and Security Policy.
Built by OfficeOS โ we design, build, launch and operate subscription apps for creators, and are paid only from what they earn.
.claude/
.claude-plugin/
marketplace.json
hooks/
session_log.py
settings.json
skills/
chrome-development/
SKILL.md
clone/
.claude-plugin/
plugin.json
bin/
clone
engine/
__init__.py
__main__.py
assets.py
check.py
cli.py
cluster.py
extract.py
glyphs.py
measure.py
prep.py
progress.py
score.py
styles.py
targets/
__init__.py
html.py
react.py
templates/
__init__.py
clone-env.d.ts
index.html
main.tsx
route.tsx
vite.config.ts
util.py
hooks/
guard.py
hooks.json
README.md
references/
pipeline.md
skills/
html/
SKILL.md
image/
render.py
SKILL.md
template.html
react/
SKILL.md
tests/
test_e2e.py
test_engine.py
test_hook.py
test_react.py
copywriting/
references/
copy-frameworks.md
natural-transitions.md
SKILL.md
dense-ui-metrics/
references/
component-patterns.md
regimes.md
SKILL.md
plugin-creator/
references/
components.md
manifest.md
marketplace.md
scripts/
preflight.py
SKILL.md
shadcn/
agents/
openai.yml
assets/
shadcn-small.png
shadcn.png
cli.md
customization.md
evals/
evals.json
mcp.md
registry.md
rules/
base-vs-radix.md
chat.md
composition.md
forms.md
icons.md
styling.md
SKILL.md
skill-creator/
agents/
analyzer.md
comparator.md
grader.md
assets/
eval_review.html
eval-viewer/
generate_review.py
viewer.html
references/
schemas.md
scripts/
__init__.py
aggregate_benchmark.py
generate_report.py
improve_description.py
package_skill.py
quick_validate.py
run_eval.py
run_loop.py
utils.py
SKILL.md
.github/
ISSUE_TEMPLATE/
bug_report.md
config.yml
feature_request.md
PULL_REQUEST_TEMPLATE.md
workflows/
ci.yml
.gitignore
assets/
boxes.png
diff.png
gallery/
cal/
diff.png
original.png
render.png
cloudflare/
diff.png
original.png
render.png
doppler/
diff.png
original.png
render.png
stripe/
diff.png
original.png
render.png
tailscale/
original.png
render.png
header.png
original.png
render.png
capture-extension/
manifest.json
offscreen.html
offscreen.js
popup.html
popup.js
README.md
test_walk.js
worker.js
CLAUDE.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
docs/
CODEBASE_MAP.md
conv.md
PIPELINE_GRAPH.md
example/
all.min.css
chevron-down.svg
fa-solid-900.ttf
fa-solid-900.woff2
inter.css
inter.woff2
logo.svg
render.html
LICENSE
README.md
SECURITY.md
skills/
clone/
.claude-plugin/
plugin.json
bin/
clone
engine/
__init__.py
__main__.py
assets.py
check.py
cli.py
cluster.py
extract.py
glyphs.py
measure.py
prep.py
progress.py
score.py
styles.py
targets/
__init__.py
html.py
react.py
templates/
__init__.py
clone-env.d.ts
index.html
main.tsx
route.tsx
vite.config.ts
util.py
hooks/
guard.py
hooks.json
README.md
references/
pipeline.md
skills/
html/
SKILL.md
react/
SKILL.md
tests/
test_e2e.py
test_engine.py
test_hook.py
test_react.pyยฉ 2026 Flowy ยท Free and open source
Built for Claude Code ยท Not affiliated with Anthropic