agentlane
OfficialDrives Android emulators from a shared device pool: reads the screen with look, runs Maestro steps with run, takes screenshots, and sets location, permissions, appearance and other device state before launch. Emulators boot from a Quick Boot snapshot, and run --quick skips Maestro's window settle for fast taps.
Drives iOS simulators from a shared device pool: reads the screen with look, runs Maestro steps with run, takes screenshots, sets location, permissions, appearance, push notifications and the clipboard, and captures video evidence. A per-session Maestro runner port and a warm Maestro session keep calls fast, and a patched Maestro hierarchy exposes element types.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agentlaneOpen the app, tap the login button, and take a screenshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
agentlane gives each agent session a lane: its own ports, dev servers and database, and its own iOS simulator, Android emulator or browser, with fast tools to see the app and drive it. Agents use it through the agentlane CLI, an MCP server (look, run, screenshot), and skills and hooks that teach them the loop. It works with Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI and Antigravity, on web apps, iOS and Android.
1. In your project's root:
npx agentlane init2. Then tell your agent:
Set this project up with agentlane.init wires the agents it finds and adds agentlane to your dev dependencies. Setup then learns how your project runs and brings each app up in its own lane. Getting started walks through both steps.
Why agentlane
Every agent, one install. Six agents get the same CLI, MCP server, skills and hooks from one
init.Web, iOS and Android in one tool.
look,runandscreenshotwork the same on a simulator, an emulator or a browser.The whole environment, per agent. Ports, dev servers, a database, sign-in, and a device or browser that no other agent touches.
Fast. A warm lane reads the screen in about 0.15 s. See Speed.
It checks the app before your agent trusts it.
doctorconfirms that every server runs this worktree's code, and names the fix when one doesn't.Evidence you can open. Videos, traces, logs and screenshots, plus the Maestro flows and Playwright tests your agent commits.
It cleans up. When a session ends, its lane is released: services stop, databases are torn down, and devices go back to the pool.
Local. No account, no hosted service, no telemetry of its own.
Related MCP server: pagelens
Speed
On a warm lane, median of 16 calls | iOS simulator | Browser |
Read the screen with | 0.15 s | 0.16 s |
Take a screenshot | 0.16 s | 0.18 s |
Click through | 0.81 s |
What makes it fast:
A warm Maestro session.
look,runandscreenshottalk to a Maestro session that stays up between calls, so only the first call pays to start it.A runner port per session. Stock Maestro gives every iOS simulator's runner the same port, 22087, so with two simulators the second one started cold on every call: 6.5 s per screen read, against 0.12 s with our patch.
Quick taps. On Android,
run --quickskips Maestro's fixed 750 ms window settle and the screen reads after the tap.A build cache your worktrees share. The example app's iOS build took 91.5 s. A fresh worktree got its build from the cache in 6.5 s and reached the running app in 38.6 s.
A device pool. Lanes reuse simulators and emulators instead of creating new ones, and emulators boot from their Quick Boot snapshot in 1.6 to 1.8 s, against 14.6 s for a cold boot.
Speed on the docs site explains each one.
All on an Apple M4 Max with 48 GB of memory.
iOS column:
agentlane benchon the example app, two iPhone 17 simulators alternating, release 0.1.3 with the Maestro build agentlane installs (2.11.0-agentenv.3). The Mac was under memory pressure, so these are upper bounds.Browser column: the same bench on the example's web app, Playwright 1.64.0 with Chrome for Testing, a 0.2.0 development build.
Port comparison: 16 reads per simulator on another app, stock Maestro 2.8.0 against an early build with the port patch.
Build cache: single runs of 0.2.0 on the example app. Boot times: two boots each of a Pixel 8 emulator on Android 36.
bench/README.md has the method, and agentlane bench runs it on your machine.
What a lane gives your agent
Its own environment
Ports from a registry on the machine, with your dev servers started on them and checked ready before
upreturns.A database, or any resource you declare, created for the lane and torn down when it ends, after a crash too.
Sign-in through your project's hook, so the app opens signed in.
A simulator, emulator or browser from a pool. When the pool is full, the request waits for a free device.
restartchanges one service's environment, such as a feature flag, without tearing the lane down.
Eyes and hands
lookreads the screen or page, one line per element, and--interactivekeeps only what can be tapped or typed into. On iOS, our Maestro patch puts each element's type in the hierarchy to make that possible.runruns Maestro steps and prints what changed.In the browser, Playwright's
playwright-cli(the default) or agent-browser, run throughagentlane exec.record saveturns the session's passing steps into a Maestro flow you can commit.devicesets location, permissions, appearance, push notifications, the clipboard and links to open.Before launch,
upsets the device's location, status bar and keyboard, so captures match from run to run.
Evidence and housekeeping
evidencekeeps videos, Playwright traces, logs and screenshots in a folder that outlives the lane. A failedrunorexeccommand keeps its own.A hook denies
simctl,adb,emulator,avdmanager,playwright-cliandagent-browsercommands aimed at another lane's device or browser.The next lane taken on the machine cleans up any lane whose session died, and
prunedeletes pool devices no lane holds.
The skills
The skills teach an agent the whole loop in your project, from setup to proof. Each stub init writes prints its skill from the installed version, so the skills update with the package.
setup finds how your project runs its apps, servers, data and sign-in, wires your agents, writes
agentlane.json, and brings each app up untildoctorreports ready. It asks you only what it can't find out.dev-loop is what an agent follows whenever it runs the app: one lane per session,
up,doctorbefore trusting an instance,releasewhen done, and what counts as proof.drive covers driving the lane's device or browser, turning what worked into a committed flow or test, and keeping evidence.
create-verification-skill writes your project's run skill, with how to launch, check, drive and capture the app and a page per user-facing feature, and runs it end to end once before it is done.
maintain-verification-skill keeps the run skill and its feature pages true as the app changes. It checks each page against the code, drives each feature, and opens at most one PR of corrections.
Claude Code can load the skills, the MCP server and the hooks as the agentlane plugin, and Codex, Cursor and Gemini CLI have plugins with the skills and the MCP server.
Once setup reports ready, any agent in the project can take work like this:
Add a "clear completed" button to the list. Bring the app up on iOS and on the web, prove the button works with a Maestro flow and a Playwright test, and record a video of it.
Where it runs
Host | Web apps | iOS | Android |
Mac, Apple silicon | yes | yes | yes |
Mac, Intel | untested | untested | untested |
Linux, x64 and arm64 | yes | no | not yet |
agentlane needs Node 24 or newer, and Xcode or the Android SDK for mobile apps. It drives simulators, emulators and browsers, not physical devices. On Linux, Chrome needs system libraries that agentlane can't pin; agentlane doctor names any that are missing and gives the command that installs them. Where it runs on the docs site lists what each platform needs.
Security and telemetry
agentlane runs on your machine. It has no account, no hosted service and no telemetry of its own.
On first use it downloads its pinned tools: the patched Maestro from this repository's releases, Playwright and agent-browser from npm, and Chrome for Testing. It checks each against a hash pinned in the package.
The patched Maestro has its update check, error reporter, screen report and PostHog analytics removed. A check in
maestro/test/calls every local Maestro tool and sees no connection leave the machine. Maestro'scheat_sheetand cloud tools still call Maestro's servers, as they are built to.Each lane's iOS runner answers only requests that carry the lane's token, so another process can't drive your simulator through it.
Playwright and agent-browser run as their maintainers publish them; agentlane doesn't change what they send.
What your agent reads through
lookandscreenshotgoes to the model it runs on, like any tool output.
To report a vulnerability, see SECURITY.md.
Acknowledgements
agentlane is built on these projects, and we're grateful to their authors:
Maestro drives every simulator and emulator. agentlane ships it with the patches in
maestro/.Playwright drives the browser by default, on Chrome for Testing.
agent-browser is the other browser driver a lane can run.
pstack, Lauren Tan's skills for Cursor, is where dev-loop and the two verification skills began. Parts of them are adapted from it under the MIT licence.
Other projects worth knowing, from people working on the same problem:
agent-device by Callstack: mobile automation for agents through a CLI, an MCP server and a Node.js API, on more platforms than agentlane covers.
MobileBuildMCP by Sentry, formerly XcodeBuildMCP: an MCP server and CLI with tools for agents working on iOS and macOS projects.
The simulator and browser panes in Claude Code Desktop, and the built-in browser Codex uses in the ChatGPT desktop app, which put the running app next to the conversation.
The Android robot in the animation is Google's, used under CC BY 3.0.
Documentation
The docs site has per-agent setup, the config and CLI reference, platform requirements and troubleshooting, with an llms.txt for agents. examples/expo-app/ is the app agentlane is tested on, and CHANGELOG.md lists every release.
License
MIT. The patched Maestro is Apache-2.0; maestro/ holds its patches and notice.
Made by North Star.
This server cannot be deployed
Maintenance
Related MCP Connectors
Disposable cloud Android emulators for coding agents: run an APK or PR build, tap, type, screenshot.
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
- LimrunOAuthcom.limrun
Cloud iOS simulators and Android emulators your agent can create, drive, and throw away.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceGives AI coding assistants live, structured access to running apps' state and UI elements, enabling real-time verification and interaction across web, mobile, and desktop.36-
- AlicenseNot gradedqualityDmaintenanceEnables AI coding agents to visually interact with frontend apps by taking screenshots, clicking elements, reading console logs, and performing visual diffs.7 npm3MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to autonomously interact with and test web applications in a real browser, providing DOM/Accessibility tree extraction, runtime telemetry, screenshot capture, and Markdown test reports.37 npm1MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to remotely control, debug, and automate real browsers, iOS simulators, and Android emulators, including navigation, element inspection, interaction, screenshots, and mobile gestures.1,614 npmMIT