Skip to main content

Automated Mode

Automated mode reads a conalyz.yaml file that describes how to reach each screen, then drives the app and analyses every screen without any human input.

Token required

Runtime modes require a Conalyz token. Join the beta to get one.

Running

conalyz auto

How it works

For each screen defined in conalyz.yaml, Conalyz executes the steps: list in order. Steps are run exactly as written — analyse captures the screen, navigation actions (tap, type, back, swipe, scroll_to, wait_for, delay) drive the app.

── Login ───────────────────────────────────
Touch targets ✅ no violations
Contrast ❌ 3 violation(s)
→ Violation at [4]: contrast 4.27:1 < 4.5:1 ...
Focus ❌ 1 violation(s)
→ "Password" — not reachable by keyboard or switch access
Labels ✅ no violations
Vague labels ✅ no violations
Disabled ✅ no violations
Sliders ✅ no violations

Saved — 4 violations found on "Login"
→ type "user@example.com" into "Email"
→ type "••••••••" into "Password"
→ tap "Sign in"

── Home ────────────────────────────────────
→ delay 2.0s
Touch targets ✅ no violations
Contrast ✅ no violations
Focus ✅ no violations
Labels ❌ 2 violation(s)
Vague labels ✅ no violations
Disabled ✅ no violations
Sliders ✅ no violations

Saved — 2 violations found on "Home"
→ tap "Settings"

── Home (back) ─────────────────────────────
→ back

── Settings ────────────────────────────────
Touch targets ✅ no violations
Contrast ✅ no violations
Focus ✅ no violations
Labels ✅ no violations
Vague labels ✅ no violations
Disabled ✅ no violations
Sliders ✅ no violations

Saved — 0 violations found on "Settings"

─────────────────────────────────────────
Reports saved → conalyz_report.html | conalyz_report.json
3 screens · 6 total violations
─────────────────────────────────────────

Screens without an analyse step (like Home (back) above) are navigated through silently — no report entry is created.

Using a custom config file

By default, Conalyz looks for conalyz.yaml in the current directory. Use --config to point to any file:

conalyz auto --config flows/staging.yaml
conalyz auto --config ci_config.yaml

Platform support

Automated mode works on both Android (via ADB) and iOS (via idb and xcrun simctl). The same conalyz.yaml file works on both platforms without modification.

See the conalyz.yaml reference for platform-specific behaviour of individual actions.

Scrollable screens

When Conalyz detects scrollable content on a screen, it automatically performs multiple analysis passes — no changes to conalyz.yaml are required.

After the first pass, Conalyz checks whether scrolling reveals new content. If it does, it continues scrolling and analysing pass by pass until the end of the list is reached, then scrolls back to the top and combines all results.

── Scroll Test — ListView ──────────────────────────
Scrollable content detected — multi-pass analysis...
Saved — 5 violations found on "Scroll Test — ListView"

On iOS, the bottom detection message reads Bottom reached (stable) — this is normal behaviour. iOS scroll physics make it harder to detect the exact bottom, so Conalyz uses a conservative approach that may require one additional confirmation pass before stopping.

Manual mode

In manual mode, multi-pass scroll does not run automatically. Scroll through the screen yourself before typing the screen name at the prompt — items that are off-screen are not captured.

Working with tabs and bottom navigation

TabBar and BottomNavigationBar items both include position and total count in their label, exactly as announced by TalkBack or VoiceOver. Conalyz uses this same format in steps::

ItemStep to use in conalyz.yaml
TabBar: SingleChild (1st of 3)tap "SingleChild Tab 1 of 3"
TabBar: ListView (2nd of 3)tap "ListView Tab 2 of 3"
BottomNavigationBar: Home (1st of 3)tap "Home Tab 1 of 3"
BottomNavigationBar: Profile (3rd of 3)tap "Profile Tab 3 of 3"
- screen: Home
steps:
- analyse
- tap "Search Tab 2 of 3" # BottomNavigationBar item

If you are unsure of the exact label, run your app and enable TalkBack (Android) or VoiceOver (iOS) — the screen reader announces the exact label. Alternatively, if a tap step fails, Conalyz prints all visible element labels so you can identify the correct one.

Generate conalyz.yaml with AI

The conalyz-init skill generates conalyz.yaml automatically by reading your router config and screen files. It works with Claude Code, Cursor, Copilot, Windsurf, and 35+ other AI agents that support the skills protocol.

Install the skill — run this from your Flutter project root:

mkdir -p .claude/commands && curl -o .claude/commands/conalyz-init.md \
https://raw.githubusercontent.com/conalyz/conalyz_cli/master/conalyz/SKILL_INIT.md

Then invoke /conalyz-init in your AI agent. It reads your router, extracts widget labels, shows a preview of the navigation flow, and writes conalyz.yaml after your approval.

tip

Uncertain labels are marked with ⚠️ in the preview. Verify those on the first run — if a tap step fails, Conalyz prints all visible labels to help you correct it.

When to use automated mode

Automated mode is well suited for:

  • CI pipelines — run on every pull request to catch regressions before they ship
  • Full regression suites — cover every screen in the app without manual effort
  • Repeatable audits — run the same flow on Android and iOS and compare results