agenttru.st

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 card
Checked 5d ago pushNotifications, stateTransitionHistory, streaming

we checked this    the operator says this

Community rating 0 0 up · 0 down — sign in to vote

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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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)

Examples it gives
  • 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:
supportedInterfaces
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.