Automatiza flujos repetibles de Android con las tareas por lotes de longarm
- Metaphor Projects
- Aplicación
- 06 Jul, 2026
longarm ahora admite tareas por lotes: flujos de automatización de Android guardados que pueden ejecutar más de una acción a la vez.
En lugar de enviar una solicitud separada para cada toque, pausa, apertura de app o captura de pantalla, puedes agrupar esos pasos en una sola tarea con nombre. Ejecútala desde la pestaña Batch cuando estés frente al dispositivo, actívala mediante la API HTTP desde un script, o deja que un agente compatible con MCP enumere, guarde, ejecute e inspeccione tareas por lotes como herramientas.

Qué aportan las tareas por lotes
La primera versión de longarm se centraba en el control remoto directo: iniciar el servidor HTTP local, enviar una solicitud de gesto, capturar una pantalla y mantener el dispositivo visible dentro del flujo de trabajo de escritorio.
Las tareas por lotes hacen que ese control sea repetible.
Una tarea por lotes puede incluir:
- toques, pulsaciones largas, deslizamientos, pellizcos, rotaciones y deslizamientos con dos dedos
- pausas entre pasos
- capturas de pantalla durante la ejecución
- apertura de apps por nombre de paquete de Android
- intents de Android para flujos más profundos dentro de apps o del sistema
- variables para valores reutilizados entre pasos
- bucles para pasos hijos repetidos
Eso significa que la unidad útil ya no es solo “toca esta coordenada”. Puede ser “abre esta app, espera a que cargue, desplaza el feed, captura el resultado y luego guarda un registro de la ejecución”.
Pensado para flujos reales
Las tareas por lotes son útiles cuando el mismo flujo de Android debe repetirse muchas veces:
- recopilar las mismas capturas después de cada compilación de una app
- ejecutar una prueba de humo de QA en un dispositivo real
- abrir una app objetivo y dejarla en un estado conocido antes de pruebas manuales
- automatizar pasos de configuración demasiado específicos del dispositivo para un emulador
- dar a un agente de IA una acción de más alto nivel en lugar de muchos gestos individuales frágiles
Cada ejecución queda registrada en el historial con estado, progreso, mensajes y capturas de pantalla obtenidas. La ejecución comienza de forma asíncrona y devuelve un runId, para que scripts y agentes puedan consultar el historial sin mantener abierta una solicitud HTTP larga.
Solo puede ejecutarse una tarea por lotes a la vez. Si ya hay otra tarea activa, longarm devuelve un conflicto en lugar de mezclar dos flujos de automatización sobre la misma pantalla.
Ejecuta desde la app, HTTP o MCP
La pestaña Batch es la forma más simple de crear y ejecutar tareas directamente en el dispositivo. Sirve para construir un flujo una vez, ponerle nombre y volver a ejecutarlo más tarde.
La API HTTP es mejor cuando la tarea forma parte de un script de escritorio, un helper de CI o una herramienta local de automatización. Puedes crear tareas guardadas con /api/batch, ejecutar una tarea guardada con /api/batch/<id>/run, o ejecutar inmediatamente una tarea inline con /api/batch/run.
El servidor MCP expone el mismo concepto para agentes de IA. Herramientas como batch_list, batch_save, batch_run, batch_run_inline, batch_status y batch_history_get permiten que un agente trabaje con flujos completos de Android en lugar de componer manualmente cada acción de pantalla de bajo nivel.
Ejemplo pequeño en Python
Este ejemplo inicia una tarea por lotes inline que abre Ajustes de Android, espera a que cargue, captura una pantalla y consulta el historial de ejecución hasta que la tarea termina.
Sustituye BASE_URL por la dirección que muestra longarm. Si tu servidor usa un token de autenticación, sustituye TOKEN por el token que aparece en la app.
import time
import requests
BASE_URL = "http://192.168.1.10:8080"
TOKEN = "secret"
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json",
}
task = {
"name": "Open Settings and capture",
"steps": [
{
"type": "open_app",
"params": {"packageName": "com.android.settings"},
"delayAfterMs": 2000,
},
{
"type": "screenshot",
"params": {"scale": 1},
},
],
}
run = requests.post(
f"{BASE_URL}/api/batch/run",
headers=headers,
json=task,
timeout=10,
).json()
run_id = run["runId"]
print("started", run_id)
while True:
history = requests.get(
f"{BASE_URL}/api/batch/history/{run_id}",
headers=headers,
timeout=10,
).json()
print(history["status"], history.get("message", ""))
if history["status"] != "processing":
break
time.sleep(1)
Cuando la ejecución termina, la entrada del historial incluye el progreso y cualquier referencia a capturas tomadas durante la tarea. La descarga de archivos de captura y la exportación en zip están disponibles desde los endpoints del historial cuando longarm Plus está activo.
Por qué importa
La automatización sobre dispositivos reales suele fallar porque cada script tiene que redescubrir los mismos pasos de preparación. Las tareas por lotes acercan esos pasos al propio dispositivo y les dan un nombre estable, un historial de ejecución y superficies de control remoto mediante HTTP y MCP.
Eso hace que longarm sea más práctico para la automatización diaria de Android: construye un flujo una vez, vuelve a ejecutarlo desde donde trabajes y mantén el resultado lo bastante visible como para depurarlo.