Como Fazer uma Rede Neural Testar Apps Móveis para Você
Toda vez que abro um pull request de outra pessoa em um projeto React Native, me pego pensando: verificar layouts manualmente no iOS e Android é um trabalho tedioso que te faz querer uivar. Você precisa puxar o branch, fazer o build do bundle, iniciar o emulador, clicar através do cenário, tirar screenshots e escrever para o autor que o botão saiu da tela.
A equipe do Callstack lançou a segunda versão da ferramenta cali. É um utilitário de linha de comando que lida com testes mobile, auditorias de performance e code reviews usando agentes LLM.
Sobre o projeto
Agentes web não surpreendem mais ninguém: Playwright e Puppeteer já estão integrados há muito tempo com modelos de linguagem. Com mobile, sempre foi mais complicado. Emuladores são instáveis, o debugger do React Native vive em seu próprio mundo, e conectar um modelo sem quebrar o ambiente dá trabalho.
O Cali resolve o problema através da separação de papéis. O utilitário não tenta ser um chatbot universal que faz de tudo. Em vez disso, tem modos operacionais rígidos onde cada agente recebe apenas o conjunto de ferramentas necessário:
cali qaexecuta cenários de teste em um simulador ou emulador real via utilitárioagent-device.cali perf-reviewencontra re-renders desnecessários e lentidões conectando-se diretamente aoagent-react-devtools.cali reviewlê o repositório e verifica diffs em pull requests.cali devtenta fazer alterações de código por conta própria sob supervisão de testes e do verificador de tipos.
Os comandos review, perf-review e dev ainda estão marcados como experimentais, mas o cenário básico qa está pronto para uso.
Como executar testes na sua máquina local
Você vai precisar do Node.js e do pacote agent-device instalado globalmente para começar. Se o agente não tiver as habilidades necessárias, o Cali vai buscá-las via npx skills no diretório ~/.cali/skills.
Você pode controlar a execução com uma única linha:
cali qa \
--local ios \
--artifact ./artifacts/MyApp.app \
--prompt "проверь текст на экране онбординга и нажми кнопку далее"
Se você tiver apenas um simulador iOS ou emulador Android rodando, o utilitário vai detectá-lo automaticamente. Ao iniciar no Android, o Cali pode até parsear AndroidManifest.xml diretamente do .apk para extrair o applicationId sem flags extras.
Detalhe importante: para builds de debug, você precisa iniciar e parar o servidor Metro separadamente. O Cali é responsável apenas por interagir com a interface do app.
Profiling e encontrando re-renders desnecessários
Talvez o modo mais interessante seja perf-review. Todos sabemos como é fácil destruir a performance no React Native passando um callback instável para uma lista pesada.
O Cali conecta um agente ao React DevTools e executa a tela alvo:
cali perf-review \
--context ./cali-context.json \
--platform android \
--artifact ./artifacts/app.apk \
--prompt "проверь экран оформления заказа на подвисания"
O agente analisa interações, captura métricas e gera um relatório estruturado. Os resultados vão para a pasta artifacts/perf-review, que contém screenshots, um manifest e um resumo textual com os principais problemas.
Contexto compartilhado e trabalhando em CI
Em vez de longas correntes de argumentos de terminal, o Cali usa um arquivo de configuração cali-context.json. Ele descreve o repositório, build, critérios de aceite e restrições para o 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"
}
}
Flags de linha de comando sempre têm prioridade sobre o arquivo. Isso é útil quando você precisa substituir um caminho para um artefato fresco em um pipeline.
No GitHub Actions e Expo Application Services (EAS), o utilitário detecta o ambiente automaticamente. Um helper adicional cali export-ci gera um relatório em markdown com screenshots que você pode postar imediatamente como comentário em um pull request aberto 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
Conectando modelos e segurança
Por padrão, o Cali está configurado para trabalhar com openai/gpt-5.4-mini através do AI Gateway. Se você tiver uma chave direta da Anthropic, pode trocar para o Sonnet via variáveis de ambiente:
ANTHROPIC_API_KEY=your-anthropic-api-key
QA_MODEL=anthropic/claude-sonnet-4.6
É bom que os autores tenham pensado em segurança: o utilitário limpa tokens e segredos das URLs do repositório ao carregar contexto, e o report.json final só salva campos seguros.
Vale a pena tentar
A ferramenta parece sólida e resolve um problema específico para equipes que escrevem em Expo e React Native. A principal vantagem aqui é o contrato de entrada rigoroso e a saída JSON previsível. O agente não vagueia em um terminal abstrato, mas é limitado a um conjunto claro de utilitários.
O projeto ainda está ganhando tração (cerca de mil estrelas no GitHub), mas a arquitetura de papéis já permite implementar verificação automatizada de caminhos críticos do usuário na fase de CI. Se você está cansado de executar testes de fumaça básicos manualmente antes de cada release, vale a pena clonar o repositório e testar algumas telas em um simulador local.
Projetos relacionados