Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
aliceisjustplaying avatar

Axe

  • 6 installs
  • 5 repo stars
  • Updated December 22, 2025
  • aliceisjustplaying/claude-resources-monorepo

axe is a Claude skill that controls iOS Simulators via accessibility APIs to automate and test iOS app interactions.

About

axe controls iOS Simulators through accessibility APIs for UI automation and testing. It taps buttons by accessibility label or identifier, types text, swipes, presses hardware buttons, and dumps the accessibility tree so an agent can find and drive elements. A developer uses it to automate iOS simulator interactions and test iOS apps programmatically alongside simctl for booting and screenshots.

  • Controls iOS Simulators through accessibility APIs using the axe CLI
  • Taps by accessibility label or id, types text, swipes, and reads the UI tree
  • Documents common gotchas like swipe parameters and simulator bad states

Axe by the numbers

  • 6 all-time installs (skills.sh)
  • Ranked #806 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

axe capabilities & compatibility

Capabilities
testing · ui design
Use cases
testing
Platforms
macOS
Pricing
Free
From the docs

What axe says it does

Control iOS Simulators using accessibility APIs for UI automation and testing.
SKILL.md
`xcrun simctl io` only supports `screenshot` and `recordVideo`. For touch/swipe input, use `axe`.
SKILL.md
Always use explicit UDIDs when multiple simulators might be running
SKILL.md
npx skills add https://github.com/aliceisjustplaying/claude-resources-monorepo --skill axe

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs6
repo stars5
Last updatedDecember 22, 2025
Repositoryaliceisjustplaying/claude-resources-monorepo

What it does

Automate iOS Simulator interactions to test an iOS app by tapping, typing, and reading the accessibility tree.

Who is it for?

Automating and testing iOS simulator UI flows by accessibility label, id, or coordinates

Skip if: Real physical iOS devices, since it drives the iOS Simulator via simctl and the axe CLI

When should I use this skill?

The user wants to automate iOS simulator interactions, tap buttons by accessibility label, type text, swipe, take screenshots, describe the UI tree, or test iOS apps programmatically

What you get

Programmatic taps, typing, swipes, and screenshots that exercise an iOS app on the simulator

  • automated simulator interactions
  • accessibility tree dumps and screenshots

By the numbers

  • Documents 8 common gotchas including swipe parameters and empty accessibility tree recovery

Files

SKILL.mdMarkdownGitHub ↗

axe - iOS Simulator Accessibility Control

Control iOS Simulators using accessibility APIs for UI automation and testing.

Prerequisites

  • Xcode with iOS Simulator
  • axe CLI in PATH

Getting Simulator UDID

Always use explicit UDIDs when multiple simulators might be running:

# List available simulators
xcrun simctl list devices available

# List only booted simulators
xcrun simctl list devices booted

# Boot a simulator
xcrun simctl boot "iPhone 17 Pro"

# Shutdown
xcrun simctl shutdown booted
xcrun simctl shutdown <UDID>

axe Commands

Describe UI (Accessibility Tree)

Get the full accessibility tree to find elements:

axe describe-ui --udid <UDID>

Tap Elements

# By accessibility label (preferred)
axe tap --udid <UDID> --label "Button Label"

# By accessibility identifier
axe tap --udid <UDID> --id "buttonIdentifier"

# By coordinates (fallback, e.g., for tab bars)
axe tap --udid <UDID> -x 352 -y 832

Type Text

axe type --udid <UDID> --text "Hello world"

Swipe

IMPORTANT: Uses --start-x/--start-y/--end-x/--end-y, NOT --from-x/--to-x:

# Swipe up (scroll down)
axe swipe --udid <UDID> --start-x 200 --start-y 600 --end-x 200 --end-y 300

# Swipe down (scroll up)
axe swipe --udid <UDID> --start-x 200 --start-y 300 --end-x 200 --end-y 600

Hardware Buttons

axe button --udid <UDID> --name home
axe button --udid <UDID> --name lock

Screenshots (via simctl)

xcrun simctl io booted screenshot /tmp/screenshot.png
xcrun simctl io <UDID> screenshot /tmp/screenshot.png

Common Gotchas

axe swipe parameters

Use --start-x/--start-y/--end-x/--end-y, NOT --from-x/--to-x. This is a common mistake.

simctl has no input command

xcrun simctl io only supports screenshot and recordVideo. For touch/swipe input, use axe.

Sheet/modal timing

When opening a sheet and immediately tapping a button inside, add sleep 0.5 between actions. The sheet needs time to fully present before buttons are tappable.

Multiple simulators

Always use explicit UDID, not "booted", when multiple simulators are running. Check with xcrun simctl list devices booted.

iOS 26+ Toggle issues

axe taps don't reliably trigger SwiftUI Toggle actions on iOS 26+. Manual testing may be required for toggle interactions.

Entitlements require signing

CODE_SIGNING_ALLOWED=NO prevents entitlements (like HealthKit) from being applied. Use ad-hoc signing for entitlement-dependent features.

Empty accessibility tree

If axe describe-ui returns an empty tree (frame {0,0,0,0}, no children) even though the app is visibly running, the simulator has entered a bad state. Fix by rebooting:

xcrun simctl shutdown <UDID> && xcrun simctl boot <UDID>

This is not an app code issue.

Tab bar items

Tab bar items often require coordinates instead of labels. Use axe describe-ui to find element frames, then tap by coordinates. Tab bars are typically around y~832 on standard iPhone sizes.

Recommended Workflow

  • Run xcrun simctl list devices booted to get the UDID
  • Use axe describe-ui --udid <UDID> to explore the accessibility tree
  • Prefer --label for tapping when possible (more resilient to layout changes)
  • Fall back to coordinates for elements without accessible labels
  • Add sleep 0.5 between actions that trigger animations/transitions
  • Take screenshots with xcrun simctl io to verify state

Related skills

FAQ

How do I tap an element with axe?

Use axe tap with --label for the accessibility label, --id for the identifier, or -x/-y coordinates as a fallback.

Can simctl handle touch input?

No. xcrun simctl io only supports screenshot and recordVideo, so use axe for tap and swipe input.

Mobile Developmenttestingfrontend

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.