Comment faire tester vos applications mobiles par un réseau de neurones
Chaque fois que j'ouvre une pull request d'un autre développeur dans un projet React Native, je me surprends à penser : vérifier manuellement les layouts sur iOS et Android, c'est une corvée qui donne envie de hurler. Vous devez récupérer la branche, construire le bundle, lancer l'émulateur, parcourir le scénario en cliquant, prendre des captures d'écran, et écrire à l'auteur que le bouton est sorti de l'écran.
L'équipe de Callstack a publié la deuxième version de l'outil cali. C'est un utilitaire en ligne de commande qui gère les tests mobiles, les audits de performance et les revues de code en utilisant des agents LLM.
En quoi consiste le projet
Les agents web ne surprennent plus personne : Playwright et Puppeteer sont depuis longtemps intégrés aux modèles de langage. Pour le mobile, les choses ont toujours été plus compliquées. Les émulateurs sont capricieux, le débogueur React Native vit dans son propre monde, et brancher un modèle sans casser l'environnement demande un certain savoir-faire.
Cali résout le problème par une séparation des rôles. L'utilitaire ne cherche pas à être un chatbot universel qui fait tout. Il propose plutôt des modes de fonctionnement stricts où chaque agent ne reçoit que le pack d'outils nécessaire :
cali qaexécute des scénarios de test sur un simulateur ou émulateur réel via l'utilitaireagent-device.cali perf-reviewrepère les re-renders inutiles et les ralentissements en se connectant directement àagent-react-devtools.cali reviewlit le dépôt et vérifie les diffs dans les pull requests.cali devtente de modifier le code de manière autonome sous la supervision des tests et du vérificateur de types.
Les commandes review, perf-review et dev sont encore marquées comme expérimentales, mais le scénario de base qa est prêt à l'emploi.
Comment exécuter les tests sur votre machine locale
Vous aurez besoin de Node.js et du package agent-device installé globalement. Si l'agent manque de compétences, Cali les récupère via npx skills dans le répertoire ~/.cali/skills.
Vous pouvez contrôler le lancement avec une seule ligne :
cali qa \
--local ios \
--artifact ./artifacts/MyApp.app \
--prompt "проверь текст на экране онбординга и нажми кнопку далее"
Si vous n'avez qu'un seul simulateur iOS ou émulateur Android en cours d'exécution, l'utilitaire le détectera automatiquement. Lors du lancement sur Android, Cali peut même analyser AndroidManifest.xml directement depuis .apk pour extraire le applicationId sans drapeaux supplémentaires.
Détail important : pour les builds de debug, vous devez démarrer et arrêter le serveur Metro séparément. Cali est uniquement responsable de l'interaction avec l'interface de l'application.
Profilage et recherche de re-renders inutiles
Le mode le plus intéressant est peut-être perf-review. Nous savons tous à quel point il est facile de dégrader les performances dans React Native en passant accidentellement un callback instable à une liste lourde.
Cali connecte un agent à React DevTools et exécute l'écran cible :
cali perf-review \
--context ./cali-context.json \
--platform android \
--artifact ./artifacts/app.apk \
--prompt "проверь экран оформления заказа на подвисания"
L'agent analyse les interactions, capture les métriques et génère un rapport structuré. Les résultats vont dans le dossier artifacts/perf-review, qui contient des captures d'écran, un manifest et un résumé textuel des principaux problèmes.
Contexte partagé et travail en CI
Au lieu de longues chaînes d'arguments de terminal, Cali utilise un fichier de configuration cali-context.json. Il décrit le dépôt, la construction, les critères d'acceptation et les contraintes pour l'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"
}
}
Les drapeaux en ligne de commande ont toujours la priorité sur le fichier. C'est pratique quand vous devez substituer un chemin vers un artifact frais dans une pipeline.
Dans GitHub Actions et Expo Application Services (EAS), l'utilitaire détecte l'environnement de lui-même. Un helper supplémentaire cali export-ci génère un rapport markdown avec des captures d'écran que vous pouvez immédiatement poster en commentaire sur une pull request ouverte 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
Connexion des modèles et sécurité
Par défaut, Cali est configuré pour fonctionner avec openai/gpt-5.4-mini via AI Gateway. Si vous avez une clé Anthropic directe, vous pouvez basculer vers Sonnet via des variables d'environnement :
ANTHROPIC_API_KEY=your-anthropic-api-key
QA_MODEL=anthropic/claude-sonnet-4.6
C'est appréciable que les auteurs aient pensé à la sécurité : l'utilitaire nettoie les jetons et secrets des URLs du dépôt lors du chargement du contexte, et le report.json final ne sauvegarde que les champs sûrs.
Cela vaut-il la peine d'essayer
L'outil semble solide et résout un problème précis pour les équipes qui développent avec Expo et React Native. L'avantage principal ici est le contrat d'entrée strict et la sortie JSON prévisible. L'agent ne déambule pas dans un terminal abstrait mais est limité à un ensemble clair d'utilitaires.
Le projet gagne encore en traction (environ mille étoiles sur GitHub), mais l'architecture par rôles permet déjà d'implémenter la vérification automatisée des parcours utilisateurs critiques au stade de la CI. Si vous êtes fatigué d'exécuter manuellement des tests de base avant chaque release, ça vaut le coup de cloner le dépôt et de parcourir quelques écrans sur un simulateur local.
Projets similaires