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 | shThat 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 loginA 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.
{
"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: savedEach 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 mcpThen 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.