Materializr
Open-source parametric 3D CAD for makers — constraint sketches, solid modeling, threads, SVG & text engraving, STL/STEP export. Android, iPad, Linux, Mac, Windows. Vibe coded.
翻译准备中
N redesigns of your site, running side by side. Keep one. For agents and humans.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗N redesigns of your site, running side by side. Keep one. For agents and humans.
npx variantly
pnpm dlx variantly, yarn dlx variantly, bunx variantly
(works for every command below).npx? Install Node.js; it ships with npx.Contents
/impeccable live to tune details.Requirements: Node 20.11+, git, one agent CLI.
npx variantly # run it from your project
npm install -g variantly # or keep it around
You need one of these, signed in. The wizard detects the ones you have, and can install one and open its sign-in for you:
| Agent | Install |
|---|---|
| Claude Code | npm install -g @anthropic-ai/claude-code |
| Codex CLI | npm install -g @openai/codex |
| GitHub Copilot CLI | npm install -g @github/copilot |
| Gemini CLI | npm install -g @google/gemini-cli |
| Cursor CLI | curl https://cursor.com/install -fsS | bash (Windows: irm 'https://cursor.com/install?win32=true' | iex) |
| OpenCode | npm install -g opencode-ai |
| Grok Build | curl -fsSL https://x.ai/cli/install.sh | bash (Windows: irm https://x.ai/cli/install.ps1 | iex) |
| Hermes Agent | curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash (Windows: iex (irm https://hermes-agent.nousresearch.com/install.ps1)) |
| Pi | npm install -g --ignore-scripts @earendil-works/pi-coding-agent |
| Antigravity CLI | curl -fsSL https://antigravity.google/cli/install.sh | bash (Windows: irm https://antigravity.google/cli/install.ps1 | iex) |
The agent has to be the command-line one: variantly runs it headless. Lovable, Bolt, v0 and other browser builders can't run on your machine.
Using OpenRouter? Point Claude Code or Codex at it before you start variantly; it counts as signed in.
# Claude Code
export ANTHROPIC_BASE_URL=https://openrouter.ai/api
export ANTHROPIC_AUTH_TOKEN=<your OpenRouter key>
export ANTHROPIC_API_KEY=""
# Codex: ~/.codex/config.toml, with OPENROUTER_API_KEY set in your shell
model_provider = "openrouter"
model = "anthropic/claude-sonnet-4.6"
[model_providers.openrouter]
name = "OpenRouter"
base_url = "https://openrouter.ai/api/v1"
env_key = "OPENROUTER_API_KEY"
Pick a model that is good at tool use; the agent edits files and runs commands for 10–20 minutes per variant.
and Impeccable installed for it (the wizard offers to run this for you):
npx impeccable install --providers=claude --scope=global --yes --no-hooks # or codex, copilot, gemini, cursor, opencode, grok, hermes, pi, antigravity
Mix agents in one run. Split the variants across agents and models, say two from Claude Code and two from Gemini CLI, for more variety. In the wizard, Add another agent under the agent list; on the command line:
npx variantly --agents claude:opus:2,claude:sonnet:1,gemini:2 # agent[:model]:count
npx variantly --agents claude:2,codex:2 --blind # hide who made what until you keep one
Every agent in a mix must be installed and signed in before the run starts. Each variant shows the agent and model that made it, and the board adds up the spend per agent. The wizard remembers your last mix.
No agent yet? npx variantly --demo runs the full flow with fixed restyles: no AI, no account.
Let your agent drive it. install-skill teaches your agent variantly once
(defaults: agents on your PATH, user-wide):
npx variantly install-skill # every agent you have
npx variantly install-skill --providers=codex,copilot # just these
npx variantly install-skill --scope=project # into this repo, for everyone who clones it
| Agent | User-wide (--scope=global) | In the project (--scope=project) | Then ask |
|---|---|---|---|
| Claude Code | ~/.claude/skills/variantly/ | .claude/skills/variantly/ | "redesign my site with variantly" or /variantly |
| Codex CLI | ~/.agents/skills/variantly/ | .agents/skills/variantly/ | "redesign my site with variantly" or $variantly |
| GitHub Copilot CLI | ~/.copilot/skills/variantly/ | .github/skills/variantly/ | "redesign my site with variantly" or /variantly |
| Gemini CLI | ~/.gemini/skills/variantly/ | .gemini/skills/variantly/ | "redesign my site with variantly" |
| Cursor CLI | ~/.cursor/skills/variantly/ | .cursor/skills/variantly/ | "redesign my site with variantly" or /variantly |
| OpenCode | ~/.config/opencode/skills/variantly/ | .opencode/skills/variantly/ | "redesign my site with variantly" |
| Grok Build | ~/.grok/skills/variantly/ | .grok/skills/variantly/ | "redesign my site with variantly" or /variantly |
| Hermes Agent | ~/.hermes/skills/variantly/ | .hermes/skills/variantly/ (after hermes skills trust) | "redesign my site with variantly" or /variantly |
| Pi | ~/.pi/agent/skills/variantly/ | .pi/skills/variantly/ | "redesign my site with variantly" or /skill:variantly |
| Antigravity CLI | ~/.gemini/antigravity-cli/skills/variantly/ | .agents/skills/variantly/ | "redesign my site with variantly" or /variantly |
Claude Code plugin alternative:
/plugin marketplace add highnet/variantly
/plugin install variantly@variantly
Check everything: npx variantly doctor.
npx variantly opens a four-step wizard in your browser:
PRODUCT.md.Then, under the hood:
Snapshot. Records your commit plus uncommitted tracked edits
(git stash create, touches nothing) as the base.
Worktrees. One per variant in ~/.variantly/, outside your project,
invisible to your editor and watchers. Dependencies and env files are
linked or copied, so nothing reinstalls (except Next.js, see below).
Agents. Your agent runs headless per worktree with a brief:
Checks. On by default, each a wizard switch:
Run via npx at pinned versions: any stack, still zero dependencies.
Needs Chromium/Chrome ($CHROME_PATH, Playwright's cache, or a normal install).
Preview. Each finished variant gets a dev server and a proxy (scroll/navigation sync, framing headers stripped, HMR passes through). Only the original plus the last few viewed run at once.
, or . –, , arrows to switch; panes stay .
apps/web, frontend/):| Stack | Dev command variantly uses |
|---|---|
| Next.js | next dev --port {port} |
| SvelteKit | vite dev --port {port} --strictPort |
| Astro | astro dev --port {port} |
| Nuxt | nuxi dev --port {port} |
| Vite (React / Svelte / Vue) | vite --port {port} --strictPort |
| Bun | bun run dev (reads PORT) |
| Static HTML | built-in static server |
| Laravel (Inertia / Livewire) | php artisan serve + Vite |
| Rails 8 (Hotwire) | bin/rails server -p {port} |
| Django | manage.py runserver |
| FastAPI | uvicorn <module>:app --port {port} |
| Reflex | reflex run --frontend-port {port} --backend-port {port2} |
| Go (Templ, HTMX) | go run . (reads PORT) |
| Rust (Axum) | cargo run (reads PORT) |
| Wasp | wasp start (fixed ports: one variant at a time) |
{port}, {port2} (second free port),
{run} (package runner), {python} (your virtualenv's Python).Known limits
node_modules). Fast with pnpm/bun, slow with npm.claude -p, codex exec,
copilot -p, gemini -p, cursor-agent -p, opencode run, grok -p,
hermes chat --oneshot, pi -p or agy -p per worktree, on your account (or your OpenRouter key).Default permissions
Claude Code runs with --permission-mode acceptEdits and a short list of
allowed tools;
Codex runs codex exec --sandbox workspace-write with
approval_policy=never (it can write only its worktree; nothing waits for
an approval);
Copilot runs copilot -p --allow-all-tools --no-ask-user with
git push, git commit and rm denied, and file access limited to the
worktree, the brief and your user-wide skills (--add-dir);
Gemini runs gemini -p --approval-mode auto_edit with a policy file that
allows only the shell commands Impeccable needs (npx impeccable,
git status, git diff, ls);
Cursor runs cursor-agent -p --force in the worktree. Cursor has no
per-command allow list on the command line, so safe mode relies on Cursor's
own sandbox and settings.
OpenCode runs opencode run --format json with a permission config
passed in OPENCODE_CONFIG_CONTENT: edits allowed, shell commands denied
except the ones Impeccable needs (*impeccable*, git status, git diff,
ls), paths outside the worktree denied except the brief and your
user-wide skills, and questions denied (nobody is there to answer).
Grok Build runs grok -p --permission-mode dontAsk (anything not
allowed is denied without asking) with reads, edits, search and the
Impeccable, git status, git diff and ls commands allowed, and
--trust so it loads the worktree's skills.
Hermes Agent runs hermes chat --oneshot with only its file, terminal,
skills and todo tools; one-shot runs deny dangerous shell commands. It
reads project skills only in repositories you trusted, so install
Impeccable for it user-wide.
Pi runs pi -p --mode json. Pi has no approvals at all, so safe mode
takes its shell away (--tools read,edit,write,grep,find,ls; Impeccable's
command-line checks don't run) and loads only the worktree's skill folders,
not the rest of the project's Pi files (--no-approve --skill).
variantly [dir] open the wizard (default: the current directory)
variantly doctor [dir] check node, git, agents, Impeccable, detected stack
variantly status [dir] the current run as JSON
variantly keep <n> [dir] roll variant n's style out to every page, then apply it;
the others stay as branches (--no-rollout: skip the rollout)
variantly clean [dir] remove every worktree, branch and state file
variantly install-skill put the variantly skill where your agents read skills
--agent <id> claude | codex | copilot | gemini | cursor | opencode | grok | hermes | pi |
antigravity | demo
--agents <mix> split the variants: agent[:model]:count,… e.g. claude:opus:2,gemini:2
--blind hide which agent made each variant until you keep one
--count <n> 1–10
--brief <txt> what you want, in your words
--yes skip the wizard and start with detected defaults
--demo built-in demo agent, no AI
--no-open don't open a browser
--port <n> app port (default 4477)
install-skill:
--providers <ids> claude,codex,copilot (default: the agents on your PATH)
--scope <s> global (default) or project
127.0.0.1 only, rejects non-loopback Host (DNS rebinding),
requires X-Variantly on every POST (cross-site pages can't send it).X-Frame-Options/CSP for local preview only..env files are copied, not linked.tsc).site/.npm install
npm run typecheck
npm test # node:test, including an end-to-end run with the demo agent
node bin/variantly.mjs --demo path/to/some/site
MIT © highnet. See LICENCE.md.
190Keep. The diff is applied with a three-way merge (your edits since
are kept), unstaged for review. Others stay as variantly/* branches
until variantly clean.
Antigravity CLI runs agy -p with its default permissions: reading and
writing in the worktree is allowed, shell commands are soft-denied unless
your ~/.gemini/antigravity-cli/settings.json allows them (add
command(npx) there to let Impeccable's checks run).
"Full auto" removes those limits (--dangerously-skip-permissions,
--dangerously-bypass-approvals-and-sandbox, --allow-all,
--approval-mode yolo, --sandbox disabled, --auto, --always-approve, --yolo, Pi's
shell and --approve, --dangerously-skip-permissions for Antigravity). Trusted projects only.
Browser check on: each agent gets the playwright MCP server
(--mcp-config + mcp__playwright allowed for Claude Code;
-c mcp_servers.playwright.* for Codex; --additional-mcp-config for
Copilot; a settings file via GEMINI_CLI_SYSTEM_SETTINGS_PATH for Gemini;
a --plugin-dir with --approve-mcps for Cursor; mcp in
OPENCODE_CONFIG_CONTENT for OpenCode), headless and --isolated: no shared browser profile.
Grok Build, Hermes Agent, Pi and Antigravity read MCP servers only from
their own config files, so they run without the browser check.