From teikk-agents-skills
Writes and runs Maestro YAML flows for Android end-to-end user journeys. Use when a multi-screen app needs journey smoke tests, when SPEC.md declares E2E Maestro, or when invoked via /teikk-e2e. Do NOT use for unit tests, Compose component tests, or Macrobenchmarks.
How this skill is triggered — by the user, by Claude, or both
Slash command
/teikk-agents-skills:android-e2e-maestroThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Maestro runs black-box user-journey tests on a real device or emulator. Flows live as YAML under `.maestro/flows/`. This skill is **opt-in** — not every project needs E2E. Use `/teikk-test` for TDD (unit + Compose component tests); use this skill only for critical multi-screen journeys.
Maestro runs black-box user-journey tests on a real device or emulator. Flows live as YAML under .maestro/flows/. This skill is opt-in — not every project needs E2E. Use /teikk-test for TDD (unit + Compose component tests); use this skill only for critical multi-screen journeys.
E2E: Maestro for one or more acceptance criteria./teikk-e2e with a flow name or acceptance criterion..maestro/ already exists (via /teikk-ship optional check).When NOT to use:
android-testing-and-benchmark-kotlin)./teikk-build task — E2E is too slow for the TDD loop.Before generating or running flows:
curl -Ls "https://get.maestro.mobile.dev" | bash (or see Maestro docs)../gradlew installDebug.applicationId known from app/build.gradle.kts (namespace / applicationId).If Maestro CLI or a device is unavailable, generate the YAML but stop before claiming verification — report what the user must run locally.
Read SPEC.md (or user request) for the acceptance criterion this flow must prove.
FLOW SCOPE:
- Criterion: [from SPEC success criteria or user]
- Screens: [list from navigation / plan]
- appId: [from build.gradle.kts]
→ Proceed only if this is a journey test, not a component test.
If SPEC says E2E: none and the user did not explicitly request E2E, stop and suggest /teikk-test instead.
Do not hallucinate UI text. Read the Composable or layout files for the screens in the journey:
| Priority | Selector | Source |
|---|---|---|
| 1 | id: "..." | Compose Modifier.testTag(...) / Maestro id |
| 2 | text: "..." | stringResource(R.string.*) or literal in UI code |
| 3 | contentDescription | accessibility label in code |
Cross-check navigation order from Navigation graph or routes file.
Directory layout:
.maestro/
config.yaml # optional — env, tags
flows/
create_task.yaml
login_smoke.yaml
Flow template:
appId: com.example.app
---
- launchApp:
clearState: true
- assertVisible: "Tasks"
- tapOn:
id: "fab_add_task"
- inputText: "Buy Milk"
- tapOn: "Save"
- assertVisible: "Buy Milk"
Rules:
id: (testTag) over text: when both exist.clearState: true on launchApp for isolated runs unless testing persistence.sleep — use extendedWaitUntil with visible/assertion when needed.snake_case.yaml matching the criterion: flows/create_task.yaml.A flow is not done until Maestro passes on device/emulator.
# Install app if needed
./gradlew installDebug
# Run single flow
maestro test .maestro/flows/create_task.yaml
# Run all flows
maestro test .maestro/flows/
On failure: read Maestro output, fix selectors or timing, re-run. Do not mark the task complete on a failing run.
On success: report flow path, criterion covered, and command used.
Add only when the project adopts E2E in SPEC. See skills/ci-cd-and-automation/SKILL.md — separate job, not on every PR by default:
- name: Maestro E2E
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 29
script: |
curl -Ls "https://get.maestro.mobile.dev" | bash
./gradlew installDebug
maestro test .maestro/flows/
| Concern | Skill |
|---|---|
| Unit / Compose component TDD | test-driven-development, android-testing-and-benchmark-kotlin |
| testTag in Composables | android-ui-kotlin |
| CI pipeline | ci-cd-and-automation |
| Pre-ship optional run | /teikk-ship when .maestro/flows/ exists |
| Rationalization | Reality |
|---|---|
| "I'll write the YAML from the spec without reading UI code" | Wrong text/tags cause flaky or always-failing flows. Read source first. |
| "Maestro replaces Compose UI tests" | Compose tests are faster and precise for component logic. Maestro covers cross-screen integration only. |
| "I'll add Maestro to every build task" | E2E takes minutes and breaks the TDD loop. Run on demand or pre-ship. |
| "The flow file exists, so we're done" | Unrun YAML is not verification. maestro test must pass. |
Thread.sleep or long fixed waits instead of assertVisible / extendedWaitUntil.appId or wrong package name./teikk-e2e run when SPEC says E2E: none without explicit user override.Before marking E2E work complete:
maestro test <flow.yaml> passes on emulator or device./teikk-test scope unchanged — unit/Compose tests still own component behavior.npx claudepluginhub 22teikk/22teikk-agent-skills-hub --plugin teikk-agents-skillsProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.