variant
jakubkrehel/skills · Agent Skill
回答哪一個更好,而不是哪一個是正確的,建立多個真正不同的版本的介面元素,使用選擇器在真實頁面上切換它們,並推廣勝出的版本。
前往安裝 ↓總覽
| 發布者 | |
|---|---|
| 儲存庫 | jakubkrehel/skills ↗ |
| 技能資料夾 | variant |
| 星 | 8,644 |
| 分支 | 330 |
| 附帶檔案 | 3 |
| 授權 | MIT |
| 最近更新 | 2026年10月25日 |
| 連結 | 技能原始碼 ↗ · 儲存庫 ↗ |
Mozgi 檢查
我們在技能檔案中發現的內容。詳細資訊需訂閱。
安裝
技能就是一個含 SKILL.md 的資料夾。選擇你的代理,在專案根目錄的終端機(macOS、Linux 或 Windows 的 Git Bash)執行指令。
把提示貼到 Claude、Codex 或其他助理:它會自行檢查並安裝技能。
Install the “variant” skill from mozgi.io (https://mozgi.io/skills/jakubkrehel-variant/) for me. 1. Download the archive: https://mozgi.io/skills/jakubkrehel-variant/download If it fails, take the skill folder from the source: https://github.com/jakubkrehel/skills/tree/main/skills/variant 2. Read SKILL.md and the other files. Check the skill is safe: no hidden commands, no sending data elsewhere, no scripts doing something other than described. If anything looks suspicious, stop and tell me. 3. Put the “variant” folder into your agent's skills folder: .claude/skills/ for Claude Code, .agents/skills/ for Codex, .cursor/skills/ for Cursor, .gemini/skills/ for Gemini CLI. Inside the project if we are in one, otherwise in the home folder (~/.claude/skills/ etc.). 4. Make sure <skills folder>/variant/SKILL.md exists. 5. Briefly tell me what this skill does and offer to try it on my task. If you cannot do a step yourself, tell me what to click or type.
git clone --depth 1 --branch main https://github.com/jakubkrehel/skills.git /tmp/skills mkdir -p .claude/skills cp -r /tmp/skills/skills/variant .claude/skills/variant
重新啟動 Claude Code — 技能就會出現在清單中,手動呼叫:/variant。要套用到所有專案,請放在 ~/.claude/skills。
git clone --depth 1 --branch main https://github.com/jakubkrehel/skills.git /tmp/skills mkdir -p .agents/skills cp -r /tmp/skills/skills/variant .agents/skills/variant
Codex 會從目前資料夾往上到儲存庫根目錄,在 .agents/skills 中尋找技能;用 /skills 或 $variant 呼叫。所有專案:~/.agents/skills。
git clone --depth 1 --branch main https://github.com/jakubkrehel/skills.git /tmp/skills mkdir -p .cursor/skills cp -r /tmp/skills/skills/variant .cursor/skills/variant
Cursor 啟動時會載入技能;在 Agent 聊天輸入「/」呼叫。Cursor 也會讀取 .claude/skills 與 .agents/skills。所有專案:~/.cursor/skills。
git clone --depth 1 --branch main https://github.com/jakubkrehel/skills.git /tmp/skills mkdir -p .gemini/skills cp -r /tmp/skills/skills/variant .gemini/skills/variant
任務符合時,Gemini CLI 會提議啟用技能,由你確認。所有專案:~/.gemini/skills。
安裝前請先檢視 SKILL.md 與相關檔案。點擊檔案即可預覽。
SKILL.md 內容
作者原文 · 唯讀Variants
This skill takes one described piece of UI and builds three versions that differ on purpose. They go behind a picker in the real page, so you can flip between them and choose.
It produces candidates and never ranks them. Reviewing existing UI is interface-review and better-interface, stress testing one component is break and working through a component's states is state-machine.
Different answers, not different tints
Each variant is a different answer to the same brief, on an axis this collection owns:
| Axis | Owner | What varies |
| --- | --- | --- |
| Structure | better-layout | Grouping, order, column count, what collapses |
| Density | better-layout | Spacing scale, how much fits |
| Emphasis | better-colors | Where filled color goes, what recedes |
| Type | better-typography | Scale steps, weight contrast, measure |
| Voice | better-writing | Labels, tone, how much copy |
Pick one primary axis and give each variant a different position on it. The axis names the picker's group heading. Secondary choices follow from it rather than varying on their own. A dense variant may need a smaller type step, and that is coherence, not a second axis.
The floor every variant clears
Before a variant enters the picker it clears better-interface's escalation triggers, which are:
- Every control has an accessible name and a visible focus indicator.
- Keyboard reaches everything a pointer does.
- Motion and auto-playing content respect
prefers-reduced-motion. - Nothing clips, overlaps or becomes unreachable at 320px width or 200% zoom.
- Body and control text pass their required contrast ratio.
- No state or meaning rides on color alone, and no state change on motion alone.
- A destructive action has a confirmation, an undo or a distinct treatment.
- Truncated content has a way to reach the full value.
- Nothing hides past a scroll edge or behind a disclosure with no visible cue.
- Every error names a way to recover.
- No semantic color is used against its meaning, such as the danger hue on a non-destructive action.
That floor is identical across variants. It is not an axis and never trades against one. Where a direction can only work by breaking it, say so and drop the direction.
1. Scope one piece
One piece of UI per run. "The dashboard" is not a piece; the metric card is. Where the request spans several, list the candidates and ask which one to explore.
Restate the brief in one sentence: what the thing is, where it renders, what it has to do.
2. Learn the ground
Variants have to look like they could ship tomorrow, so read what they stand on:
- The styling system, the component library and any motion library.
- The tokens: color, spacing, radius, type scale, easing.
- The product's density and voice. A dense professional tool bounds how far the boldest variant may go.
- Where the piece renders: against what background, beside which neighbours, at which widths.
With no project to read, use neutral grays, one accent and the system font stack, and say that is what you did.
3. Name the axis before writing code
Default to three variants. Go to five only when asked.
Write the set down first, a name and an axis position each. Names say what the direction is, so Quiet, Editorial, Dense, never Option A.
This step is done when no two variants share a position and you can state each one's axis in a phrase.
4. Build it into the real page
Host the variants on the page that will actually contain the piece, with the real chrome, the real neighbours and realistic data.
Select with a URL search param such as ?__variant=quiet, so every variant is a link you can send someone. A grouped list beside the piece sets it. Where there is no room beside the piece, it moves above it as a select with the same groups. picker.md ↗ holds the spec.
Render one variant at a time, full size. Thumbnails distort spacing and scale, and spacing is usually the thing you are choosing between.
Variant files may import production components. Only the hosting page imports a variant, and nothing else imports from the harness.
Where no page can host it, build one self-contained HTML file and keep the same picker.
Give every variant real content: product-shaped copy, plausible names and the number of items the page will really carry. Lorem ipsum and three rows make every structure look good.
5. Present the tradeoffs and stop
Load the page once in a browser already at hand and flip through every variant. Each one renders, each interaction responds and the console is clean. With no browser at hand, say so and hand the URL over for the user to check.
Then hand the decision over:
| Variant | Axis position | Right when | Costs |
| --- | --- | --- | --- |
| Quiet | Lowest visual weight | The page is used daily | Least memorable |
| Editorial | Largest type, most space | The moment deserves weight | Eats vertical space |
Say where the picker is running, which key flips it and which width you judged at. The answer can change between 375px and 1440px.
Never mark a favourite in the table. Asked directly, answer from how often the piece is seen and from the product's personality, not from which one you enjoyed building.
6. Promote one, delete the rest
On a choice, build that variant properly where it belongs, following the project's own conventions. Then delete the other variants, the picker and the hosting page's import of the variants. Search for the variant names and the __variant param, and check the diff leaves nothing of the harness behind.
Asked for another round instead, keep the harness and run Name the axis before writing code again, taking new positions around the direction you leaned toward.
Before you finish
| Mistake | Fix |
| --- | --- |
| Variants differ only in accent color or copy | Move one to a different position on the primary axis, or cut it |
| Every axis varies at once | Vary one; let the rest follow from it |
| Judged on a blank route | Host them on the page that will contain the piece |
| Lorem ipsum, three rows, "Jane Doe" | Real copy and the item count the page will really carry |
| The boldest variant skips keyboard or focus | Clear the floor or drop the direction |
| A favourite marked in the table | State each variant's cost and let the user choose |
| Picker restyled with the project's tokens | Keep it visibly outside the design system |
| One long row of tabs, one per variant | A grouped list beside the piece that scrolls on its own; a select above it where the list does not fit |
| Harness left behind after promotion | Delete it and search for the names and the param |
常見問題
variant 技能有什麼用途?
回答哪一個更好,而不是哪一個是正確的,建立多個真正不同的版本的介面元素,使用選擇器在真實頁面上切換它們,並推廣勝出的版本。
如何安裝 variant?
打開本頁的「安裝」區塊並選擇你的代理 — Claude Code、Codex、Cursor 或 Gemini CLI:那裡有把技能資料夾複製到正確位置的現成指令。也可以複製「透過助理」分頁中的提示,讓助理自行檢查並安裝技能。
variant 適用哪些 AI 模型?
技能是純 Markdown 指示(Agent Skills 格式),因此 variant 適用任何讀取 SKILL.md 的代理:Claude Code、Codex、Cursor、Gemini CLI、GitHub Copilot、OpenCode 等。只有在任務符合技能描述時,模型才會載入指示。
variant 是免費的嗎?
此技能由 jakubkrehel 公開發布,採用 MIT 授權。技能本身免費 — 你只需向 AI 供應商支付實際使用的 token 費用。
安裝技能安全嗎?
技能是代理會遵循的指示,安裝前請閱讀 SKILL.md 及相關檔案。技能資料夾中的腳本只有在代理執行時才會運行 — 留意它的動作,不要授予多餘權限。
技能和 MCP 伺服器或外掛有何不同?
MCP 伺服器或外掛為模型提供新工具 — 會執行並回傳結果的程式碼。技能提供的是知識與流程:如何處理任務、要遵循哪些步驟、好的成果長什麼樣子。它不需要伺服器或 API 金鑰。