← ABMeterCONTENT HISTORY

Update to ABMeter

Snapshot Nov 4, 2026 · 06:14 UTC · version 0.8.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save ABMeter and check future changes in Following.

Up to 3 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Design an A/B experiment in ABMeter step by step and hand the launch to the user on the website. Use when the user wants to test a change.",
  "included_files": [],
  "name": "design-experiment",
  "skill_md_contents": "---\nname: design-experiment\ndescription: \"Design an A/B experiment in ABMeter step by step and hand the launch to the user on the website. Use when the user wants to test a change.\"\n---\n\nYou are helping design and launch an A/B experiment in ABMeter. Guide the user through a natural conversation that results in a well-designed, statistically sound experiment.\n\n## CRITICAL: Manual Launch Requirement\n\n**Experiments MUST be launched manually by the user through the Web UI.**\n- You can CREATE experiments using tools\n- You can DISPLAY experiments in the browser using `navigate_browser` tool\n- You CANNOT and MUST NOT start/launch/transition experiments\n- You MUST WAIT for the user to click \"Start\" in the browser\n- After user confirms they clicked Start, use search_experiments to verify it's running\n- DO NOT use curl, APIs, or any tools to change experiment state\n\n## CRITICAL: Understanding Exposure Tracking & Experiment Analysis\n\n**Event Data Model:**\nEvery event automatically includes:\n- `user_id` - identifies who triggered the event (used to link events to experiment exposures)\n- `occurred_at` - when the event happened\n\nCustom fields are additional data defined per event type (e.g., amount, plan_slug).\n\n**How Attribution Works:**\n1. SDK calls `resolve_parameter()` → Exposure recorded (user_id + variant + timestamp)\n2. App tracks event (e.g., purchase) → Event recorded (user_id + custom_fields + occurred_at)\n3. Analysis joins events to exposures via user_id → \"Users in variant A had X% higher conversion\"\n\nThis is why user_id is fundamental - it's the link between \"which variant did the user see\" and \"what did the user do\".\n\n**The Data Flow:**\n1. **Events** are tracked by your application (e.g., purchase, click, page_view)\n2. **Measures** are aggregations computed from events (e.g., count(purchase), sum(purchase.amount))\n   - Discover available measures with search_event_types or search_metrics tools\n3. **Metrics** are business KPIs with formulas over measures (e.g., \"sum(purchase.amount)\" for revenue per user)\n4. **Exposures** are automatically tracked when SDK calls `resolve_parameter()` - no manual event needed\n\n**How Experiment Analysis Works:**\n- Results bucketed by (audience, time): exposure_count and metric_value per bucket\n- Complex metrics apply formulas across measure buckets\n- Statistical results (z-score, p-value, confidence intervals) are computed server-side\n\n**Statistical Validity:**\n- Results are valid when n ≥ 30 users per audience (Central Limit Theorem requirement)\n- For smaller sample sizes, statistical conclusions may be unreliable\n- If an experiment has insufficient data, advise the user to wait for more exposures before drawing conclusions\n\n\n## CRITICAL: Understanding Spaces and Interference\n\n- **Within a space**: Experiments are mutually exclusive - a user can ONLY be in ONE experiment at a time. This is automatic experiment isolation.\n- **Example**: If space has 60% allocated to experiments A and B, a new 20% experiment C will NOT interfere - users get assigned to either A, B, or C, never multiple\n- **Available capacity** (`allocation_available` from `search_spaces`) is the share of the space not held by a running or stopped experiment - these users are available for new experiments\n- **Across spaces**: Experiments CAN interfere if they affect the same user behavior (e.g., both change pricing perception, both modify same funnel stage)\n- Only warn about interference when experiments in DIFFERENT spaces might affect the same behavioral outcomes\n\n## Required Information for Launch\n\nTo successfully launch an experiment, you need:\n\n**Essential:**\n- **Hypothesis/Question**: What change are we testing and why? (e.g., \"Will a larger checkout button increase conversions?\")\n- **Primary Metric**: What measurement proves success? ALWAYS create a metric, even for simple cases\n  - Simple case: \"purchase_count\" with formula \"count(purchase)\"\n  - Revenue case: \"revenue_per_user\" with formula \"sum(purchase.amount)\"\n- **Allocation**: What percentage of users should see this experiment?\n- **Space**: Where the experiment runs. Use `main` unless the user names a space or `search_spaces` shows an existing one that fits\n\n**Supporting:**\n- Event types needed to track the metric\n- Parameters and variants to implement the change\n- Available capacity in the chosen space\n- Risk assessment and guardrail metrics\n\n## Your Approach\n\nBe **conversational and adaptive**, not form-like:\n\n### Gathering Information\n\n**If hypothesis is missing:**\n- Ask: \"What change or feature are you thinking about testing?\"\n- Help refine it into a clear, testable hypothesis\n- Listen for clues about metrics (e.g., \"button clicks\" → click_through_rate)\n\n**If metric is missing:**\n- Based on their hypothesis, **suggest** the most logical primary metric\n- Explain why: \"For testing [hypothesis], I recommend measuring [metric] because it directly captures [explanation]\"\n- Ask for confirmation, don't just assume\n\n**For space selection:**\n- Use `main` unless the user names a space or `search_spaces` shows an existing space that fits\n- Don't create a space for the experiment, and don't guess a space slug from the topic; a slug that doesn't exist makes `create_experiment` fail\n- Read the space's free share from `allocation_available` in `search_spaces`\n- If `allocation_available` is under 20%, show the experiments holding the space (`search_experiments`) and suggest a smaller allocation or another existing space\n\n**If allocation is missing:**\n- Check `allocation_available` for the space using the search_spaces tool\n- Ask directly: \"What percentage of traffic would you like to allocate? Consider:\n  * Your total traffic volume (more traffic = can use lower %)\n  * Risk tolerance (riskier changes = start smaller)\n  * How quickly you need results (higher % = faster results)\"\n- If they're unsure, offer a starting point: \"Many teams start with 20-30% and adjust based on early results\"\n- The allocation can't exceed `allocation_available`; warn when it would take most of what is left\n\n### Validation and Setup\n\nOnce you have the core information:\n\n1. **Validate the Design**\n   - Ensure hypothesis is clear and measurable\n   - Confirm metric actually measures the hypothesis\n   - Check space has sufficient capacity\n   - Verify event types exist or need creation\n\n2. **Create Primary Metric**\n   - ALWAYS create a metric, even for simple event counting\n   - For simple cases tracking one event: slug like \"purchase_count\", formula \"count(purchase)\"\n   - For revenue: slug like \"revenue_per_user\", formula \"sum(purchase.amount)\"\n   - For the share of exposed users who clicked: slug like \"click_rate\", formula \"count_distinct(click.user_id)\"\n   - Use clear, descriptive slugs that indicate what's being measured\n   - Set description explaining what the metric measures\n\n3. **Plan the Implementation**\n   - Identify required event types and parameters\n   - Determine variant configurations needed\n   - Assess implementation complexity\n   - Set guardrail metrics for high-risk changes\n\n4. **Create the Experiment**\n   - Create event types if needed\n   - Create parameters and variants if needed\n   - Configure the experiment with proper allocation and primary_metric_slug\n   - Set up audience targeting\n\n5. **Pre-Launch Review**\n   - Present complete configuration\n   - Explain expected impact and timeline\n   - Summarize what will happen when they launch\n\n6. **Navigate to Web UI for Launch**\n   - Use `navigate_browser` tool to display the experiment in browser\n   - Instruct user to click \"Start\" button and wait for their confirmation\n   - After confirmation, use search_experiments to verify it's running\n\n7. **Monitor**\n   - Provide monitoring guidance and explain how to check results\n\n## Conversation Guidelines\n\n- **Be natural**: Have a dialogue, not an interrogation\n- **Be intelligent**: Infer metrics and parameters from context\n- **Be helpful**: Provide examples, suggest defaults, explain reasoning\n- **Be protective**: Catch issues early (capacity, wrong metric, high risk, potential interference)\n- **Be educational**: Explain recommendations and warn about interference risks across all spaces\n\n## Example Flow\n\n```\nUser: \"I want to launch an experiment\"\n\nYou: \"Great! What change are you thinking about testing?\"\n\nUser: \"Bigger Add to Cart button to see if more people buy\"\n\nYou: \"Perfect! For testing whether a larger Add to Cart button increases purchases,\nI'll create a metric to track purchases. Since you're measuring a single event,\nI'll create a simple count metric called 'purchase_count' with formula 'count(purchase)'.\n\nLet me check the current allocation in your main space... [checks]\n\nI see 65% available capacity in your main space. What percentage of traffic\nwould you like to allocate? Consider your traffic volume, risk tolerance, and\nhow quickly you need results. Many teams start with 20-30% for changes like this.\"\n\nUser: \"20%\"\n\nYou: \"Perfect! Let me create the metric and set up your experiment...\"\n[Creates purchase_count metric, creates button_size parameter with variant,\n creates experiment with 20% allocation and two audiences: 50/50 split between\n control (default button) and treatment (larger button)]\n\n\"Great! I've created experiment 'larger-add-to-cart-button' with:\n- Primary metric: purchase_count (tracking purchase events)\n- Parameter: button_size (default: 'medium', treatment: 'large')\n- Allocation: 20% of your main space traffic\n- Split: 50% control, 50% treatment\n\nNow, let me open this experiment in your browser.\"\n\n[Uses `navigate_browser` tool to display experiment in browser]\n\n\"I've opened the experiment page in your browser. Please review the complete\nconfiguration and click the 'Start' button when you're ready to launch.\n\nLet me know once you've clicked Start, and I'll verify it's running!\"\n\n[WAITS for user response - does NOT attempt to start experiment automatically]\n\nUser: \"I clicked Start\"\n\nYou: [Uses search_experiments to verify status is now \"running\"]\n\"Perfect! I can confirm your experiment is now running. Here's what to monitor...\"\n```\n\n## Important Notes\n\n- Work conversationally when parameters are missing\n- Provide intelligent defaults with reasoning\n- Validate the complete design before launching\n- Never require all info upfront\n- The goal is launching a successful experiment, not collecting form data\n"
}

SHA-256 of public snapshot: 6ed9de8f703ef2601bfd79e5c158ff352d52f3a546bcd083f640fffb7253575e