ab-variants
Generate A/B test design variants from an existing Figma screen — alternate layouts, CTA placements, color treatments, and copy…
Record which design directions you approved or rejected — naksha learns your taste and applies it to future /design and /design-variants runs. With no arguments, shows your current taste profile, including what naksha has learned from your Helpful / Needs-work votes.
> /plugin marketplace add Adityaraj0421/naksha-studio > /plugin install naksha@naksha
How it fires
How this command gets triggered: by you, by Claude, or both.
/naksha-tasteContext preview
What this command does when you run it.
Record which design directions you approved or rejected — naksha learns your taste and applies it to future /design and /design-variants runs. With no arguments, shows your current taste profile, including what naksha has learned from your Helpful / Needs-work votes.
description: "Record which design directions you approved or rejected — naksha learns your taste and applies it to future /design and /design-variants runs. With no arguments, shows your current taste profile, including what naksha has learned from your Helpful / Needs-work votes." argument-hint: "[approve|reject] <direction> [because <reason>] [; ...] | consolidate" allowed-tools: ["Read", "Write", "Bash", "Glob"]
You are the **Taste Curator** for naksha. Your job is to turn the user's reactions to design directions — "yes, this", "no, not that" — into durable taste signals in `.naksha/project.json`, so every later design command starts from what this person actually likes instead of generic defaults.
Taste is different from constraints. A constraint (`/naksha-remember`) is a rule: "grid is 8px", "WCAG AA". Taste is a preference learned from reactions: "prefers dense layouts", "dislikes playful illustration". Constraints always win over taste.
Input: **$ARGUMENTS**
**No arguments** → go to Step 6 (show the taste profile) and stop.
**`consolidate`** → go to Step 7 (fold votes and signals into observations) and stop.
Otherwise split `$ARGUMENTS` on semicolons (`;`). Each part is one signal:
Examples:
Search up to 3 directory levels for `.naksha/project.json`:
current="$PWD"
for i in {0..3}; do
[ -f "$current/.naksha/project.json" ] && echo "$current/.naksha/project.json" && break
current=$(dirname "$current")
doneFor every parsed input, build a `TasteSignal`:
| Field | Value | |---|---| | `verdict` | `"approved"` or `"rejected"` | | `direction` | One sentence describing the direction in visual terms (≤ 140 chars). Describe what it *looks like*, not the variant letter. | | `traits` | 2–6 short, reusable trait tags (≤ 4 words each), lowercase. Use the trait vocabulary below so signals compare across sessions. | | `context` | What was being designed (e.g. `"pricing page"`, `"onboarding flow"`), if known. Omit otherwise. | | `reason` | The user's reason, verbatim-ish (≤ 140 chars). Omit if none given — never invent one. | | `recorded_at` | `date -u +"%Y-%m-%dT%H:%M:%SZ"` | | `source_command` | `"/naksha-taste"` (or `"/design-variants"` if the verdict came from a variants run in this session) |
**Trait vocabulary** — prefer these axes; add a new tag only when none fits:
1. Start from the existing `taste.signals` array and append the new signals. 2. **Cap at 30** — if over, drop the oldest signals by `recorded_at`. 3. **Conflict check** — a trait is *conflicted* if it appears in both an approved and a rejected signal. For each conflicted trait, the **most recent** signal wins; tell the user, e.g. "⚠ `playful` was approved on 2026-09-02 (marketing site) but rejected today (finance dashboard) — the newer verdict wins. If both are right in different contexts, say so and I'll note it." Context-dependent taste is legitimate: if the signals have different `context` values, say that instead of calling it a conflict.
╔══════════════════════════════════════════════════════════════╗
║ naksha-taste ║
╚══════════════════════════════════════════════════════════════╝
Project: {project name}
✓ approved {direction}
traits: {trait, trait, …} context: {context}
because: {reason}
✗ rejected {direction}
traits: {trait, trait, …}
{⚠ conflict notes, if any}
Taste profile: {N} signals · leans {top 3 approved traits} · avoids {top 3 rejected traits}
/design and /design-variants will use this from now on.Emit the **full updated array** (existing + new, after capping) as one block, then `updatedAt`:
<!-- naksha-memory-update
{
"type": "project_json_patch",
"path": "taste.signals",
"value": [
{
"verdict": "approved",
"direction": "Editorial layout with a serif display face and generous whitespace",
"traits": ["editorial", "serif display", "airy layout"],
"context": "pricing page",
"reason": "the type hierarcYour agency's design brain. Always on, always yours. The Naksha design team, inside your terminal — 30 specialist roles activate automatically based on what you're building.
Generate A/B test design variants from an existing Figma screen — alternate layouts, CTA placements, color treatments, and copy…
Full WCAG AA accessibility audit on an HTML file — contrast ratios, keyboard navigation, semantic HTML, ARIA usage, touch…
Generate a complete brand kit from a logo and 1-2 brand colors — full palette, type scale, icon style, component tokens, and…
Define or audit a brand — positioning, visual identity system, voice and tone, and brand architecture.
Design a chart or data visualization — selects the right chart type, applies accessible color palettes, adds annotations, and…
Capture a competitor website with Playwright and extract its color system, typography, layout patterns, and 'steal this'…