Wie du ein neuronales Netzwerk dazu bringst, Mobile Apps für dich zu testen
Jedes Mal, wenn ich einen Pull Request von jemand anderem in einem React Native-Projekt öffne, denke ich mir: Manuelles Überprüfen von Layouts auf iOS und Android ist eine Plackerei, die einen zum Heulen bringt. Du musst den Branch pullen, das Bundle bauen, den Emulator starten, das Szenario durchklicken, Screenshots machen und dem Autor schreiben, dass der Button außerhalb des Bildschirms liegt.
Das Team von Callstack hat die zweite Version des cali-Tools veröffentlicht. Es ist ein Kommandozeilen-Tool, das Mobile Testing, Performance-Audits und Code-Reviews mithilfe von LLM-Agents durchführt.
Worum geht es in dem Projekt
Web-Agents überraschen niemanden mehr: Playwright und Puppeteer sind schon lange mit Sprachmodellen integriert. Bei Mobile war es schon immer komplizierter. Emulatoren sind launisch, der React Native-Debugger lebt in seiner eigenen Welt, und ein Modell anzubinden, ohne die Umgebung zu zerstören, erfordert einiges an Arbeit.
Cali löst das Problem durch Rollentrennung. Das Tool versucht nicht, ein universeller Chatbot zu sein, der alles erledigt. Stattdessen gibt es strikte Betriebsmodi, in denen jeder Agent nur das notwendige Werkzeugpaket erhält:
cali qaführt Test-Szenarien auf einem echten Simulator oder Emulator über dasagent-device-Utility aus.cali perf-reviewfindet unnötige Re-Renders und Verlangsamungen durch direkte Verbindung zuagent-react-devtools.cali reviewliest das Repository und prüft Diffs in Pull Requests.cali devversucht, Code-Änderungen selbstständig unter Aufsicht von Tests und dem Type Checker vorzunehmen.
Die review-, perf-review- und dev-Befehle sind noch als experimentell markiert, aber das grundlegende qa-Szenario ist einsatzbereit.
So führst du Tests auf deinem lokalen Rechner aus
Du brauchst Node.js und das global installierte agent-device-Paket, um loszulegen. Wenn dem Agent notwendige Fähigkeiten fehlen, wird Cali sie über npx skills in das ~/.cali/skills-Verzeichnis laden.
Du kannst den Start mit einer einzigen Zeile steuern:
cali qa \
--local ios \
--artifact ./artifacts/MyApp.app \
--prompt "проверь текст на экране онбординга и нажми кнопку далее"
Wenn du nur einen iOS-Simulator oder Android-Emulator laufen hast, erkennt das Tool ihn automatisch. Beim Start auf Android kann Cali sogar AndroidManifest.xml direkt aus .apk parsen, um applicationId ohne zusätzliche Flags zu extrahieren.
Wichtiger Hinweis: Für Debug-Builds musst du den Metro-Server separat starten und stoppen. Cali ist nur für die Interaktion mit der App-Oberfläche verantwortlich.
Profiling und Suche nach unnötigen Re-Renders
Der vielleicht interessanteste Modus ist perf-review. Wir wissen alle, wie einfach es ist, die Performance in React Native zu ruinieren, indem man versehentlich einen instabilen Callback an eine umfangreiche Liste übergibt.
Cali verbindet einen Agent mit React DevTools und führt den Zielbildschirm aus:
cali perf-review \
--context ./cali-context.json \
--platform android \
--artifact ./artifacts/app.apk \
--prompt "проверь экран оформления заказа на подвисания"
Der Agent analysiert Interaktionen, erfasst Metriken und erstellt einen strukturierten Bericht. Die Ergebnisse landen im artifacts/perf-review-Ordner, der Screenshots, ein Manifest und eine Textzusammenfassung mit den wichtigsten Problemen enthält.
Gemeinsamer Kontext und Arbeit in CI
Statt langer Ketten von Terminal-Argumenten verwendet Cali eine Konfigurationsdatei cali-context.json. Sie beschreibt das Repository, den Build, die Akzeptanzkriterien und Einschränkungen für den 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 haben immer Vorrang vor der Datei. Das ist praktisch, wenn du einen Pfad zu einem frischen Artifact in einer Pipeline ersetzen musst.
In GitHub Actions und Expo Application Services (EAS) erkennt das Tool die Umgebung selbstständig. Ein zusätzlicher Helfer cali export-ci erstellt einen Markdown-Bericht mit Screenshots, den du direkt als Kommentar zu einem offenen Pull Request über GitHub CLI posten kannst:
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
Modelle verbinden und Sicherheit
Standardmäßig ist Cali für die Arbeit mit openai/gpt-5.4-mini über AI Gateway konfiguriert. Wenn du einen direkten Anthropic-Schlüssel hast, kannst du über Umgebungsvariablen auf Sonnet umschalten:
ANTHROPIC_API_KEY=your-anthropic-api-key
QA_MODEL=anthropic/claude-sonnet-4.6
Es ist gut, dass die Autoren an Sicherheit gedacht haben: Das Tool entfernt Tokens und Secrets aus Repository-URLs beim Laden des Kontexts, und die finale report.json speichert nur sichere Felder.
Lohnt es sich, es auszuprobieren
Das Tool wirkt solide und löst ein spezifisches Problem für Teams, die mit Expo und React Native entwickeln. Der Hauptvorteil liegt im strikten Input-Vertrag und vorhersehbaren JSON-Output. Der Agent schweift nicht in einem abstrakten Terminal umher, sondern ist auf einen klaren Satz von Utilities beschränkt.
Das Projekt gewinnt noch an Fahrt (rund tausend Stars auf GitHub), aber die Rollenarchitektur ermöglicht bereits die Implementierung automatisierter Prüfungen kritischer User-Pfade in der CI-Phase. Wenn du es leid bist, vor jedem Release manuell grundlegende Smoke-Tests durchzuführen, lohnt es sich, das Repository zu klonen und ein paar Bildschirme auf einem lokalen Simulator durchzuspielen.
Ähnliche Projekte