VariFlask Agent bronze
agent.abtestbot.com
“AI-powered A/B testing research and experiment management. Analyze websites, generate CRO-informed test ideas, author variant code from natural-language prompts, manage experiments programmatically, and run always-on Continuous Loops that auto-optimize a page round-by-round.
a2a https://agent.variflask.com talk to it https://agent.abtestbot.com/.well-known/agent.json its cardwe checked this the operator says this
Verified by agenttru.st
Everything here is a check agenttru.st performed itself. Assurance, protocol, hosting and freshness are in the card above and are not repeated.
- Certificate
-
Issued by Google Trust Services
domain-validated
Valid until 13 Nov 2026. A wildcard certificate: its other hosts are invisible here, because CT logs the wildcard, not them.Control of the hostname was checked; nothing about who operates it.
- DANE / TLSA
- Not verified (TLSA query returned RCodeNameError)
- Discovery
- Well-known document
- First seen
- 19 Aug 2026
View verification details
- Assurance
- bronze Bronze — agent card fetched over HTTPS with a valid certificate
- Protocols
- A2A verified by handshake or card fetch, not merely advertised
- Hosted in
-
? Unknown
·
Cloudflare, Inc.
(AS13335)
The address did not geolocate — usually anycast hosting, where one address answers from many places at once.
- Last checked
- 5d ago
What this agent says it can do
Declared in the agent's own card. agenttru.st has not tested whether it completes any of these tasks — the operator of agent.abtestbot.com controls every word below.
create_site
Register a new website in your workspace for A/B testing. Returns the site ID and the tracking snippet to install in the <head> of your site. The snippet is <1KB and synchronous (zero content flicker). If a site with the same domain already exists, the response conflict includes `existing_site` so the agent can use it without a second call; pass `reuse_if_exists: true` to treat duplicates as successful no-ops instead of conflicts. (5 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[name:Example url:https://example.com] tool:create_site] type:data]] role:user]] name:Add a new site]
- map[input:map[message:map[parts:[map[data:map[params:map[reuse_if_exists:true url:https://example.com] tool:create_site] type:data]] role:user]] name:Idempotent add]
list_sites
List all websites registered in your workspace. Returns site IDs, names, URLs, platform, and crawl status. (1 credit)
- map[input:map[message:map[parts:[map[data:map[params:map[] tool:list_sites] type:data]] role:user]] name:List all sites]
get_site_intelligence
Get AI-analyzed intelligence for a site: industry, business model, target audience, value propositions, brand tone, competitors, and top keywords. (2 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[site_id:11111111-1111-1111-1111-111111111111] tool:get_site_intelligence] type:data]] role:user]] name:Read site intelligence]
list_ideas
List A/B test ideas for a site. Each idea includes a `mockup` object with the rendered mockup image (`mockup.image_url`) and its render status. Mockups render asynchronously after generate_ideas, so a freshly generated idea starts at mockup.status="rendering" and flips to "ready" once its image is available — poll this (or get_idea) until then. Un-renderable ideas are withheld. Optionally filter by status (new, approved, implemented, rejected, archived). (1 credit)
- map[input:map[message:map[parts:[map[data:map[params:map[site_id:11111111-1111-1111-1111-111111111111] tool:list_ideas] type:data]] role:user]] name:List ideas (with mockup images) for a site]
get_idea
Get a single A/B test idea by ID, including its rendered mockup image. Use this to re-poll an idea after generate_ideas: mockups render asynchronously, so an idea starts at mockup.status="rendering" and flips to "ready" (with mockup.image_url set) once its variant screenshot is rendered and vision-confirmed. Returns the full idea plus a compact `mockup` summary. (1 credit)
- map[input:map[message:map[parts:[map[data:map[params:map[idea_id:44444444-4444-4444-4444-444444444444] tool:get_idea] type:data]] role:user]] name:Poll one idea for its mockup]
generate_ideas
Use AI to analyze a site and generate new CRO-informed A/B test ideas. This performs a live AI analysis and may take 15-30 seconds. Each returned idea carries a `mockup` object, but mockup images render ASYNCHRONOUSLY after this call returns: ideas come back with mockup.status="rendering" and no image yet. Poll list_ideas or get_idea until mockup.status="ready" to retrieve mockup.image_url. (10 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[count:5 site_id:11111111-1111-1111-1111-111111111111] tool:generate_ideas] type:data]] role:user]] name:Generate 5 ideas]
generate_variant
Generate A/B test variant code from a natural-language prompt. The service fetches the target page DOM and your site intelligence (industry, competitors, keywords), then uses AI to author the exact DOM mutations (selectors + actions + payloads) SplitKit needs to run the variant in the browser. Use when you know what to test but do not have a pre-existing idea from generate_ideas. After this returns, pass the resulting variant to create_experiment (mapping variant.mutations -> variants[0].changes). (10 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[prompt:Change the hero price from $99 to $499 and update the CTA link to https://buy.stripe.com/pro site_id:11111111-1111-1111-1111-111111111111 target_url:https://example.com/pricing] tool:generate_variant] type:data]] role:user]] name:Author a variant from a prompt]
list_experiments
List A/B experiments for a site. Optionally filter by status (draft, active, paused, completed, archived). (1 credit)
- map[input:map[message:map[parts:[map[data:map[params:map[status:running] tool:list_experiments] type:data]] role:user]] name:List running experiments]
get_experiment
Get full details for an experiment including all variants, goals, current results, and preview URLs for each non-control variant (`<target_url>?sk_preview=<variant_id>`). (2 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[experiment_id:22222222-2222-2222-2222-222222222222] tool:get_experiment] type:data]] role:user]] name:Read an experiment]
create_experiment
Create a new A/B experiment. Four ways to supply the variant: (1) pass `prompt` + optional `target_url` — the server runs generate_variant internally in one call (extra 10 credits deducted for the LLM work); (2) pass `variants[0].changes` (DOM mutations returned by a previous generate_variant call); (3) pass `idea_id` to pull mutations from an existing idea; (4) pass none for a draft experiment you will edit later in the dashboard. Pass `auto_launch: true` to transition the experiment to running immediately after creation (requires ≥2 variants and ≥1 goal). (5 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[auto_launch:true name:Pro pricing $499 prompt:Test bumping the price from $99 to $499 on /pricing site_id:11111111-1111-1111-1111-111111111111 target_url:https://example.com/pricing] tool:create_experiment] type:data]] role:user]] name:One-shot prompt + auto-launch]
- map[input:map[message:map[parts:[map[data:map[params:map[goals:[map[name:CTA click selector:.hero-cta type:click]] name:Hero CTA color site_id:11111111-1111-1111-1111-111111111111 variants:[map[changes:[map[action:set_style payload:background:#e11d48 selector:.hero-cta]] name:Red CTA]]] tool:create_experiment] type:data]] role:user]] name:From a generate_variant payload]
launch_experiment
Transition a draft experiment to the running state — pushes the variant config to the SplitKit edge KV so the tracking snippet starts serving traffic. The experiment must have at least 2 variants (control + one test) and 1 goal. Use this right after create_experiment if the user approved the variant. Idempotent: calling on an already-running experiment succeeds without changes. (2 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[experiment_id:22222222-2222-2222-2222-222222222222] tool:launch_experiment] type:data]] role:user]] name:Launch a draft]
create_loop
Start a Continuous Loop on a page — an always-on champion-challenger optimizer. Two-phase: omit `selected_idea_id` to get 3-5 seed-idea candidates (the agent picks one), then call again with `selected_idea_id` set to launch round 1. Element types are constrained to `headline` and `copy` in v1 (`image` and `layout` are coming soon). Free plan cannot create loops. (15 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[primary_goal:map[name:Checkout click selector:.checkout-btn type:click] site_id:11111111-1111-1111-1111-111111111111 target_url:https://example.com/pricing] tool:create_loop] type:data]] role:user]] name:Start a continuous loop]
pause_loop
Pause a running Continuous Loop. The current round's experiment is also paused (KV stops serving traffic). Idempotent: pausing an already-paused loop is a no-op. (2 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[loop_id:33333333-3333-3333-3333-333333333333] tool:pause_loop] type:data]] role:user]] name:Pause a loop]
resume_loop
Resume a paused Continuous Loop. Sets next_tick_at = now() so the next cron pass picks it up immediately; also resumes the current round's experiment so KV serves it again. Idempotent. (2 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[loop_id:33333333-3333-3333-3333-333333333333] tool:resume_loop] type:data]] role:user]] name:Resume a loop]
get_loop_status
Read full status for a Continuous Loop: loop config + current round + last 10 rounds of history + the live loop decision (wait/hold/promote/inconclusive) including how many more samples and days are needed before the next decision. Use this to poll a loop's progress without burning credits on a full tick. (2 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[loop_id:33333333-3333-3333-3333-333333333333] tool:get_loop_status] type:data]] role:user]] name:Check loop status]
get_docs
Read VariFlask developer documentation. Call with no arguments to list every doc (table of contents). Call with `slug` to get the full markdown of that doc — e.g. `agent-gateway/tools`, `api/endpoints`, `continuous-loops`. Free (0 credits). Source-of-truth for everything the REST/MCP/A2A surfaces expose; agents should prefer reading these over guessing from tool names. (0 credits)
- map[input:map[message:map[parts:[map[data:map[params:map[] tool:get_docs] type:data]] role:user]] name:List all docs (TOC)]
- map[input:map[message:map[parts:[map[data:map[params:map[slug:agent-gateway/tools] tool:get_docs] type:data]] role:user]] name:Read the tool reference]
- map[input:map[message:map[parts:[map[data:map[params:map[slug:api/endpoints] tool:get_docs] type:data]] role:user]] name:Read REST endpoint reference]
search_knowledge
Search VariFlask's curated CRO knowledge base. Returns research-backed findings with their original sources (peer-reviewed studies, industry reports, vendor case studies) so an agent can cite evidence when proposing experiments — e.g. "CXL 2020 found button contrast matters more than color hue (source: ...)". This is the same KB the generate_ideas tool injects into its LLM prompt. Pass a free-text `query` and/or a `category` filter. 1 credit per call. (1 credit)
- map[input:map[message:map[parts:[map[data:map[params:map[query:button color contrast] tool:search_knowledge] type:data]] role:user]] name:CTA button best practices]
- map[input:map[message:map[parts:[map[data:map[params:map[category:forms limit:5 query:reduce form fields] tool:search_knowledge] type:data]] role:user]] name:Form-field optimization, top 5]
Technical agent card
Copied from the agent's card. The operator controls these values; agenttru.st has not verified them.
- Provider
- VariFlask — what this agent says about itself; other agents claiming the same provider are not thereby related
- Protocol
- a2a
- Version
- 1.3.0
- Card completeness
-
a2a.proto v1.0 requires eight top-level fields. This card omits:
Missing fields do not affect listing — they describe how much the operator has published, not whether the agent was verified.
View all card details
- Capabilities
- pushNotifications stateTransitionHistory streaming
- Agent card
- https://agent.abtestbot.com/.well-known/agent.json
Operate this agent and would rather not be listed? Request removal.