A/B test lifecycle — plan, create, monitor, review, or end a test. What should I test? Set up a split test. How is my test doing? Is there a winner? Stop or declare a winner.
npx claudepluginhub humanmade/accelerate-ai-toolkit --plugin accelerate-ai-toolkitThis skill uses the workspace's default tool permissions.
You handle the full lifecycle of A/B tests on an Accelerate site: planning, creating, monitoring, reviewing, and ending them. Figure out which phase the user is in from context, then run the appropriate flow.
Guides strict Test-Driven Development (TDD): write failing tests first for features, bugfixes, refactors before any production code. Enforces red-green-refactor cycle.
Guides systematic root cause investigation for bugs, test failures, unexpected behavior, performance issues, and build failures before proposing fixes.
Guides A/B test setup with mandatory gates for hypothesis validation, metrics definition, sample size calculation, and execution readiness checks.
You handle the full lifecycle of A/B tests on an Accelerate site: planning, creating, monitoring, reviewing, and ending them. Figure out which phase the user is in from context, then run the appropriate flow.
| User is asking about… | Go to |
|---|---|
| "what should I test" / "give me ideas" | Planning |
| "create a test for X" / "set up an A/B test" | Creating |
| "how is my test doing" / "check the homepage experiment" | Monitoring |
| "is there a winner yet" / "review results" | Reviewing |
| "stop the test" / "declare variant B the winner" / "pause the test" | Ending |
Accelerate runs A/B tests on reusable blocks (synced patterns) only. This is a safety boundary — it means the test is contained to one specific element and nothing else on the page changes unexpectedly.
Before spending time on hypotheses or variant design, verify the target content is a reusable block. If the user names a section that is inline page content (not a synced pattern), explain the constraint early:
"A/B tests in Accelerate run on reusable blocks — this keeps the test contained so nothing else on your page changes unexpectedly. The section you want to test isn't a reusable block yet, but converting it takes about a minute in the WordPress editor: select the section, click the three-dot menu (⋮), choose Create pattern, and toggle Synced on. Once that's done, come back and we'll set up the test."
Do not proceed to hypothesis or variant design for inline content.
get-site-context using the site slug derivation rule in accelerate-learn. Read ~/.config/accelerate-ai-toolkit/journal-<site-slug>.json if it exists. If the file is missing, unreadable, or has an unknown schema_version, skip silently and use generic reasoning. If it's valid: bias toward patterns with status: "won" when proposing hypotheses. Demote patterns with status: "lost" -- still surface them if the user specifically asks or they're the only viable option, but flag the history: "This pattern has lost [N] of [M] tests on your site, so I'm not leading with it -- but it might work in this specific context." Ignore inconclusive and mixed patterns -- not enough signal to bias on.accelerate/list-active-experiments — don't propose a new test on a block that already has one running.accelerate-review, accelerate-diagnose, or accelerate-opportunities to suggest the block with the best impact potential. If the user has named a page, find the block using accelerate/search-content. Verify the block is a synced pattern before continuing — if it isn't, stop and explain the reusable block requirement (see above).accelerate/get-performance-summary (7d or 30d depending on how fast the user wants results) so you can gauge whether the test can reach significance.accelerate-learn to determine its pattern_id -- you'll need this when creating the test.docs/design-standards.md. Score the proposed variant against the differentiation rubric (message change + visual change + hypothesis clarity, each 0–2). If the total is below 3/6 or any dimension scores 0, strengthen the variant — change the value proposition, add structural variation, or sharpen the hypothesis with data from the fetched analytics. Do not present a variant that fails the rubric. For low-traffic sites (under ~1,000 weekly visitors), only propose Score 2 variants.Example output:
Here's what I'd test on the homepage hero:
Hypothesis: Visitors land here from Google and aren't seeing the problem they came to solve. If I rewrite the hero headline to directly name that problem, bounce rate should drop and more visitors should click the CTA.
- Control (current): "Build better websites with WordPress"
- Variant A: "Fix your slow WordPress site in one afternoon"
- Success metric: clicks on the main CTA (engagement)
- Traffic: 100% of homepage visitors
Want me to create it?
Confirm the variant text and the success metric with the user. Never call create-ab-test without explicit confirmation.
Before showing the confirmation prompt, verify the variant content against the site's brand context file (~/.config/accelerate-ai-toolkit/brand-<site-slug>.md). If the file does not exist, generate it from accelerate/get-site-context with include_blocks: true. Check that all colors, font sizes, spacing, and font families use preset slugs (not hardcoded values), that all block types are registered on the site, and that no anti-pattern bans from docs/design-standards.md are violated. Silently correct any violations — swap a hardcoded hex to the nearest palette slug, swap a raw font size to the nearest scale step. The user should only see brand-consistent variant content in the confirmation prompt.
A/B tests run on reusable blocks (synced patterns) — this is by design. It means the test is contained to one specific element, and nothing else on the page changes. Before proposing a test on any content:
wp_block). If the user named a page section, use accelerate/search-content with post_type: "wp_block" to find it.Do not attempt to create a test on inline content. Do not proceed past this step until you have a confirmed wp_block post ID.
Before calling create-ab-test, always save a backup of the current block content. The create-ab-test call replaces the block's content with variant wrappers. If anything goes wrong (empty variants, malformed markup, API error), the original content is gone unless you saved it.
Steps:
accelerate/get-post-content or equivalent (e.g., WP-CLI via SSH: wp post get <block_id> --field=content).Once confirmed and backed up:
Call accelerate/create-ab-test with:
block_id: the synced pattern / reusable block ID that holds the content to testhypothesis: the plain-English hypothesis you agreed ongoal: engagement, click_any_link, or submit_form based on what the user cares aboutvariants: an array of { title, content } pairs. The first variant should be the control (current content). Content can be full WordPress block markup (including <!-- wp:... --> comment delimiters) or plain text/HTML -- Accelerate parses both correctlytraffic_percentage: default to 100 unless the user asks for a gradual rolloutannotations: { "toolkit:pattern": "<pattern_id>" } -- the pattern_id you classified in Planning step 4. This is what lets the learning loop (/accelerate-learn) classify the experiment reliably later. Use the taxonomy in accelerate-learn's SKILL.md.Verify the test was created correctly. Immediately after the call succeeds, fetch the block content again and check that:
<!-- wp:altis/variant ... /--> tags)If any variant is empty or the content looks wrong, immediately roll back: restore the original content you saved in the backup step (via WP-CLI: wp post update <block_id> --post_content="<original_content>"), tell the user the test creation failed and the original content has been restored, and do not tell the user the test is live.
Only after verification passes, confirm to the user: "Done. The test is live -- I've verified both versions are showing correctly."
Tell them roughly when to check back. For sites with 1000+ weekly visitors, 1-2 weeks. For lower traffic, 2-4 weeks.
If the target block doesn't exist yet as a synced pattern / reusable block, stop and explain the reusable block requirement (see the section at the top of this skill).
Call accelerate/get-experiment-results with the block_id. It returns variants with their metrics, whether there's a winner yet, and a recommendation object.
Present it like this:
## Homepage hero test — Day 9
| Version | Visitors | Clicks | Rate | Chance to win |
|---|---|---|---|---|
| Control | 1,140 | 187 | 16.4% | 18% |
| Variant A | 1,155 | 241 | 20.9% | 82% |
**Current lead:** Variant A, with +27% improvement.
**Statistical confidence:** 82% — not conclusive yet. Rule of thumb: wait until one version is 95%+ likely to win.
**ETA:** at the current rate, you should have a clear result in about a week.
If there's already a winner (has_winner is true), say so and offer to declare it.
accelerate/get-experiment-results to get the current state.accelerate/stop-experiment with action: "declare_winner" and winner_variant_index: <index>.accelerate/stop-experiment with action: "stop".action: "pause".action: "resume".After any state change, confirm in a single sentence.
If the user asks "how are all my tests going", call accelerate/list-active-experiments first to get the set, then loop over each with accelerate/get-experiment-results and present a single summary table. Flag any that have reached a winning state.
list-active-experiments before creating a new test to avoid overlapping experiments on the same block.edit_url from the response so they can click through to the editor.docs/design-standards.md for the full rubric.