Cómo hacer que una red neuronal pruebe tus apps móviles por ti
Cada vez que abro un pull request de otra persona en un proyecto React Native, me pillo pensando: verificar manualmente los layouts en iOS y Android es una tarea que te dan ganas de aullar. Necesitas hacer pull de la rama, construir el bundle, lanzar el emulador, navegar por el escenario, tomar capturas de pantalla y escribirle al autor que el botón se salió de la pantalla.
El equipo de Callstack lanzó la segunda versión de la herramienta cali. Es una utilidad de línea de comandos que maneja pruebas móviles, auditorías de rendimiento y revisiones de código utilizando agentes LLM.
De qué trata el proyecto
Los agentes web ya no sorprenden a nadie: Playwright y Puppeteer hace tiempo que se integraron con modelos de lenguaje. Con móvil siempre ha sido más complicado. Los emuladores son quisquillosos, el depurador de React Native vive en su propio mundo, y conectar un modelo sin romper el entorno requiere cierto esfuerzo.
Cali resuelve el problema mediante separación de roles. La utilidad no intenta ser un chatbot universal que lo haga todo. En su lugar, tiene modos de operación estrictos donde cada agente recibe solo el paquete de herramientas necesario:
cali qaejecuta escenarios de prueba en un simulador o emulador real mediante la utilidadagent-device.cali perf-reviewencuentra re-renderizados innecesarios y ralentizaciones conectándose directamente aagent-react-devtools.cali reviewlee el repositorio y verifica los diffs en los pull requests.cali devintenta hacer cambios de código por su cuenta bajo la supervisión de pruebas y el verificador de tipos.
Los comandos review, perf-review y dev todavía están marcados como experimentales, pero el escenario básico de qa está listo para usar.
Cómo ejecutar pruebas en tu máquina local
Necesitarás Node.js y el paquete agent-device instalado globalmente para comenzar. Si al agente le faltan habilidades necesarias, Cali las descargará a través de npx skills en el directorio ~/.cali/skills.
Puedes controlar el lanzamiento con una sola línea:
cali qa \
--local ios \
--artifact ./artifacts/MyApp.app \
--prompt "проверь текст на экране онбординга и нажми кнопку далее"
Si solo tienes un simulador de iOS o un emulador de Android ejecutándose, la utilidad lo detectará automáticamente. Al lanzar en Android, Cali incluso puede analizar AndroidManifest.xml directamente desde .apk para extraer el applicationId sin flags adicionales.
Detalle importante: para builds de debug, necesitas iniciar y detener el servidor Metro por separado. Cali solo es responsable de interactuar con la interfaz de la app.
Perfilado y búsqueda de re-renderizados innecesarios
Quizás el modo más interesante es perf-review. Todos sabemos lo fácil que es destrozar el rendimiento en React Native pasando un callback inestable a una lista pesada.
Cali conecta un agente a React DevTools y ejecuta la pantalla objetivo:
cali perf-review \
--context ./cali-context.json \
--platform android \
--artifact ./artifacts/app.apk \
--prompt "проверь экран оформления заказа на подвисания"
El agente analiza las interacciones, captura métricas y genera un informe estructurado. Los resultados van a la carpeta artifacts/perf-review, que contiene capturas de pantalla, un manifiesto y un resumen de texto con los principales problemas.
Contexto compartido y trabajo en CI
En lugar de largas cadenas de argumentos de terminal, Cali usa un archivo de configuración cali-context.json. Describe el repositorio, la construcción, los criterios de aceptación y las restricciones para el agente:
{
"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"
}
}
Los flags de línea de comandos siempre tienen prioridad sobre el archivo. Esto es útil cuando necesitas sustituir una ruta a un artefacto fresco en un pipeline.
En GitHub Actions y Expo Application Services (EAS), la utilidad detecta el entorno por sí sola. Un helper adicional cali export-ci genera un informe en markdown con capturas de pantalla que puedes publicar inmediatamente como comentario en un pull request abierto a través de 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
Conexión de modelos y seguridad
Por defecto, Cali está configurado para trabajar con openai/gpt-5.4-mini a través de AI Gateway. Si tienes una clave directa de Anthropic, puedes cambiar a Sonnet mediante variables de entorno:
ANTHROPIC_API_KEY=your-anthropic-api-key
QA_MODEL=anthropic/claude-sonnet-4.6
Está bien que los autores hayan pensado en seguridad: la utilidad limpia tokens y secretos de las URLs del repositorio al cargar el contexto, y el report.json final solo guarda campos seguros.
¿Vale la pena probar?
La herramienta se ve sólida y resuelve un problema específico para equipos que escriben en Expo y React Native. La ventaja principal aquí es el contrato de entrada estricto y la salida JSON predecible. El agente no deambula por una terminal abstracta sino que está limitado a un conjunto claro de utilidades.
El proyecto todavía está ganando tracción (alrededor de mil estrellas en GitHub), pero la arquitectura por roles ya permite implementar verificación automatizada de rutas críticas de usuario en la etapa de CI. Si estás cansado de ejecutar manualmente pruebas básicas de humo antes de cada lanzamiento, vale la pena clonar el repositorio y ejecutar un par de pantallas en un simulador local.
Proyectos relacionados