open source

Write YAML.
Test anything.

AI-powered cross-platform test runner for web, Android, and iOS. Declarative steps for predictable actions. AI steps for dynamic flows. Beautiful reports.

checkout.yaml
flow: checkout
platform: web # override with --platform web|android|ios
app: https://demo-store.example.com
bundle_android: com.example.demo
bundle_ios: com.example.demo

steps:
  - tapOn: "Sign in"
  - inputText: "testuser@example.com"
  - tapOn: "Log in"
  - wait: 2000
  - assertVisible: "Dashboard"
  - ai:
      goal: "Buy the first product and complete checkout"
      max_steps: 30 # safety limit — caps actions Claude can take
  - verify:
      checks:
        - "Order confirmation page is shown"
        - "Order number is displayed"
        - "Success animation plays"
Three steps. Full coverage.

Write declarative steps for the predictable parts. Let Claude handle the dynamic parts. Get a detailed report with screenshots and video.

1

Write a YAML flow

Declarative steps like tapOn, inputText, assertVisible execute instantly with no AI reasoning. Add ai: steps where the UI is dynamic — Claude drives those with full context from prior steps.

2

Refine with /refine

Optionally run /refine on your flow. Claude asks clarifying questions about vague AI goals and transforms them into detailed, actionable instructions that produce consistent results.

3

Run and review

Execute with /flowtest and open the generated HTML report. Every step includes a screenshot, AI sub-steps expand to show individual actions, and web runs include video recording.

Built for real testing.

Not a toy. A practical tool for testing real apps across platforms.

Declarative + AI

Predictable steps run instantly. Dynamic sections are driven by Claude with full app context. Best of both worlds.

HTML reports

Self-contained viewer with health score, step timeline, expandable AI sub-steps, screenshots, and video.

Cross-platform

Same YAML syntax works across web, Android, and iOS. Platform conditionals handle the differences.

Env variables

Reference $TEST_EMAIL and $TEST_PASSWORD in your flows. Mask sensitive values in reports.

/refine workflow

Interactive assistant that asks clarifying questions and transforms vague AI goals into detailed, consistent instructions.

No extra billing

Uses the Claude CLI you already have. No API keys to configure, no separate billing, no TypeScript to maintain.

AI-evaluated checks

Write plain-language verify: checks. The agent evaluates UI state, animations, and logic using its own judgment — no selectors needed.

Test what you can't easily assert.

Write plain-language checks. The agent takes a screenshot, inspects the DOM, and uses its AI judgment to evaluate each one — passing or failing with a reason.

checkout.yaml
steps:
  # ... complete the checkout ...
  - ai:
      goal: "Add item to cart and complete checkout"
      max_steps: 20 # safety limit — caps actions Claude can take

  # Then verify outcomes
  - verify:
      checks:
        - "Order confirmation page is shown"
        - "Order number is displayed"
        - "Success animation plays"
        - "Total price matches cart amount"
Order confirmation page is shown
Element with text "Order Confirmed" found in accessibility tree
Order number is displayed
Order ID element visible with value #ORD-28471
Success animation plays
Canvas element with active animation class detected in DOM
Total price matches cart amount
Price shown as "$0.00" — total did not render correctly

UI checks

Element visibility, text content, layout state, error messages

Animation checks

CSS transitions, canvas activity, motion classes, loading states

Logic checks

Computed values, counters, conditional UI, form state, totals

One syntax. Three platforms.

Write once, test everywhere. Each platform has its own driver under the hood.

Web

Chrome via CDP. Video recording, console logs, full DOM access. Flutter web works out of the box — no config needed.

agent-browser

Android

Android device or emulator via UI Automator. Works with any app — native, React Native, Flutter.

adb

iOS

iPhone or simulator via Facebook IDB. Native accessibility tree for reliable element targeting. Works with native and Flutter apps.

idb
See everything that happened.

Every run generates a self-contained HTML report. No server needed — just open the file.

Install in 30 seconds.

Clone, copy, done. No build step, no dependencies beyond what you already have.

$ git clone https://github.com/govindmaheshwari2/flowtest.git click to copy
$ cp -r flowtest/flowtest ~/.claude/skills/flowtest click to copy

Then use /flowtest and /refine in Claude Code. Pass --platform web|android|ios to override — defaults to web if omitted.

Build and install your Flutter app first, then run your flow as normal.

web flutter run -d web-server --web-port 54545 click to copy
android flutter build apk --debug && adb install -r build/app/outputs/flutter-apk/app-debug.apk click to copy
ios flutter build ios --debug --simulator && idb install build/ios/iphonesimulator/Runner.app click to copy
Common questions.
What is FlowTest?

FlowTest is an open-source AI-powered UI test runner that uses YAML files to define test flows. Declarative steps like tapOn and assertVisible run instantly. ai: steps hand control to Claude, which uses accumulated context from all prior steps to navigate toward a goal. Every run produces a self-contained HTML report with screenshots and video.

How does FlowTest use Claude AI for testing?

Claude drives dynamic test steps where traditional selectors would fail. It interprets screenshots and UI state from all prior steps to decide what to tap, type, or scroll — enabling intent-based, self-healing automation without brittle XPath or CSS selectors.

Is FlowTest free and open source?

Yes. FlowTest is fully open source under the MIT license — free for personal and commercial use. Source code and examples are on GitHub.

What platforms does FlowTest support?

FlowTest supports web (Chrome via agent-browser), Android (via adb and UI Automator), and iOS (via Facebook IDB). A single YAML file can target all three platforms using when: conditionals.

How do I install FlowTest?

Clone the repo and copy the skill folder into Claude Code's skills directory — no build step, no dependencies beyond Claude Code and the platform driver. See the Install section for exact commands.

What is the verify: step?

The verify: step lets you write plain-language checks the agent evaluates using its AI judgment — screenshot analysis, DOM inspection, and visual reasoning. Works for UI checks (element visibility, text), animation checks (CSS transitions, canvas activity), and logic checks (computed values, totals, form state).

Does FlowTest work with Flutter apps?

Yes — FlowTest works with Flutter on all three platforms. For web, run flutter run -d web-server --web-port 54545 and point your flow at http://localhost:54545. For Android, build a debug APK with flutter build apk --debug and install it via adb install -r build/app/outputs/flutter-apk/app-debug.apk. For iOS simulator, build with flutter build ios --debug --simulator and install via idb install build/ios/iphonesimulator/Runner.app. Then run your flow as normal with /flowtest.

What plugins does FlowTest include?

FlowTest ships with two plugins: /flowtest — the main runner that executes flow YAML files and produces HTML reports; and /refine — an interactive assistant that asks clarifying questions and transforms vague ai: goals into detailed, consistent instructions. Both are installed together by copying the skill folder.

Stop writing flaky test scripts.

Let YAML handle the predictable parts. Let Claude handle the rest.