Features

Every feature.
One jar.

Everything you need for AI-native browser testing at enterprise scale.

No premium tier, no paid add-ons, no feature gating. The eight capabilities below are in every Karate Agent deployment.

agent — live session
> agent.go("https://app.local") > agent.look() { role: "form", fields: [ {role:"input", name:"Email"}, {role:"button", name:"Sign in"} ] } > act('{button}Sign in', 'click') clicked · 18ms > Flow.run('login.js') ok: true · 0 tokens

01 · Token-Efficient API

An automation API the LLM actually wants to read

The JS Agent API (look(), act(), wait()) is purpose-built for LLM consumption. Structured JSON responses with only actionable data — no DOM dumps, no HTML parsing.

  • Dramatically smaller responses — look() returns {role, name, locator, actions} per element, not raw HTML
  • Incremental updates — subsequent look() calls return only what changed
  • agent.text() renders the page as structured markdown — tables, headings, key-value pairs — for data extraction
  • Batch operations — fill forms, click, and navigate in one HTTP request
  • Prompt caching — high cache hit rate on the system prompt at a fraction of regular input cost

Raw HTML dump

~80 KB

per page scan

agent.look()

~2 KB

structured JSON

agent.look() — structured response
[ { role: "input", name: "Policy Number", locator: "{input}Policy Number", actions: ["input", "clear"] }, { role: "button", name: "Submit", locator: "{button}Submit", actions: ["click"] } ]
locator syntax — compared
// Karate Agent — display-text locators act('{button}Submit', 'click') act('{input}Email', 'input', 'user@example.com') act('{a}Sign In', 'click') // vs. traditional selectors driver.findElement(By.xpath( "//button[contains(text(),'Submit')]" )).click() page.locator( 'button:has-text("Submit")' ).click()

16

chars Karate

30

chars Playwright

42

chars XPath

02 · Display-Text Locators

The locator that survives your next refactor

{button}Submit uses visible text instead of CSS selectors or XPath. When the app is refactored and element IDs change, display-text locators keep working.

This dramatically reduces maintenance — the #1 cost of traditional UI test suites. Karate's locator syntax is also shorter: 16 characters vs 30–42 for equivalent Playwright/XPath selectors, saving output tokens across every session.

03 · Bring Your Own LLM

Any provider. Any model. Including zero-cost self-hosted.

No vendor lock-in. Use cloud APIs or run open-weight models on your own hardware for zero API cost and full data sovereignty.

Cloud aggregator

OpenRouter

100+ models through one endpoint.

openrouter/*

Direct

Anthropic

Claude Sonnet, Haiku, Opus — native.

anthropic/*

Verified open-weight · $0 API

Gemma 4 · Qwen 3.6

Both benchmark-verified · one 24 GB GPU at 4-bit.

ollama/gemma4 · ollama/qwen3.6

OpenAI-compatible

Ollama / vLLM

Llama, Mistral, Qwen, any local.

ollama/* · vllm/*

Watch: Gemma running self-hosted, completing a saucedemo purchase end-to-end

Gemma self-hosted

Open-weight model. $0 in API fees. Same dashboard, same flows.

Two verified open-weight models

Karate Agent is verified on open-weight models, not just frontier APIs. Gemma 4 26B and Qwen 3.6 35B-A3B both pass the full UI-automation benchmark suite at parity: form fills, vision reads, table extraction, deep navigation, and an end-to-end purchase. Each runs on a single 24 GB GPU via Ollama, or via OpenRouter. For regulated industries the entire stack, server, browser, and LLM, runs on your infrastructure with zero internet dependency.

Benchmark-verified

Gemma 4 26B

Google · 4B active, MoE

google/gemma-4-26b-a4b-it

Benchmark-verified

Qwen 3.6 35B-A3B

Alibaba · 3B active, MoE · Apache 2.0

qwen/qwen3.6-35b-a3b

Two verified models from two vendors, so your open-weight path never depends on a single one. Any other OpenAI-compatible model still runs via the explicit provider/model form.

provider routing
# Provider prefix handles routing openrouter/anthropic/claude-sonnet-4-6 anthropic/claude-haiku-4-5 ollama/gemma4 ollama/qwen3.6 # Single env var to switch KARATE_AGENT_MODEL=ollama/gemma4

04 · 100% Self-Hosted

Air-gap compatible, by design

The entire platform — grid server, worker containers, dashboard — runs on your infrastructure. No data leaves your network.

  • Session transcripts, screenshots, and recordings stay on your file system
  • Pair with self-hosted Gemma 4 26B or Qwen 3.6 via Ollama, so even the LLM runs locally with zero internet dependency
  • Suitable for regulated industries: financial services, healthcare, government
  • No cloud-based testing tool or AI API required
deploy — single artifact
# Single-artifact deployment $ unzip karate-agent-2.x.y.zip $ cd karate-agent-2.x.y && cp ~/karate.lic . $ ./start.sh license valid worker image pulled dashboard http://localhost:4444 # That's it. One jar. One image. # No microservices. No databases. # No message queues.

Runtime

Java 21

Container

Docker 24+

Artifacts

1 jar · 1 image

Network

Air-gap OK

Watch: a guided .md task file orchestrates Karate flows through a Guidewire submission

Flows in action · 2 min

Plain-English .md + .js flows orchestrate a 12-step Guidewire submission

flows/ — version-controlled in git
flows/ ├── task.md# plain-English hints ├── orchestrator.js// chains login → quote → submit ├── auth/ │ ├── login.js │ └── logout.js ├── quote/ │ ├── steps.md │ ├── new-quote.js │ └── verify.js └── shared/ └── wait-for-grid.js

5 LLM iterations

~50 s

login flow, pure LLM

Flow.run()

~2 s

same flow, scripted

05 · Flow System

Executable .js. Native speed. Self-healing.

Executable .js scripts run at native JavaScript speed. A login flow that takes 5 LLM iterations (~50s) executes in 2 seconds via Flow.run(). Also supports .md task files — plain English hints that can cut iterations in half without writing any code.

  • Compose flows — chain login → navigate → fill form → submit
  • Self-healing — flow failure returns error + page state. LLM recovers automatically
  • Deviation reporting — deviations flagged in the report so teams know which flows need maintenance
  • .md task files — plain English hints alongside .js flows, no code required
  • Plain JavaScript — no proprietary DSL, readable by any developer, version in git
Watch: paste one curl into Claude Code and it drives a real browser through saucedemo

Live mode · 2 min

One curl. Your coding agent drives a real browser.

06 · Works With Any Coding Agent

One curl. Your agent bootstraps itself.

AI-first design. One curl command and your coding agent knows how to create browser sessions and drive them. No plugins, no configuration files, no sidecar processes.

  • Self-bootstrapping: /api/prompt returns a markdown document that teaches the LLM the full API — it creates sessions, drives browsers, and submits jobs on its own
  • Any agent: Claude Code, Cursor, VS Code Copilot, OpenAI Codex CLI, JetBrains AI, Aider — anything that can run a shell command
  • MCP also supported: native karate_eval tool via Streamable HTTP for agents that prefer MCP
  • Per-session API reference: each live session exposes /sessions/{id}/prompt with the full Agent API tailored to that session

Any agent that can run a shell command

Claude Code Cursor VS Code Copilot OpenAI Codex CLI JetBrains AI Aider curl + any LLM
bootstrap — one curl
# Point the agent at the prompt endpoint $ curl http://localhost:4444/api/prompt # returns markdown teaching the full Agent API # Or via MCP $ claude mcp add karate http://localhost:4444/mcp tool: karate_eval registered # Per-session API reference $ curl http://localhost:4444/sessions/$ID/prompt

07 · Recording & Reproducibility

Every session produces a complete audit trail

H.264 video, step-by-step transcript, structured report, screenshots per step. Recordings accelerate the entire team.

Failure diagnosis

Review video + transcript instead of reproducing 12-step workflows.

Flow development

Watch successful autonomous sessions, extract patterns, codify as flows.

Onboarding

New team members watch recordings to learn app navigation and locator patterns.

Stakeholder demos

Share recordings with product owners. They see exactly what was tested.

08 · Enterprise SPA Support

The SPAs Selenium quietly gives up on

Cursor-pointer discovery catches <div onclick> targets in Guidewire, Salesforce, ServiceNow — apps where standard locator strategies fail.

Auto-retry when enterprise field formatters (GW/SAP) clear values set before async init completes — no flow workaround needed.

Guidewire PolicyCenter Guidewire ClaimCenter Salesforce ServiceNow SAP Fiori Workday
cursor-pointer discovery
// Guidewire uses <div onclick> — no buttons // Standard finders return nothing > agent.look() [ { role: "clickable", # cursor:pointer name: "New Policy", locator: "{clickable}New Policy" }, { role: "input", name: "Effective Date", formatter: "GW-date", # auto-retry locator: "{input}Effective Date" } ] > act('{clickable}New Policy', 'click') opened · 210ms

See it in action

Book a demo to see how Karate Agent handles your application — bring your hardest flow, we'll run it live.