Zo laat je een neuraal netwerk mobiele apps voor je testen
Elke keer dat ik iemands pull request open in een React Native-project, betrap ik mezelf erop dat ik denk: handmatig layouts controleren op iOS en Android is een karwei waar je van wilt janken. Je moet de branch pullen, de bundle bouwen, de emulator starten, door het scenario klikken, screenshots maken en de auteur schrijven dat de knop van het scherm is gelopen.
Het team van Callstack heeft de tweede versie van het cali-tool uitgebracht. Het is een command-line utility die mobiel testen, performance audits en code reviews afhandelt met behulp van LLM-agents.
Waar gaat het project over
Web agents verrassen niemand meer: Playwright en Puppeteer zijn al lang geïntegreerd met taalmodellen. Bij mobiel ligt het altijd anders. Emulators zijn lastig, de React Native debugger leeft in zijn eigen wereld, en een model aansluiten zonder de omgeving te breken vergt wat werk.
Cali lost het probleem op door rolverdeling. De utility probeert niet een universele chatbot te zijn die alles doet. In plaats daarvan heeft het strikte werkingsmodi waarbij elke agent alleen het noodzakelijke gereedschapspakket krijgt:
cali qavoert testscenario's uit op een echte simulator of emulator via hetagent-device-utility.cali perf-reviewvindt onnodige re-renders en vertragingen door rechtstreeks verbinding te maken metagent-react-devtools.cali reviewleest de repository en controleert diffs in pull requests.cali devprobeert zelfstandig codewijzigingen aan te brengen onder toezicht van tests en de type checker.
De review-, perf-review- en dev-commando's zijn nog gemarkeerd als experimenteel, maar het basale qa-scenario is klaar voor gebruik.
Hoe je testing op je lokale machine uitvoert
Je hebt Node.js en het globaal geïnstalleerde agent-device-package nodig om te beginnen. Als de agent noodzakelijke vaardigheden mist, haalt Cali ze binnen via npx skills in de ~/.cali/skills-directory.
Je kunt de launch besturen met een enkele regel:
cali qa \
--local ios \
--artifact ./artifacts/MyApp.app \
--prompt "проверь текст на экране онбординга и нажми кнопку далее"
Als je maar één iOS simulator of Android emulator draaiende hebt, pakt de utility deze automatisch op. Bij het starten op Android kan Cali zelfs AndroidManifest.xml rechtstreeks van .apk parsen om de applicationId te extraheren zonder extra flags.
Belangrijk detail: voor debug builds moet je de Metro server apart starten en stoppen. Cali is uitsluitend verantwoordelijk voor het interageren met de interface van de app.
Profiling en onnodige re-renders opsporen
Misschien wel de interessantste modus is perf-review. We weten allemaal hoe gemakkelijk het is om de performance in React Native te verpesten door per ongeluk een onstabiele callback door te geven aan een zware lijst.
Cali verbindt een agent met React DevTools en voert het doelscherm uit:
cali perf-review \
--context ./cali-context.json \
--platform android \
--artifact ./artifacts/app.apk \
--prompt "проверь экран оформления заказа на подвисания"
De agent analyseert interacties, legt metriek vast en genereert een gestructureerd rapport. Resultaten gaan naar de artifacts/perf-review-folder, die screenshots bevat, een manifest en een tekstsamenvatting met de belangrijkste problemen.
Gedeelde context en werken in CI
In plaats van lange chains van terminalargumenten gebruikt Cali een configuratiebestand cali-context.json. Het beschrijft de repository, build, acceptatiecriteria en beperkingen voor de agent:
{
"workspaceRoot": ".",
"repository": {
"provider": "github.com",
"owner": "my-team",
"name": "shop-app",
"defaultBranch": "main",
"currentBranch": "feature/checkout-redesign"
},
"mobile": {
"platform": "android",
"artifactPath": "./artifacts/app.apk"
},
"qa": {
"acceptanceCriteria": [
"На экране оплаты отображается итоговая сумма",
"Кнопка подтверждения остаётся кликабельной"
]
},
"dev": {
"allowedValidations": ["bun test", "bunx tsc --noEmit"],
"writePolicy": "workspace",
"pushPolicy": "disabled"
}
}
Command-line flags krijgen altijd voorrang boven het bestand. Dit is handig wanneer je een pad naar een verse artifact in een pipeline moet substitueren.
In GitHub Actions en Expo Application Services (EAS) detecteert de utility de omgeving zelfstandig. Een extra helper cali export-ci genereert een markdown-rapport met screenshots dat je direct kunt posten als comment op een open pull request via GitHub CLI:
name: Запуск мобильного QA
env:
AI_GATEWAY_API_KEY: ${{ secrets.AI_GATEWAY_API_KEY }}
CALI_PLATFORM: android
CALI_ARTIFACT_PATH: ./builds/app.apk
run: npx cali qa --quiet
name: Подготовка отчёта
run: npx cali export-ci --report ./artifacts/qa/report.json
name: Публикация комментария в PR
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh pr comment "${{ github.event.pull_request.number }}" --body-file ./artifacts/qa/ci-comment.md
Modellen aansluiten en beveiliging
Standaard is Cali geconfigureerd om met openai/gpt-5.4-mini te werken via AI Gateway. Als je een directe Anthropic key hebt, kun je overschakelen naar Sonnet via omgevingsvariabelen:
ANTHROPIC_API_KEY=your-anthropic-api-key
QA_MODEL=anthropic/claude-sonnet-4.6
Het is prettig dat de auteurs aan beveiliging hebben gedacht: de utility scrubt tokens en secrets uit repository-URL's bij het laden van context, en de uiteindelijke report.json slaat alleen veilige velden op.
Is het de moeite waard om te proberen
Het gereedschap ziet er solide uit en lost een specifieke pijnpunt op voor teams die schrijven met Expo en React Native. Het belangrijkste voordeel hier is het strikte inputcontract en voorspelbare JSON-uitvoer. De agent dwaalt niet rond in een abstracte terminal maar is beperkt tot een duidelijke set van utilities.
Het project wint nog aan traction (rond de duizend sterren op GitHub), maar de rolarchitectuur maakt het nu al mogelijk om geautomatiseerde controles van kritieke gebruikerspaden op de CI-fase te implementeren. Als je het beu bent om handmatig basale smoke tests uit te voeren voor elke release, is het de moeite waard om de repository te klonen en een paar schermen te doorlopen op een lokale simulator.
Gerelateerde projecten