DeepSeek Harness plugin

Screenshot in.
Working UI out.

Paste a screenshot of any interface. Run /clone 3. Three agents rebuild it in parallel — each in its own isolated git worktree. Every result is rendered and scored against the reference, and you adopt the page that looks right. It is already a working page: plain HTML, CSS and vanilla JS.

dsh plugin add dsh-clone
dsh-clone: a reference frame fanned out to three parallel lanes, one of them adopted into the workspace

A real run, not a mock

Drag the handle. That is the clone the plugin built.

Left: the screenshot a person pasted. Right: the page the plugin delivered and the plugin's own headless render of it. No retries, no edits — one command, one adopted lane.

The dashboard clone the plugin built, rendered
The reference dashboard the clone was built from
Reference Clone · 91.9%
↔

A dense observability dashboard — sidebar, KPI cards with sparklines, a layered area chart, a donut, a data table — rebuilt from one screenshot in 1280×800. Open the clone.

91.9%

Nebula dashboard1280×800 · two lanes raced · colour agreement 97.7%, structure 82.4%

91.9%

Aperture landing1280×800 · one lane · glass panels, gradient mesh, feature grid, footer

you
choose

Score suggests, you decideThe percentage ranks attempts. It never certifies a page — that is your call.

More runs

Three screens, one command each

Every page below was built by this plugin from the screenshot next to it. Open any of them — they are static, so they just run.

How it works

Four ways to fail, compared in the time of one

One attempt is a lottery: you cannot tell whether the model misunderstood you or simply chose a different solution, because you only ever see one.

Give it a picture

Paste a screenshot into the conversation, then /clone 3. Or point at a file: /clone 2 ./mock.png. The last image is the spec.

Three builders, three angles

Measure first · structure first · visual first · component first. Inside a repository each lane is a real git worktree on its own branch — nothing leaks between attempts.

Render and score

Each delivered page is screenshotted by an installed Chromium browser, decoded, and compared with the reference on a coarse colour grid.

Adopt, don't export

One click copies the chosen lane into your workspace as clone-ab12-lane-2/ — no .git, no dependencies, no scratch files. Open it and it runs.

⚑ The finish line is a real render

Not a self-report. The plugin drives headless Chrome itself, then compares pixels on a 48×32 colour grid.

⌘ Your checkout is never touched

Lanes live in worktrees and in .dsh-clone/. No commit, no checkout, no reset on your branch — a test asserts exactly that.

◱ Live, side by side

The Clone tab shows the reference beside every lane's actual page in an iframe, with strategy, timing, tools and tokens.

⧉ Dependencies shared, not reinstalled

node_modules, .venv and vendor are symlinked into each lane. Three lanes do not mean three installs.

⏱ Budgets, not patience

Effort budget in the prompt, a wall-clock limit and a token ceiling. Whichever hits first settles the lane with whatever it delivered — a runaway builder costs one lane, not the month.

↻ Iterate, don’t restart

/clone refine 2 “move the CTA up” edits the adopted page and reports the score delta against the same reference.

⟲ Survives a restart

Every clone writes its state next to its work. A reload or a restart does not throw the run away — pick still works, and a half-built lane is labelled as interrupted, not as finished.

⛨ Sandboxed by default

Model-written pages are served under a sandbox CSP and mounted with sandbox="allow-scripts": they cannot reach your cookies, storage or the Harness API.

Trust

It tells you what it cannot do

Honest limits, kept in the README and on purpose

  • The score measures the picture, not the truth. 99% agreement can still hide wrong copy or broken behaviour. It ranks attempts; it does not certify one.
  • The score is coarse by design, but not colour-blind. A colour grid with shift tolerance decides most of it; a structure term (where the detail sits) catches “right palette, wrong picture”. Two unrelated dark interfaces still score ~58%, two lanes a few points apart are still a coin flip — open both.
  • Cost is N×. Three builders cost roughly three builds. lanes: 2 is a reasonable everyday setting.
  • Vision is required. A text-only model produces a guess, not a clone.
  • Images are approximated with CSS and SVG — the right silhouette and palette, not the original pixels.

Install

Three ways in, one plugin

Requires a DeepSeek Harness profile with subagents (the dsh-base bundle ships the spawn backend) and Node 20+. Scoring uses an installed Chromium-family browser when present.

1 · By package name

Settings → Plugins → Add plugin, then type the package name.

dsh-clone

2 · From this index

Turn on Custom plugin indexes, add this URL, then install from the Discover tab.

https://raw.githubusercontent.com/egorfedorov/dsh-clone/main/index.json

3 · From source

Clone the repository and install the bundle from its directory.

git clone https://github.com/egorfedorov/dsh-clone

Or take the release tarball: dsh-clone.tgz. Updating: the market reports update-available; an upgrade is a reinstall, and your work lives in the workspace, so nothing is lost.

Questions

What people ask before trying it

Is this a screenshot-to-code toy or something I can keep?
The output is a static page — index.html plus the CSS, JS and assets it loads. No build step, no framework, no server. That is deliberate: the result always runs when you open it, and it is a real starting point for a hand-written component.
Does it touch my working tree or my branches?
No. Inside a repository each lane is a separate git worktree on its own branch under dsh-clone/; adopted output is copied into a new folder. A test builds a throwaway repository and asserts that your dirty file, your branch and your HEAD are untouched.
What if no browser is installed?
You lose the percentage and nothing else. Lanes are still isolated, previewed live in the panel, and ranked by completeness and finish time. Scoring is an optional amplifier, not a dependency.
Can it clone any product's UI?
Technically yes, and that is exactly why there is an acceptable-use page. Rebuilding your own designs, prototypes and internal tools is the intended use. Cloning a competitor's product to ship as your own, or building look-alikes of banking and identity screens, is not.
How much does one clone cost?
Roughly N builds for N lanes. Start with two, raise the count when the task is genuinely ambiguous. The builders carry a token budget and a wall-clock limit so a lane cannot run away.

По-русски

Плагин для DeepSeek Harness: скидываешь скриншот интерфейса, пишешь /clone 3 — три агента параллельно собирают его в изолированных git worktree. Каждая готовая страница рендерится в headless-браузере и сравнивается с эталоном; лучший процент предлагается, но выбираешь ты. Выбранная версия копируется в рабочую папку как готовая статическая страница.