Start

Quickstart

Install the CLI, sign in, write a flow, and run it in five minutes.

1. Install the CLI

curl -fsSL https://testedok.dev/install | sh

That downloads a signed binary for your Mac into ~/.local/bin, verifies its checksum, and prints what to do next. The installer accepts TESTEDOK_INSTALL_DIR if you keep binaries elsewhere.

2. Sign in

testedok login

A code appears and your browser opens the approval page. Approve it, and the CLI receives an API token for your account (kept in ~/.testedok/config.json, readable only by you). In CI, use a token from the dashboard instead: testedok login --api-url https://api.testedok.dev --token <token>, or set TESTEDOK_API_URL and TESTEDOK_TOKEN.

3. Boot a simulator and install your app

Open the iOS Simulator and install a build of your app on it, as Xcode does when you run it. For Android, start an emulator or plug in a phone. TestedOK sets up its own driver on the device the first time it runs.

4. Write a flow

A flow is a small JSON file: which app, what to do, and what you expect to see when it worked.

tests/create-list.json
{
  "name": "Reminders: create a list",
  "app": { "bundleId": "com.apple.reminders" },
  "goal": "Create a new list named Groceries {{run}} and finish",
  "expectText": ["Groceries {{run}}"]
}

{{run}} becomes a short random tag each run, so repeated runs do not collide with each other's data. See writing flows for every field.

5. Run it

testedok run tests/create-list.json
▶ Reminders: create a list
  run 9837e825-894d-4c86-946e-de04b8b4495f
  # 1 TAP [2] "Add List"        op 0.98 tgt 0.98  jev 393ms act 304ms obs 262ms
  # 2 TYPE [5] "List Name" <- list_name="Groceries DWN8"
  # 3 TAP [3] "Done"
  # 4 DONE
✔ PASSED — expected text visible
  4 steps in 12.1s (launch 3036ms, jev 1485ms, actions 1714ms, observe 1568ms)
  route: saved

Each line is a step: what was tapped or typed, how sure the model was, and how long each part took. The run appears in the dashboard as it happens, with a screenshot per step. Run it again and the route replays.

6. Let your coding agent do this

claude mcp add testedok -- testedok mcp

Then ask Claude Code to write and run a flow for a screen you just built. The dashboard's Agent setup page has a prompt that explains the format to any agent. See coding agents.