Mobile browser and native app automation via ATL (iOS Simulator). Navigate, click, screenshot, and automate web and native app tasks on iPhone/iPad simulators.
数据来源:ClawHub。 在 ClawSkills 查看
选择你使用的 Agent
方法一:命令行安装(推荐)
推荐(无需提前安装 clawhub)
npx clawhub@latest --dir ~/.claude/skills install atl-mobile或使用 clawhub CLI(需提前安装)
clawhub --dir ~/.claude/skills install atl-mobile⚠️ 需要 Node.js 18+,没有 Node?请使用下方方法二直接下载 ZIP。 安装 Node.js →
方法二:手动下载安装(无需 Node)
下载 ZIP,解压后将文件夹放到以下路径,重启 Agent 即可:
安装路径
~/.claude/skills/atl-mobile/💡解压后将文件夹放到上方路径,重启 Agent 即可生效
--- name: atl-browser description: Mobile browser and native app automation via ATL (iOS Simulator). Navigate, click, screenshot, and automate web and native app tasks on iPhone/iPad simulators. metadata: openclaw: emoji: "📱" requires: bins: ["xcrun", "xcodebuild", "curl"] install: - id: "atl-clone" kind: "shell" command: "git clone https://github.com/JordanCoin/Atl ~/Atl" label: "Clone ATL repository" - id: "atl-setup" kind: "shell" command: "~/.openclaw/skills/atl-browser/scripts/setup.sh" label: "Build and install ATL to simulator" ---
> The automation layer between AI agents and iOS
ATL provides HTTP-based automation for iOS Simulator — both browser (mobile Safari) and native apps. Think Playwright, but for mobile.
ATL uses two separate servers for browser and native app automation:
| Server | Port | Use Case | Key Commands | |--------|------|----------|--------------| | Browser | 9222 | Web automation in mobile Safari | goto, markElements, clickMark, evaluate | | Native | 9223 | iOS app automation (Settings, Contacts, any app) | openApp, snapshot, tapRef, find |
┌─────────────────────────────────────────────────────────────┐
│ BROWSER SERVER (9222) │ NATIVE SERVER (9223) │
│ (mobile Safari/WebView) │ (iOS apps via XCTest) │
│ │ │
│ markElements + clickMark │ snapshot + tapRef │
│ CSS selectors │ accessibility tree │
│ DOM evaluation │ element references │
│ tap, swipe, screenshot │ tap, swipe, screenshot │
└─────────────────────────────────────────────────────────────┘
Why two ports? Native app automation requires XCTest APIs (XCUIApplication, XCUIElement) which are only available in UI Test bundles. The native server runs as a UI Test that exposes an HTTP API.
# Browser server (starts automatically with AtlBrowser app)
xcrun simctl launch booted com.atl.browser
curl http://localhost:9222/ping # → {"status":"ok"}
# Native server (run as UI Test)
cd ~/Atl/core/AtlBrowser
xcodebuild test -workspace AtlBrowser.xcworkspace \
-scheme AtlBrowser \
-destination 'id=<SIMULATOR_UDID>' \
-only-testing:AtlBrowserUITests/NativeServer/testNativeServer &
# Wait for it to start, then:
curl http://localhost:9223/ping # → {"status":"ok","mode":"native"}
| Task | Port | Example | |------|------|---------| | Browse websites | 9222 | curl localhost:9222/command -d '{"method":"goto",...}' | | Open native app | 9223 | curl localhost:9223/command -d '{"method":"openApp",...}' | | Screenshot (browser) | 9222 | curl localhost:9222/command -d '{"method":"screenshot"}' | | Screenshot (native) | 9223 | curl localhost:9223/command -d '{"method":"screenshot"}' |
---
Native automation uses port 9223 and automates any iOS app using the accessibility tree — no DOM, no JavaScript, just direct element interaction.
# Open an app by bundle ID
curl -s -X POST http://localhost:9223/command \
-d '{"method":"openApp","params":{"bundleId":"com.apple.Preferences"}}'
# → {"success":true,"result":{"bundleId":"com.apple.Preferences","mode":"native","state":"running"}}
# Check current app state
curl -s -X POST http://localhost:9223/command \
-d '{"method":"appState"}'
# → {"success":true,"result":{"mode":"native","bundleId":"com.apple.Preferences","state":"running"}}
# Close current app
curl -s -X POST http://localhost:9223/command \
-d '{"method":"closeApp"}'
# → {"success":true,"result":{"closed":true}}
| App | Bundle ID | |-----|-----------| | Settings | com.apple.Preferences | | Contacts | com.apple.MobileAddressBook | | Calculator | com.apple.calculator | | Calendar | com.apple.mobilecal | | Photos | com.apple.mobileslideshow | | Notes | com.apple.mobilenotes | | Reminders | com.apple.reminders | | Clock | com.apple.mobiletimer | | Maps | com.apple.Maps | | Safari | com.apple.mobilesafari |
snapshot Commandsnapshot returns the accessibility tree — all visible elements with their properties and tap-able references.
curl -s -X POST http://localhost:9223/command \
-d '{"method":"snapshot","params":{"interactiveOnly":true}}' | jq '.result'
Example output:
{
"count": 12,
"elements": [
{
"ref": "e0",
"type": "cell",
"label": "Wi-Fi",
"value": "MyNetwork",
"identifier": "",
"x": 0,
"y": 142,
"width": 393,
"height": 44,
"isHittable": true,
"isEnabled": true
},
{
"ref": "e1",
"type": "cell",
"label": "Bluetooth",
"value": "On",
"identifier": "",
"x": 0,
"y": 186,
"width": 393,
"height": 44,
"isHittable": true,
"isEnabled": true
},
{
"ref": "e2",
"type": "button",
"label": "Back",
"value": null,
"identifier": "Back",
"x": 0,
"y": 44,
"width": 80,
"height": 44,
"isHittable": true,
"isEnabled": true
}
]
}
Parameters:
interactiveOnly (bool, default: false) — Only return hittable elementsmaxDepth (int, optional) — Limit tree traversal depthtapRef CommandTap an element by its reference from the last snapshot:
# Take snapshot first
curl -s -X POST http://localhost:9223/command \
-d '{"method":"snapshot","params":{"interactiveOnly":true}}'
# Tap element e0 (Wi-Fi cell from example above)
curl -s -X POST http://localhost:9223/command \
-d '{"method":"tapRef","params":{"ref":"e0"}}'
# → {"success":true}
find CommandFind and interact with elements by text — no need to parse snapshot manually:
# Find and tap "Wi-Fi"
curl -s -X POST http://localhost:9223/command \
-d '{"method":"find","params":{"text":"Wi-Fi","action":"tap"}}'
# → {"success":true,"result":{"found":true,"ref":"e0"}}
# Check if an element exists
curl -s -X POST http://localhost:9223/command \
-d '{"method":"find","params":{"text":"Bluetooth","action":"exists"}}'
# → {"success":true,"result":{"found":true,"ref":"e1"}}
# Find and fill a text field
curl -s -X POST http://localhost:9223/command \
-d '{"method":"find","params":{"text":"First name","action":"fill","value":"John"}}'
# Get element info without interacting
curl -s -X POST http://localhost:9223/command \
-d '{"method":"find","params":{"text":"Cancel","action":"get"}}'
# → {"success":true,"result":{"found":true,"ref":"e5","element":{...}}}
Parameters:
text (string) — Text to search for (matches label, value, or identifier)action (string) — One of: tap, fill, exists, getvalue (string, optional) — Text to fill (required for action:"fill")by (string, optional) — Narrow search: label, value, identifier, type, or any (default)---
Here's a complete flow: open Settings, navigate to Wi-Fi, take a screenshot:
# 1. Open Settings app
curl -s -X POST http://localhost:9223/command \
-d '{"method":"openApp","params":{"bundleId":"com.apple.Preferences"}}'
# 2. Wait for app to launch
sleep 1
# 3. Take snapshot to see available elements
curl -s -X POST http://localhost:9223/command \
-d '{"method":"snapshot","params":{"interactiveOnly":true}}' | jq '.result.elements[:5]'
# 4. Find and tap Wi-Fi
curl -s -X POST http://localhost:9223/command \
-d '{"method":"find","params":{"text":"Wi-Fi","action":"tap"}}'
# 5. Wait for navigation
sleep 0.5
...安装 Agent Touch Layer 后,可以对 AI 说这些话来触发它
Help me get started with Agent Touch Layer
Explains what Agent Touch Layer does, walks through the setup, and runs a quick demo based on your current project
Use Agent Touch Layer to mobile browser and native app automation via ATL (iOS Simulator)
Invokes Agent Touch Layer with the right parameters and returns the result directly in the conversation
What can I do with Agent Touch Layer in my developer & devops workflow?
Lists the top use cases for Agent Touch Layer, with example commands for each scenario
将技能文件夹放到 ~/.claude/skills/atl-mobile/ 目录(个人级,所有项目可用),或 .claude/skills/atl-mobile/(项目级)。重启 AI 客户端后,用 /atl-mobile 主动调用,或让 AI 根据上下文自动发现并使用。
Agent Touch Layer 支持 Claude、Cursor、OpenClaw,可与这些 AI 平台无缝集成,扩展其能力。
Agent Touch Layer 可免费安装使用。请查阅仓库了解许可证信息。
Mobile browser and native app automation via ATL (iOS Simulator). Navigate, click, screenshot, and automate web and native app tasks on iPhone/iPad simulators.
Agent Touch Layer 属于「Developer & DevOps」分类,该分类的技能帮助 AI 智能体在此领域执行专业任务。
Automate my developer & devops tasks using Agent Touch Layer
Identifies repetitive steps in your workflow and sets up Agent Touch Layer to handle them automatically