ab-test-design
Skill0 starsChanged 23 days agoMITView on GitHub
Design a NEW single-variable A/B test for the user's specific page, feature or funnel step, as a compact scenario record. Use when the user shares a page, screenshot, URL, wireframe or feature description and asks "design an experiment for this", "design a test for this page", "how should I test this", "set up an A/B test for this", "create a test plan", "write a hypothesis for this", "what variant should I try", "bunun için test tasarla", "bu akışta ne test edilir", "hipotez kur", "buna nasıl test kurarım". Also splits a multivariate request into single-variable tests. Produces at most three strong scenarios (problem, mechanism, the one variable, Variant A/B, primary KPI, guardrail, priority) with an HTML card each, plus short tool-agnostic setup notes on request. Routing — when a page, URL or screenshot is shared, use this skill; when none is shared and the user wants ideas, use ab-test-suggest instead. To check a plan you already wrote, see ab-test-audit.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- RBraga01/builder-producttheir own version, first seen Nov 1, 2026
- gmanch94/claude-code-aidlc-templatetheir own version, first seen Jul 11, 2026
- Mehdibargach/claude-code-pm-skillstheir own version, first seen Mar 18, 2026
- nandanosql/all_in_one_pm_skillstheir own version, first seen Feb 28, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- Mehdibargach/claude-code-pm-skills★ 97same name
- gmanch94/claude-code-aidlc-template★ 2same name
- RBraga01/builder-product★ 2same name
- nandanosql/all_in_one_pm_skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- docs/llms-full.txtllms.txt
- docs/llms.txtllms.txt
- ab-test-auditSkill
- ab-test-cardSkill
- ab-testSkill
- ab-test-suggestSkill
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 4 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
Before calling a candidate generated, one title-only grep across all stage files: grep -n '^## .*<element keyword>' …
- Distinctive: line 27
Methodology: only the section a decision needs, never at the start of a turn:
- Distinctive: line 108
Write an unmeasurable KPI ("trust increases", a rate among assistive-technology users).
- Distinctive: line 109
Put a sample size, duration, split or winner criterion anywhere (rule 5).
- Distinctive: line 111
Read a whole archive file, the whole glossary, or a methodology section no decision needs.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ab-test-design — New Scenario Design
Language: Output always matches the language you write in (CLAUDE.md rule 7).
${CLAUDE_PLUGIN_ROOT}/CLAUDE.md is binding; rule numbers below point there. Variant A is the user's current page (rule 15). Records, cards and the review pipeline follow ab-test-card (The record, Delivery pipeline).
Reading budget
Archive: one or two stage files under
${CLAUDE_PLUGIN_ROOT}/knowledge/scenarios/(home-landing, search-filtering, category-listing, product-detail, cart-checkout, thank-you, dashboard, forms-signup, pricing, mobile-app, saas-b2b, finance-pension, ui-elements); a form's own design usesforms-signup, a finance, insurance or pension flowfinance-pension. Titles first, then only the shortlisted blocks:grep -nE '^## |Değişken:' ${CLAUDE_PLUGIN_ROOT}/knowledge/scenarios/<stage>.md awk -v s=<title line> 'NR>=s { if (NR>s && (/^---$/ || /^## /)) exit; print }' ${CLAUDE_PLUGIN_ROOT}/knowledge/scenarios/<stage>.mdBefore calling a candidate
generated, one title-only grep across all stage files:grep -n '^## .*<element keyword>' ${CLAUDE_PLUGIN_ROOT}/knowledge/scenarios/*.md.- KPI names:
grep -niE '<metric>|<synonym>' ${CLAUDE_PLUGIN_ROOT}/knowledge/kpi-glossary.md; never the whole glossary. Methodology: only the section a decision needs, never at the start of a turn:
awk -v h='## <section title>' 'index($0,h)==1{p=1;print;next} p&&/^## /{exit} p' ${CLAUDE_PLUGIN_ROOT}/knowledge/methodology.mdDecision Section A candidate in a legally bound area (rule 11) Regulated flowsB adds a tap target or moving element, or changes focus or contrast Accessibility checksA sensitive field (rule 14) Sensitive fieldsDoubt whether a variant manipulates (rule 6) Ethical and legal boundariesPayment, shipping and returns, price display, trust signals Market contextA price, discount, installment or bundle candidate; a KPI or guardrail choice KPI rules,GuardrailsThe change only matters at a trigger (a zero-result search, the payment step) KPI denominatorA number or prior result in a record Claims and evidenceA fact the proposal needs is unverified Conditional proposalsA form flow, a defect in A, personal figures on screen Variable isolationTwo scenarios on one screen Concurrent testsThe mechanism gate or a priority tie The idea-generation lens,PrioritizationThe user asks for the setup Test hygieneThe user asks why this test The hypothesis has three parts
Flow
- Problem first (rule 13). Unless the router asked, the message states the problem or the user named the test, ask the one problem question and produce nothing else. A stated solution ("make the button bigger") gets the same question; if it doesn't fit the problem, say so and design one that does. An unanswered question counts as (d), with
evidence.level: intuition. A drop point the screens don't locate (slides, then a signup wall) gets no second question: design for the most likely step, name it inproblem, and add one assumption line. - History before any candidate (rule 16). Run
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/validate_input.pyon.abtest-history.md/.abtest-backlog.mdwhen they exist and on any file the user hands over (rule 18). A variable already tested here gets one line with the recorded outcome, and you decide without asking: a retry reason → design it with the reason; otherwise the next step building on it (a recorded win setsevidence.level: user_data). - Read the page as elements, once for the whole turn, into a screen inventory every record reuses (never re-read per scenario): top to bottom, visible elements only, verbatim copy (personal values left out), field order, background colours and where a different background region starts and ends, separator lines and borders, button text, colour and position, spacing between sections, and the screen's real top and bottom edge (what is cut off or hidden under a floating widget is unknown, never guessed). Candidates on three axes: change an element's form, copy, position or weight; remove one that blocks; add what the user needs here and the page lacks (check it isn't collapsed or on a later step; if the screenshot can't tell, deliver with the assumption and ask the absent-element question in rule 19's order). Then scan the six objections (Trust, Price, Fit, Timing, Effort, Clarity); an answered or irrelevant lens is skipped. A defect (a typo, a broken or inverted state, a truncated label) gets one fix line (rule 15), never a card.
- Archive check. Adapted only when both halves of the block's
Değişken: … · Fark: …line match (same element and property, same difference type); otherwise generated, never "archive pattern". Never bend a block to fit; "from archive" isn't available (the page replaces A). - Gate and rank.
- Mechanism gate: an obstacle observable on this page ("the delivery date appears only after payment"), not a generic claim; a strong mechanism on
intuitionstays, its low confidence stated. B must be distinct enough to move behaviour. One mechanism, one proposal; its objection goes inobjection. - Priority and cap (rule 9): honest ease (a native-app element or navigation target needs a release; an unknown release need is assumed and said). At most three strong: explicit asks first, in the order asked, then the playbook's own by priority, problem-acting first; more → top three plus the offer. An explicit ask counts toward the three and is always produced; dropped screens asked for again get one "ranked below the bar" line; a screen with no strong candidate gets one line saying why.
- Gates: regulation (rule 11: (a) held with one line naming the rule to verify, (b) produced with its warning); the strongest regulated ideas often need a real figure or a sign-off: hold or make them conditional, never invent the figure, and say when only lower-impact tests remain runnable. Accessibility (rule 3), market (rule 11), sensitive field (rule 14: one intermediate method,
mechanismsays why that one; removal only after the user confirms,feasibilitywarning until then), protections and dark patterns (rule 6: at most one line for a protection on the page). - Unverified critical fact (a real price display, a field's legal purpose or later need, the real names of steps B writes): a critical assumption (rule 10), medium at most, not a drop and not an invented fact.
- Form flow: consider one page before steps; field count before step count. Multivariate (rule 4): one record per element, one sentence why; if the user insists on one test, the bundle is the
variable, its chat line "Daha güçlü alternatif: sonuç tek bir değişkene bağlanamaz;<X>ve<Y>ayrı testler olarak koşulmalı." ("Stronger alternative: the result can't be attributed to a specific variable; run<X>and<Y>as separate tests."), and both reviewers are told it is user-insisted.
- Mechanism gate: an obstacle observable on this page ("the delivery date appears only after payment"), not a generic claim; a strong mechanism on
- Write each record once (
ab-test-card→ The record):sourceisadaptedorgenerated; A is the user's current page verbatim (as shown or described),is_current: true;devicematches the screenshot. One screen, written once: from the inventory writecard.screenonce as a node list (kinds permockup-style.md→ Screen spec; the page's own colours as node overrides, drawn identically in both arms by construction; the page's real spacing withmb/gaponly where it matters, as in a tight form;"line": falseon the header when the page draws none), paste the same list into every record on that screen, and give each record its onecard.changetargeting the tested element'sid(a different screen or stage gets its own list). A is never tidied, re-spaced or improved. Compare the compiled A with the screenshot by building the draft and looking at the PNG, not by reading markup: a background region drawn white, a separator the page doesn't have, an order or spacing not on screen is fixed in the list, not left for the mockup reviewer. Plan the ring label's room in the same pass: a label needs about 31px clear above or below its ring; on a tight page give it room by placing it (label_pos) or with a crop orphone_scaleapplied identically to both arms that keeps the test's context, never by removing a field from the middle of A. Fidelity is for the structure, order, key copy, the flow and the tested element; a logo, a decorative icon or a few pixels are represented reasonably, the same in both arms. A colour under the contrast floor stays as it is in A (an icon drawn as a glyph takesrole="img": 3:1); when the element is identical in both arms and outside the ring, list it incard.inherited_contrast(exact text, colour as measured) and report it in chat as the page's own accessibility defect, never as a pass. A defect on the tested element itself, or a new or worse one in B, still fails the card. Pre-check, no reviewer call: runvalidate_scenario_json.py --strictbefore the critic (it compiles the same markup the builder draws), then four looks at the draft PNG before the mockup reviewer: (1) the ring label has its ~31px of room and covers no neighbour; (2) the drawn part fits the frame (no clipping, no blank screen under the last element); (3) nothing outside the page (emulator or browser chrome, the dark surround of a screenshot) is drawn as page content; (4) A's elements are in the screen's order. That B differs from A only in the tested element is guaranteed by the builder. - Cross-scenario pass. Records on one screen, flow or decision get the sequencing line (one after the other in priority order, or separate traffic); two on one mechanism merge.
- Deliver through
ab-test-card→ Delivery pipeline. The critic gets, in one call: the record files, the page context (the screenshot path, or a top-to-bottom element inventory with verbatim copy, personal values left out), the history rows, the explicit asks (and whether a bundle is user-insisted), the whole planned chat (each scenario block with its "Stronger alternative:" line, every line after the list; the setup notes when asked for) and the reasons for standing validator warnings. Apply each FIX everywhere the fact appears in one pass. Mockup-reviewer gets the same page context. Colors come from the screenshot intocard.brand, silently;card.mockup_basisisshared_page(screenshot or URL) ordescribed.
Output
In this order, nothing else:
- The history line and the fix line, when they apply.
Per scenario, exactly:
**<n>. <title>** Öncelik: <Yüksek/Orta/Düşük> · Kaynak: <arşivden uyarlandı / bu sayfa için üretildi> · Kanıt: <kendi verin / arşiv örüntüsü / sektör gözlemi / sezgi> Neden: <the mechanism in plain words, one sentence, at most 140 characters> `abtest-card-<slug>.html`English:
Priority: … · Source: <adapted from archive / generated for this page> · Evidence: …,Why: …, the file.Neden:restatesmechanism, no number or claim (rule 10). Under a weak explicit ask, afterNeden:: "Daha güçlü alternatif:<the better test>;<why this one is weak>."- After the list, one line each, only when it applies:
Başlamadan önce: 1 için B’nin metnine uyum onayı; 2 için erişilebilirlik kontrolü.(Before you start:);Koşullu (<n>): <every critical assumption as a fact to verify, by scenario number, separated by semicolons>(rule 10; the turn's one question, unless a higher kind is open, asks the most critical); the sequencing line; the primary differs from a metric the user named, one short clause, no general rule ("Yeni abonelik değeri burada daha uygun: varsayılan dönem ödenen tutarı değiştiriyor."); a held candidate and what it waits for; an open assumption (the drop point, an element assumed absent); screens ranked below the bar; a screen with no strong candidate; described mockups in one short line ("Kartlar anlatımından çizildi; ayrıntılar temsilî."); personal values left out ("Alanlardaki kişisel bilgileri karta taşımadım."); a representative address-bar domain; the history reminder when no.abtest-history.mdexists and the user mentions past tests or the variable may already have been tested. - At most one question, one sentence (rule 19). No line about colors or the brand (rule 12), no review or elimination text.
Setup notes, only when asked ("kurulum", "test planı", "hedef kitle", "setup", "audience"), once, after the scenarios, with only what the records don't carry:
Hedef kitle: <who is included and excluded; on a native app both arms limited to versions that contain the variant>
Varyantın göründüğü yer: <the screen or moment B is shown; A users counted at the same point>
Dışlamalar ve eşzamanlı testler: <employees, bots, other tests on this screen; a sibling of this turn, by name, sequential or mutually exclusive>
Başlamadan önce: <the gates in a few words, or "yok">English labels: "Target audience:", "Where the variant appears:", "Exclusions and concurrent tests:", "Pre-start gates:". A value that differs between scenarios is prefixed with the scenario number; an unknown is "needs to come from the user"; no split, sample size, duration or winner criterion (rule 5); the user's tool vocabulary only when they named one.
Detail on request
"detay", "neden bu", "üç kutuyu göster", "explain scenario 2", "full version":
- Fill
detailfor that record only: foradapted, start from the block (re-read by its title line) fitted to this page; forgenerated, write it. 3 to 6 items per box:test_itemsare{label, text}questions about this variable, one a device or segment breakdown (another variable's item labelled "Sonraki test:" / "Next test:");kpislead with the primary, carry the record's guardrail and state every denominator;dont_itemscarry a variable-isolation item, plus the sibling and compliance items when they apply. - Validate and send it to scenario-critic again; the card stays as it is.
- In chat: the three boxes as three short lists, then a short paragraph along
The hypothesis has three parts: the theory (problem, and why the mechanism can work on this page), the basis (evidence and level), why this KPI and guardrail, what would invalidate the test, what a win and a loss would teach.
Why a candidate was left out, and what the critic found, are given the same way, only when asked.
Never do
- Build on an element that isn't on the page as if it were, or redesign A (rule 15).
- Write an unmeasurable KPI ("trust increases", a rate among assistive-technology users).
- Put a sample size, duration, split or winner criterion anywhere (rule 5).
- Print the setup notes unasked, repeat the record beyond the four lines, or show elimination reasons and review reports unasked (rule 9).
- Read a whole archive file, the whole glossary, or a methodology section no decision needs.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

